アプリコット
Windows インターフェイスの大きな特徴は、カラフルなアイコンの表示であり、Windows のデスクトップを美しくするだけでなく、直感的な操作を容易にし、ユーザーに大きな利便性をもたらします。 Windows スタイルは、プログラム インターフェイスを設計する際の良い参考になります。
Delphi では通常、アイコンを設定するための 2 つの方法が提供されています。1 つは PROject オプションでアプリケーションのアイコンを指定する方法、もう 1 つはオブジェクト インスペクターのプロパティ ページで Icon 属性を指定する方法です。 Windows の [スタート] メニューと同じくらい美しいポップアップ メニューをデザインしたい場合は、自分でコードを記述する必要があります。
ほとんどの Windows アプリケーションにはアイコン自体が存在しますが、プログラム自体からアイコンを取り出し、アイコンのサイズを調整してポップアップ メニューに追加するだけで、美しいメニューが完成します。
まず、ExtractAssociatedIcon を使用して、特定のプログラムからアイコンを取得します。ただし、アイコンのサイズはさまざまであり、Delphi にはアイコンのサイズを調整する機能が提供されていない場合があります。アイコン ファイルをビットマップ ファイルに変換し、ビットマップ ファイルのサイズを調整して、最後にメニュー項目をビットマップ ファイルに置き換える必要があります。そのソースコードは次のとおりです。
タイプ
TForm1 = クラス(TForm)
MainMenu1: TMainMenu;
ファイル 1: TMenuItem;
/****メニューバーの項目****/
Open1: TMenuItem;
/****メニューファイルの項目****/
プロシージャ FormCreate(Sender: TObject);
プロシージャ FormShow(Sender: TObject);
プライベート
{ローカルパラメータ宣言}
公共
{グローバルパラメータ宣言}
Icn、Txt、MnuItm: TBitmap;
終わり;
プロシージャ TForm2.FormCreate(送信者: TObject);
var R: TRect;
HIcn: HIcon;
Ic: TIcon;
索引: 単語;
ファイル名: PChar;
始める
/**プログラムからアイコンを取得します**/
Ic:=TIcon.Create;
Ic.Handle:=ExtractAssociatedIcon(Hinstance, /*ファイル名とパス*/, Index);
/** ビットマップを作成します**/
Txt:=TBitmap.Create;
Txtで行う
始める
幅:=Canvas.TextWidth('テスト');
高さ:=Canvas.TextHeight('Tes');
Canvas.TextOut(0,0,' テスト');
終わり;
/**上で作成したビットマップにアイコンをコピーし、サイズを調整します**/
Icn:=TBitmap.Create;
アイコンドゥで
始める
幅:=32;
高さ:=32;
Brush.Color:=clBtnFace;
Canvas.Draw(0,0,Ic);
終わり;
/** 最終的なビットマップ ファイルを作成します**/
MnuItm:=TBitmap.Create;
MnuItm で行う
始める
幅:=Txt.Width+18;
身長:=18;
キャンバスドゥで
始める
Brush.Color:=clBtnFace;
Pen.Color:=clBtnFace;
Brush.Style:=bsSolid;
長方形(0,0,幅,高さ);
コピーモード:=cmSrcAnd;
ストレッチドロー(Rect(0,0,16,16),Icn);
コピーモード:=cmSrcAnd;
Draw(16,8-(Txt.Height div 2),Txt);
終わり;
終わり;
終わり;
プロシージャ TForm2.FormShow(送信者: TObject);
変数
アイテム情報: TMenuItemInfo;
hBmp1:Tハンドル;
始める
HBmp1:=MnuItm.ハンドル;
ItemInfo を使用して行う
始める
cbSize:= SizeOf(アイテム情報);
fMask:= MIIM_TYPE;
fType:= MFT_BITMAP;
dwTypeData:= PChar(MakeLong( hBmp1, 0 ));
終わり;
/** メニュー項目 Open1 をビットマップに置き換えます **/
SetMenuItemInfo( GetSubMenu( MainMenu1.Handle, File1.MenuIndex ),
Open1.MenuIndex、true、ItemInfo );
終わり;
上記プログラムは Windows98 および Delphi 4.0 環境でデバッグされています。