Bonjour à tous,
Pour les besoins d'une application, je doit permettre l'édition de certaines cellules d'un TStringGrid suivant la colonne et la ligne. En fouillant la FAQ, je suis tombé sur ceci :
Comment empêcher l'édition d'une cellulle dans un TStringGrid ?
J'ai donc remodelé cet exmple de façon à répondre à mes besoins. Il ressemble à ça :Nous souhaitons que l'utilisateur n'ait pas la possibilité d'éditer certaines cellules d'un TStringGrid, les autres restant parfaitement éditables.
C'est la propriété Options-->goEditing qui permet ou non l'édition des cellules dans le TStringGrid.
Il suffit alors, dans l'évènement OnSelectCell, d'activer ou de désactiver l'option goEditing en fonction des coordonnées de la cellule et/ou de ce qu'elle contient :
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
if (ARow=1) //Condition à remplir pour interdire l'édition de la cellule
then StringGrid1.Options:=StringGrid1.Options-[goEditing] //désactive l'édition
else StringGrid1.Options:=StringGrid1.Options+[goEditing]; //active l'édition
end;
Le problème de cette solution est le suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 procedure TF_CAB_PRINT.Tab_DESCRIPTIONSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); begin inherited; if (Tab_DESCRIPTION.Cells[wCOL_TYPE_LIGNE,ARow] = wTYPE_LIGNE_DSC) AND (ACol = wCOL_VAL) then Tab_DESCRIPTION.Options:=Tab_DESCRIPTION.Options+[goEditing]-[goRowSelect] else begin Tab_DESCRIPTION.Options:=Tab_DESCRIPTION.Options-[goEditing]+[goRowSelect]; end; end;
Lorsque je clique sur une zone éditable, pas de soucis, ça fonctionne correctement.
En revanche, lorsque je passe d'une zone éditable à une zone non éditable, celle-ci l'est. Je ne sais pas si c'est claire
Grossièrement, il semblerais que l'instruction
-Tab_DESCRIPTION.Options:=Tab_DESCRIPTION.Options-[goEditing]+[goRowSelect];
Soit prise en compte après le clique sur une case non éditable. Ce qui fait que la case cliquée est éditable alors qu'elle ne le devrait pas..
Je ne pense pas que la solution soit compliquée, mais je n'arrive pas à la trouver... Voilà pourquoi je vous demande de l'aide
Merci par avance,
Cordialement,
ZenZiTone.
Partager