Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Icon nicht in TaskBar anzeigen (https://www.delphipraxis.net/193372-icon-nicht-taskbar-anzeigen.html)

EWeiss 21. Jul 2017 22:12


Icon nicht in TaskBar anzeigen
 
Hab da ein Problem das ich mir nicht erklären kann.
Ich erstelle eine Form

Delphi-Quellcode:
  FParentHandle := WinHandle;

  LoadFromIniFile(AIniFile);
  Application.CreateForm(TForm, FPreview);

  FPreview.BorderStyle := bsNone;
  FPreview.SetBounds(Left, Top, Width, Height);
  FPreview.Color := clBlack;

  FPreview.AlphaBlend := True;
  FPreview.AlphaBlendValue := 255;
  FPreviewHandle := SetParent(WinHandle, FPreview.Handle);
 
  MoveWindow(WinHandle, 0, 0, Width, Height, False);
  SkinEngine.ShowMainWindow(WinHandle, 5);

  FPreview.Show;
Wenn ich diese nun mit
FPreview.Free freigebe dann wird das Icon kurz in der TaskBar angezeigt.
Das nervt extrem.. zudem verursacht das ein neu zeichnen der Anwendung.

Habe da schon alle mir bekannten Möglichkeiten versucht.

Delphi-Quellcode:
Application.MainFormOnTaskBar := False;


und diverse andere API Funktionen inklusive das verändern der Style.

Also was gibt es da noch um das zu verhindern?
Das Fenster wird in einer DLL erstellt.

Delphi-Quellcode:
  ShowWindow(FPreview.Handle, SW_HIDE);
  SetWindowLong(FPreview.Handle, GWL_EXSTYLE,
    GetWindowLong(FPreview.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
Hat keinen Effekt..
Verstehe nicht warum beim beenden der Form das Icon kurz aufblitzt.

gruss

jaenicke 22. Jul 2017 06:39

AW: Icon nicht in TaskBar anzeigen
 
Zitat:

Zitat von EWeiss (Beitrag 1377220)
Habe da schon alle mir bekannten Möglichkeiten versucht.

Delphi-Quellcode:
Application.MainFormOnTaskBar := False;

Ich hoffe du weißt auch was das macht. Das bewirkt, dass nicht das Formular selbst in der Taskleiste angezeigt wird, sondern das versteckte Anwendungsfenster von Delphi. Das wiederum bewirkt, dass Delphi das Icon in der Taskleiste automatisch ein- und ausblendet, wenn Formulare angezeigt werden oder versteckt werden.

Das sollte aber in der Anwendung reichen. In der DLL sollte das nicht nötig sein. In der DLL kannst du das Fenster auch denke ich ganz normal erstellen ohne Application.

Ich denke, dass es reicht, wenn du das Formular selbst auf der Taskleiste anzeigen lässt und in den überschriebenen CreateParams WS_EX_APPWINDOW heraus nimmst.

Mehr zu dem Thema findest du unter:
https://blogs.msdn.microsoft.com/old...9-00/?p=41283/

EWeiss 22. Jul 2017 08:03

AW: Icon nicht in TaskBar anzeigen
 
Zitat:

Ich denke, dass es reicht, wenn du das Formular selbst auf der Taskleiste anzeigen lässt und in den überschriebenen CreateParams WS_EX_APPWINDOW heraus nimmst.
Ich möchte keine 2 Icons in der TaskBar haben 1x von der Form und 1x vom der Non-Vcl Anwendung von der das Fenster Animiert wird.

Eigentlich müsste es ausreichen den ExStyle " WS_EX_TOOLWINDOW " zu setzen tut es aber nicht.
auch das hat keine Auswirkung " or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW "

ok.. werde die Form rauswerfen und mit Win32Api Mitteln weitermachen.
Subclassing und bla, bla, bla ;)

Danke

gruss

jaenicke 22. Jul 2017 17:11

AW: Icon nicht in TaskBar anzeigen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Im Anhang findest du eine DLL und eine Hostanwendung, die nur einen Button zur Anzeige eines DLL-Formulars enthält. (Ja, das wird nicht von mir wieder freigegeben, ist ja nur ein Beispiel.)

Beide Formulare enthalten ein überschriebenes CreateParams wie ich es ja erwähnt hatte. Aktuell wird gar nichts in der Taskleiste angezeigt. Wenn du die beiden Zeilen nach inherited auskommentierst, wird das entsprechende Formular wieder angezeigt, sowohl in DLL als auch im Host.

Deinen Fall bekommst du also indem du in Unit14 das CreateParams auskommentierst:
Die Hostanwendung zeigt den Taskleisteneintrag an, das Fenster der DLL nicht.

EWeiss 22. Jul 2017 17:41

AW: Icon nicht in TaskBar anzeigen
 
Zitat:

Zitat von jaenicke (Beitrag 1377249)
Im Anhang findest du eine DLL und eine Hostanwendung, die nur einen Button zur Anzeige eines DLL-Formulars enthält. (Ja, das wird nicht von mir wieder freigegeben, ist ja nur ein Beispiel.)

Beide Formulare enthalten ein überschriebenes CreateParams wie ich es ja erwähnt hatte. Aktuell wird gar nichts in der Taskleiste angezeigt. Wenn du die beiden Zeilen nach inherited auskommentierst, wird das entsprechende Formular wieder angezeigt, sowohl in DLL als auch im Host.

Deinen Fall bekommst du also indem du in Unit14 das CreateParams auskommentierst:
Die Hostanwendung zeigt den Taskleisteneintrag an, das Fenster der DLL nicht.

Danke für deine Mühe und dem Beispiel.
Ich muss aber sagen das sich dieses Thema erledigt hat da ich keine VCL-Form mehr verwende somit gibt es kein SetParent und auch kein Icon mehr das ich sehen könnte.

Aber werde mir dein Beispiel trotzdem einmal anschauen.

gruss


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