Hallo,
ich benutze CreateParams um ein zweites Fenster meiner Anwendung in der Taskbar sichtbar zu machen:
Delphi-Quellcode:
type
TForm2 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
protected
procedure CreateParams(var Params: TCreateParams); override;
end;
...
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
Params.WndParent := 0;
end;
Das funktioniert auch soweit.
Nun gibt es aber einen merkwürdigen Nebeneffekt. Das Nebenfenster öffne ich aus dem Hauptfenster per Click auf ein Label, welches auch einen Hint enthält:
Delphi-Quellcode:
procedure TForm1.Label1Click(Sender: TObject);
begin
Form2.Visible:=true;
Form2.BringToFront;
end;
Click auf das Label bringt auch die Form2 wie gewünscht in den Vordergrund. Wenn man aber die Maus nicht schnell genug von dem Label entfernt, dann springt Form1 sobald der Hint angezeigt wird wieder in den Vordergrund, der Fokus bleibt aber auf Form2. Das sieht man nur, wenn die Forms überlappen. Achtung, das passiert aber erst beim zweiten Versuch, wenn man Form2 nach dem ersten Öffnen nicht wieder schließt. Ohne den CreateParams-Code passiert das überhaupt nicht. Kann man das irgendwie abstellen?
Democode ist angehängt.