Seite 1 von 4
GadgetID bei #PB_Any
Verfasst: 20.08.2006 01:19
von Konne
Hallo ich habe festgestellt das die ID eines Gadgets bei PB Any bei einem Callback ein anderes ist als dass welches das Gadget beim erstellen zurückliefert. Wie kann ich also von dieser Api ID auf die echte ID kommen?
Verfasst: 20.08.2006 01:27
von ts-soft
Code: Alles auswählen
ID = ButtonGadget(#PB_Any, 0,0,0,0,"")
hWnd = GadgetID(ID)
Auch wenn ID evtl. sehr hoch ist, ist es die normalle interne ID.
hWnd ermittelt durch GadgetID() ist das Handle für Windows
und ohne #PB_Any
Genaugenommen wird der Pointer zu einer GadgetStructure zurückgegeben,
dessen erster Wert dem Handle entspricht
Verfasst: 20.08.2006 03:19
von ts-soft
Noch mal etwas anschaulicher:
Code: Alles auswählen
Structure PB_GadgetStructure
Gadget.l
*vt
UserData.l
OldCallback.l
Daten.l[4]
EndStructure
hwnd = OpenWindow(0,10,10,200,200,"")
CreateGadgetList(hwnd)
*button.PB_GadgetStructure = ButtonGadget(#PB_Any, 0,0,100,20,"")
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Gadget
If EventGadget() = *button
Debug "PBID = " + Str(*button)
Debug "hwnd = " + Str(*button\Gadget)
EndIf
EndIf
Until event = #PB_Event_CloseWindow
Verfasst: 20.08.2006 12:42
von PBZecke
ts-soft hat geschrieben:... Genaugenommen wird der Pointer zu einer GadgetStructure zurückgegeben,
dessen erster Wert dem Handle entspricht
Worauf zeigt dieser Pointer, wenn ich keine Structure definiere? Oder anders
gefragt, kann ich auch ohne zuvor definierter Structure auf diese Daten
zurückgreifen?
Verfasst: 20.08.2006 13:47
von Tafkadasom2k5
Wenn du keine Struktur definierst, bzw garnicht nachguckst was in dieser steht, interessiert die Struktuir garnicht. Dashier ist nur eine Möglichkeit, den Inhalt eines Butto-Gadgets sichtbar zu machen.
Also ohne Struktur ist dieses Handle einfach nur ein Handle, und mit dieser Struktur ist es möglich den Inhalt des Buttons auszulesen.
Handle = Pointer der Struktur.
Ohne Struktur -> Nur als Handle zu gebrauchen
Mit Struktur -> Handle als Pointer nutzen, und Daten auslesen
(Ich hoffe du verstehst was ich meine

)
Gr33tz
Tafkadasom2k5
Edit: Der Pointer zeigt auf dieselben Daten, wie als wenn du eine Struktur definiert hättest. Die Struktur hilft sozusagen nur zur Trennung der Daten und dem Auslesen der länge, also wieweit gepeekt werden muss.
Verfasst: 20.08.2006 16:17
von PBZecke
Ja, Danke. Hatte ich mir auch so vorgestellt. Aber noch etwas. Woher habt
ihr diese Informationen? Da das ja sicher auch mit Fenstern geht, frage ich
mich, wie die Structure da aussehen muss? Richtig benutzt, kann dass ja
eine Menge Tipparbeit ersparen. Habe ich das in der Hilfe überlesen...

Verfasst: 20.08.2006 16:36
von PureLust
@André:
Da ja die Frage nach den internen PB-Strukturen bereits öfter gestellt wurde, könnte man da nicht mal eine Anfrage an Fred stellen, ob er diese Strukturen nicht evtl. offiziell freigeben und man sie ggfl. sogar mit in die Hilfe aufnehmen könnte?
Oder aber, sie zumindest so ähnlich wie die "PureBasic library descriptor.txt" mit beigelegt würden (was ja z.B. in der v4 schon garnicht mehr der Fall ist)?
Das wäre glaube ich für viele eine große Hilfe, die versuchen PureBasic besser zu verstehen und möglichst effektiv damit zu programmieren.
Dank und Gruß, PureLust.
Verfasst: 20.08.2006 18:37
von ts-soft
Die Structure steht in Gadget.h im Librariy-SDK. Ist auch nur im
Zusammenhang von Libraries, die Gadgets erstellen, sinnvoll einsetzbar. In
der Hilfe sind solche Themen deplaziert. Ergänzende Library SDK
Beschreibung wäre natürlich wünschenswert, aber nicht in der normalen Hilfe
Code: Alles auswählen
RunProgram("notepad", #PB_Compiler_Home + "Library SDK\LccWin32\SampleGadget\Gadget.h", "")
Verfasst: 20.08.2006 21:14
von Andre
@PureLust: Ich werde dazu mal fr34k anschreiben und auf diesen Thread hinweisen, da ich selbst nicht in die technischen Sachen rund um PureBasic eingreife. Er wird sich sicherlich bei Bedarf mit Fred abstimmen.
Verfasst: 20.08.2006 21:38
von PureLust
@André:
Vielen Dank. Ich glaube, sowas könnte einigen interessierten PB'lern dabei helfen, PB noch besser zu verstehen und noch bessere Programme damit zu erstellen.
