2011-07-28 8 views
3

動的に作成されたTMenuItemにビットマップを追加します。このコードでは動作しません。メニューに画像がありません。どうしましたか?TMenuItemビットマップを追加

procedure TForm3.FormCreate(Sender: TObject); 
var 
    item : TmenuItem; 
    icon : TIcon; 
begin 
    item := TMenuItem.Create(PopupMenu1); 
    item.Caption := 'coucou'; 
    icon := TIcon.Create; 
    icon.LoadFromFile('d:\SmallIcon.ico'); 
    icon.Height := 16; 
    icon.Width := 16; 
    item.Bitmap.Canvas.Draw(0,0,icon); 
    PopupMenu1.Items.Add(item); 
end; 
+2

コードフラグメントをマークするには、小さな{{} 'ツールバーボタンを使用します。これは、HTMLタグを手動で挿入するよりも簡単で、より良い結果が得られます。 –

答えて

2

線を第三の一つとして

item.Bitmap.SetSize(16,16); 

を加えます。その後、それは動作します。

だからあなたのコードは次のようになります。

var 
    item : TmenuItem; 
    icon : TIcon; 
begin 
    item := TMenuItem.Create(PopupMenu1); 
    item.Caption := 'coucou'; 
    item.Bitmap.SetSize(16,16); // <--- set size of bitmap 
    icon := TIcon.Create; 
    icon.LoadFromFile('d:\SmallIcon.ico'); 
    icon.Height := 16; 
    icon.Width := 16; 
    item.Bitmap.Canvas.Draw(0,0,icon); 
    PopupMenu1.Items.Add(item); 
end; 

私はデビッドに同意するが。 TImageListを使用してください。

+1

'TIcon'は、' Assign() 'が呼ばれたときに自身を' TBitmap'にコピーする方法を知っています。私は、 'Item.Bitmap.Assign(icon);' –

+1

のように、 'SetSize()'と 'Draw()'を手動で呼び出すことをお勧めします。これは私の最初のアイデアでしたが、Delphi 2009では機能しません( ' EConvertError')。 XEは動作します( 'TIcon.AssignTo'はここでは新しいようです)。 –

+0

D2010では正常に動作するため、新しい機能でなければなりません。 –

7

TMenuItemBitmapプロパティは、ここに行くための方法ではありません。あなたは本当に代わりにイメージリストを使うべきです。これにより、管理可能な方法でUI要素間で画像を共有できます。

  1. アイコンをTImageListに追加します。
  2. メニューのImagesプロパティ(例:PopupMenu1)に画像リストを参照するように設定します。
  3. メニュー項目の画像インデックスをリストのアイコンのインデックスに設定します。最初の画像の場合は0です。もちろん

、あなたは本当に、その場合には、単にアクションのImageIndexを設定する必要があり、フレームワークは、メニュー項目に割り当てるの世話をする、あまりにもアクションを使用するべきです。

私は、VistaテーマメニューのDelphi実装には、多くの微妙なバグがあり、多くは画像の描画に関連していることに気付きました。しかし、これらのバグは視覚的な影響が比較的小さいです。

1

a)TIconディメンションに画像があると設定できません。読み込まれたアイコンが16x16でない場合は例外が発生します。b)親メニューが使用するかどうかを指定しません。もしそうなら、あなたは個々の画像を設定することはできません)、c)デフォルトでは、私はtmenuitemビットマップが特定のサイズ/色の深さなどを持っているとは思わない。親メニューにTImageListsを使用しないと仮定して、TMenuItem.Bitmapに割り当てるTBitmapを適切に作成する必要があります。

関連する問題