Frage zur GadgetID und der Gadgetnummer

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
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

Beitrag von Ghosty1967 »

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!
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Frage zur GadgetID und der Gadgetnummer

Beitrag von STARGÅTE »

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
Nein, nicht ganz.
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.
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...
Wie oben geschildert, demnach nicht möglich, weil die Gadget-ID eine System-interne (von Windows verwaltete) "Zahl" ist.
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
Benutzeravatar
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

Beitrag von jacdelad »

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
Andesdaf
Moderator
Beiträge: 2660
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: Frage zur GadgetID und der Gadgetnummer

Beitrag von Andesdaf »

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)
Benutzeravatar
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

Beitrag von Ghosty1967 »

Danke Euch für die Antworten... wieder was dazu gelernt :allright:
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Frage zur GadgetID und der Gadgetnummer

Beitrag von Nino »

Andesdaf hat geschrieben:Mit PB-internen Funktionen kann man auch den umgekehrten Weg gehen, ...
Sehr interessant, danke für die Information!
Aber gibt es irgendeine Situation, in der man das tatsächlich braucht? ;-)
Benutzeravatar
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

Beitrag von jacdelad »

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
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Frage zur GadgetID und der Gadgetnummer

Beitrag von Nino »

Verstehe. Interessant.
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Frage zur GadgetID und der Gadgetnummer

Beitrag von Nino »

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
Der Code funktioniert leider nicht (getestet mit PB 6.00 LTS unter Windows).
Fehlermeldung hat geschrieben:Zeile 7: PB_Object_EnumerateStart() ist keine Funktion, Array, Makro oder LinkedList.
Benutzeravatar
mk-soft
Beiträge: 3701
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Frage zur GadgetID und der Gadgetnummer

Beitrag von mk-soft »

So ist der code auch nicht vollständig ... ist nur ein Beispiel

Kompletter Code hier ... Module System
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten