Seite 1 von 1

GadgetId eines Parents ermitteln

Verfasst: 01.02.2020 22:45
von kmais
Guten Abend, ....

Ich sitze an folgendem Problem:

Ich habe eine ScrollArea als Parent und platziere in dieser verschiedene Gadgets, wie Text, String oder andere.
Ich möchte nun im Zuge eines Events (leftbutton) beim Anklicken zum Beispiel des TextGadgets die Id der ScrollArea erhalten um mit dieser weitere Aktionen durchzuführen.
Gefunden habe ich nur die API

Code: Alles auswählen

  Procedure GetParent(ChildID) ;Returns ParentID from ChildID (Default)
    If ChildID <>-1
      CompilerIf #PB_Compiler_OS = #PB_OS_Windows
        ProcedureReturn GetParent_(ChildID)
      CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux
        ProcedureReturn gtk_widget_get_parent_(ChildID)
      CompilerEndIf
    EndIf  
    ProcedureReturn -1
  EndProcedure 

ParentID=GetParent(GadgetID(EventGadget()))
(Linux wäre zunächst am wichtigsten)
Da habe ich gleich zwei Probleme:
Der Handle, den ich erhalte ich NICHT der Handle der ScrollArea ( ????? ). Keine Ahnung, wohin dieser gehört. Evtl. besteht das angeklickte StringGadget aus einem eigenen Parent dessen Handle ich dann erhalte. Weiß jemand dazu etwas mehr?
Zum zweiten frage ich mich, wenn ich nun den Handle habe, wie erhalte ich aus diesem die in Pb zugewiesene Id, um damit irgendetwas weiteres zu tun ?

Für Ideen wäre ich sehr dankbar.

Re: GadgetId eines Parents ermitteln

Verfasst: 02.02.2020 00:34
von mk-soft
Die Gadget Nummer vom ScrollAreaGadget weiss man doch selber schon. Also unnötiger aufwand.
Ein TextGadget hat (standardmäßig) kein Event.

Zur zweiten Frage siehe Module System

Re: GadgetId eines Parents ermitteln

Verfasst: 02.02.2020 10:45
von kmais
Naja ...., es ist doch ganz nützlich, wenn ein Child "weiß" wer sein Parent ist. Es kommt ja durchaus vor, dass ich einen Container seitens der Childs von innen nach außen rekursiv abarbeite um irgendwelche Eigenschaften zu setzen, lesen etc. Wenn ich den Code eher statisch als dynamisch erstelle, dann "weiß" ich sicher, welche Nummern vergeben sind. Wenn ich allerdings einen Container mit Gadgets dynamisch erstelle weiß Pb das anhand der Gadgetlist, aber ich eben nicht. Und die Gadgetlist behält ihr Geheimnis für sich. Oder kann ich die Liste auslesen?

Das verlinkte Modul habe ich mir mal angeschaut.
Da findet sich manches, was ich gut gebrauchen könnte.
Völlig ahnungslos assoziiere ich mal, dass hier ein Pb-Library importiert wird und vor allem über die Procedure PB_Object_Enumerate(Start, Next) die Infos geholt werden.
Und an der Stelle wäre eine Dokumentation über solche Library Funktionen mal sehr hilfreich.
Leider hat meine Recherche bisher nichts ergeben.
Da wäre ich über Infos auch sehr dankbar.
Meine diesbezügliche Vernetzung lässt doch sehr zu wünschen übrig :cry: . Hoffentlich ändert sich das bald.

Re: GadgetId eines Parents ermitteln

Verfasst: 02.02.2020 13:07
von mk-soft
Es werden interne Funktionen von Purebasic verwendet. Die müssen aber bei jeder neuen Version von Purebasic überprüft werden, da diese sich auch mal ändern können.
Dazu muss man den Ordner von Purebasic SDK gehen (Am besten bei Windows, aber alle OS haben kleine unterschiede) und etwas 'C' Kenntnis haben.

Leider verwaltet Purebasic die Parent PB-Objekt Nummern von Gadgets nicht selber.
Aber auch bei dynamisch erstellten Gadgets (#PB_Any) bekommst du die PB Gadget Nummer.
Diese am besten in einer Struktur hinterlegen.

Code: Alles auswählen

Structure guiDataDialog
  window.i
  button_x.i
  scrollarea.i
  List gadgets_scrollarea.i()
  ; ...
EndStructure

Re: GadgetId eines Parents ermitteln

Verfasst: 02.02.2020 16:05
von Nino
Beim Erzeugen eines Gadgets ist die Nummer seines Parents bekannt. Sie kann einfach mit Hilfe von SetGadgetData() in dem Gadget gespeichert werden. So hat man diese Nummer später für jedes Gadget immer direkt verfügbar.

Re: GadgetId eines Parents ermitteln

Verfasst: 02.02.2020 18:44
von kmais
Die Tag-Eigenschaft des Controls. Natürlich .... ( <- Kopf auf Tisch haut ... )
Danke .... :allright: