Tagプロパティを使う
かなりピンポイントなエントリです。
Twitter上で、同じようなイベント一杯書きたく無いって感じのツイートがあったので私はこんな感じでやってますよってのを。
質問であったのは、メニュー選択でウィンドウサイズを変更する処理での事でした。
ウィンドウサイズに関してなら下記みたいな感じでいけるかなと。他の処理の場合もやっぱり、Tagプロパティを使って処理を振り分ける感じになると思います。
下記のSetWindowSizeを各メニューのイベントに設定する。
ウィンドウサイズを定数配列でもっておいて、そのインデックスをメニューアイテムのTagプロパティに設定してます。
ウィンドウサイズのリストを固定で持ってます。固定じゃ無い場合はどうしたもんでしょうね?
const CWINDOW_SIZES: Array[1..3,0..1] of Integer = ((800,600), (1280,800), (1440, 900)); procedure TForm1.SetWindowSize(Sender: TObject); begin if Sender is TComponent then begin Idx := TComponent(Sender).Tag; Self.Width := CWINDOW_SIZES[Idx, 0]; Self.Height := CWINDOW_SIZES[Idx, 1]; end; end; // 動的にメニューを作成する場合はこんな感じ procedure TForm1.FormCreate(Sender: TObject); var Sz: TSize; mi: TMenuItem; Idx: Integer; begin for Idx := Low(CWINDOW_SIZES) to High(CWINDOW_SIZES) do begin mi := TMenuItem.Create(Self); mi.Caption := Format('%d x %d', [CWINDOW_SIZES[Idx,0],CWINDOW_SIZES[Idx,1]]); mi.Tag := Idx; mi.OnClick := SetWindowSize; Seize2S1.Add(mi); end; end;
おまけ
ウィンドウサイズに限った話でメニューキャプションをWidth x Heightの形にするならキャプションからWidthとHeightを取得するってやり方もありかなぁ