[Neue Frage ganz hinten] Bilder anzeigen wie Windows Diashow
Übersicht BlitzBasic BlitzPlusGehe zu Seite Zurück 1, 2, 3, 4 Weiter
Silver_Knee |
Di, Dez 08, 2009 18:37 Antworten mit Zitat |
|
---|---|---|
Also ich hoffe mal du hast debug an. Dann kriegste wahrscheinlich bessere Fehlermeldungen.
Chr(34) gibt ein " als Zeichenkette zurück. Das klebste dann wie a$="Hallo " b$="Welt" Print a+b zusammen sodass Zitat: Hallo Welt da steht.
Wenn du jetzt a$="C:\Dokumente und Einstellungen\" Print Chr(34)+a+Chr(34) schreibst, steht Zitat: "C:\Dokumente und Einstellungen\" auf dem bildscherm
|
||
Sereyanne |
Di, Dez 08, 2009 18:50 Antworten mit Zitat |
|
---|---|---|
hm, das hatte ich mir nach deinem letzten Post schon gedacht.
Vielen Dank für die ausführliche Erklärung, jetzt weiß ich, dass es geht. Bloß schmiert mir wie gesagt alles ab... weiß nicht was ich dagegen tun soll. mal auf nem Rechner mit mehr ram probieren... |
||
Midimaster |
Di, Dez 08, 2009 19:27 Antworten mit Zitat |
|
---|---|---|
am besten den ganzen Code hier wieder reinstellen....
Ist bestimmt nur noch ein Flüchtigkeitsfehler, an zuwenig RAM glaub ich nicht. Ist ja immer nur 1 Bild im Speicher und die Pfad-Datei braucht so gut wie gar nichts. |
||
mpmxyz |
Di, Dez 08, 2009 19:55 Antworten mit Zitat |
|
---|---|---|
Wenn du etwas in eine Datei schreiben möchtest, dann brauchst du keine Anführungszeichen für den Pfad.
Eine Sache, die du unbedingt kennen solltest: Nutze den Debugger, wenn das Programm aus unbekannten Gründen abstürzt! (IDEal: F9 drücken) Da du in dem Dateipfad Anführungszeichen stehen hast oder dieser zumindest falsch angegeben wird, vermute ich, dass der Debugger beim ersten "Read..."/"Write..."-Befehl "Stream does not exist!" meldet und dir die Stelle fehlerhafte markiert. (Da muss aber nicht der eigentliche, logische Fehler existieren!) Und da ich die Vermutung habe, dass es da ein Verständnisproblem gibt, gibt es noch eine Information zum Schluss: Die Anführungszeichen im Code sagen dem Compiler nur, dass das zwischen jeweils zwei Anführungszeichen, kein "richtiger" Code sondern eine Zeichenkette bzw. ein String ist. mfG mpmxyz P.S.: Was für die Dateibefehle gilt, gilt entsprechend auch für die Ordnerbefehle. |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
Silver_Knee |
Di, Dez 08, 2009 23:36 Antworten mit Zitat |
|
---|---|---|
Das stimmt: Die File und Dir Befehle von Blitz erwarten kein Anführungszeichen und auch beim Abspeichern mittels WriteLine ist keins von nöten. Das Anführungszeichen im String wird soweit ich weiß eigentlich nur von ExecFile zum Abtrennen von Befehlen und umgekehrt von Commandline beim Öffnen mit Befehl angegeben. | ||
Sereyanne |
Mi, Dez 09, 2009 14:03 Antworten mit Zitat |
|
---|---|---|
Midimaster hat Folgendes geschrieben: am besten den ganzen Code hier wieder reinstellen....
Mein Code steht auf der ersten Seite recht weit unten. Code: [AUSKLAPPEN] Wenn du etwas in eine Datei schreiben möchtest, dann brauchst du keine Anführungszeichen für den Pfad.
OK, dann liegt es wohl doch nicht daran. Code: [AUSKLAPPEN] Eine Sache, die du unbedingt kennen solltest:
Nutze den Debugger, wenn das Programm aus unbekannten Gründen abstürzt! Mein Debugger ist an, aber der sagt nix. Das ist der Fehler: http://www.bilder-hochladen.ne...1-jpg.html Mehr hat nicht aufs Bild gepasst. Wie man aber sieht, ist der Debugger leer. Ich hab die " jetzt weggemacht, das Problem bleibt bestehen. |
||
D2006Administrator |
Mi, Dez 09, 2009 14:15 Antworten mit Zitat |
|
---|---|---|
Eben dieser Code ist ziemlich seltsam.
Lade doch vor der Hauptschleife alle Bildpfade in das Array und mach beim Timertick einfach nur das SetPanelImage. Jetzt lädst du bei jedem ticken eine neue Datei aus dem Verzeichnis öhm und dann machst du zwei Bildwechsel. Wobei beim ersten Mal ein Pfad geladen wird, der mutmaßlich leer ist (zumindest wird er in DEM code nich belegt) und beim zweiten Mal der aktuelle Pfad. Übrigens solltest du nach dem Auslesen oder Erstellen der pfad.txt das Dateihandle mit CloseFile freigeben. |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
Sereyanne |
Mi, Dez 09, 2009 15:57 Antworten mit Zitat |
|
---|---|---|
D2006 hat Folgendes geschrieben: Lade doch vor der Hauptschleife alle Bildpfade in das Array
Würd ich ja gern. Ich kriegs einfach nicht hin. Dabei hat mir ozzi789 doch so einen schönen Anfang geliefert. Code: [AUSKLAPPEN] Dim pic$(500) ; einen Dim erstellen mit max 500 Einträgen
pfad$="C:\Dokumente und Einstellungen\DR\Desktop\data\" ;Pfad festlegen must den ändern Verz = ReadDir(pfad$) ;Verzeichniss einlesen Datei$ = NextFile$(Verz);Nächstes File im Verzeichniss 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 CloseDir Verz Egal, was ich mit Loadimage und DrawImage mache, ich krieg immer nur n Invalid Image Handle. Wie arbeite ich damit, wie lade ich die Bilder mit unbekanntem Namen im dim und lese sie hinterher wieder aus? Zitat: Übrigens solltest du nach dem Auslesen oder Erstellen der pfad.txt das Dateihandle mit CloseFile freigeben.
Ja, das habe/hatte ich ja. War nur im reinkopierten Code nicht mehr drin, sorry. |
||
D2006Administrator |
Mi, Dez 09, 2009 16:36 Antworten mit Zitat |
|
---|---|---|
Bei dir weiß man nie, ob die hier eingebrachten Codes nur Auszüge oder komplett sind. Bei dem jetztigen zum Bespiel fehlt jedwede Schleife, wodurch nur ein einziges Bild eingelesen wird. Mal eben trocken dahinprogrammiert:
Code: [AUSKLAPPEN] Dim bilder$(100)
pfad$ = "C:\Bilder\" dir% = ReadDir(pfad$) i% = 0 Repeat datei$ = NextFile(dir%) typ$ = Lower$(Right$(datei$,3)) If FileType(pfad$+datei$)=1 And (typ$="jpg" Or typ$="png" Or typ$="bmp") Then bilder(i) = pfad$+datei$ i% = i% + 1 EndIf Until file$ = "" Or i%>100 CloseDir dir% Das ist mit Prüfung, ob die Datei tatsächlich Bilder sind. Du hast nämlich einfach jede Datei genommen, was das Invalid Image Handle erklären könnte. Vorrausgesetzt in dem Verzeichnis waren auch andere Dateien als Bilder. |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
Sereyanne |
Mi, Dez 09, 2009 16:50 Antworten mit Zitat |
|
---|---|---|
Vielen Dank für deine Lösung. Ich hab jetzt nur keinen Schimmer, wie ich das verarbeite.
D2006 hat Folgendes geschrieben: Das ist mit Prüfung, ob die Datei tatsächlich Bilder sind. Du hast nämlich einfach jede Datei genommen, was das Invalid Image Handle erklären könnte. Vorrausgesetzt in dem Verzeichnis waren auch andere Dateien als Bilder.
Nein, in dem Verzeichnis sind nur 4 Bilder, sonst nichts. Okay, habt mich überredet. Ich habe jetzt neu angefangen und den ganzen Firlefanz, der eh nicht funzt, rausgenommen. Kompletter Code: Code: [AUSKLAPPEN] win=CreateWindow("test",200,200,200,200,Desktop(),3)
canvas=CreateCanvas(0,0,200,140,win) bild=LoadImage("C:\Dokumente und Einstellungen\DR\Desktop\data\bfb.bmp") SetBuffer CanvasBuffer (canvas) timer = CreateTimer(1) ; zum Testen kürzer eingestellt i=0 Repeat WaitEvent() Select EventID() Case $803 End Case $4001 ;Timer Event DrawImage bild,0,0 End Select FlipCanvas canvas Forever So funzt es ja einwandfrei. Jetzt muss ich "nur" das Dim da reinstellen, alle Bilder laden und da rein speichern und dann nach dem Timer wieder ausgeben. Ich weiß bloß nicht, wie ich das anstellen soll.... Ich hab auch noch ein zweites Problem. Grundstruktur ist die gleiche, aber ich stell euch gern den ganzen Code rein (wenn es euch dann besser gefällt ) Code: [AUSKLAPPEN] gfxhoehe=ClientHeight(Desktop())
gfxbreite=ClientWidth(Desktop()) ;clientheight und -width ermittelt die Bildschirmauflösung Local cAppDir$=CurrentDir$() ;für Icon Global cIconStart$=cAppDir$+"usergrp.ico" ;create a window Global trayWnd=CreateWindow("DiaShow", gfxbreite-200,gfxhoehe-230,200,200,Desktop(),3) hWnd = GetActiveWindow() USER32_SetWindowPos(hWnd,-1,0,0,0,0,$1+$2) ;Always on top hide=CreateButton("hide",80,145,40,20,trayWnd) panel=CreatePanel(0,0,200,140,trayWnd) Dim pic$(100) ; einen Dim erstellen mit max 100 Einträgen ;hier kommt später das Speichern des Pfades rein bpfad$="C:\Dokumente und Einstellungen\DR\Desktop\data\" ;Pfad festlegen must den ändern Verz = ReadDir(bpfad$) ;Verzeichnis einlesen If FileType(cIconStart)<>1 Notify("you must set the icon path",True) Else ; show the initial icon ggTrayCreate(QueryObject(trayWnd,1)) ; set the icon ggTraySetIconFromFile(cIconStart$) ; show the icon with the updated text ggTrayShowIcon() timer = CreateTimer(1) ; zum Testen schnell eingestellt i=0 halt=0 ;soll anhalten wenn im hide ; main loop to handle events Repeat WaitEvent(100) ;die Klammer:Zeit in Millisekunden, für die ein Programm maximal angehalten werden soll. ;Standard ist -1 (=unbegrenzt), da ich die Klammern leer lasse, wartet Blitz so lange, bis irgendwas geschieht ;hier auf 100, damit es auch ohne Ereignis weitergeht Select EventID() Case $803 ;WindowClose End Case $401: ;GadgetAction, Eingabe If EventSource() = hide Then HideGadget trayWnd halt=1 EndIf Case $4001 ;Timer Event ;Erstell dir ein Array mit den Bildern, die angezeigt werden sollen und erhöhe den Index ;Nächstes Bild anzeigen If halt=0 ;nur anzeigen wenn nicht im hide Datei$ = NextFile$(Verz);Nächstes File im Verzeichnis If Datei$ = "" Then ;Falls es keine Files mehr hat, von vorne Verz = ReadDir(bpfad$) ;Verzeichnis einlesen i=i+1 pic$(i)=bpfad$ + Datei$ ;in Dim Schreiben For a=0 To i SetPanelImage panel, pic$(a) Next i=0 EndIf 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 EndIf EndIf End Select ; check for a left doubleclick If ggTrayPeekLeftDblClick()>0 ; check the tooltip to see what status we are currently at If Instr(ggTrayGetToolTip(),"Stopped")>0 ; set the icon ggTraySetIconFromFile(cIconStart$) Else ; set the icon ggTraySetIconFromFile(cIconStop$) halt=0 EndIf ; TODO: show your menu here at the event mousex,mousey ShowGadget trayWnd ; clear out the events ggTrayClearEvents() EndIf ; check for a right click If ggTrayPeekRightClick()>0 Exit EndIf Forever CloseDir Verz ; clean up the tray ggTrayDestroy() EndIf ; free the invisible tray window FreeGadget trayWnd Funktioniert einwandfrei. Ich versuche nun, den Pfad in einer Datei abzuspeichern, damit man ihn leichter ändern kann: 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 WriteLine 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$=ReadLine$(save) EndIf bpfad$=bp$ ;Pfad festlegen musst den ändern CloseFile(save) Verz = ReadDir(bpfad$) ;Verzeichnis einlesen Das ist jetzt nur ein Auszug, der, wenn man ihn im oberen Code an der gekennzeichneten Stelle einfügt, leider nicht funktioniert. Ich kann den Ordner auswählen, er wir auch im pfad.txt abgespeichert, aber es werden einfach keine Bilder angezeigt. Woran kann das liegen? Vielen Dank schon mal. Würde mich echt freuen, wenn ichs mit eurer Hilfe noch hinkriegen würde! |
||
mpmxyz |
Mi, Dez 09, 2009 21:00 Antworten mit Zitat |
|
---|---|---|
Da der Debugger nichts sagt, habe ich das Gefühl, dass zwischen den ganzen "ggTray"-Befehlen der Fehler steckt.
Du solltest mal alle Stellen, an denen die aufgerufen werden, auskommentieren, wenn diese ggTray-Funktionen nicht zu wichtig sind. Ansonsten solltest du mal die Stelle des Absturzes mit Hilfe der Befehle Stop/Print etc. ermitteln. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
Nicdel |
Mi, Dez 09, 2009 22:07 Antworten mit Zitat |
|
---|---|---|
Ja, ggTray kann zu Fehlern führen. Ich hatte mal das selbe Problem, da hat sich ggTray mit einer anderen DLL nicht vertragen und hat zum Absturz des Programmes geführt... | ||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
Midimaster |
Do, Dez 10, 2009 3:33 Antworten mit Zitat |
|
---|---|---|
Tipp:
Zerlege Deinen Code in mehrere abgeschlossene Funktionen, die immer nur 1 Aktion (z.b das Einlesen der vorhandenen Bilder, z.b. das Festlegen des Quell-Ordners, z.B. die Anzeige der Bilder) beinhalten. Sonst wirst Du später nie mehr blicken, was schon funktioniert und was nicht. Es ist sehr hilfreich, wenn man weiss auf welche der Funktionen man sich bereits 100% verlassen kann. Du kannst so auch einzelne Funktionen auf Herz und Nieren testen, bevor Du sie mit anderen Funktionen zusammenbringst und sie dort zum Absturz führen. Füge immer ein DEBUGLOG kurz vor dem Ende der Funktion ein, damit Du im Debugger sehen kannst, ob das Ergebnis erwartungsgemäß war. Du erstellt die einzelnen Funktionen zunächst mit "gefaketen" Werten, damit Sie erst einmal "funktionieren". Ich zeig Dir das mal am Beispiel Deiner Bilderpfad-Geschichte: zunächst nur einige fakes: Code: [AUSKLAPPEN] Dim Pic$(99), DefaultBilderPfad$ ;main: graphics 800,600 DirectoryEinlesen Repeat BilderAufsPanel Forever end Function DirectoryEinlesen() Pic(1)="Hundi.png" end function Function BilderPfad$() DefaultBilderPfad= "C:\test\Bilder\" Return DefaultBilderPfad End function Function BilderAufsPanel() Local Nummer% Nummer=1 DEBUGLOG "Versuche " + BilderPfad + Pic(Nummer) + " aufs Panel zu bringen" SetPanelImage panel, BilderPfad + Pic(Nummer) End function Damit kannst Du jetzt nach Herzenslust testen. z.B. in der Hauptroutine mit.. DEBUGLOG " so ist der Pfad von bild 1: " + BilderPfad + Pic(1) ..prüfen, ob der Dateinamen schlüssig ist. Oder bereits ein erstes Bild anzeigen lassen. In einem zweiten Schritt verfeinerst Du immer nur 1 Routine und testet sie gleich auf Herz und Nieren. Die DirectoryEinlesen wir auf alle Files eines Ordners erweitert: Code: [AUSKLAPPEN] Function DirectoryEinlesen() DEBUGLOG "Function Directory einlesen aus diesem Pfad: " + BilderPfad() local Verzeichnis, Datei$, i% Verzeichnis = ReadDir( BilderPfad() ) Repeat Datei = NextFile( Verzeichnis ) i=i+1 Pic(i)=Datei DEBUGLOG "nehme in die picsliste auf : " + Pic(i) Until Datei="" CloseDir Verzeichnis DEBUGLOG "Anzahl gefundene Dateien: " + i end function der Test dazu wäre ein... For i=1 to 99 DEBUGLOG Pic(i) Next i ... in der Hauptschleife. Dann gibt Dir jemand den Tipp, Du sollst mit "FileType" bei der Erstellung der Liste arbeiten und Du baust es ein und prüfst ob die Pic()-Liste nur noch Dateien enthält. Code: [AUSKLAPPEN] Function DirectoryEinlesen() local Verzeichnis, Datei$, i% Verzeichnis = ReadDir( BilderPfad() ) Repeat Datei = NextFile( Verzeichnis ) If FileTyp(BilderPfad() + Datei)=1 then i=i+1 Pic(i)=Datei Else DEBUGLOG " Diese Datei wurde nicht aufgenommen: " + Datei Endif Until Datei="" CloseDir Verzeichnis end function jetzt willst Du alle Bilder der Reihe nach sehen, das machst Du in der BilderAufsPanel Code: [AUSKLAPPEN] Function BilderAufsPanel() Local Nummer% Nummer=0 Repeat Nummer=Nummer+1 If Pic(Nummer)="" Then Exit DEBUGLOG "Versuche " + BilderPfad + Pic(Nummer) + " aufs Panel zu bringen" SetPanelImage panel, BilderPfad + Pic(Nummer) Forever End function So, nun soll der Bilderpfad flexibler werden: Code: [AUSKLAPPEN] Function BilderPfad$() If DefaultBilderPfad= "" then DEBUGLOG "BilderPfad war leer" DefaultBilderPfad=RequestDir() DEBUGLOG "BilderPfad ist jetzt: " + DefaultBilderPfad Endif Return DefaultBilderPfad End function Und noch was wichtiges: Lass den Schnickschack erst mal raus aus deinem Programm, bis die Kern-Routinen laufen. Einfache Buttons, keine Icons, keine unnötigen Events, Gadgets, Tooltipps, etc. -> zu viele zusätzliche Fehlerquellen. |
||
Sereyanne |
Do, Dez 10, 2009 9:52 Antworten mit Zitat |
|
---|---|---|
Uih....
Mit so einer Antwort hab ich jetzt nicht gerechnet. Vielen Dank für die Mühe!!! Werde mich gleich mal dran setzen. Ich hatte doch im oberen Code allen Firlefanz rausgenommen, um das mit dem Dim auszuprobieren. Aber ihr wolltet ja so gern den ganzen Code... Ich arbeite momentan schon an mehreren bb-Dateien, um jede Funktion einzeln zu testen. Und es funktioniert ja auch alles, nur das mit dem Dim und das Speichern krieg ich nicht hin. Ich werde mich jetzt mal durch deine Antwort durcharbeiten. Falls ich noch Fragen habe, ändere ich wieder den Titel des Threads, damit ihr mich findet Herzlichen Dank!!! LG, Sereyanne |
||
Midimaster |
Do, Dez 10, 2009 10:40 Antworten mit Zitat |
|
---|---|---|
Du braucht nicht mehrere Dateien, um den Code zu testen. Mehrere Funktionen wären ausreichend. Allerdings habe ich auch immer ein zweites Editor-Fenster offen, in dem ich die neuen Funktionen schreibe. Dadurch kommt man nicht in Versuchung, sie verteilt in den alten Code zu quetschen. Man kann sie da gut testen und am Ende werden Sie auf die erste Editor-Seite übernommen.
Ich wollte Dir ja eigentlich da bei dem Saven helfen, habe aber das große Durcheinander im Code gesehen und wollte Dir erst mal das Schreiben. Man merkt einfach, das da immer wieder was verändert wurde und oft sind dann Zeilen, die eigentlich thematisch zusammengehören auseinandergerissen worden. Hier wird die Fehlersuche oder die Hilfe durch Dritte dann sehr schwierig. Das Speichern des Pfades in einer Datei ist ja in meinem Bespiel gar nicht mehr nötig. Die Funktion BilderPfad$() liefert Dir den Pfad zurück und zwingt den User einen Pfad anzugeben, wenn noch kein Pfad bekannt ist. In einer Slidshow ist es auch nicht sehr sinnvoll mit einem einzigen festen Pfad zu arbeiten. Damit schränkst Du sie ein und es läßt sich dann nur noch mit Bildern in einem einzigen Ordner arbeiten. Besser ist, das bei jeden Start einmal nach dem heutigen Pfad gefragt wird, und dann aber die gesamte Zeit in diesem Pfad geblieben wird. Nun trotzdem das Speichern. Du ahnst es, es wird neue Funktionen geben: Code: [AUSKLAPPEN] Function BilderPfad$()
If DefaultBilderPfad= "" then DefaultBilderPfad=HolDenPfadAusDerIni() endif If DefaultBilderPfad= "" then DEBUGLOG "BilderPfad war leer" DefaultBilderPfad=RequestDir() SchreibDenPfadInDieIni(DefaultBilderPfad) DEBUGLOG "BilderPfad ist jetzt: " + DefaultBilderPfad Endif Return DefaultBilderPfad End function Function HolDenPfadAusDerIni$() local Eintrag$, Save If FileType ("pfad.txt")=1 save=ReadFile ("pfad.txt") Eintrag=ReadLine$(save) CloseFile save DEBULOG "Ini-Datei gelesen. Eintrag: " + Eintrag Endif Return Eintrag End Function Function SchreibDenPfadInDieIni(Eintrag$) local Save save=WriteFile("pfad.txt") WriteLine save,Eintrag CloseFile save DEBULOG "Ini-Datei geschrieben. Eintrag: " + Eintrag End Function Durch die vielen DEBUGLOG kannst Du nun besser verfolgen, was schon gelaufen ist und ob es erfolgreich war. Noch'n Tipp: Benne Deine Variablen sinnvoll, "bp$" ist nur für Dich und im Moment erkennbar. In einem Jahr sagt es Dir nichts mehr. Nenne es doch was es ist: "BilderPfad". |
||
Sereyanne |
Do, Dez 10, 2009 17:55 Antworten mit Zitat |
|
---|---|---|
Zitat: Code: [AUSKLAPPEN]
Dim Pic$(99), DefaultBilderPfad$
;main: graphics 800,600 DirectoryEinlesen Repeat BilderAufsPanel Forever end Function DirectoryEinlesen() Pic(1)="Hundi.png" end function Function BilderPfad$() DefaultBilderPfad= "C:\test\Bilder\" Return DefaultBilderPfad End function Function BilderAufsPanel() Local Nummer% Nummer=1 DEBUGLOG "Versuche " + BilderPfad + Pic(Nummer) + " aufs Panel zu bringen" SetPanelImage panel, BilderPfad + Pic(Nummer) End function Du schreibst ja, dass es nur Fakes sind... Aber war das gedacht, dass der Code gar nicht lauffähig ist? Ich wollte nur zum Verständnis mal deinen ersten Code ausprobieren, da kommt sofort: "Expecting '('" hinter der Erstellung des Dims. Schade... denn ich würde es gerne ausprobieren um es verstehen zu können. Außerdem wollte ich eigentlich nicht über Graphics arbeiten, dann hätte ich auch BB3D nehmen können. Aber egal, so lange es zum gewünschten Ergebnis führt.... |
||
Midimaster |
Do, Dez 10, 2009 18:46 Antworten mit Zitat |
|
---|---|---|
dieser code sollte auch doch nur symbolisch sein. Die Zeilen sind ja fast alle so aus Deinem code übernommen.
Die erste Zeile müßte wahrscheinlich so geändert werden: Code: [AUSKLAPPEN] Dim Pic$(99)
Global DefaultBilderPfad$ Die Graphics hab ich bloß so dahin geschrieben, da soll natürlich Dein Festercode hin. Wahrscheinlich alles das: Code: [AUSKLAPPEN] win=CreateWindow("test",200,200,200,200,Desktop(),3)
canvas=CreateCanvas(0,0,200,140,win) SetBuffer CanvasBuffer (canvas) leider kann ich kein BlitzPlus ausprobieren, da müssen wir beide halt immer ein bißchen kommunizieren, wenn mir wieder mal was "BlitzMax-iges" reinrutscht. Deine Main-Schleife müßte etwa so ausehen: Code: [AUSKLAPPEN] Repeat
WaitEvent() Select EventID() Case $803 End Case $4001 ;Timer Event BilderAufsPanel End Select FlipCanvas canvas Forever |
||
Sereyanne |
Di, Dez 15, 2009 15:28 Antworten mit Zitat |
|
---|---|---|
Hi,
ich kam ne ganze Weile nicht mehr dazu, sorry. Ich hab meinen Code jetzt erst mal in Einzelteile zerlegt. Und da möchte ich noch mal auf dies hier zurückkommen: ozzi789 hat Folgendes geschrieben: 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 Bei mir sieht das jetzt im Ganzen so aus: Code: [AUSKLAPPEN] gfxhoehe=ClientHeight(Desktop())
gfxbreite=ClientWidth(Desktop()) ;clientheight und -width ermittelt die Bildschirmauflösung ;create a window Global trayWnd=CreateWindow("DiaShow", gfxbreite-200,gfxhoehe-230,200,200,Desktop(),3) ;Werte abziehen, um die Bildschirmecke zu treffen panel=CreatePanel(0,0,200,140,trayWnd) Dim pic$(100) ; einen Dim erstellen mit max 100 Einträgen bpfad$="data\" ;Pfad festlegen musst den ändern Verz = ReadDir(bpfad$) ;Verzeichnis einlesen timer = CreateTimer(1) i=0 ; main loop to handle events Repeat WaitEvent(100) ;die Klammer:Zeit in Millisekunden, für die ein Programm maximal angehalten werden soll. ;Standard ist -1 (=unbegrenzt), da ich die Klammern leer lasse, wartet Blitz so lange, bis irgendwas geschieht ;hier auf 100, damit es auch ohne Ereignis weitergeht Select EventID() Case $803 ;WindowClose End 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 Datei$ = "" Then ;Falls es keine Files mehr hat, von vorne Verz = ReadDir(bpfad$) ;Verzeichnis einlesen i=i+1 pic$(i)=bpfad$ + Datei$ ;in Dim Schreiben For a=0 To i ;ResizeImage pic$(a),200,140 SetPanelImage panel, pic$(a) Next i=0 EndIf 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 ;ResizeImage pic$(a),200,140 SetPanelImage panel, pic$(a) Next i=0 EndIf End Select Forever CloseDir Verz Ich würde jetzt gerne mal das Resize zum Laufen kriegen. Am sinnvollsten erscheint es mir an der Stelle, wo ichs im Code erst mal auskommentiert hab, weil es nicht funzt. Und zwar krieg ich ein "Invalid image handle" wegen resize. Was mach ich da falsch? Freue mich auf Hilfe.... LG, Sereyanne |
||
Nicdel |
Di, Dez 15, 2009 15:35 Antworten mit Zitat |
|
---|---|---|
Um es zu resizen musst du es auch laden, also LoadImage. Im Array ist nur ein String | ||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
Sereyanne |
Di, Dez 15, 2009 15:46 Antworten mit Zitat |
|
---|---|---|
Ja, ich weiß, dass in der Hilfe steht:
Zitat: Bild Identität des Bildes (z.B. ermittelt mit LoadImage)
Ich hatte halt gedacht, wegen "z.B.", vielleicht reichts ja wenn das Bild im Dim gespeichert ist... Okay, danke, und wie stell ich das dann genau an? Code: [AUSKLAPPEN] p=LoadImage (bpfad$+Datei$)
funzt nicht... |
||
Gehe zu Seite Zurück 1, 2, 3, 4 Weiter
Übersicht BlitzBasic BlitzPlus
Powered by phpBB © 2001 - 2006, phpBB Group