Seite 1 von 2

Frage zur GadgetID und der Gadgetnummer

Verfasst: 03.08.2022 13:29
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!

Re: Frage zur GadgetID und der Gadgetnummer

Verfasst: 03.08.2022 15:24
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.

Re: Frage zur GadgetID und der Gadgetnummer

Verfasst: 03.08.2022 17:45
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.

Re: Frage zur GadgetID und der Gadgetnummer

Verfasst: 03.08.2022 19:48
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

Re: Frage zur GadgetID und der Gadgetnummer

Verfasst: 03.08.2022 20:39
von Ghosty1967
Danke Euch für die Antworten... wieder was dazu gelernt :allright:

Re: Frage zur GadgetID und der Gadgetnummer

Verfasst: 04.08.2022 19:57
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? ;-)

Re: Frage zur GadgetID und der Gadgetnummer

Verfasst: 04.08.2022 20:10
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.

Re: Frage zur GadgetID und der Gadgetnummer

Verfasst: 05.08.2022 15:48
von Nino
Verstehe. Interessant.

Re: Frage zur GadgetID und der Gadgetnummer

Verfasst: 05.08.2022 17:43
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.

Re: Frage zur GadgetID und der Gadgetnummer

Verfasst: 05.08.2022 17:53
von mk-soft
So ist der code auch nicht vollständig ... ist nur ein Beispiel

Kompletter Code hier ... Module System