ich habe früher kleinere Programme in PowerBasic geschrieben und bin nun zu PureBasic gewechselt, weil mir die IDE und insbesondere die Debugging-Fähigkeiten mehr gefallen. Die Unterschiede sind aber doch erheblich größer, als ich zunächst vermutet habe. Ich habe mich trotzdem unverdrossen ans Werk gemacht und versucht, mein erstes eigenes Fenster zu programmiert.
Hierbei stieß ich auf das Phänomen, daß PureBasic bei diversen Befehlen sog. Rückgabewerte erzeugt und ich nicht so richtig weiß, wozu. Konkrete Beispiele: Die Befehle OpenWindow, LoadFont und CreateGadgetList. Zu OpenWindow heißt es in der Hilfe:
"Öffnet ein neues Fenster entsprechend den übergegebenen Parametern." Soweit alles klar und selbstverständlich. Doch weiter heißt es: "Wenn #PB_Any als '#Window' Parameter verwendet wird, dann wird die Nummer des neuen Fensters als 'Ergebnis' zurückgegeben. Ist 'Ergebnis' gleich 0, konnte das Fenster nicht geöffnet werden." Ab diesem Punkt komme ich nicht mehr mit.
Wozu muß ein OpenWindow-Befehl überhaupt einen Rückgabewert erzeugen? Ich meine, wenn der Kode zur Fenstergenerierung fehlerhaft ist, dann kriegt man das ganz bestimmt mit, auch ohne daß man hierfür '0' als Rückgabewert nötig hätte. Das Fenster öffnet dann einfach nicht und man weiß, daß man etwas falsch gemacht hat (und muß sich dann den Kode eben noch einmal ansehen). Außerdem: Die Aussagekraft dieses zurückgegebenen Wertes '0' ist doch im wahrsten Sinne des Wortes gleich Null, weil dieser Rückgabewert ja kein Fehlerkode ist, der einem verriete, woran es denn gelegen hat, daß das Fenster nicht öffnet.
Was ich zu OpenWindow ausgeführt habe, gilt ebenso für CreateGadgetList. Denn mir ist aufgefallen, daß der eigentliche Fenster-Kode, der vom Visual Designer durch "Generate Source" erzeugt wird, in zwei If-Strukturen eingebunden ist:
Code: Alles auswählen
Procedure Open_Hf()
If OpenWindow(#Hf, 460, 406, 281, 125, "Differenz", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Hf))
TextGadget(#Bz_Ztpkt_1, 7, 11, 71, 16, "Zeitpunkt 1:")
SetgadgetFont(#Bz_Ztpkt_1, FontID1)
StringGadget(#Tf_h1, 85, 8, 14, 22, "0", #PB_String_Numeric)
TextGadget(#Bz_h1, 102, 11, 7, 18, "h")
StringGadget(#Tf_min1, 115, 8, 21, 22, "00", #PB_String_Numeric)
TextGadget(#Bz_min1, 139, 11, 22, 18, "min")
StringGadget(#Tf_sek1, 164, 8, 21, 22, "00", #PB_String_Numeric)
TextGadget(#Bz_sek1, 187, 11, 7, 18, "s")
StringGadget(#Tf_tsek1, 198, 8, 27, 22, "000", #PB_String_Numeric)
TextGadget(#Bz_tsek1, 228, 11, 42, 18, "/1000 s")
TextGadget(#Bz_Ztpkt_2, 7, 40, 71, 16, "Zeitpunkt 2:")
SetgadgetFont(#Bz_Ztpkt_2, FontID1)
StringGadget(#Tf_h2, 85, 37, 14, 22, "0", #PB_String_Numeric)
TextGadget(#Bz_h2, 102, 40, 7, 18, "h")
StringGadget(#Tf_min2, 115, 37, 21, 22, "00", #PB_String_Numeric)
TextGadget(#Bz_min2, 139, 40, 22, 18, "min")
StringGadget(#Tf_sek2, 164, 37, 21, 22, "00", #PB_String_Numeric)
TextGadget(#Bz_sek2, 187, 40, 7, 18, "s")
StringGadget(#Tf_tsek2, 198, 37, 27, 22, "000", #PB_String_Numeric)
TextGadget(#Bz_tsek2, 228, 40, 42, 18, "/1000 s")
Frame3DGadget(#Ra_Erg, 10, 65, 149, 49, "Ergebnis")
TextGadget(#Bz_Erg, 49, 87, 68, 16, "0,000 s", #PB_Text_Center)
ButtonGadget(#Sf_Berechne, 172, 73, 98, 40, "Berechnen")
EndIf
EndIf
EndProcedure
Nun zum Befehl FontLoad, der dem Format
folgt. Der Visual Designer erstellt vor der Fensterprozedur eine ZeileErgebnis = LoadFont(#Font, Name$, Höhe [, Flags])
Code: Alles auswählen
Global FontID1
FontID1 = LoadFont(1, "WH12G", 8)
FontID1 wird dann in meinem Fensterkode oben zweimal verwendet: nämlich in beiden SetgadgetFont-Befehlen. Hier ist mir unklar, wieso zwei Setgadget-Befehle nötig sind. Denn der Zeichensatz ändert sich ja nicht, und ein Befehl zur Festlegung des Standard-Fonts für die Gadgets sollte doch genügen.
Vielen Dank