Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Zusätzlicher leerer Taskbar-Eintrag unter Vista (https://www.delphipraxis.net/115818-zusaetzlicher-leerer-taskbar-eintrag-unter-vista.html)

MasterEvil 18. Jun 2008 14:57


Zusätzlicher leerer Taskbar-Eintrag unter Vista
 
Hallo,

ich habe ein Problem mit meinem Programm unter Windows Vista.
Und zwar wird ab und zu (konnte noch keine Regel finden) ein zusätzlicher leerer (nur das Icon des Programms ist drauf) Taskbar-Eintrag erstellt.

Das Programm ist mit Delphi 2007 erstellt und Application.MainFormOnTaskBar ist true.
Bevor allerdings das Hauptformular aufgerufen wird, wird ein SplashScreen angezeigt. Das Auftauchen des zusätzlichen Taskbar-Eintrages passiert (wenn es denn passiert) irgendwann wärend der SplashScreen angezeigt wird. Manchmal gleich beim Start, ab und zu später oder kurz bevor der SplashScreen wieder geschlossen wird.

Dem SplashScreen habe ich einen eigenen Taskbar-Eintrag spendiert, über:
Delphi-Quellcode:
procedure TFormSplash.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.ExStyle:=Params.ExStyle and not WS_EX_TOOLWINDOW or WS_EX_APPWINDOW;
end;
Zusätzlich wird über den SplashScreen zwischendurch noch ein Login-Fenster angezeigt. Dies hat keinen Taskbar-Eintrag, nur den SplashScreen als PopupParent.
Nach dem Laden wird der SplashScreen geschlossen und das MainForm created. Falls ein leerer Taskbar-Eintrag aufgetaucht ist, bleibt er auch weiterhin dort, bis das Programm gänzlich geschlossen wird.

Sehr irritierend finde ich es, dass der leere Taskbar-Eintrag irgendwann erscheint und nicht immer beim Start oder so. Ist dies vielleicht der Eintrag von der Application?

Jemand eine Idee? Ich verzweifel langsam :( (vorallem das sporadische Auftreten macht die Fehlersuche nicht einfacher)
Gruß,
Steffen

Sherlock 18. Jun 2008 14:59

Re: Zusätzlicher leerer Taskbar-Eintrag unter Vista
 
Das dürfte einfach nur ein weiteres Fenster Deiner Applikation sein...ein Splashscreen hat in der Regel keinen Titel, deswegen ist es leer. Vergib doch einfach mal zum Testen eine Caption für deinen Splashscreen...das dürfte dann da drin stehen.

Sherlock

MasterEvil 18. Jun 2008 15:04

Re: Zusätzlicher leerer Taskbar-Eintrag unter Vista
 
Der SplashScreen hat aber eine Caption, genauso der LoginScreen. Und Application.Title ist auch vergeben.

:(

Bebe 18. Jun 2008 15:41

Re: Zusätzlicher leerer Taskbar-Eintrag unter Vista
 
Hallo,

ich kenne das Problem nur von Delphi selbst, das man aber mit einem Update beheben kann.
Bei mir war es wie gesagt Delphi 2007 selbst und nicht das Projekt. Der Fehler entsteht nur unter Vista.

Gruß
Matze

RavenIV 18. Jun 2008 15:44

Re: Zusätzlicher leerer Taskbar-Eintrag unter Vista
 
Zitat:

Zitat von Bebe
Hallo,

ich kenne das Problem nur von Delphi selbst, das man aber mit einem Update beheben kann.
Bei mir war es wie gesagt Delphi 2007 selbst und nicht das Projekt. Der Fehler entsteht nur unter Vista.

Gruß
Matze

/offtopic
Diesen "Fehler" hab ich aber auch unter XP-SP2

sakura 18. Jun 2008 15:45

Re: Zusätzlicher leerer Taskbar-Eintrag unter Vista
 
Rufe
Delphi-Quellcode:
Application.MainFormOnTaskBar := true;
erst auf, wenn der SplashScreen ausgeblendet wird und bevor
Delphi-Quellcode:
Application.Run;
, dann sollte das Problem gelöst sein.

...:cat:...

MasterEvil 18. Jun 2008 17:02

Re: Zusätzlicher leerer Taskbar-Eintrag unter Vista
 
Mein Delphi 2007 ist auf dem aktuellen Stand.

@ sakura:
Ich hab deinen Vorschlag mal übernommen und zunächst sieht schonmal alles gut aus.
Vorallem behebt es auch das Problem mit zwei Taskbar-Einträgen in Windows98 (die waren immer da).
Ab morgen wird ein Stress-Test gemacht und dann hoffe ich mal, dass es nicht mehr auftritt.

Danke :)

MasterEvil 23. Jun 2008 08:05

Re: Zusätzlicher leerer Taskbar-Eintrag unter Vista
 
Hallo,

tja, leider hat es nicht geholfen.
Das Ganze bringt mich zwar schon näher an die Ursache, aber eigentlich verstärkt es nur meine Annahme, dass es ein Bug in der VCL ist:
Wenn der zweite Taskbar-Eintrag auftaucht, dann tut er das nun nicht mehr direkt beim Programmstart, sondern erst nach dem SplashScreen. Sprich: wenn ich MainFormOnTaskbar wieder auf true setze.

Gibt es denn das Application-Fenster noch? Ist der Taskbar-Eintrag davon?

Gruß,
Steffen

MasterEvil 24. Jun 2008 09:16

Re: Zusätzlicher leerer Taskbar-Eintrag unter Vista
 
Keiner eine Idee? :(

Hab mich mal etwas durch die VCL gekramt und das Umschalten von MainFormOnTaskBar geschieht in Forms.TApplicationHelper.SetMainFormOnTaskBar.
Dort passieren im wesentlichen zwei Dinge, wenn man MainFormOnTaskBar auf true setzt.
Zum Einen:
Delphi-Quellcode:
ChangeAppWindow(FHandle, False, False);
ChangeAppWindow(FMainForm.Handle, True, FMainForm.Visible);
Welches das Fenster von TApplication verschwinden lassen soll und es dafür aufs MainForm überträgt.
Und zum Anderen:
Delphi-Quellcode:
SetWindowText(FHandle, nil);
Welches verhindern soll, dass TApplication im TaskManager auftaucht.

Irgendwas geht wahrscheinlich bei ChangeAppWindow(FHandle, False, False) schief. Wieso der Taskbar-Eintrag dann allerdings leer ist und nicht Application.Title drin steht, ist mir wiederum ein Rätsel.
Die Frage ist natürlich noch, wieso scheinbar nur ich dieses Problem habe ... :(

Gruß,
Steffen

MasterEvil 7. Jul 2008 08:55

Re: Zusätzlicher leerer Taskbar-Eintrag unter Vista
 
Ich führe hier mal meinen Monolog weiter.

Ich habe mittlerweile eine einfache Test-Applikation mit einem SplashScreen erstellt, die ebenfalls dieses Problem aufweist und habe meine Erfahrungen und diese Applikation in einen QualityCentral-Eintrag verpackt. Dieser wurde auch ziemlich fix in die interne Datenbank aufgenommen, aber dann auch ziemlich schnell "closed" mit der Resolution "Test Case Error".

Leider weiß ich nicht genau, was dies bedeutet. Der Fehler ist nachvollziehbar, ansonsten wäre er ja auch nicht in die interne Datenbank gekommen. Also was ist damit gemeint? Und wieso hat scheinbar sonst niemand dieses Problem? Egal wie ich das Application.MainFormOnTaskBar einbaue, auf irgendeinem Betriebssystem ist es immer nicht in Ordnung ...

Gruß,
Steffen


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:19 Uhr.
Seite 1 von 2  1 2      

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