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 TOpenDialog mit StayOnTop (https://www.delphipraxis.net/95273-topendialog-mit-stayontop.html)

luckystar85 4. Jul 2007 13:31


TOpenDialog mit StayOnTop
 
Moin,

ich habe ein Programm welches ich mit folgendem Code immer als höchtes Fenster gesetzt habe.
Delphi-Quellcode:
Procedure TMainWinForm.SetDesktopParent;
Begin
  If ( fDesktopParent ) Then
    SetWindowPos(Handle, HWND_TOPMOST, Left, Top, Width, Height, SWP_NOACTIVATE Or SWP_NOMOVE Or SWP_NOSIZE)
  Else
    SetWindowPos(Handle, HWND_NOTOPMOST, Left, Top, Width, Height, SWP_NOACTIVATE Or SWP_NOMOVE Or SWP_NOSIZE);
End;
Diesen Code habe ich auch in alle anderen Fenster so eingefügt, das alle von mir geöffneten Fenster auch immer OnTop sind. Das funzt soweit auch ganz gut. Nur muss der User am Anfang eine Datei laden, damit er mit dem Prog arbeiten kann. Das Problem ist nur, das der OpenDialog dahinter auftaucht. Nun habe ich mir meinen eigenen OpenDialog geschrieben, abgeleitet von TOpenDialog. Dort habe ich das Execute überschrieben und dann ebenfalls diesen Code eingefügt. Da der OpenDialog aber kein Left, Top, Width und Height hat, habe ich die Werte erstmal mit starren Zahlen vorbelegt. Aber der OpenDialog kommt trotzdem nicht nach vorne. Habt ihr vielleicht eine Idee, wie man es schafft das er immer OnTop ist?

_frank_ 8. Jul 2007 17:28

Re: TOpenDialog mit StayOnTop
 
du musst auf das parent-Handle zugreifen.
weiterhin brauchst du left,width, height und top nicht zu definieren wenn du SWP_NoMove bzw. SWP_NoSize verwendest...

beispiel:

Delphi-Quellcode:
SetWindowPos(GetParent(self.Handle), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE);
hab das allerdings im überschriebenen DoShow, ob das auch im exceute funktioniert, lass ich dich mal testen :), ist aber imho zu zeitig...

HTH Frank

luckystar85 8. Jul 2007 17:41

Re: TOpenDialog mit StayOnTop
 
Vielen Dank für deinen Hinweis. Im DoShow funktioniert das wunderbar.


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