Dessiner dans le systray avec createicon

Soyez le premier à donner votre avis sur cette source.

Vue 5 569 fois - Téléchargée 3 113 fois

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

Ajouter un commentaire

Commentaires

cs_Nono40
Messages postés
962
Date d'inscription
mercredi 3 avril 2002
Statut
Membre
Dernière intervention
12 septembre 2006
1 -
koko : Que manque-t-il comme variable ? Si c'est dans cette page c'est normal car je n'ai mis qu'ne partie du code ( celle concernant directement CreateIcon ), pour avoir le source complet il faut regarder dans le zip.
cs_koko
Messages postés
654
Date d'inscription
lundi 14 janvier 2002
Statut
Membre
Dernière intervention
20 février 2005
-
il manque des variables non déclarée...

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.