Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   FreePascal (https://www.delphipraxis.net/74-freepascal/)
-   -   FreePascal Anwendung nicht in Taskleiste anzeigen (https://www.delphipraxis.net/183736-anwendung-nicht-taskleiste-anzeigen.html)

Jean312 1. Feb 2015 07:34

Anwendung nicht in Taskleiste anzeigen
 
Ein Hallo an die Programmierergilde,

ich benötige einen Rat von den erfahrenen Programmierern.
Meine Anwendung soll nicht in der Taskleiste, sondern nur im SysTray sichtbar sein.

Das klappt auch beim Start der Anwendung (mittels: ShowWindowAsync(hwndOwner, SW_HIDE). In der Anwenung werden aber noch weitere Forms geöffnet. Sobald das passiert, ist meine Anwendung wieder in der Taskleiste sichtbar, obwohl ich das Handle ShowWindowAsync im FormShow-Ereignis aller Forms eingebunden habe.

Hat jemand eine Idee und begehe ich hier einen "Denkfehler"? :?

Ich danke schonmal im Voraus.

EWeiss 1. Feb 2015 10:12

AW: Anwendung nicht in Taskleiste anzeigen
 
den erweiterten Fensterstil WS_EX_APPWINDOW entfernen dann sollte das gehen.

ShowWindowAsync bringt nichts und muss auch nicht bei allen Fenstern angewendet werden.

gruss

Jean312 2. Feb 2015 15:33

AW: Anwendung nicht in Taskleiste anzeigen
 
Danke für die Antwort. Ich schaue mal, ob es damit funktioniert.

himitsu 2. Feb 2015 15:38

AW: Anwendung nicht in Taskleiste anzeigen
 
Das muß/wird funktionieren, denn genau dafür ist diese Option nunmal da.

https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx

Jean312 2. Feb 2015 21:39

AW: Anwendung nicht in Taskleiste anzeigen
 
Habe mal im Netz herumgesucht, aber bisher ziemlich erfolglos. Wie kann ich denn diesen Parameter setzen, oder besser in diesem Fall deaktivieren?

Ich habe den Parameter "WS_EX_APPWINDOW" in der customform.inc (TCustomForm CreateParams) gefunden.

Auszug aus dem Quellcode
Code:
if (WndParent = 0) and
           (((Self = Application.MainForm) and Application.MainFormOnTaskBar) or (GetEffectiveShowInTaskBar = stAlways)) then
          ExStyle := ExStyle or WS_EX_APPWINDOW;

EWeiss 2. Feb 2015 21:43

AW: Anwendung nicht in Taskleiste anzeigen
 
Boahh ehh...

Hole dir die aktuellen Style über GetWindowLong
und setze dann die neuen mit SetWindowLong

Delphi-Quellcode:
procedure ShowInTaskbar(handle: HWND; Show: Bool)
var
  WStyle: integer;

begin
  WStyle := GetWindowLong(handle, GWL_EXSTYLE)

  // Nicht in TaskLeiste anzeigen
  if not Show then
    WStyle := WStyle and not WS_EX_APPWINDOW
  else
  // Rückgängig machen
  WStyle := WStyle and WS_EX_APPWINDOW;

  SetWindowLong(handle, GWL_EXSTYLE, WStyle);
end;
gruss

himitsu 2. Feb 2015 22:12

AW: Anwendung nicht in Taskleiste anzeigen
 
Zitat:

Zitat von Jean312 (Beitrag 1288665)
Auszug aus dem Quellcode
Code:
if (WndParent = 0) and
           (((Self = Application.MainForm) and Application.MainFormOnTaskBar) or (GetEffectiveShowInTaskBar = stAlways)) then
          ExStyle := ExStyle or WS_EX_APPWINDOW;

Auch mal auf die Idee gekommen und nach WS_EX_APPWINDOW in der DP zu suchen, oder nach "Delphi WS_EX_APPWINDOW" in einer beliebigen Suchmaschine?


TIPP: Rate mal, warum man CreateParams überschreiben kann (virtual).


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