PhilLu
Messages postés251Date d'inscriptionlundi 9 novembre 2009StatutMembreDernière intervention11 mai 2021
-
7 déc. 2013 à 18:06
PhilLu
Messages postés251Date d'inscriptionlundi 9 novembre 2009StatutMembreDernière intervention11 mai 2021
-
10 déc. 2013 à 23:21
Bonsoir,
Je souhaite barrer le texte de toutes les cellules d'une ligne par click droit sur la ligne choisie.
Cela fonctionne bien sauf que la cellule pointée ne se barre pas (les autres, pas de problème) !?!
Voici mon code:
procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var i, j: integer; begin if Button = mbRight then begin j:=StringGrid1.Selection.Top; If MessageDlg('Disable row '+IntToStr(j), mtConfirmation, [mbYes, mbNo], 0, mbYes) =mrYes then begin With Stringgrid1 As TStringGrid Do With Canvas Do begin for i := 0 to 2 do begin Rect := CellRect (i, StringGrid1.Selection.Top); Font.Style := Font.Style + [fsStrikeOut]; FillRect(Rect); DrawText(Canvas.Handle, PChar(Cells[i,j]), -1, Rect ,DT_CENTER ); end; end; end; end; end;
De plus je dois en premier lieu faire un click gauche avant de faire un click droit; comment éviter cela?
Merci pour vos conseils!!!
PhilLu
Messages postés251Date d'inscriptionlundi 9 novembre 2009StatutMembreDernière intervention11 mai 2021 10 déc. 2013 à 22:48
Salut cantador,
Je ne vois pas où je déselectionne une cellule!?!
Au click droit je récupère le numéro de la ligne. (onMouseDown)
if Button = mbRight then begin j:=StringGrid1.Selection.Top; If MessageDlg('Disable row '+IntToStr(j), mtConfirmation, [mbYes, mbNo], 0, mbYes) =mrYes then begin
Puis la procédure suivante modifie les cellules de cette ligne pour les colonnes 0 à 2
With Stringgrid1 As TStringGrid Do With Canvas Do begin for i := 0 to 2 do begin Rect := CellRect (i, StringGrid1.Selection.Top); Font.Style := Font.Style + [fsStrikeOut]; FillRect(Rect); DrawText(Canvas.Handle, PChar(Cells[i,j]), -1, Rect ,DT_CENTER ); end; end; end;
Je pense plutôt que le premier click qui sélectionne la cellule et lui donne le focus empêche qu'elle soit "repeinte".
Il faudrait donc qu'avant la routine Canvas, je libère le focus de cette cellule... mais comment?????
merci pour tes lumières!!! ;-)
PhilLu
PhilLu
Messages postés251Date d'inscriptionlundi 9 novembre 2009StatutMembreDernière intervention11 mai 2021 10 déc. 2013 à 23:21
J'ai ajouté ce code entre les deux pour libérer le focus de cette cellule (en donnant le focus à une autre cellule)
with NewSelection do begin Left:=1; Right:=1; Top:=3; Bottom:=3; end; StringGrid1.Selection:=NewSelection;