TPopupMenu
コンポーネントのアイコンをメニュー項目(TMenuItem
)に割り当てています。設計時にアイコンを使用しているときにチェックされたメニュー項目を視覚的に認識する方法は?
、アイコンが示されていないと、チェックマークがチェックされた項目であるかを検出することができます:実行時に
、アイコンが表示されますが、すべての項目が同じように描かれており、私がチェック1を認識することはできません。
アイコンを使用した場合、視覚的にチェックされた項目を認識するためにどのように?
TPopupMenu
コンポーネントのアイコンをメニュー項目(TMenuItem
)に割り当てています。設計時にアイコンを使用しているときにチェックされたメニュー項目を視覚的に認識する方法は?
、アイコンが示されていないと、チェックマークがチェックされた項目であるかを検出することができます:実行時に
、アイコンが表示されますが、すべての項目が同じように描かれており、私がチェック1を認識することはできません。
アイコンを使用した場合、視覚的にチェックされた項目を認識するためにどのように?
チェックしたアイテムを実行時に視覚的に認識するには、デザイン時に図面をカスタマイズする必要があります。
TPopupMenu.OwnerDraw
プロパティをTrue
に設定してください。その後、それぞれの関係者のために、OnDrawItem
イベントの動作を記述する必要があります。たとえば、以下のコードは、(すぐに書かれていない堅牢ですべて)すべてのTMenuItemは、単一の方法でレンダリング処理することができます:
procedure TForm1.MyMenuItemDrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
var
_item: TMenuItem;
const
MARGIN = 4;
INDEX_CHECKMARK = 3; // Add a checkmark image in your TImageList
begin
// Get current item
_item := (Sender as TMenuItem);
// Set then fill background color depending on selected state
if Selected then
ACanvas.Brush.Color := clGreen
else
ACanvas.Brush.Color := clMenu;
ACanvas.FillRect(ARect);
ARect.Left := MARGIN;
// Draw a mark if item is checked
if _item.Checked then
AnImageList.Draw(ACanvas, ARect.Left, ARect.Top + 2, INDEX_CHECKMARK);
// Inflate left position even for unchecked items, to keep text left alignement
ARect.Left := ARect.Left + AnImageList.Width + MARGIN;
// Draw image if available
if _item.ImageIndex <> -1 then
AnImageList.Draw(ACanvas, ARect.Left, ARect.Top + 2, _item.ImageIndex);
ARect.Left := ARect.Left + AnImageList.Width + MARGIN;
// Draw caption
DrawText(ACanvas.Handle, PChar(_item.Caption), -1, ARect, DT_LEFT or DT_VCENTER or DT_SINGLELINE or DT_NOCLIP);
end;
私が代わりにチェックマーク用のカスタムイメージを使用していくつかのシステム・メソッドがあることを推測しますクイック検索では、次のMSDNページに移動します。DrawCheck
: https://msdn.microsoft.com/en-us/library/windows/desktop/ms647558(v=vs.85).aspx#_win32_Using_Custom_Check_Mark_Bitmaps
項目のチェック、繰り返し、アイテムの「Checked」プロパティの確認ができます。 – Victoria
@Victoria:はい、「視覚的に認識」を指定して質問を更新しました。つまり、チェックされたアイテムとチェックされていないアイテムを区別することはできません。 – ExDev
これは仕様です。チェックできるアイテムのグループがある場合は、アイコンを持たないでください。 –