Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TTaskBar: zur Laufzeit ein Vorschau-Bild zuweisen (https://www.delphipraxis.net/195954-ttaskbar-zur-laufzeit-ein-vorschau-bild-zuweisen.html)

juergen 10. Apr 2018 21:59

TTaskBar: zur Laufzeit ein Vorschau-Bild zuweisen
 
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!

himitsu 11. Apr 2018 01:54

AW: TTaskBar: zur Laufzeit ein Vorschau-Bild zuweisen
 
(war falsch)

himitsu 11. Apr 2018 01:58

AW: TTaskBar: zur Laufzeit ein Vorschau-Bild zuweisen
 
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.

KodeZwerg 11. Apr 2018 09:37

AW: TTaskBar: zur Laufzeit ein Vorschau-Bild zuweisen
 
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.

juergen 11. Apr 2018 09:51

AW: TTaskBar: zur Laufzeit ein Vorschau-Bild zuweisen
 
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
Delphi-Quellcode:
CustomizedPreview
setzen muss und dann in dem Event
Delphi-Quellcode:
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?

himitsu 11. Apr 2018 09:52

AW: TTaskBar: zur Laufzeit ein Vorschau-Bild zuweisen
 
Liste der Anhänge anzeigen (Anzahl: 1)
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).
Anhang 48818
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.

juergen 11. Apr 2018 11:34

AW: TTaskBar: zur Laufzeit ein Vorschau-Bild zuweisen
 
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
Delphi-Quellcode:
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;
:dp:

KodeZwerg 11. Apr 2018 13:08

AW: TTaskBar: zur Laufzeit ein Vorschau-Bild zuweisen
 
Ja sorry, ich dacht wegen Namensgebung wären die Links passend aber gut das es nun klappt was Du vorhattest! :thumb:

lxo 10. Aug 2022 09:18

AW: TTaskBar: zur Laufzeit ein Vorschau-Bild zuweisen
 
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.

himitsu 10. Aug 2022 09:42

AW: TTaskBar: zur Laufzeit ein Vorschau-Bild zuweisen
 
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;


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