AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TTaskbar mit Progress-Anzeige

Ein Thema von Gausi · begonnen am 10. Nov 2020 · letzter Beitrag vom 12. Nov 2020
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
880 Beiträge
 
Delphi 11 Alexandria
 
#1

TTaskbar mit Progress-Anzeige

  Alt 10. Nov 2020, 19:55
Ich versuche gerade, meine bisher benutzte Taskbar-Komponente durch die seit einiger Zeit mitgelieferte TTaskbar zu ersetzen, um die Anzahl der verwendeten 3rd-Party-Komponenten zu reduzieren. Selbst gemaltes Vorschaubild und Taskbar-Buttons funktionieren nach ein paar kleinen Änderungen einwandfrei, aber die Fortschritts-Anzeige will nicht. Zumindest dann nicht, wenn ich zur Laufzeit den VCL-Style wechsle.

Interessanterweise bleibt die Fortschrittsanzeige erhalten, wenn ich entgegen der Anleitung Application.MainFormOnTaskbar := False; setze - nur sind dann nach einem Style-Wechsel die Buttons in der Vorschau weg.

Gibt es eine Möglichkeit, beides zu nutzen, oder ist das ein Bug in der Delphi-Komponente? Minimal-Projekt ist im Anhang (Fortschritt ist an die Trackbar gekoppelt). Ich nutze die Community-Edition in Version 10.3.
Angehängte Dateien
Dateityp: zip TTaskBar_Styles.zip (125,6 KB, 8x aufgerufen)
The angels have the phone box.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#2

AW: TTaskbar mit Progress-Anzeige

  Alt 11. Nov 2020, 00:08
Zitat:
oder ist das ein Bug in der Delphi-Komponente?
Nö. Wenn überhaupt dann in den VCL-Styles
Lass sie weg dann geht's doch. Oder?

Geändert von venice2 (11. Nov 2020 um 00:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
880 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: TTaskbar mit Progress-Anzeige

  Alt 11. Nov 2020, 06:19
Nö. Wenn überhaupt dann in den VCL-Styles
Kannst du das irgendwie belegen oder näher erläutern, damit ich Ansätze habe, um den Fehler zu beheben oder zu umgehen? Knackpunkt an der Geschichte sind die Fensterhandles, wenn ich das richtig sehe. Bei einer Änderung des Styles werden (müssen?) die Fenster neu erstellt werden. Damit ändern sich auch die Handles, und das scheint Probleme zu machen. Die TTaskbar-Komponente bekommt diese Änderung nicht mit. Ich habe im Code leider noch nicht herausgefunden, warum der eine Teil funktioniert, und der andere nicht, und mit Änderung von MainFormOnTaskbar ist es genau andersrum.

Lass sie weg dann geht's doch. Oder?
Das ist keine Option.
The angels have the phone box.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#4

AW: TTaskbar mit Progress-Anzeige

  Alt 11. Nov 2020, 09:28
Zitat:
Kannst du das irgendwie belegen oder näher erläutern, damit ich Ansätze habe, um den Fehler zu beheben oder zu umgehen?
Wenn die Taskbar Komponente innerhalb der IDE (von Delphi selbst) ohne den VCL-Styles funktioniert wie sie soll dann ist sie doch in Ordnung oder nicht?
Was muss man dann belegen?

Es gibt drei Extended Window Styles die Einfluss darauf haben könnten (Und ich denke diese werden von den VCL-Styles verbogen).

WS_EX_APPWINDOW
Zitat:
Forces a top-level window onto the taskbar when the window is visible.
WS_EX_TOOLWINDOW
Zitat:
A tool window does not appear in the taskbar
WS_EX_NOACTIVATE
Zitat:
The window does not appear on the taskbar by default. To force the window to appear on the taskbar, use the WS_EX_APPWINDOW style.
Schaue also was von den VCL-Styles hier verbogen wird.
So wie mir bekannt ist kann der WS_EX_TOOLWINDOW Extended Window Styles nur geändert werden wenn das Fenster bzw. die Anwendung neu gestartet wird.
Musst halt mal testen.

Lass sie weg dann geht's doch. Oder?
Das ist keine Option.
Habe nicht gesagt du sollst sie weglassen sondern in deinem Example mal ausschalten ob die TaskBar (Progressbar\Buttons) ohne funktioniert.
Wenn ja dann liegt es an den VCL-Styles.

Mein Vorschlag wäre die Taskbar Komponente dynamisch zu erstellen.
Denn die welche auf deiner Form liegt ist beim wechsel auf einen anderen VCL-Style nicht mehr gültig. (Das Interface ITaskBarList3 wird beim wechsel auf ein anderes HWND (Fenster zerstört))

Geändert von venice2 (11. Nov 2020 um 10:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TTaskbar mit Progress-Anzeige

  Alt 11. Nov 2020, 10:33
Jupp, beim Wechsel des VCL-Styles wird das HWND des Fensters neu generiert und dabei gehen dann derartige Registrierungen verloren.
Betrifft z.B. auch einige Drag&Drop-Komponenten.

Versuch mal probehalber nach dem Umstellen die TTaskbar-Komponente zu löschen und neu zu erstellen ... geht es dann wieder?
Du könntest dich vermutlich hier auch ins TWinControl.CreateWnd bzw. CreateHandle der Form reinhängen und dort darauf reagieren.




Bezüglich dem MainFormOnTaskbar, da stimmt auch irgendwie garnichts mehr.
https://www.delphipraxis.net/205177-...rt-10-4-a.html

Und ich hatte auch die TJumpList nicht zusammen mit TTaskbar zum Laufen bekommen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (11. Nov 2020 um 10:43 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#6

AW: TTaskbar mit Progress-Anzeige

  Alt 11. Nov 2020, 10:37
Jupp, beim Wechsel des VCL-Styles wird das HWND des Fensters neu generiert und dabei gehen dannderartige Registrierungen verloren.

Versuch mal probehalber nach dem Umstellen die TTaskbar-Komponente zu löschen und neu zu erstellen ... geht es dann wieder?



Und bezüglich dem MainFormOnTaskbar, da stimmt auch irgendwie garnichts mehr.
https://www.delphipraxis.net/205177-...rt-10-4-a.html
Sagte ich schon!
Ja! das Fenster Handle wird jedesmal neu generiert.
Dynamisches erstellen der Kompo sollte das Problem eigentlich beheben.

Zitat:
Und ich hatte auch die TJumpList nicht zusammen mit TTaskbar zum Laufen bekommen.
Prüfe mal ob du die Freigabe dafür erstellt hast. (Win10) (Personalisieren\Taskleiste)

Geändert von venice2 ( 1. Dez 2020 um 16:05 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TTaskbar mit Progress-Anzeige

  Alt 11. Nov 2020, 10:51
Naja, "beheben" würde es das Problem, wenn die Komponente von selbst drauf reagiert.

Das Wechseln des Styles ist ja nicht das einzige Ereignis, welches die HWNDs neu erstellt, bzw. freigab.
Da reicht seit Jahrzehnten schon das Ändern von FormStyle, AlphaBlend oder anderen noch viel hamloseren Dingen, wie mit'm RDP neu verbinden.


Badges: Jupp, ist aktiv.
Firefox, Explorer und selbst Notepad können es.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (11. Nov 2020 um 10:53 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#8

AW: TTaskbar mit Progress-Anzeige

  Alt 11. Nov 2020, 10:55
Zitat:
Naja, "beheben" würde es das Problem, wenn die Komponente von selbst drauf reagiert.

Das Wechseln des Styles ist ja nicht das einzige Ereignis, welches die HWNDs neu erstellt, bzw. freigab.
Da reicht seit Jahrzehnten schon das Ändern von FormStyle, AlphaBlend oder anderen noch viel hamloseren Dingen, wie mit'm RDP neu verbinden.
Jup. Traurig genug.
Für mich persönlich sind die Styles ein NOGO aber jedem das seine.

Hier ist meine .odl (Object Definition Language)
Daraus kann man seine TypeLib erstellen dann benötigt man keine Komponente. (Ok für VB, sollte aber für Delphi schnell umzuschreiben sein, c++ syntax)

Geändert von venice2 ( 1. Dez 2020 um 16:05 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#9

AW: TTaskbar mit Progress-Anzeige

  Alt 11. Nov 2020, 19:12
Jupp, beim Wechsel des VCL-Styles wird das HWND des Fensters neu generiert und dabei gehen dann derartige Registrierungen verloren.
Betrifft z.B. auch einige Drag&Drop-Komponenten.
Ist das schon in QP gemeldet, damit es Mal hoffentlich
eine Lösung gibt?
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
880 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: TTaskbar mit Progress-Anzeige

  Alt 11. Nov 2020, 20:48
Danke für die Antworten! Das mit dem dynamischen Erstellen der TTaskbar nach dem Style-Wechsel klappt.

Gibt noch ein paar kleine Fallstricke dabei:
  • Nach dem Create und dem Erstellen aller Buttons etc. muss man noch ein newTaskBar.Initialize; einfügen
  • Das gibt aber eine Exception, weil dann das (neue) Fenster zunächst noch unsichtbar ist (bzw. nicht komplett neu erzeugt?), also fügt man ein vor dem Erstellen der Taskbar ein Application.ProcessMessages ein, oder arbeitet mit einem Timer, oder sendet sich selbst ne Message oder sonst irgendwas in der Art.

Mit der Lösung kann ich gut leben. Scheint soweit zu klappen, zumindest in dem Testprojekt.

Und jetzt verstehe ich auch die Aussage, dass der Bug wohl auf Seite der Styles liegt. Der StyleManager kümmert sich darum, dass das Fenster und alles drumherum neu erstellt wird, also müsste das auch für diese Komponente gelten. Tut er aber allem Anschein nach nicht (oder nicht vollständig).
Eine andere Möglichkeit wäre ja auch, dass die TTaskbar-Komponente auf den Stylewechsel reagieren könnte bzw. irgendwie mit wechselnden Handles klar kommen müsste. Dann wäre der Bug dort zu suchen gewesen.
The angels have the phone box.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:29 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