Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Hint bringt Hauptform in den Vordergrund?! (https://www.delphipraxis.net/114471-hint-bringt-hauptform-den-vordergrund.html)

hitzi 26. Mai 2008 08:49


Hint bringt Hauptform in den Vordergrund?!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

gegeben sind zwei Forms (Hauptform und eine Extraform). Die Extraform wird über einen Button der Hauptform aufgerufen und angezeigt. Die Besonderheit dabei ist, dass die zweite Form in der Taskbar angezeigt wird. Das bewerkstelligt folgender Code:

Delphi-Quellcode:
procedure TfrmExtra.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
  Params.WndParent := GetDesktopWindow;
end;
Das funktioniert auch alles wunderbar, wenn es da nicht ein Problem mit den Hints der Controls geben würde. Ab dem zweiten Anzeigen eines Hints eines Controls der Extraform, wird bei jedem Aufpoppen des Hints die Mainform in den Vordergrund (vor die Extraform) geholt. Warum geschieht das und wie kann man das verhindern?

Im Anhang ein vollständiges Testprojekt, mit dem dieses Verhalten reproduziert werden kann.

angos 26. Mai 2008 10:27

Re: Hint bringt Hauptform in den Vordergrund?!
 
hmm,

ich mutmaße mal.

wenn man
Delphi-Quellcode:
Params.WndParent := GetDesktopWindow;
entfernt, bleibt die form im Vordergrund.

Meine Idee: Der Desktop weiss nach dieser zuweisung nicht mehr so recht, welches Fenster zu welchem gehört und kommt da durcheinander :stupid:

Die Frage ist auch, brauchst du die Zordnung überhaupt? In der Taskleiste angezeigt, wird das doch eigentlich nur durch
Delphi-Quellcode:
  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;

hitzi 26. Mai 2008 10:33

Re: Hint bringt Hauptform in den Vordergrund?!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ohne diese Zuweisung kann man das Hauptfenster nicht mehr vor das Extrafenster und wenn man das Hauptform minimiert wird automatisch auch die Extraform mit minimiert und das Taskbaricon der ExtraForm entfernt. Aber du hast Recht, ohne die Zuweisung funktioniert die Hintgeschichte so wie sie soll. Ich hätte aber trotzdem gern das Fensterverhalten, wie ich es bekomme, wenn ich den Parent ändere.

[EDIT] Auch die Nutzung von Application.MainFormOnTaskBar unter Delphi 2007 bringt nichts, da auch hier das Parent auf null gesetzt werden muss um das entsprechende Fensterverhalten zu bekommen.

[EDIT 2] Ich hab eine Lösung gefunden. Man muss einfach eine eigene Hintklasse nutzen, in welcher man mit CreateParams den Parent auf null setzt. Diese Hintklasse stellt mann dann noch Application vor und schon läuft alles :)

Hier ist der wichtige Teil des Quellcodes - im Anhang befindet sich nochmal das komplette Projekt:

Delphi-Quellcode:
program Project1;

uses
  Forms,
  Controls,
  Unit1 in 'Unit1.pas' {frmMain},
  Unit2 in 'Unit2.pas' {frmExtra};

{$R *.res}

type
  TFixedHintWindow = class(THintWindow)
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;

procedure TFixedHintWindow.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.WndParent := 0;
end;

begin
  Application.Initialize;
  HintWindowClass := TFixedHintWindow;
  Application.CreateForm(TfrmMain, frmMain);
  Application.Run;
end.

Timbo 18. Feb 2015 18:32

AW: Hint bringt Hauptform in den Vordergrund?!
 
Super vielen Dank!!! Schleife das Problem schon lange mit mir rum...


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz