2017-01-16 4 views
0

J'essaye de dessiner sur la toile d'un TTrayIcon mais je n'ai pas de succès. Je suis programmation avec Lazarus V1.6.2 sur Windows 10.Comment dessiner sur un TTrayIcon

Ce que j'ai essayé jusqu'à présent est:

procedure TForm1.TrayIcon1Paint(Sender: TObject); 
var 
    tmpcanvas: TCanvas; 
begin 
    tmpcanvas := TrayIcon1.Canvas; 
    tmpcanvas := TrayIcon1.Icon.Canvas; // also not working 
    tmpcanvas.Font.Size := 22; 
    tmpcanvas.Brush.Color := RGBToColor(255,255,255); 
    tmpcanvas.FillRect(1,1,200,200); 
    tmpcanvas.Font.Color := RGBToColor(0,0,0); 
    tmpcanvas.TextOut(1,1, 'TEST'); 
end; 

J'ai essayé ce code en cas Form1.OnPaint avec les Form1.Canvas et là-bas cela fonctionne comme prévu.

Mais je n'ai pas de chance de peindre sur le TTrayIcon.Canvas. Il semble que le dessin sur toile de TTrayIcon est différent de dessiner sur d'autres canevas ...

Après un débogage, j'ai réalisé que l'événement TTrayIcon.OnPaint n'est jamais déclenché. Mais même quand je force à exécuter TrayIcon1Paint (..) rien ne se passe.

Maintenant, je n'ai plus d'idées. Toute aide est grandement appréciée.

+0

Le système ne fonctionne pas de cette façon. Si vous voulez une icône différente, vous devez fournir une icône différente. Le système sous-jacent n'est pas basé sur des messages de peinture. –

+0

Je souhaite afficher des informations dynamiques sur la barre des tâches. Je pensais que cela devrait fonctionner puisque le "temps de Windows" est aussi "dynamique" –

+1

L'heure de Windows n'est pas une icône de notification et est dessinée par le shell. Il peut faire ce qu'il veut. Vous devez vous adapter à l'API. Et cela demande des icônes. Les icônes de notification ne sont pas découpées pour l'interface utilisateur dynamique riche. –

Répondre

1

Les icônes de notification Windows n'offrent aucune interface correspondant à un événement OnPaint. Je peux seulement imaginer que l'événement OnPaint est destiné à être utilisé sur différentes plates-formes.

Les icônes de notification Windows sont fournies au système sous la forme d'objets icône Windows. Si vous souhaitez modifier l'apparence de votre icône de notification, vous devez fournir un nouvel objet icône. Je ne suis pas familier avec cette enveloppe particulière de la fonction Windows API, mais je pense que vous pouvez écrire du code comme ceci pour mettre à jour l'apparence de l'icône de notification:

TrayIcon1.Icon := MyNewIcon;