2017-09-27 6 views
0

J'utilise Delphi 10.1 Berlin pour faire une application multi-périphérique. J'ai un TStringGrid afin de lister certaines données d'une requête.delphi TStringGrid et le bouton droit de la souris

J'ai également un menu contextuel (modifier, supprimer, ...), mais pour modifier/supprimer un élément, je dois cliquer sur une cellule en utilisant le bouton gauche de la souris.

Est-il possible de "sélectionner une ligne" en utilisant seulement le bouton droit avant d'afficher le menu contextuel?

J'ai essayé:

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; 

Mais il affiche une erreur sur mbRight et Perform().

+0

Je vois que vous avez également ajouté "application multidevice". Veuillez toujours ajouter une balise 'firemonkey' pour les applications FMX. –

+0

Comment avez-vous ajouté l'événement 'OnMouseDown'? FMX 'TStringGrid' n'expose pas un tel événement. –

+0

[Aller simple] (https://pastebin.com/BbTG6pAB). – Victoria

Répondre

2

Vous pouvez utiliser le code suivant:

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 est compilé avec Scoped Enumerations activé, de sorte que le problème avec le bouton mbRight est résolu en préfixant la valeur avec son type ENUM (TMouseButton.mbRight).

+0

WOW! Ça marche! Je modifie PopupMenu1.Popup (pf.X, pf.Y); à PopupMenu1.Popup (pf.X, pf.Y + 70); afin d'avoir popup menu près du curseur de la souris! Merci beaucoup @tom – Rube

+0

Merci @Rube, content que je puisse vous aider. –