![]() |
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. ![]() Ich würde einfach mal schauen, was der Unterschied ist, siehe Application.Handle gegen Application.MainFormHandle (bzw. DeineMainForm.Handle). |
AW: Hauptformular ausblende beim wechsel auf ein anderes Form ?
Habe mir vor ein paar Jahren dafür zwei kleine Prozeduren gebastelt:
Delphi-Quellcode:
Zur Sicherheit kann man vielleicht noch prüfen, ob die Form assigned ist, bevor man damit hantiert.
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; 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. |
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; |
AW: Hauptformular ausblende beim wechsel auf ein anderes Form ?
Zitat:
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. |
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