Announcement

Collapse
No announcement yet.

Modale Dialoge aus Fenster öffnen mit ExStyle WS_EX_APPWINDOW

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Modale Dialoge aus Fenster öffnen mit ExStyle WS_EX_APPWINDOW

    Hallo,

    bestimmte Fenster werden durch den ExStyle WS_EX_APPWINDOW zusätzlich zum Hauptformular in der Taskleiste angezeigt.

    Aus diesen Fenstern wird dann ein Modaler Dialog aufgerufen. Wenn jetzt aber zwei von diesen Fenster erzeugt wurden und eines davon einen modalen Dialog anzeigt, wird auf dem Desktop alles korrekt gesperrt, also der Fokus kann mit der Maus nicht auf andere Forms gesetzt werden. Wenn jetzt aber das andere Fenster in der Taskbar angeklickt wird, erhält es den Fokus und es besteht keine Möglichkeit mehr zu dem Fenster zu wechseln welches den Modalen Dialog anzeigt und diesen zu schliessen. Das führt dazu, das die Task über den Task Manager gekillt werden muss.

    Kann mir hierzu jemand einen Tipp geben.

    Notfalls würde ich die Modalen Dialoge auch mit dem Window Style WS_EX_APPWINDOW anzeigen.

    Danke für Tipps.

  • #2
    Hallo Stefan,

    da habe ich jetzt auch gerade ein paar Stunden dran gesessen, und bin nun zu folgender Lösung gelangt:

    Das modale Fenster wir nicht per Application.CreateForm(...), sondern per
    FModalesFenster := TModalesFenster.Create(Self);
    aus dem Fenster heraus instanziert, das mit WS_EX_APPWINDOW zu einem Applikations-Fenster mit TaskBar-Icon gemacht wurde.

    Die Klasse TModalesFenster überschreibt CreateParams folgendermaßen:

    procedure TModalesFenster.CreateParams(var Params: TCreateParams);
    begin
    inherited;
    Params.WndParent := TForm(Owner).Handle;
    end;

    Damit wird dem modalen Fenster als Vater-Fenster das Handle des aufrufenden Fensters übergeben und das Programm verhält sich nun so, wie es erwünscht ist.

    Ich vermute, daß, wenn man WndParent nicht umleitet, immer noch die Applikation oder das Main-Fenster als Bezugsfenster hinterlegt ist. Clickt man dann auf das Icon in der Task-Leiste "weiß" das dazugehörige Applikations-Fenster nicht, daß ein modales Fenster geöffnet ist, das zu ihm gehört und bringt sich selbst in den Vordergrund, anstatt das Kommando an das modale Fenster weiterzureichen

    Comment

    Working...
    X