abricot
Une caractéristique majeure de l'interface Windows est l'affichage d'icônes colorées. Les icônes embellissent non seulement le bureau Windows, mais facilitent également une utilisation intuitive, apportant une grande commodité aux utilisateurs. Le style Windows est une bonne référence lors de la conception d’interfaces de programmes.
Delphi propose généralement deux méthodes pour définir les icônes : l'une consiste à spécifier l'icône de l'application dans les options du projet et l'autre consiste à fournir l'attribut Icône dans la page de propriétés de l'inspecteur d'objets. Si vous souhaitez concevoir un menu contextuel aussi beau que le menu Démarrer de Windows, vous devez écrire le code vous-même.
Nous savons que la plupart des applications Windows ont elles-mêmes des icônes. Tant que vous supprimez les icônes du programme lui-même, ajustez la taille de l'icône et l'ajoutez au menu contextuel, un beau menu est complété.
Tout d'abord, utilisez ExtractAssociatedIcon pour obtenir l'icône d'un certain programme. Cependant, la taille de l'icône varie et peut ne pas être directement ajoutée au menu. En même temps, Delphi ne fournit pas la fonction d'ajustement de la taille de l'icône. Le fichier icône doit être converti en fichier bitmap. Ajustez ensuite la taille du fichier bitmap et enfin remplacez les éléments de menu par le fichier bitmap. Son code source est le suivant :
taper
TForm1 = classe(TForm)
MenuMain1 : TMainMenu ;
Fichier1 : TMenuItem ;
/****Éléments dans la barre de menu****/
Ouvert1 : TMenuItem ;
/****éléments dans le fichier de menu****/
procédure FormCreate(Expéditeur : TObject);
procédure FormShow(Expéditeur : TObject);
privé
{déclaration de paramètre local}
publique
{déclaration de paramètre global}
Icn, Txt, MnuItm : TBitmap ;
fin;
procédure TForm2.FormCreate(Expéditeur : TObject);
var R : TRect ;
HIcn : HIcone ;
IC : TIcon ;
Index : Mot ;
Nom du fichier : PChar ;
commencer
/**Obtenir une icône d'un programme**/
Ic:=TIcon.Create;
Ic.Handle:=ExtractAssociatedIcon(Hinstance, /*nom et chemin du fichier*/, Index);
/** Créer un bitmap**/
Txt:=TBitmap.Create ;
avec Txt faire
commencer
Largeur:=Canvas.TextWidth('Test');
Hauteur:=Canvas.TextHeight('Tes');
Canvas.TextOut(0,0,'Test');
fin;
/**Copiez l'icône dans le bitmap créé ci-dessus et ajustez sa taille**/
Icn:=TBitmap.Create;
avec Icn faire
commencer
Largeur :=32 ;
Hauteur :=32 ;
Brush.Color:=clBtnFace;
Canvas.Draw(0,0,Ic);
fin;
/** Crée le fichier bitmap final**/
MnuItm:=TBitmap.Create;
avec MnuItm faire
commencer
Largeur :=Txt.Width+18 ;
Hauteur :=18 ;
avec Canvas faire
commencer
Brush.Color:=clBtnFace;
Pen.Color:=clBtnFace;
Brush.Style:=bsSolid;
Rectangle(0,0,Largeur,Hauteur);
Mode Copie :=cmSrcAnd ;
StretchDraw(Rect(0,0,16,16),Icn);
Mode Copie :=cmSrcAnd ;
Draw(16,8-(Texte.Hauteur div 2),Texte);
fin;
fin;
fin;
procédure TForm2.FormShow(Expéditeur : TObject);
var
ItemInfo : TMenuItemInfo ;
hBmp1:THandle;
commencer
HBmp1:=MnuItm.Handle;
avec ItemInfo faire
commencer
cbSize:= SizeOf(ItemInfo);
fMasque := MIIM_TYPE ;
fType := MFT_BITMAP ;
dwTypeData:= PChar(MakeLong( hBmp1, 0 ));
fin;
/** Remplacer l'élément de menu Open1 par bitmap **/
SetMenuItemInfo( GetSubMenu( MainMenu1.Handle, File1.MenuIndex ),
Open1.MenuIndex, vrai, ItemInfo );
fin;
Le programme ci-dessus a été débogué sous les environnements Windows98 et Delphi 4.0.