AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TTaskBar: zur Laufzeit ein Vorschau-Bild zuweisen
Thema durchsuchen
Ansicht
Themen-Optionen

TTaskBar: zur Laufzeit ein Vorschau-Bild zuweisen

Ein Thema von juergen · begonnen am 10. Apr 2018 · letzter Beitrag vom 10. Aug 2022
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.164 Beiträge
 
Delphi 11 Alexandria
 
#1

TTaskBar: zur Laufzeit ein Vorschau-Bild zuweisen

  Alt 10. Apr 2018, 21:59
Hallo zusammen,

nach einem Delphiversionswechsel will ich nun die enthaltene Standardkomponente TTaskBar nutzen. Dabei möchte ich zur Laufzeit das Vorschaubild wechseln (Musikplayer: es soll das jeweilige Cover angezeigt werden).
Ich habe schon einiges gesucht aber speziell dazu nichts gefunden.

Vielen Dank schon mal vorab für Hilfestellung!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TTaskBar: zur Laufzeit ein Vorschau-Bild zuweisen

  Alt 11. Apr 2018, 01:54
(war falsch)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TTaskBar: zur Laufzeit ein Vorschau-Bild zuweisen

  Alt 11. Apr 2018, 01:58
Ich weiß nicht ob es TTaskbar kann.


Aber den "Bug" der alten Delphi-Versionen kannst du ausnutzen.
Nicht MainForm und Application in der Taskbar anzeigen, sondern ein unsichtbares Dummyfenster, auf welchem du dein Cover malst.
Bei MainFormOnTaskbar=False wird dort ein leeres Fenster angezeigt, weil die interne MessageOnlyForm im Application nichts drauf hat.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TTaskBar: zur Laufzeit ein Vorschau-Bild zuweisen

  Alt 11. Apr 2018, 09:37
Hier ist 'ne Super Erklärung was Du alles mit der Taskbar anstellen kannst.
Aber ich vermute Du bist mehr hinter sowas her, oder?
Fast vergessen Emba zu erwähnen.
Gruß vom KodeZwerg

Geändert von KodeZwerg (11. Apr 2018 um 09:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.164 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: TTaskBar: zur Laufzeit ein Vorschau-Bild zuweisen

  Alt 11. Apr 2018, 09:51
Hallo zusammen,
@KodeZwerg,
danke, die ganzen Infos kenne ich schon, sie helfen aber nicht bei diesem Problem.

Zum jetzigen Stand nehme ich an, dass ich erstens die Tab-Eigenschaft CustomizedPreview setzen muss und dann in dem Event OnThumbPreviewRequest das Bild zuweisen muss.
Dazu nutze ich folgenden Code:

Delphi-Quellcode:
procedure Tfrm_Main.Taskbar1ThumbPreviewRequest(Sender: TObject; APreviewHeight, APreviewWidth: Integer; PreviewBitmap: TBitmap);
begin
  PreviewBitmap.PixelFormat := pf32bit;
  PreviewBitmap.Width := APreviewWidth;
  PreviewBitmap.Height := APreviewHeight;

  PreviewBitmap.Canvas.FillRect(TRect.Create(0, 0, APreviewWidth, APreviewHeight));

  PreviewBitmap.Canvas.BrushCopy(Rect(0, 0, cxImage1.Width, cxImage1.Height), cxImage1.Picture.Bitmap, Rect(0, 0, cxImage1.Width, cxImage1.Height), $00FFFFFF);
end;
Das funktioniert prinzipiell erst mal, aber ich sehe nur den oberen linken Teil des Bildes.

Wie kann ich denn das ganze Bild anzeigen?
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TTaskBar: zur Laufzeit ein Vorschau-Bild zuweisen

  Alt 11. Apr 2018, 09:52
Ich denke er meint das, was "Aero Peek" macht. (wenn es aktiviert ist)
Das Vorschaubild des Fensters, da über den Control-Buttons (Taskleisten-Schaltflächen).
windows-aero.jpg
Einige Mediaplayer zeigen da gern nur das Cover der abgespielten CD an.
[edit] Jupp, klingt nach ThumbPreview. [/edit]

Im winzigen Taskleistenbutton das Cover anzeigen ... da erkennt man doch nichts.
Außerdem würde es dann reichen, wenn er dann einfach nur ein TIcon erstellt und das dort anzeigt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.164 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: TTaskBar: zur Laufzeit ein Vorschau-Bild zuweisen

  Alt 11. Apr 2018, 11:34
Hallo zusammen,

Danke für die Tipps.
Habe nun eine Lösung erarbeitet die zu funktionieren scheint.
Meine Festlegung dabei ist, dass die anzuzeigenden Cover quadratisch sind und ich deswegen eine feste Konstante dem PreviewBitmap.Width zuordne.


Delphi-Quellcode:
procedure Tfrm_Main.Taskbar1ThumbPreviewRequest(Sender: TObject; APreviewHeight, APreviewWidth: Integer; PreviewBitmap: TBitmap);
var
 R : TRect;
begin
  PreviewBitmap.PixelFormat := pf32bit;
  PreviewBitmap.Width := 80;
  PreviewBitmap.Height := APreviewHeight;

  PreviewBitmap.Canvas.FillRect(TRect.Create(0, 0, APreviewWidth, APreviewHeight));
  R := TRect.Create(0, 0, PreviewBitmap.Width, PreviewBitmap.Height);
  PreviewBitmap.Canvas.StretchDraw(R, cxImage1.Picture.Bitmap);
end;
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: TTaskBar: zur Laufzeit ein Vorschau-Bild zuweisen

  Alt 11. Apr 2018, 13:08
Ja sorry, ich dacht wegen Namensgebung wären die Links passend aber gut das es nun klappt was Du vorhattest!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
lxo

Registriert seit: 30. Nov 2017
258 Beiträge
 
Delphi 12 Athens
 
#9

AW: TTaskBar: zur Laufzeit ein Vorschau-Bild zuweisen

  Alt 10. Aug 2022, 09:18
Hat jemand eine Idee wie man in der Vorschau alle sichtbaren auch die modalen Fenster anzeigt?

Es ist auch möglich modale Fenster mit Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; auch in der Taskbar anzuzeigen, diese werden dann aber als einzelne Einträge in der Taskleiste angezeigt.

Ich würde gerne auf dem Thumbnail/Vorschau des Hauptmenüs auch die modalen Fenster die vom Hauptmenü aus geöffnet wurden sehen können.

Ich hätte gedacht vielleicht mit TTaskBar und OnThumbPreviewRequest selber eine Vorschau zu erstellen, das Event wird aber nur einmal ausgelöst und dann nicht mehr.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TTaskBar: zur Laufzeit ein Vorschau-Bild zuweisen

  Alt 10. Aug 2022, 09:42
MSDN-Library durchsuchenSetWindowLong, bzw. bereits in MSDN-Library durchsuchenCreateWindowEx oder eben Delphi-Referenz durchsuchenTCustomForm.CreateParams
WS_EX_APPWINDOW
WS_EX_TOOLWINDOW
WS_EX_NOACTIVATE

https://docs.microsoft.com/en-us/win...-window-styles

Wie man in der Hilfe rauslesen kann, gibt es meherere Eigenschaften, um zu steuern, ob oder ob nicht eine Form in der Taskleiste sichtbar sein soll. (lässt sich auch mannigfaltig in der SuFu entdecken)


Delphi-Quellcode:
procedure TYourForm.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
end;

// bzw. alternativ später auch noch in
procedure TYourForm.CreateWindowHandle(const Params: TCreateParams);
procedure TYourForm.CreateWnd;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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 11:39 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