[Lazarus] nonlcl basic issue: is codetools LCL dependent?
Hans-Peter Diettrich
DrDiettrich1 at aol.com
Sat Jun 28 09:16:51 CEST 2014
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
<<
More information about the Lazarus
mailing list