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 Form anzeigen, aber nicht aktivieren (https://www.delphipraxis.net/98659-form-anzeigen-aber-nicht-aktivieren.html)

karlkoch 30. Aug 2007 15:49


Form anzeigen, aber nicht aktivieren
 
Hallo,

ich möchte ein zweites Formular in meiner Anwendnung anzeigen, welches jedoch niemals aktiviert werden sollte. Ich möchte dabei ein ähnliches Verhalten wie die Delphi IDE mit der Codevervollständigung erreichen. Ein vollwertiges Fenster, immer im Vordergrund, jedoch ohne das es tatäschlich aktiviert wird (ähnlich einem Popup).

Dafür setze ich in CreateParams den ExStyle folgendermaßen:
Delphi-Quellcode:
Params.ExStyle := Params.ExStyle or WS_EX_TOPMOST or WS_EX_NOACTIVATE;
Das funktioniert allerdings nur bei Mouseclicks. Eine Anzeige mit Form.Visible := True; aktiviert das Fenster trotzdem. Das lässt sich mit einem manuellen Aufruf über die Windows-API umgehen, so z.B.:
Delphi-Quellcode:
ShowWindow(Form.Handle, SW_NOACTIVATE);
Das funktioniert, nur umgeht man da die VCL und es treten seltsame Phänomene auf, denn für die VCL ist die Form noch unsichtbar und alle Komponenten, die von TWinControl abgeleitet sind, werden nicht angezeigt.

Kennt jemand eine Lösung für dieses Problem? Ich möchte nur ungern den Fokus selber zurücksetzen müssen, denn das führt zu einem Flackern der Titelleiste des Fensters.

karlkoch

shmia 30. Aug 2007 15:56

Re: Form anzeigen, aber nicht aktivieren
 
Versuch's mal mit einem THintWindow.
Delphi-Quellcode:
var
   s : string;
   FHintRect : TRect;

   // Hint-Window, um dem Benutzer eine Info anzuzeigen
   FHintWin := THintWindow.Create(Self);

   s := 'He du da!'#13#10+'Du musst hier clicken!';
   FHintRect := FHintWin.CalcHintRect(200, s, nil);
   FHintWin.ActivateHint(FHintRect, s);
   FHintWin.Refresh;
   ....
   FHintWin.ReleaseHandle;  // Hint Fenster ausblenden


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:00 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