Barrer des cellules d'un stringGrid

Messages postés
249
Date d'inscription
lundi 9 novembre 2009
Statut
Membre
Dernière intervention
6 mai 2018
- - Dernière réponse : PhilLu
Messages postés
249
Date d'inscription
lundi 9 novembre 2009
Statut
Membre
Dernière intervention
6 mai 2018
- 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!!!
Afficher la suite 

2 réponses

Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
9
0
Merci
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
Commenter la réponse de cs_cantador
Messages postés
249
Date d'inscription
lundi 9 novembre 2009
Statut
Membre
Dernière intervention
6 mai 2018
0
Merci
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és
249
Date d'inscription
lundi 9 novembre 2009
Statut
Membre
Dernière intervention
6 mai 2018
-
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 :-(
Commenter la réponse de PhilLu