Frage zur GadgetID und der Gadgetnummer
- Ghosty1967
- Beiträge: 205
- Registriert: 29.08.2005 13:56
- Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
- Wohnort: Köln
Frage zur GadgetID und der Gadgetnummer
Rein interessehalber hätte ich da mal eine Frage, bei der ich den Wald nicht sehen kann...
Bei den zwei Wegen ein Gadget zu erstellen...nämlich
1. NeueID = TextGadget(#PB_Any, 10, 10, 100, 20, "Text") oder
2. TextGadget(1000, 10, 10, 100, 20, "Text")
wird ja im ersten Fall eine zufällige GadgetNr generiert und die ID des Gadgets in der Variablen "NeueID" gespeichert
und im zweiten Fall das Gadget direkt mit der GadgetNr 1000 erstellt, wobei ich danach mittels GadgetID(GadgetNr) die "NeueID" herausfinden kann
Meine eigentliche Frage lautet daher, ist der "umgekehrte Weg" nämlich aus der GadgetID die GadgetNR zu ermitteln möglich
und wenn ja wie...
Kann mich hier bitte mal jemand schlau machen!
Bei den zwei Wegen ein Gadget zu erstellen...nämlich
1. NeueID = TextGadget(#PB_Any, 10, 10, 100, 20, "Text") oder
2. TextGadget(1000, 10, 10, 100, 20, "Text")
wird ja im ersten Fall eine zufällige GadgetNr generiert und die ID des Gadgets in der Variablen "NeueID" gespeichert
und im zweiten Fall das Gadget direkt mit der GadgetNr 1000 erstellt, wobei ich danach mittels GadgetID(GadgetNr) die "NeueID" herausfinden kann
Meine eigentliche Frage lautet daher, ist der "umgekehrte Weg" nämlich aus der GadgetID die GadgetNR zu ermitteln möglich
und wenn ja wie...
Kann mich hier bitte mal jemand schlau machen!
Re: Frage zur GadgetID und der Gadgetnummer
Nein, nicht ganz.Ghosty1967 hat geschrieben: ↑03.08.2022 13:29 Bei den zwei Wegen ein Gadget zu erstellen...nämlich
1. NeueID = TextGadget(#PB_Any, 10, 10, 100, 20, "Text") oder
2. TextGadget(1000, 10, 10, 100, 20, "Text")
wird ja im ersten Fall eine zufällige GadgetNr generiert und die ID des Gadgets in der Variablen "NeueID" gespeichert
und im zweiten Fall das Gadget direkt mit der GadgetNr 1000 erstellt, wobei ich danach mittels GadgetID(GadgetNr) die "NeueID" herausfinden kann
Im ersten Fall wird eine zufällige (aber einzigartig) Gadget-Nummer generiert und diese auch zurückgegeben. Deine Variable NeueID ist keine ID, sondern die Gadget-Nummer.
Im zweiten Fall wird die 1000 direkt als Gadget-Nummer genutzt, dann aber als Rückgabewert (den du hier nicht benutzt) die Gadget-ID zurückgegeben.
In beiden Fällen kannst du mit der zufälligen Nummer oder der 1000 über GadgetID(GadgetNr) die (system) ID bekommen. Diese hat dann aber keine Infos mehr über die interne Verwaltung (also die Gadget Nummer) in PureBasic.
Wie oben geschildert, demnach nicht möglich, weil die Gadget-ID eine System-interne (von Windows verwaltete) "Zahl" ist.Ghosty1967 hat geschrieben: ↑03.08.2022 13:29 Meine eigentliche Frage lautet daher, ist der "umgekehrte Weg" nämlich aus der GadgetID die GadgetNR zu ermitteln möglich
und wenn ja wie...
Die Gadget-Nummer wird von PureBasic verwaltet.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- jacdelad
- Beiträge: 348
- Registriert: 03.02.2021 13:39
- Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
- Wohnort: Riesa
- Kontaktdaten:
Re: Frage zur GadgetID und der Gadgetnummer
Der Befehl GadgetID() wird nur verwendet, um das Handle des Gadgets zu ermitteln (in PureBasic ID genannt), z.B. bei der Verwendung von Windows-APIs. Umgekehrt kannst du auch mittels Windows-APIs ein Gadget erstellen und die GadgetNr ermitteln, dazu gibt's im englischen forum irgendwo einen Code für alle Betriebssysteme, ich weiß aber gerrade nicht wo.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Re: Frage zur GadgetID und der Gadgetnummer
Mit PB-internen Funktionen kann man auch den umgekehrten Weg gehen, aber Vorsicht: undokumentiert, kann sich jederzeit ändern und allgemein ohne Gewähr.
Code: Alles auswählen
Procedure.i sysGetPBGadgetID(piHWnd.i)
Protected.i iResult,
iGadget
iResult = -1
PB_Object_EnumerateStart(PB_Gadget_Objects)
While PB_Object_EnumerateNext(PB_Gadget_Objects, @iGadget)
If piHWnd = GadgetID(iGadget)
iResult = iGadget
Break
EndIf
Wend
PB_Object_EnumerateAbort(PB_Gadget_Objects)
ProcedureReturn iResult
EndProcedure
Win11 x64 | PB 6.00 (x64)
- Ghosty1967
- Beiträge: 205
- Registriert: 29.08.2005 13:56
- Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
- Wohnort: Köln
Re: Frage zur GadgetID und der Gadgetnummer
Danke Euch für die Antworten... wieder was dazu gelernt
Re: Frage zur GadgetID und der Gadgetnummer
Sehr interessant, danke für die Information!Andesdaf hat geschrieben:Mit PB-internen Funktionen kann man auch den umgekehrten Weg gehen, ...
Aber gibt es irgendeine Situation, in der man das tatsächlich braucht?
- jacdelad
- Beiträge: 348
- Registriert: 03.02.2021 13:39
- Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
- Wohnort: Riesa
- Kontaktdaten:
Re: Frage zur GadgetID und der Gadgetnummer
Ja, wenn du zum Beispiel eine DLL erstellst und das Hauptprogramm nicht in PureBasic geschrieben wurde und nur die Handles übergeben kann. Für mein RibbonGadget benötige ich das, jedenfalls für die DLL.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Re: Frage zur GadgetID und der Gadgetnummer
Der Code funktioniert leider nicht (getestet mit PB 6.00 LTS unter Windows).Andesdaf hat geschrieben: ↑03.08.2022 19:48 Mit PB-internen Funktionen kann man auch den umgekehrten Weg gehen, aber Vorsicht: undokumentiert, kann sich jederzeit ändern und allgemein ohne Gewähr.
Code: Alles auswählen
Procedure.i sysGetPBGadgetID(piHWnd.i) Protected.i iResult, iGadget iResult = -1 PB_Object_EnumerateStart(PB_Gadget_Objects) While PB_Object_EnumerateNext(PB_Gadget_Objects, @iGadget) If piHWnd = GadgetID(iGadget) iResult = iGadget Break EndIf Wend PB_Object_EnumerateAbort(PB_Gadget_Objects) ProcedureReturn iResult EndProcedure
Fehlermeldung hat geschrieben:Zeile 7: PB_Object_EnumerateStart() ist keine Funktion, Array, Makro oder LinkedList.
Re: Frage zur GadgetID und der Gadgetnummer
So ist der code auch nicht vollständig ... ist nur ein Beispiel
Kompletter Code hier ... Module System
Kompletter Code hier ... Module System
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive