Barrer des cellules d'un stringGrid

PhilLu Messages postés 251 Date d'inscription lundi 9 novembre 2009 Statut Membre Dernière intervention 11 mai 2021 - 7 déc. 2013 à 18:06
PhilLu Messages postés 251 Date d'inscription lundi 9 novembre 2009 Statut Membre Dernière intervention 11 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!!!

2 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
10 déc. 2013 à 16:53
bonjour,

oui, c'est normal car lors du clic droit tu désélectionnes la cellule
cliquée et celle-ci n'est donc pas prise en compte.

solution possible : stocker cette cellule ou sa position (x,y)
et l'afficher à travers le OnDrawCell.

à ton clavier !

cantador
0
PhilLu Messages postés 251 Date d'inscription lundi 9 novembre 2009 Statut Membre Dernière intervention 11 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
0
PhilLu Messages postés 251 Date d'inscription lundi 9 novembre 2009 Statut Membre Dernière intervention 11 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;

... mais pas mieux :-(
0
Rejoignez-nous