4

StringGridで、右クリックすると、下に不要なメニューが表示されることがあります。これはWindowsポップアップですか?

ポップアップスクリーンキャプチャ

このポップアップが自分のものではなく表示されないようにするにはどうすればよいですか?

オプションにgoAlwaysShowEditorがあります。

StringGrid.PopupMenuをポップアップに設定しました。

右クリックするとポップアップが表示されるようにStringGrid.OnMouseDownを設定しました。

4

2 に答える 2

8

この方法で仮想CreateEditorメソッドをオーバーライドできます (ただし、良い解決策ではありませんが、私は知っています :-):

type
  TStringGrid = class(Grids.TStringGrid)
  protected
    function CreateEditor: TInplaceEdit; override;
  end;

implementation

function TStringGrid.CreateEditor: TInplaceEdit;
begin
  Result := inherited CreateEditor;
  TMaskEdit(Result).PopupMenu := Form1.PopupMenu1;
end;
于 2012-05-20T20:12:38.783 に答える
7

これは、すべての Windows EDIT コントロールにあるポップアップ メニューです。世界で最も有名なメニューの可能性があります (唯一の競合はシステム メニューからのものです)。ユーザーがそれを期待している(そして必要としている)ため、あなたはそれを望んでいます。セル内のテキストを編集すると、コントロールは実際に標準の Windows EDIT コントロールを作成します。これはすばらしい機能です。したがって、ポップアップメニューが表示されます。TStringGrid

さらに、(セルを編集していないときに) 独自のポップアップ メニューを表示するには、OnMouseDownハンドラーを設定する必要はありません。PopupMenuプロパティを設定するだけで十分です。実際、OnMouseDownハンドラーを使用してポップアップ メニューをトリガーするのは非常によくありません。ユーザーがコントロールを右クリックしたときにのみメニューが表示されるためです (たとえば、コントロールの「コンテキスト」ボタンを押したときは表示されません)。キーボード)。

ユーザーがセルを編集している場合でも、独自のポップアップメニューを表示したい場合は、元に戻す、コピー、切り取り、貼り付け、Unicode などの通常のオプションを手動で指定する必要があります。きっとあなたはそれを望んでいませんか?

于 2012-05-20T20:01:02.500 に答える