[Neue Frage ganz hinten] Bilder anzeigen wie Windows Diashow
Übersicht![](/themes/Standard/arrow.png)
![](/themes/Standard/arrow.png)
Gehe zu Seite 1, 2, 3, 4 Weiter
![]() |
SereyanneBetreff: [Neue Frage ganz hinten] Bilder anzeigen wie Windows Diashow |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
ich möchte, dass mein Plus-Proggi ein paar Bilder lädt und in einer Schleife unendlich lange anzeigt. Hab mit mehreren Grafik-Befehlen rumprobiert. Was ich nicht möchte, ist mit Plus ein 3D Fenster erzeugen (über Graphics). Am geeignetesten scheint mir Canvas und dann Panel. Hab den Code auszugsweise aus dem Tutorial: Code: [AUSKLAPPEN] ;Fenster erstellen
Window = CreateWindow("Canvas und Panels",100,100,500,400,0,15) ;Canvas erstellen can = CreateCanvas(0, 40, 150,150, Window) ;Die Grafikausgabe auf den Canvas einstellen SetBuffer CanvasBuffer(can) ;Panel erstellen panel = CreatePanel(180, 0, 100, 100, Window,1) button = CreateButton("Hier wäre ein Bild", 0, 0, 100, 50, panel) ;button in unserem Panel erstellen SetPanelImage panel, "C:\Dokumente und Einstellungen\data\test.bmp" ;Bild in das Panel zeichnen, wird getilet wenn das Bild zu klein ist Nun will ich ja mehrere Bilder anzeigen. Ich habe zwei Möglichkeiten probiert: Timer stellen, in der Schleife dann timer abwarten, nächstes Bild anzeigen. Code: [AUSKLAPPEN] Repeat
WaitEvent() SetPanelImage panel, "C:\Dokumente und Einstellungen\data\test2.bmp" WaitTimer timer SetPanelImage panel, "C:\Dokumente und Einstellungen\data\test3.bmp" Wenn ich es so mache, funktioniert das Anzeigen, aber ich kann keine Buttons mehr klicken oder das Fenster schließen (Zeit reicht eben nicht). Wenn ich es über delay laufen lasse, dann wird nur das letzte Bild angezeigt, das heißt die Schleife geht nicht wieder bei Repeat los! Dafür kann ich das Fenster wenigstens schließen. Vielleicht findet ihr ja heraus, was ich falsch mache... ![]() ![]() ![]() Vielen Dank im Voraus. LG, Sereyanne |
||
- Zuletzt bearbeitet von Sereyanne am Do, März 03, 2016 13:58, insgesamt 10-mal bearbeitet
![]() |
blackgecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Problem ist, dass das Programm bei Waittimer nur noch auf den Timer wartet und Buttons ignoriert. Timer-Schläge fragt man in so einem Fall am besten mit Event $4001 ab:
Code: [AUSKLAPPEN] timer = createtimer(0.1) ; 0.1 Schläge pro Sekunde --> 1 Schlag alle 10 Sekunden
Repeat select waitevent() case $803 End case $401 ;Was immer du machen willst, wenn ein Button geklickt wird case $4001 ;Timer Event ;Nächstes Bild anzeigen end select Forever So würde ich das machen. Erstell dir ein Array mit den Bildern, die angezeigt werden sollen und erhöhe bei Code: [AUSKLAPPEN] ;Nächstes Bild anzeigen
den Index. |
||
So long and thanks for all the fish.
Fedora 17 | Windows 7 || BlitzPlus | BlitzMax Rechtschreibflame GO!!! Deppenapostroph | SeidSeit | Deppenakzent | DassDas | Deppenleerzeichen | TodTot | enzigste.info - Ja, ich sammel die. |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du machst das Ganze zeitgesteuert und setzt die Zeit einfach auf 0, wenn eine Taste gedrückt ist. (Da ich kein BlitzBasic habe, weiß ich nicht genau, wie hier die Tastenabfrage geht, aber das kannst Du ja sicher selbst.)
netter Nebeneffekt: durch das laufende i% werden die Dateinamen verändert. Code: [AUSKLAPPEN] Repeat If Zeit<Millisecs() Zeit=Millsecs()+Timer i=i+1 SetPanelImage panel, "C:\Dokumente und Einstellungen\data\test"+ i + ".bmp" Endif If TastenDruck=1 then Zeit=0 Endif TastenDruck=KeyHit(1) Forever |
||
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
Uih, so schöne brauchbare Antworten! ![]() Und der Threadstarter hat sich einfach aus dem Staub gemacht ![]() Nee, Spaß beiseite, ich war gestern nicht mehr on, sorry. blackgecko hat Folgendes geschrieben: Das Problem ist, dass das Programm bei Waittimer nur noch auf den Timer wartet und Buttons ignoriert.
Ja, genau die Erfahrung hab ich ja gestern gemacht. Vielen Dank für deine Lösung, die werd ich mir gleich mal zu Gemüte führen. Midimaster hat Folgendes geschrieben: netter Nebeneffekt: durch das laufende i% werden die Dateinamen verändert.
Auch dafür herzlichen Dank, das kann ich gebrauchen. Danke schön!!! ![]() LG, Sereyanne PS: Kann ich eigentlich einfach nur einen Pfad angeben, und Blitz lädt dann alle Bilder, die da drin sind, ohne dass ich den Namen extra angeben muss? "bild1" und "bild2" waren nur Platzhalter, die Bilder haben ganz verschiedene Namen. Danke im Voraus. |
||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Dim pic$(500) ; einen Dim erstellen mit max 500 Einträgen
pfad$="C:\Users\idcsadm\Pictures\" ;Pfad festlegen must den ändern Verz = ReadDir(pfad$) ;Verzeichniss einlesen Repeat ;Schleife anfang Datei$ = NextFile$(Verz);Nächstes File im Verzeichniss If Datei$ = "" Then Exit ;Falls es keine Files mehr hat Schleife verlassen If FileType(pfad$ + Datei$) = 1 Then;Wenn es ein File und KEIN Ordner war i=i+1 ;Index erhöhen pic$(i)=pfad$ + Datei$ ;in Dim Schreiben End If Forever CloseDir Verz For a=1 To i Print pic$(a) Next So nun kannst du alle Bilder durchgehen schön mit 1,2,3,4, usw (bsp aus der Onlinehilfe angepasst) Es wird NUR der Inhalt im Ordner pfad$ durchsucht, wenn du es rekursiv willst, musst du das noch einbauen (rekursiv= auch Ordner die tiefer in der Hirarchie verankert sind zmb Bilder\LOL Bilder\Cool Bilder\Cool\Super) mfg |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank!
Damit kann ich arbeiten. Hab erst ma was zu tun... ![]() LG, Sereyanne edit: @ozzi789: wie starte ich die schleife wieder von vorne? stell mich grad ziemlich blöd an... ![]() |
||
![]() |
blackgecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ozzi789:
Dein Code fängt aber bei Array-Stelle 1 an, die Bilder zu speichern, also beim 2. Array-Speicherplatz. Mach das besser so und fang bei Stelle 0 an: Code: [AUSKLAPPEN] i = 0
;... If FileType(pfad$ + Datei$) = 1 Then;Wenn es ein File und KEIN Ordner war pic$(i)=pfad$ + Datei$ ;in Dim Schreiben i=i+1 ;Index erhöhen End If ;... For a=0 To i Print pic$(a) Next @Sereyanne: Was meinst du damit? Eine Schleife startet sich normalerweise selbst von vorne. |
||
So long and thanks for all the fish.
Fedora 17 | Windows 7 || BlitzPlus | BlitzMax Rechtschreibflame GO!!! Deppenapostroph | SeidSeit | Deppenakzent | DassDas | Deppenleerzeichen | TodTot | enzigste.info - Ja, ich sammel die. |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
blackgecko
ja stimmt, hab ich verpennt Sereyanne Du willst einfach wieder das erste Bild ausgeben? (hoffe hab dich richtig verstanden) Beispiel Code: [AUSKLAPPEN] i=10 For a=0 To i Print a ;Zeichnen If a=i Then a=0 Next mfg |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
blackgecko hat Folgendes geschrieben: Eine Schleife startet sich normalerweise selbst von vorne.
Hab ich auch gedacht... aber meinst du, ich würde dann fragen? ![]() Irgendwie ist nach dem letzten Bild aber Schluss, er fängt nicht wieder von vorne an. Problem ist jetzt gelöst, vielen Dank! |
||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie hast du es gelöst? ![]() mfg |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
Indem ich das Dim erneut ausgebe...
einfach a=0 tuts nämlich nicht, dann bleibt er trotzdem stehen. Edit: Ich würde den Pfad gerne in eine txt-Datei abspeichern. Kann es sein, dass der Befehl Code: [AUSKLAPPEN] pfad$="C:\Users\idcsadm\Pictures\"
unbedint die " vor und dahinter braucht? Wenn ja, wie krieg ich die mit abgespeichert? Ich kann ja nicht einfach Code: [AUSKLAPPEN] pfad$="""+bp$+"""
schreiben, weil das ja zuviele " sind.... |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Chr(34) | ||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
ja, das hab ich doch schon mal für irgendwas gebraucht...
wie konnte ich das nur vergessen ![]() Danke schön! |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
gerne gerne, keine sache | ||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
wie krieg ich das denn jetzt in den Pfad rein???
Code: [AUSKLAPPEN] bpfad$=chr$(34)+bp$+chr$(34) ;Pfad festlegen
geht ja nun nicht.... außerdem: wie krieg ich das vernünftig hin, wenn das Bild größer ist als das Panel? Dann wird mir ja nur ein Ausschnitt angezeigt. Soll ich jetzt alle Bilder verkleinern, oder gibts da nich ne bessere Lösung? |
||
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
kannt n canvas nehmen und mit Resizeimage arbeiten.
und den pfad kannste natürlich so aufstellen. Chr ist ne ganz normale Funktion mit rückgabewert |
||
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
alles klar, dann seh ich mir den canvas nochmal näher an. schade dass der resize nicht mit panel geht, jetzt muss ich alles umschreiben.
aber mit dem chr komm ich einfach nicht weiter. Code: [AUSKLAPPEN] Dim pic$(100) ; einen Dim erstellen mit max 100 Einträgen
If FileType ("pfad.txt")=0 Then ;ermittelt, ob eine bestimmte Datei existiert, falls nicht, Notify("Bitte Bilderpfad auswählen!",True) bp$=RequestDir$() If bp$="" Then End save=WriteFile("pfad.txt") ;erstellt eine Datei für einen Schreibzugriff WriteString(save,bp$) ;Dieser Dateibefehl speichert den Pfad in eine Datei ElseIf FileType ("pfad.txt")=1 Then ;falls die Datei existiert save=ReadFile ("pfad.txt") bp$=ReadString(save) EndIf bpfad$=Chr(34)+""+bp$+""+Chr(34) ;Pfad festlegen wie klappt das richtig?? Verz = ReadDir(bpfad$) ;Verzeichnis einlesen und in der hauptschleife Code: [AUSKLAPPEN] Case $4001 ;Timer Event
;Erstell dir ein Array mit den Bildern, die angezeigt werden sollen und erhöhe den Index ;Nächstes Bild anzeigen Datei$ = NextFile$(Verz);Nächstes File im Verzeichnis If FileType(bpfad$ + Datei$) = 1 Then;Wenn es ein File und KEIN Ordner war i=i+1 ;Index erhöhen pic$(i)=bpfad$ + Datei$ ;in Dim Schreiben For a=0 To i SetPanelImage panel, pic$(a) Next i=0 End If End Select Vielleicht findet ja jemand den Fehler.... ![]() |
||
![]() |
Starwar |
![]() Antworten mit Zitat ![]() |
---|---|---|
Beschreibe mal den Fehler genauer... Zeile und Fehlermeldung?
MFG |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
wozu machst du [bpfad$=Chr(34)+""+bp$+""+Chr(34)]? mach doch lieber [bpfad$=Chr(34)+bp$+Chr(34)] | ||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
DAK hat Folgendes geschrieben: wozu machst du [bpfad$=Chr(34)+""+bp$+""+Chr(34)]? mach doch lieber [bpfad$=Chr(34)+bp$+Chr(34)]
Danke, genau diese Zeile ist mein Problem. Warum ich das so mache? Weil ichs irgendwie nicht blicke und rumprobiert hab wien Doofer. Das Dumme ist nur, dass mir das ganze jetzt abschmiert. "hat ein problem festgestellt blabla".... Ich könnte kotzen.... also das roblem ist, dass in der txt-Datei U C:\Dokumente und Einstellungen\DR\Eigene Dateien\CyberLink\PowerDVD\temp\proggen\data drinsteht. Und ich anscheinend dasselbe in "" brauche, um damit arbeiten zu können. Also wie krieg ich die " davor und dahinter? |
||
Gehe zu Seite 1, 2, 3, 4 Weiter
Übersicht
![](/themes/Standard/arrow.png)
![](/themes/Standard/arrow.png)
Powered by phpBB © 2001 - 2006, phpBB Group