GadgetID bei #PB_Any

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

GadgetID bei #PB_Any

Beitrag 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?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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

Code: Alles auswählen

hWnd = ButtonGadget(0, 0,0,0,0,"")
Genaugenommen wird der Pointer zu einer GadgetStructure zurückgegeben,
dessen erster Wert dem Handle entspricht
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
PBZecke
Beiträge: 399
Registriert: 02.09.2004 17:34

Beitrag 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?
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... :lol:
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag 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 :freak: )

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.
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
PBZecke
Beiträge: 399
Registriert: 02.09.2004 17:34

Beitrag 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... :roll:
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... :lol:
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag 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.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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", "")
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag 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.
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag 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. :allright:
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Antworten