Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Hauptformular ausblende beim wechsel auf ein anderes Form ? (https://www.delphipraxis.net/1411-hauptformular-ausblende-beim-wechsel-auf-ein-anderes-form.html)

himitsu 24. Jul 2020 11:23

AW: Hauptformular ausblende beim wechsel auf ein anderes Form ?
 
Ist bestimmt ein Window-Style/ExStyle.

Früher war in der Taskleiste ja nicht die MainForm, sonder die unsichtbare ControllForm und bei der war/ist ja dennoch der Button sichtbar.

Delphi-Referenz durchsuchenApplication.MainFormOnTaskbar

Ich würde einfach mal schauen, was der Unterschied ist, siehe Application.Handle gegen Application.MainFormHandle (bzw. DeineMainForm.Handle).

Jasocul 24. Jul 2020 11:48

AW: Hauptformular ausblende beim wechsel auf ein anderes Form ?
 
Habe mir vor ein paar Jahren dafür zwei kleine Prozeduren gebastelt:
Delphi-Quellcode:
procedure ShowFormOnTaskbar(Form : TForm);
var
  WindowStyle : LONG_PTR;
begin
  WindowStyle := GetWindowLongPtr(Form.Handle, GWL_EXSTYLE);
  if (WindowStyle and WS_EX_APPWINDOW) <> WS_EX_APPWINDOW then
  begin
    SetWindowLongPtr(Form.Handle, GWL_EXSTYLE, WindowStyle or WS_EX_APPWINDOW);
  end;
end;

procedure HideFormFromTaskbar(Form : TForm);
var
  WindowStyle : LONG_PTR;
begin
  WindowStyle := GetWindowLongPtr(Form.Handle, GWL_EXSTYLE);
  if (WindowStyle and WS_EX_APPWINDOW) = WS_EX_APPWINDOW then
  begin
    SetWindowLongPtr(Form.Handle, GWL_EXSTYLE, WindowStyle xor WS_EX_APPWINDOW);
  end;
end;
Zur Sicherheit kann man vielleicht noch prüfen, ob die Form assigned ist, bevor man damit hantiert.
Aber eine kleine Warnung noch:
Wenn die Anwendung dann im aktuellen Fenster ungünstig abschmiert, kommt man evtl. nicht mehr ins vorherige Fenster zurück, da es ja nicht mehr sichtbar ist.

himitsu 24. Jul 2020 13:58

AW: Hauptformular ausblende beim wechsel auf ein anderes Form ?
 
Die Frage ist aber auch, wird "nur" mit WS_EX_APPWINDOW der Taskbutton auch dann angezeigt, wenn die Form unsichtbar (Visible=False) ist?

PS:
GetWindowLongPtr ist eigentlich hier falsch, denn die Windows-Styles sind immer Integer, deswege nur GetWindowLong,
denn LongPtr ist bei 64 Bit-Programmen ein LargeInteger/Int64.

Und da WS_EX_APPWINDOW nur 1 Bit ist, brauchst es nicht geziehlt/doppelt zu vergleichen.

Delphi-Quellcode:
procedure ShowFormOnTaskbar(Form : TForm);
var
  WindowStyle : LONG_PTR;
begin
  WindowStyle := GetWindowLong(Form.Handle, GWL_EXSTYLE);
  if WindowStyle and WS_EX_APPWINDOW = 0 then
    SetWindowLong(Form.Handle, GWL_EXSTYLE, WindowStyle or WS_EX_APPWINDOW);
end;

procedure HideFormFromTaskbar(Form : TForm);
var
  WindowStyle : LONG_PTR;
begin
  WindowStyle := GetWindowLongPtr(Form.Handle, GWL_EXSTYLE);
  if WindowStyle and WS_EX_APPWINDOW <> 0 then
    SetWindowLongPtr(Form.Handle, GWL_EXSTYLE, WindowStyle xor WS_EX_APPWINDOW);
end;
Delphi-Quellcode:
// auf Neudelphianisch
procedure ShowFormOnTaskbar(Form : TForm);
begin
  var WindowStyle := GetWindowLong(Form.Handle, GWL_EXSTYLE);
  if WindowStyle and WS_EX_APPWINDOW = 0 then
    SetWindowLong(Form.Handle, GWL_EXSTYLE, WindowStyle or WS_EX_APPWINDOW);
end;

// oder einfach immer zuweisen, egal ob es sich geändert hat
procedure ShowFormOnTaskbar(Form : TForm);
begin
  SetWindowLongPtr(Form.Handle, GWL_EXSTYLE,
    GetWindowLongPtr(Form.Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);
end;

Jasocul 27. Jul 2020 07:03

AW: Hauptformular ausblende beim wechsel auf ein anderes Form ?
 
Zitat:

Zitat von himitsu (Beitrag 1470298)
GetWindowLongPtr ist eigentlich hier falsch, denn die Windows-Styles sind immer Integer, deswege nur GetWindowLong,
denn LongPtr ist bei 64 Bit-Programmen ein LargeInteger/Int64.

Und da WS_EX_APPWINDOW nur 1 Bit ist, brauchst es nicht geziehlt/doppelt zu vergleichen.

Danke für die Infos. War mir nicht bewusst, dass GetWindowLong reicht.
Den geziehlten Vergleich habe ich mir irgendwann mal so angewöhnt. Ich finde das so besser lesbar. Ist natürlich Geschmackssache.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:40 Uhr.
Seite 2 von 2     12   

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