DBGridのPopupMenuで・・・。

Delphi2007で作ったDBGridから派生させた自作コンポーネントをDelphi XE2で動作確認していたところ、セルの編集時、設定したPopupMenuが表示されないことが確認されました。Delphi2007の時は、セル編集時、設定されたPopupMenuが表示されていましたが、Delphi XE2では、デフォルトのものが表示されてしまいます。


次のようなシンプルな構成でDBGridとStringGridにPopupMenuを割り当てて、Delphi2007、Delphi2009、Delphi XE2で試してみました。

Design2007




[Delphi2007] 
DBGrid、InplaceEditor共割り当てたPopupMenuが表示されています。

Delphi2007runtime


Delphi2007runtime2




[Delphi2009] 
セル編集時、デフォルトのPopupMenuが表示されてしまいます。

Delphi2009runtime


Delphi2009runtime2




[Delphi XE2] 
Delphi2009と同じく、デフォルトのPopupMenuが表示されています。

Delphixe2runtime




ということで、この動作は、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;



Delphixe2runtimeok

|

Delphi XE2 Professional インストールしました。

仕事に追われてずっとDelphiから遠のいていました。でも先週ぐらいから昔に作ったプログラムを手直しする必要があって、いろいろと調べていて、XE2を知りました。そう言えば、Embarcaderoからのバージョンアップの案内は、私のところには全く届かなくなっています。私のDelphiが2009までで、このブログも更新していないという理由で案内くれないのかな?(^-^)

初めてXE2の情報を見たときは、正直、不安な気持ちになったというか、はっきり言ってDelphi8やKylixの悪夢がよみがえりました。
(技術的にはすごかったのかも知れませんが・・・ごめんなさい)
64bit対応はともかく、WindowsとMacのクロス開発?FireMonkey?・・・又、エラーばかりで、いつしか消えていくのかも知れないとの不安がいっぱいでした。

そしてそのFireMonkey・・・私はMacを持っていないので、クロス環境では試していませんが、結構いいじゃないですか。この先どのような展開になるのかは想像できませんが、少なくとも見た目重視のアプリを作りたい私にはぴったりです。附属のサンプルを試しただけですが、エラーが表示されることもありませんでした。

全体としては、インストール時から、そしてインストール後も安定して動作しています。
(環境によっては、インストールがままならないバージョンもありましたしね)
もうGalileo IDEにも抵抗はないですし、これからはXE2で、さくさくとプログラムができそうです、腕と時間さえあれば(^_^)

|

その他のカテゴリー

ADO | ADT | API | ArrayList | ASP.NET | BDE | BDP.NET | BdpConnection | Borland Developer Studio 2006 | CAPICOM | class | ClipBoard | CodeEditor | Convert.ToString | Custom component | DBExpress | Delphi 2005 | Delphi 2006 | Delphi 2007 | Delphi XE2 | Delphi7 | Delphi8 | Device Driver | Dialog | Docking | DocuWorks | Docuworks SDK | Drag&Drop | Evernote | EXCEL | Firebird | FireMonkey | Game | General | Generics | Google Earth COM API | Google Maps | Google SketchUp | Graphic | IDE | Imm | Indy | InstallAware Express6 | InterBase Admin | JWW | Microsoft SQL Server | MyBase | OnMouseDown | Oracle XE | Paradox | PreviewHandler | PrintDialog | PrintPreviewDialog | PropertyGrid | PSDファイル | Ribbon Controls | RichTextBox | Servers | SubClass | TAction | TActionList | TAnimate | TButton | TCategoryButtons | TClientDataSet | TComboBox | TComboBoxEx | TCustomEdit | TDBGrid | TDockTabSet | TDrawGrid | TEdit | TExcelApplication | TFont | TForm | third party | TImage | TLabel | TList | TListBox | TListView | TMemo | TOpenDialog | TOutlookApplication | TPageControl | TPanel | TRichEdit | TShellResources | TStringGrid | TTabControl | TToolBar | TToolButton | TTreeView | TWebBrowser | Update | VCL Styles | WinInet | XE2 | XPman | オープン配列パラメータ | グループ化 | トランスレーションマネージャー | ファイル処理 | ファイル名処理 | 動的配列 | 投票 | 文字列処理 | 日本語入力 | 暗号 | | 音声合成利用