Hallo!
Es gibt schon einige Threads zum Thema Childwindow, aber eine endgültige Antwort auf mein Problem habe ich nicht gefunden.
Ich möchte ein Window nach Buttonklick aufmachen. Wenn ich ganz normal mit Openwindow verfahre, wird in der Taskleiste ein neuer Eintrag erstellt. Ferner lässt sich das Fenster auch in den Hintergrund schalten.
Wie erreiche ich es, dass das Childwindow immer VOR dem Parentwindow erscheint, aber nicht automatisch vor ALLEN Fenstern (das war immer der Knackpunkt bisher), d.h. wenn ich andere Programme in der Taskleiste aktiviere, dass dann auch das Childwindow in den Hintergrund verschwindet. Wenn ich dann das Parentwindow wieder aktiviere, sollte dann auch das Childwindow wieder über dem Paarentwindow zu sehen sein.
Wie erreiche ich es, dass nicht für jedes neu eröffnete Childwindow ein neuer Eintrag in der Taskleiste erscheint? Ist ja bei anderen Programmen auch nicht so.
Wie erreiche ich es, dass, wenn ein ein Childwindow geöffnet ist, das Parentwindow keine Eingaben mehr zulässt (also quasi ein Sanduhr-Maus erscheint)?
--
Gruß, Martin.
Parentwindow und Childwindow
Re: Parentwindow und Childwindow
Du mußt bei OpenWindow() den letzten (optionalen) ParameterCalloway hat geschrieben:Ich möchte ein Window nach Buttonklick aufmachen. Wenn
ich ganz normal mit Openwindow verfahre, wird in der
Taskleiste ein neuer Eintrag erstellt.
Ferner lässt sich das Fenster auch in den Hintergrund schalten.
WindowID() vom Hauptfenster angeben. Löst beide Probleme.
Mit EnableWindow_().Calloway hat geschrieben:Wie erreiche ich es, dass, wenn ein ein Childwindow geöffnet ist,
das Parentwindow keine Eingaben mehr zulässt
Das habe ich leider nicht hinbekommen, da daß deaktivierteCalloway hat geschrieben:(also quasi ein Sanduhr-Maus erscheint)?
Fenster keine Messages mehr verarbeitet, und somit der
Standard-Cursor genommen wird.
Vielleicht reicht es ja trotzdem so:
Code: Alles auswählen
Procedure Win1(value)
OpenWindow(1,0,0,400,200,#PB_Window_SystemMenu|#PB_Window_WindowCentered,"Child",WindowID(0))
CreateGadgetList(WindowID())
ButtonGadget(1,290,170,100,20,"Schließen")
; HauptFenster de-aktivieren
EnableWindow_(WindowID(0),0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
If EventWindowID() = 1 ; Child schliessen
close = 1
EndIf
Case #PB_Event_Gadget
Select EventGadgetID()
Case 1 ; Child schliessen
close = 1
EndSelect
EndSelect
Until close
; HauptFenster re-aktivieren
EnableWindow_(WindowID(0),1)
EndProcedure
OpenWindow(0,0,0,300,300,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Hauptfenster")
CreateGadgetList(WindowID())
ButtonGadget(0,10,10,100,20,"Fenster öffnen")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
If EventWindowID() = 0 ; Hauptfenster schliessen
Break
EndIf
Case #PB_Event_Gadget
Select EventGadgetID()
Case 0
CreateThread(@Win1(),0)
EndSelect
EndSelect
ForEverkannst Du auch ganz leicht unabhängige ToolWindows machen,
die nicht in der Taskleiste angezeigt werden - aber der obige
Weg sollte Dir ja reichen.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
@Danilo
Du öffnest das Child Window in einem Thread. Um kurz auf den Punkt zu kommen:
Warum?
Im Anbetracht des Fakts, dass das Hauptfenster doch ohnehin keine
Events mehr empfängt, muss doch der Hauptthread auch nicht
weiterlaufen - Im Gegenteil, es wundert mich, dass das funktioniert, da
doch eigentlich durch die 2. laufende Eventschleife Events "verloren"
gehen müssen. Es läuft jedoch hier, evtl. kannst du da etwas Licht in meine Dunkelheit bringen?
Du öffnest das Child Window in einem Thread. Um kurz auf den Punkt zu kommen:
Warum?
Im Anbetracht des Fakts, dass das Hauptfenster doch ohnehin keine
Events mehr empfängt, muss doch der Hauptthread auch nicht
weiterlaufen - Im Gegenteil, es wundert mich, dass das funktioniert, da
doch eigentlich durch die 2. laufende Eventschleife Events "verloren"
gehen müssen. Es läuft jedoch hier, evtl. kannst du da etwas Licht in meine Dunkelheit bringen?
Lars
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
- NicTheQuick
- Ein Admin
- Beiträge: 8820
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken