Dessiner dans le systray avec createicon

Description

Voici un programme en réponse à une question du forum.

Ce petit programme dessine un petit graphique et l'affiche dans le systray. Le dessin est créer sous forme d'icône à l'aide de la fonction CreateIcon de l'api.

Source / Exemple :


procedure TForm1.TimerMiseAJourTimer(Sender: TObject);
// Tableau de définition du masque 'ET'
// Un bit correspond à un pixel de l'icone
// - Si le bit de ce tableau est à 0 alors le pixel
// correspondant du tableau 'XOR' sera dessiné tel quel
// - Si le bit de ce tableau est à 1 alors le pixel
// correspondant du tableau 'XOR' sera dessiné mixé avec un ou exclusif
// avec la couleur de base de l'écran. Donc si le pixel de Xor est à zéro,
// cela revient à rendre le point transparent
Const
    AndMasque : Array[0..31]Of Array[0.. 3]Of Byte
            =( ( $FF , $00 , $00 ,$00 ),
               ( $FE , $00 , $00 ,$00 ),
               ( $FC , $00 , $00 ,$00 ),
               ( $F8 , $00 , $00 ,$00 ),
               ( $F0 , $00 , $00 ,$00 ),
               ( $E0 , $00 , $00 ,$00 ),
               ( $C0 , $00 , $00 ,$00 ),
               ( $80 , $00 , $00 ,$00 ),
               ( $00 , $00 , $00 ,$00 ),
               ( $00 , $00 , $00 ,$00 ),
               ( $00 , $00 , $00 ,$00 ),
               ( $00 , $00 , $00 ,$00 ),
               ( $00 , $00 , $00 ,$00 ),
               ( $00 , $00 , $00 ,$00 ),
               ( $00 , $00 , $00 ,$00 ),
               ( $00 , $00 , $00 ,$00 ),
               ( $00 , $00 , $00 ,$00 ),
               ( $00 , $00 , $00 ,$00 ),
               ( $00 , $00 , $00 ,$00 ),
               ( $00 , $00 , $00 ,$00 ),
               ( $00 , $00 , $00 ,$01 ),
               ( $00 , $00 , $00 ,$03 ),
               ( $00 , $00 , $00 ,$07 ),
               ( $00 , $00 , $00 ,$0F ),
               ( $00 , $00 , $00 ,$1F ),
               ( $00 , $00 , $00 ,$3F ),
               ( $00 , $00 , $00 ,$7F ),
               ( $00 , $00 , $00 ,$FF ),
               ( $00 , $00 , $01 ,$FF ),
               ( $00 , $00 , $03 ,$FF ),
               ( $00 , $00 , $07 ,$FF ),
               ( $00 , $00 , $0F ,$FF ));

// Le tableau 'XOR' contient le dessin de l'icone, combiné avec le maque 'ET'
// ( voir ci-dessus )
// Pour une icone de 16 couleur, un octet du tableau défini deux points de
// l'icône.
Var XorMasque : Array[0..31]Of Array[0..15]Of Byte;
    i,j       : Integer;
    Icone     : HIcon;
    Ancienne  : Integer;
begin
  // Mise à jour du pas du petit graphique
  Inc(Avance);

  // Il faut garder le Handle de l'ancienne icone pour pouvoir la détruire
  // après modification
  Ancienne:=IconeEnCours;

  // Dessin du graphique ( simples bandes de couleurs )
  For j:=0 To 31 Do For i:=0 To 15 Do XorMasque[j,i]:=(((Avance+i) Div 8 )And 7 +8)*17;

  // Mise à 0 du points de coin haut gauche de l'icône
  // Le coin haut gauche sera donc transparent car cela correspons aussi
  // à des bits à 1 dans le masque 'Et'
  For i:=0 To 7 Do For j:=0 To 7-i Do
    If Odd(i)
      Then XorMasque[j,i Shr 1] := XorMasque[j,i Shr 1] And $F0
      Else XorMasque[j,i Shr 1] := XorMasque[j,i Shr 1] And $0F;

  // Création de l'icône
  Icone := CreateIcon(HInstance
             ,32           // Une icône est toujours de taille 32x32
             ,32           //
             ,1            // Un seul plan dans le masque 'XOR'
             ,4            // 4 bits par couleur dans le maque 'XOR'
             ,@AndMasque   // adresse du masque 'ET'
             ,@XorMasque); // adresse du masque 'XOR'

  // Si l'icône est créée correctement, elle est mise à jour
  If Icone<>0
  Then Begin
    // Mise à jour de l'icône dans la barre des tâches
    IconeEnCours:=Icone;
    If Ancienne<>0
    Then Begin
      ModifieIcone;
      // Destruction de l'ancienne
      DestroyIcon(Ancienne);
    End
    Else AjouteIcone;
  End;
end;

Conclusion :


Cette source et quelques autres sur : http://nono40.developpez.com

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.