Giuliano Colla schrieb:

      Whenever you need a form to "stay on top" you never know if it'll
      work or not. For Gtk2, it did work on Lazarus 1.0.8, but it
      stopped working since Lazarus 1.1. This means that a user may lose
      an alarm which pops up, because he inadvertently touched the
      larger form.

I just got some information about this issue, when I encounterd z-order problems with a Delphi XE application. Here's what Peter Below wrote, most LCL developers will be able to read this:

>>
In D7 war das Application-Window (nicht sichtbar) der API-Parent für
alle Forms, d. h. sie waren alle "Geschwister" in der
Fenster-Hierarchie. Das Taskbar-Button der Anwendung gehörte dem
Application-Window.
Der API-Parent bestimmt die Z-Ordnung der Fenster und Windows sorgt
dafür, dass ein Fenster immer über seinem API-Parent in der Z-Ordnung
liegt.

Seit D2009 ist das Mainform standardmäßig der API-Parent für alle
anderen Forms und der Taskbar-Button gehört zum Mainform. Das war
notwendig, um Anzeigeprobleme auf dem Vista Aero-Desktop zu vermeiden.
Damit liegen aber auch alle anderen Fenster in der Z-Ordnung über dem
Mainform.
Application.MainformOntaskbar := false geht zum Verhalten von D7
zurück, mit den damit verbundenen Problemen auf dem Aero-Desktop
(betrifft wohl diese Mini-Fensteransicht, die man kriegt, wenn die Maus
über einem Taskbar-Button schwebt).

Es gibt eine Alternative: wenn man ein spezielles Form aus dieser
Z-Ordung lösen will kann man seine CreateParams-Methode überschreiben.

  inherited;
  params.WndParent := 0;

Damit bekommt man ein Fenster ohne API-Parent, das also in der
Z-Ordnung von den anderen Fenstern der Anwendung losgelöst ist. Wenn
man statt 0 Application.Handle verwendet sollte das Fenster auf der
gleichen Ebene der Fensterhierarchie landen wie das Mainform. In beiden
Fällen kann es sinnvoll sein, dem Fenster einen eigenen Taskbar-Button
zu verschaffen. Dazu kommt folgende Zeile in die überschriebene
CreateParams-Methode:

  params.ExStyle := params.ExStyle  or WS_EX_APPWINDOW;


-- Peter Below
<<


--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to