AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Hauptformular ausblende beim wechsel auf ein anderes Form ?
Thema durchsuchen
Ansicht
Themen-Optionen

Hauptformular ausblende beim wechsel auf ein anderes Form ?

Ein Thema von Megabyte · begonnen am 23. Nov 2002 · letzter Beitrag vom 27. Jul 2020
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.168 Beiträge
 
Delphi 12 Athens
 
#11

AW: Hauptformular ausblende beim wechsel auf ein anderes Form ?

  Alt 24. Jul 2020, 11:23
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).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.338 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Hauptformular ausblende beim wechsel auf ein anderes Form ?

  Alt 24. Jul 2020, 11:48
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.
Peter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.168 Beiträge
 
Delphi 12 Athens
 
#13

AW: Hauptformular ausblende beim wechsel auf ein anderes Form ?

  Alt 24. Jul 2020, 13:58
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.338 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Hauptformular ausblende beim wechsel auf ein anderes Form ?

  Alt 27. Jul 2020, 07:03
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.
Peter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:59 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