Seite 1 von 1
Das "Mutter" Fenster ermitteln... ?
Verfasst: 14.06.2013 12:47
von Bisonte
Hallo.
Auch wenn die Titelwahl etwas komisch klingt, hier mal die Frage :
Wie kann ich das Hauptfenster ermitteln, auf dem ich mein Gadget platziert habe ?
Mit GetParent_() oder UseWindowGadgetList(0) bekomme ich ja das Fenster herraus, NUR
wenn es ein z.B. ContainerGadget ist, hab ich das Handle vom Container und nicht das vom Fenster.
Wie prüfe ich das am besten, bzw. gibt es da überhaupt eine Prüfung ?
Re: Das "Mutter" Fenster ermitteln... ?
Verfasst: 14.06.2013 12:52
von ts-soft
Re: Das "Mutter" Fenster ermitteln... ?
Verfasst: 14.06.2013 13:40
von Bisonte
Leider nicht. Das gibt das Handle des Fensters das gerade in der Z-Order am höchsten ist.
Aber bei dieser ganzen Testerei hab ich festgestellt, dass UseGadgetList(0) doch das Hauptfenster meint, auf dem
das Gadget liegt...
Faszinierend... Ich war der Meinung, das schonmal gebraucht zu haben und dann wurde nur das nächsthöhere
"Window" angezeigt... also z.B. der Container...
Hat sich wohl erstmal erledigt. Mal sehen ob ich da noch Problemchen bei der Identifizierung finde
Vielen Dank für die Mühe...
Re: Das "Mutter" Fenster ermitteln... ?
Verfasst: 14.06.2013 13:56
von mk-soft
Aus dem englischen Forum überarbeitet
Code: Alles auswählen
Procedure ParentGadget(gadget) ;for PanelGadget.
Protected hwnd, ParentID
hwnd = GetParent_(GadgetID(gadget))
hwnd = GetParent_(hwnd)
ParentID = GetProp_(hwnd, "PB_ID")
ProcedureReturn ParentID
EndProcedure
Procedure ParentWindow(gadget)
Protected hwnd, ParentID
hwnd = GadgetID(gadget)
Repeat
hwnd = GetParent_(hwnd)
ParentID = GetProp_(hwnd, "PB_WindowID") - 1
Until ParentID >= 0
ProcedureReturn ParentID
EndProcedure
If OpenWindow(1, 0, 0, 322, 220, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
a = PanelGadget(#PB_Any, 8, 8, 306, 203)
AddGadgetItem(a, -1, "Panel 1")
PanelGadget(1, 5, 5, 290, 166)
AddGadgetItem(1, -1, "Sub-Panel 1")
AddGadgetItem(1, -1, "Sub-Panel 2")
AddGadgetItem(1, -1, "Sub-Panel 3")
CloseGadgetList()
AddGadgetItem(a, -1,"Panel 2")
ButtonGadget(2, 10, 15, 80, 24,"Button 1")
ButtonGadget(3, 95, 15, 80, 24,"Button 2")
CloseGadgetList()
Debug ParentWindow(a)
Debug ParentGadget(1)
Debug ParentGadget(2)
Debug ParentGadget(3)
Debug a
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Windows Only...
Re: Das "Mutter" Fenster ermitteln... ?
Verfasst: 14.06.2013 14:04
von Bisonte
Windows only is klar
Nein im ernst. Die ParentWindow(Gadget) Funktion ist interessant.
Simple und effizient, wobei man nur aufpassen muss, dass das Fenster mit PB erstellt
wurde (also nicht per API) oder man muss das Property "PB_WINDOWID" von Hand setzen.
Re: Das "Mutter" Fenster ermitteln... ?
Verfasst: 14.06.2013 14:20
von RSBasic
mk-soft hat geschrieben:[...] Windows Only...
Deshalb sind wir ja im Windows-Forum.

Re: Das "Mutter" Fenster ermitteln... ?
Verfasst: 14.06.2013 18:39
von mk-soft
RSBasic hat geschrieben:mk-soft hat geschrieben:[...] Windows Only...
Deshalb sind wir ja im Windows-Forum.

Ups... Ist mir gar nicht aufgefallen

Re: Das "Mutter" Fenster ermitteln... ?
Verfasst: 17.06.2013 18:53
von edel
GetAncestor kannst du auch nehmen :
Code: Alles auswählen
Procedure Main()
win = OpenWindow(#PB_Any, 0, 0, 400, 400, "")
If win
Debug WindowID(win)
PanelGadget (0, 8, 8, 306, 203)
AddGadgetItem (0, -1, "Panel 1")
PanelGadget (1, 5, 5, 290, 166)
AddGadgetItem(1, -1, "Sub-Panel 1")
AddGadgetItem(1, -1, "Sub-Panel 2")
AddGadgetItem(1, -1, "Sub-Panel 3")
CloseGadgetList()
AddGadgetItem (0, -1,"Panel 2")
ButtonGadget(2, 10, 15, 80, 24,"Button 1")
ButtonGadget(3, 95, 15, 80, 24,"Button 2")
CloseGadgetList()
Debug GetAncestor_(GadgetID(3), #GA_ROOT)
Repeat
event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
EndIf
EndProcedure:End Main()
Re: Das "Mutter" Fenster ermitteln... ?
Verfasst: 17.06.2013 23:18
von Bisonte
Der ist auch nicht schlecht. Les ich heut zum ersten mal, den Aufruf GetAncestor_().