DBGridのPopupMenuで・・・。
Delphi2007で作ったDBGridから派生させた自作コンポーネントをDelphi XE2で動作確認していたところ、セルの編集時、設定したPopupMenuが表示されないことが確認されました。Delphi2007の時は、セル編集時、設定されたPopupMenuが表示されていましたが、Delphi XE2では、デフォルトのものが表示されてしまいます。
次のようなシンプルな構成でDBGridとStringGridにPopupMenuを割り当てて、Delphi2007、Delphi2009、Delphi XE2で試してみました。
[Delphi2007]
DBGrid、InplaceEditor共割り当てたPopupMenuが表示されています。
[Delphi2009]
セル編集時、デフォルトのPopupMenuが表示されてしまいます。
[Delphi XE2]
Delphi2009と同じく、デフォルトのPopupMenuが表示されています。
ということで、この動作は、Delphi2009から変わっていたようです。いつもながらスマートな方法とは言えないんですけど、下記の処理でInplaceEditorにもPopupMenuを割り当てることができました。
次のようなシンプルな構成でDBGridとStringGridにPopupMenuを割り当てて、Delphi2007、Delphi2009、Delphi XE2で試してみました。
[Delphi2007]
DBGrid、InplaceEditor共割り当てたPopupMenuが表示されています。
[Delphi2009]
セル編集時、デフォルトのPopupMenuが表示されてしまいます。
[Delphi XE2]
Delphi2009と同じく、デフォルトのPopupMenuが表示されています。
ということで、この動作は、Delphi2009から変わっていたようです。いつもながらスマートな方法とは言えないんですけど、下記の処理でInplaceEditorにもPopupMenuを割り当てることができました。
type TDummyDBG = class(TCustomDBGrid); TDummyCG = class(TCustomGrid); TDummyCtl = class(TControl); procedure TForm1.FormShow(Sender: TObject); var Options1: TDBGridOptions; Options2: TGridOptions; begin // DBGridの場合 Options1 := DBGrid1.Options; try DBGrid1.Options := DBGrid1.Options + [dgEditing, dgAlwaysShowEditor]; TDummyDBG(DBGrid1).ShowEditor; if Assigned(TDummyDBG(DBGrid1).InplaceEditor) then TDummyCtl(TDummyDBG(DBGrid1).InplaceEditor).PopupMenu := DBGrid1.PopupMenu; finally DBGrid1.Options := Options1; end; // StringGridの場合 Options2 := StringGrid1.Options; try StringGrid1.Options := StringGrid1.Options + [goEditing, goAlwaysShowEditor]; TDummyCG(StringGrid1).ShowEditor; if Assigned(TDummyCG(StringGrid1).InplaceEditor) then TDummyCtl(TDummyCG(StringGrid1).InplaceEditor).PopupMenu := StringGrid1.PopupMenu; finally StringGrid1.Options := Options2; end; end;
| 固定リンク