Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ButtonText in Taskbar aktualisieren... (https://www.delphipraxis.net/103472-buttontext-taskbar-aktualisieren.html)

himitsu 16. Nov 2007 09:40


ButtonText in Taskbar aktualisieren...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also ich glaub zwar nicht, daß es da etwas gibt, aber fragen schadetja bekanntlich nicht :angel2:

Und zwar, gibt es eine Möglichkeit (z.B. irgend'nen Befehl per SendMessage an Windows senden) den akgezeigten Text im Button aktualisieren zu lassen?

Wie ich den Text änder weiß ich (SetWindowText, da nonVCL),
allerdings braucht Windows manchmal etwas länger (vorallem wenn die CPU ein bißchen ausgelastet ist) bis dieses auf dem Monitor erscheint.

Der Text wird ja von Windows (Explorer) gezeichnet und da kann ich in meinem Programm nicht viel machen -.-''
OK, man könnte sich jetzt das Handle der Taskbar besorgen und dieser sagen sie soll sich neu zeichen, aber gleich komplett wär ja übertrieben (ich brauch na nur meinen Buttontext).
Und die Priorität des Explorers zu erhöhen ist auch keine "gute" Lösung.


Wie gesagt, wenn es "keine" Lösung gibt, dann egal, aber es wär schon toll, wenn der Text (was manchmal passiert) schon nach weniger als 10 Sekunden zu lesen wäre.

Luckie 16. Nov 2007 09:57

Re: ButtonText in Taskbar aktualisieren...
 
Das Problem habe ich auch mit meinem Filespitter. Ich lasse den Fortschritt in Prozent auch in der Titelzeile des Fensters anzeigen und habe auch gerade festgestellt, dass die Aktualisierung der Schaltfläche in der Taskbar etwas zu wünschen übrig lässt. Ich bin aber noch nicht dazu gekommen, mich damit zu befassen. Was mir so spontan einfallen würde, was passiert denn, wenn du nach dem Setzen des Fenstertextes InvalidateRect aufrufst?

SirThornberry 16. Nov 2007 10:05

Re: ButtonText in Taskbar aktualisieren...
 
funktioniert es wenn man per vcl Application.Title setzt? Wenn es da funktioniert würde ich einfach mal im Quelltext schauen wie es in der VCL gelöst ist.

cruiser 16. Nov 2007 10:25

Re: ButtonText in Taskbar aktualisieren...
 
eben mal nach geschaut... einfach nur ein SetWindowText

himitsu 16. Nov 2007 10:31

Re: ButtonText in Taskbar aktualisieren...
 
Witzig, "groß" gestört hat es mich auch bei meinem FileSplitter. :lol:
(find es etwas "häßlich", da hierdurch der Fortschritt so komisch Sprünge macht, obwohl er gleichmäßig abläuft)

@Bärchen: bei der VCL ist das auch so.


für InvalidateRect müßt ich erstmal rausfinden wo auf der TaskBar mein Button ist,
um dieses an das TaskBar-Fenster zu schicken.

InvalidateRect + mein Fenster(welches ich mir unsichtbar für den TaskBareintrag erstellt hab) bringt nichts,
was nicht verwunderlich ist, da dieses Fenster doch nicht dem TaskBar-Eintrag entspricht.

@cruiser: bei mir zwar SetWindowTextW (da Unicode), welches zwar den neuen Text für das Fenster setzt, aber wann Windows diesen Text auf der TaskBar neu schreibt ist eine andere Sache.
Der Exporer scheint nur in unregeläßigen Aständen nachzusehn ob da was Neues drinsteht und aktualisiert es erst dann.

cruiser 16. Nov 2007 10:43

Re: ButtonText in Taskbar aktualisieren...
 
Hab nichts andres behauptet... aber etwas andres als Windows durch invalidieren zu Zwingen fällt mir auch nich ein :gruebel:

himitsu 16. Nov 2007 11:28

Re: ButtonText in Taskbar aktualisieren...
 
hmmm, OK, ich weiß zwar imernoch nicht wo mein Button auf dem Fenster ist, aber es klappt auch nicht, wenn ich versuch den kompletten Bildschirm einzubeziehen :gruebel:
Delphi-Quellcode:
H := FindWindow('Shell_TrayWnd', nil);
R.Left  := 0;
R.Top   := 0;
R.Right := 1024;
R.Bottom := 768;
InvalidateRect(H, nil, True);

// oder
H := FindWindow('Shell_TrayWnd', nil);
UpdateWindow(H);


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