2017-09-27 12 views
0

私はマルチデバイスアプリケーションを作成するためにDelphi 10.1 Berlinを使用しています。クエリのデータを表示するにはTStringGridがあります。delphi TStringGridとマウスの右ボタン

私もポップアップメニュー(編集、削除、...)がありますが、アイテムを編集/削除するには、マウスの左ボタンを使用してセルをクリックする必要があります。

ポップアップメニューを表示する前に右ボタンのみを使用して「行を選択」することはできますか?

私が試した:

procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; 
    Shift: TShiftState; X, Y: Integer); 
begin 
    if Button = mbRight then 
    StringGrid1.Perform(WM_LBUTTONDOWN, 0, MakeLParam(Word(X), Word(Y))); 
end; 

をしかし、それはmbRight上とPerform()にエラーが表示されます。

+0

「マルチデバイスアプリケーション」も追加されています。 FMXアプリケーションには常に 'firemonkey'タグを追加してください。 –

+0

OnMouseDownイベントをどのように追加しましたか? FMX 'TStringGrid'はそのようなイベントを公開しません。 –

+0

[片道](https://pastebin.com/BbTG6pAB)。 – Victoria

答えて

2

次のコードを使用することができます:mbRightボタンでの問題は、その列挙型(TMouseButton.mbRight)で値を付けることによって解決されるように

procedure TForm39.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; 
    Shift: TShiftState; X, Y: single); 
var 
    pf: TPointF; 
begin 
    if Button = TMouseButton.mbRight then 
    begin 
    with Sender as TStringGrid do 
     SelectRow(RowByPoint(X, Y)); 
    // Do not use the grids PopupMenu property, it seems it 
    // prevents this event handler comletely. 
    // Instead, activate the menu manually here. 
    pf := ClientToScreen(TPointF.Create(X, Y)); 
    PopupMenu1.Popup(pf.X, pf.Y); 
    end; 
end; 

FireMonkeyのは、有効Scoped Enumerationsでコンパイルされています。

+0

WOW!できます! 私はPopupMenu1.Popup(pf.X、pf.Y)を変更します。 PopupMenu1.Popup(pf.X、pf.Y + 70);マウスカーソルの近くにポップアップメニューを表示するために! ありがとうございます@tom – Rube

+0

ありがとう@Rube、私は助けることができてうれしい。 –

関連する問題