Aprikose
Ein Hauptmerkmal der Windows-Oberfläche ist die Anzeige farbenfroher Symbole. Die Symbole verschönern nicht nur den Windows-Desktop, sondern erleichtern auch die intuitive Bedienung und bieten dem Benutzer großen Komfort. Der Windows-Stil ist eine gute Referenz beim Entwerfen von Programmschnittstellen.
Delphi bietet im Allgemeinen zwei Methoden zum Festlegen von Symbolen: Eine besteht darin, das Symbol der Anwendung in den PRoject-Optionen anzugeben, und die andere darin, das Symbolattribut auf der Eigenschaftenseite des Objektinspektors bereitzustellen. Wenn Sie ein Popup-Menü so schön wie das Windows-Startmenü gestalten möchten, müssen Sie den Code selbst schreiben.
Wir wissen, dass die meisten Windows-Anwendungen selbst Symbole haben. Solange Sie die Symbole aus dem Programm selbst entfernen, die Größe des Symbols anpassen und es dem Popup-Menü hinzufügen, ist ein schönes Menü fertig.
Verwenden Sie zunächst ExtractAssociatedIcon, um das Symbol von einem bestimmten Programm abzurufen. Die Größe des Symbols variiert jedoch und kann nicht direkt zum Menü hinzugefügt werden. Gleichzeitig bietet Delphi keine Funktion zum Anpassen der Symbolgröße Die Symboldatei muss in eine Bitmap-Datei umgewandelt werden. Passen Sie dann die Größe der Bitmap-Datei an und ersetzen Sie schließlich die Menüelemente durch die Bitmap-Datei. Der Quellcode lautet wie folgt:
Typ
TForm1 = Klasse(TForm)
MainMenu1: TMainMenu;
Datei1: TMenuItem;
/****Elemente in der Menüleiste****/
Open1: TMenuItem;
/****Elemente in der Menüdatei****/
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
Privat
{lokale Parameterdeklaration}
öffentlich
{globale Parameterdeklaration}
Icn, Txt, MnuItm: TBitmap;
Ende;
procedure TForm2.FormCreate(Sender: TObject);
var R: TRect;
HIcn: HIcon;
Ic: TIcon;
Index: Wort;
Dateiname: PChar;
beginnen
/**Ein Symbol von einem Programm abrufen**/
Ic:=TIcon.Create;
Ic.Handle:=ExtractAssociatedIcon(Hinstance, /*Dateiname und Pfad*/, Index);
/** Bitmap erstellen**/
Txt:=TBitmap.Create;
mit Txt tun
beginnen
Breite:=Canvas.TextWidth('Test');
Height:=Canvas.TextHeight('Tes');
Canvas.TextOut(0,0,' Test');
Ende;
/**Kopieren Sie das Symbol in die oben erstellte Bitmap und passen Sie seine Größe an**/
Icn:=TBitmap.Create;
mit Icn do
beginnen
Breite:=32;
Höhe:=32;
Brush.Color:=clBtnFace;
Canvas.Draw(0,0,Ic);
Ende;
/** Erstelle die endgültige Bitmap-Datei**/
MnuItm:=TBitmap.Create;
mit MnuItm tun
beginnen
Breite:=Txt.Width+18;
Höhe:=18;
mit Canvas tun
beginnen
Brush.Color:=clBtnFace;
Pen.Color:=clBtnFace;
Brush.Style:=bsSolid;
Rechteck(0,0,Breite,Höhe);
CopyMode:=cmSrcAnd;
StretchDraw(Rect(0,0,16,16),Icn);
CopyMode:=cmSrcAnd;
Draw(16,8-(Txt.Height div 2),Txt);
Ende;
Ende;
Ende;
procedure TForm2.FormShow(Sender: TObject);
var
ItemInfo: TMenuItemInfo;
hBmp1:THandle;
beginnen
HBmp1:=MnuItm.Handle;
mit ItemInfo tun
beginnen
cbSize:= SizeOf(ItemInfo);
fMask:= MIIM_TYPE;
fType:= MFT_BITMAP;
dwTypeData:= PChar(MakeLong( hBmp1, 0 ));
Ende;
/** Menüpunkt Öffnen1 durch Bitmap ersetzen **/
SetMenuItemInfo( GetSubMenu( MainMenu1.Handle, File1.MenuIndex ),
Open1.MenuIndex, true, ItemInfo );
Ende;
Das obige Programm wurde unter Windows98- und Delphi 4.0-Umgebungen debuggt.