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
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.