Die Frage ist aber auch, wird "nur" mit WS_EX_APPWINDOW der Taskbutton auch dann angezeigt, wenn die Form unsichtbar (Visible=False) ist?
PS:
GetWindowLong
Ptr 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;