Seite 1 von 1

Fenster in Vordergrund geholt, verschwindet Requester

Verfasst: 22.06.2006 20:02
von JoJo
Hallo,

Mein Programm besteht aus mehreren Fenstern. Nur das Hauptfenster wird in der Window Taskbar angezeigt. Klicke ich auf diesen Eintrag in der Taskbar, wird das immer zuletzt wirklich aktive Fenster (z.B. ein Einstellungsdialog) in den Vordergrund gebracht.

Hier der Code dazu

Code: Alles auswählen

SetForegroundWindow_(WindowID(ActiveWindow))
ShowWindow_(WindowID(ActiveWindow),#SW_SHOWMAXIMIZED)
UseWindow(ActiveWindow)
ActiveWindow enthält immer den Handler des zuletzt wirklich aktiven Fensters.

Das Problem entsteht, wenn ich in einem Fenster (z.B. dem Einstellungsdialog) einen Requester, wie z.B. den InputRequester aufgerufen habe, auf ein anderen Programm schalte und dann wieder mein Programm durch Klicken auf den Eintrag in der Taskbar aktiviere. Es erscheint das Hauptfenster, dann das wirklich aktive Fenster, aber der Requester bleibt verborgen und ich kann das ganze Programm nur mehr mit dem Windows Task Manager abschiessen.

Ich hoffe, Ihr könnt mir weiterhelfen.

mfg.

Johannes

Verfasst: 22.06.2006 20:18
von roherter

Code: Alles auswählen

SetForegroundWindow_(WindowID(ActiveWindow)) 
Ich denke das du es damit selbst vor den requester packst.

Fenster in Vordergrund geholt, verschwindet Requester

Verfasst: 22.06.2006 20:26
von JoJo
Hallo,

Das kann natürlich sein, aber ich muss das zuletzt aktive Fenster irgendwie wieder in den Vordergrund schicken, wenn es der User so will.

mfg.

Johannes

Verfasst: 22.06.2006 22:49
von PBZecke
Du solltest grundsätzlich Fenster wie Einstelldialoge modal machen. Damit
meine ich immer das Parentwindow mit DisableWindow() deaktivieren.
Auf diese Weise sollten dann solche Probleme gar nicht erst auftauchen.

Re: Fenster in Vordergrund geholt, verschwindet Requester

Verfasst: 22.06.2006 23:02
von Kiffi
@JoJo:

Wenn Du beispielsweise ein Hauptfenster hast und darin einen
Einstellungsdialog aufrufen möchtest, dann kannst Du Dir mal den
Parameter 'ParentID' bei OpenWindow() anschauen. Beispielsweise mit
folgendem Code ist es nicht nötig, den Einstellungsdialog mit
SetForegroundWindow_() in den Vordergrund zu holen, weil er durch die
Angabe von ParentID immer vor dem Hauptfenster liegt:

Code: Alles auswählen

Enumeration
  #Hauptfenster
  #Options
EndEnumeration

OpenWindow(#Hauptfenster,#PB_Ignore,#PB_Ignore,500,500,"Hauptfenster",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)

OpenWindow(#Options,#PB_Ignore,#PB_Ignore,200,200,"Options",#PB_Window_ScreenCentered|#PB_Window_SystemMenu,WindowID(#Hauptfenster) 

Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow
Grüße ... Kiffi