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 FormStyle "resetet" ShellTreeView (https://www.delphipraxis.net/143502-formstyle-resetet-shelltreeview.html)

e-gon 17. Nov 2009 09:44


FormStyle "resetet" ShellTreeView
 
Hallo,

um mehrere Dateien in einem Verzeichnis umzubenennen schrieb ich ein kleines Programm, wobei unter anderem ein ShellTreeView verwendet wird. Es funktioniert auch alles ganz prima. Allerdings stellte sich bei der Arbeit mit dem Programm heraus, dass es manchmal ganz brauchbar wäre das Fenster vor allen anderen Fenstern anzuzeigen (StayOnTop), in anderen Situationen hingegen nicht. Dafür bietet sich natürlich eine Checkbox auf der Form an, die mit der Eigenschaft FormStyle gekoppelt wird.

Delphi-Quellcode:
if CheckBox1.Checked then Form1.FormStyle:= fsStayOnTop
else Form1.FormStyle:= fsNormal;
Dabei stieß ich jedoch auf ein Problem: Immer wenn zur Laufzeit FormStyle geändert wird, kollabieren sämtliche Knoten des ShellTreeView und der Desktop wird angezeigt, was natürlich mitten in der Arbeit sehr nervig ist.
In der Delphi-Hilfe (Delphi 6.0) steht ein Hinweis, dass der Wert von FormStyle nicht zur Laufzeit geändert werden sollte. Hat das damit zu tun? Kennt jemand einen Trick diesen Reset von ShellTreeView zu verhindern? (ShellTreeView1.Path würde zwar den aktuellen Pfad wieder herstellen, nicht aber die anderen bereits geöffneten Knoten!) Oder wie kann man ein zur Laufzeit ein- und ausschaltbares "StayOnTop" sonst noch verwirklichen?

Gruß
e-gon

GPRSNerd 17. Nov 2009 09:49

Re: FormStyle "resetet" ShellTreeView
 
Hi, ich benutze dafür folgenden Code:

Delphi-Quellcode:
procedure TForm_Main.spbStayOnTopClick(StayOnTop: Boolean);
begin
  if StayOnTop then
  begin
    SetWindowPos(Handle,
                 HWND_TOPMOST,
                 Left, Top, Width, Height,
                 SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
  end
  else
  begin
    SetWindowPos(Handle,
                 HWND_NOTOPMOST,
                 Left, Top, Width, Height,
                 SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
  end;
end;
Gruß,
Stefan

e-gon 17. Nov 2009 09:55

Re: FormStyle "resetet" ShellTreeView
 
Hallo GPRSNerd,

vielen Dank für die schnelle Antwort. Der Code funktioniert super! Genau das was ich gesucht habe! DANKE!!!

Gruß
e-gon


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