Comment interdire la saisie dans certaines cellules d'un TStringGrid? [Résolu]

Messages postés
90
Date d'inscription
mardi 28 octobre 2003
Dernière intervention
24 avril 2008
- - Dernière réponse : Cirec
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
- 2 mars 2006 à 19:31
bonjour,
j'utilise un TStringGrid (nommé TabContexteBainDecapage) qui devient editable lorsque je clique sur un bouton :
if ModificationLigne = true then
TabContexteBainDecapage.Options := TabContexteBainDecapage.Options + [goEditing]
else
TabContexteBainDecapage.Options := TabContexteBainDecapage.Options - [goEditing];

Seules les x premières lignes sont éditables (Arow > nbBacs : non éditable) et a priori cela marche parfaitement.

Néammoins, si, étant en mode non éditable, je clique sur une cellule > nbBacs, le focus vient sur la cellule et rien ne se passe, ce qui est le fonctionnement attendu.
Si je clique ensuite sur le bouton pour rendre éditable le TStringGrid et que je reclique sur la cellule ayant le focus, elle est éditable.

Comment faire pour qu'une cellule ayant le focus ne soit pas éditable?

Ci-joint les événements codés:

KeyPress :
procedure TParametrageSIMBAD.TabContexteBainDecapageKeyPress(Sender: TObject;
var Key: Char);
begin
if not (Key in #13, '.', '0'..'9') then
key : = #9;
end;

SelectCell :

procedure TParametrageSIMBAD.TabContexteBainDecapageSelectCell(Sender: TObject;
ACol, ARow: Integer; var CanSelect: Boolean);
begin
if (Arow > nbBacs) then
begin
ParametrageSIMBAD.TabContexteBainDecapage.Options := ParametrageSIMBAD.TabContexteBainDecapage.Options - [goEditing];
end
else
begin
if ModificationLigne = true then
ParametrageSIMBAD.TabContexteBainDecapage.Options := ParametrageSIMBAD.TabContexteBainDecapage.Options + [goEditing]
else
ParametrageSIMBAD.TabContexteBainDecapage.Options := ParametrageSIMBAD.TabContexteBainDecapage.Options - [goEditing];
end;
end;

A l'initialisation le tableau est :

procedure initTableauLigneParametrageBain();
begin
{on fixe le nb de lignes et colonnes fixes}
ParametrageSIMBAD.TabContexteBainDecapage.FixedCols := 1;
ParametrageSIMBAD.TabContexteBainDecapage.FixedRows := 1;


{on définit la largeur des colonnes}
ParametrageSIMBAD.TabContexteBainDecapage.ColWidths[0] := 40;
ParametrageSIMBAD.TabContexteBainDecapage.ColWidths[1] := 70;
ParametrageSIMBAD.TabContexteBainDecapage.ColWidths[2] := 80;
ParametrageSIMBAD.TabContexteBainDecapage.ColWidths[3] := 95;
ParametrageSIMBAD.TabContexteBainDecapage.ColWidths[4] := 100;


{On définit les titres de la premiére colonne }
ParametrageSIMBAD.TabContexteBainDecapage.Cells[0, 0] := IHM_parametrage_NumeroBac;
ParametrageSIMBAD.TabContexteBainDecapage.Cells[1, 0] := IHM_parametrage_LongueurBac;
ParametrageSIMBAD.TabContexteBainDecapage.Cells[2, 0] := IHM_parametrage_volumeBac;
ParametrageSIMBAD.TabContexteBainDecapage.Cells[3, 0] := IHM_parametrage_vitesseEntrainementBac;
ParametrageSIMBAD.TabContexteBainDecapage.Cells[4, 0] := IHM_parametrage_DebitEvaporationBac;


ParametrageSIMBAD.TabContexteBainDecapage.Enabled := true;
ParametrageSIMBAD.TabContexteBainDecapage.refresh;
end;

merci
emmanuel
Afficher la suite 

Votre réponse

1 réponse

Meilleure réponse
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
39
3
Merci
Salut,

Essaye déjà avec ça:

procedure TParametrageSIMBAD.TabContexteBainDecapageSelectCell(Sender: TObject;
ACol, ARow: Integer; var CanSelect: Boolean);
begin
if (Arow > nbBacs) then CanSelect := False;
End ;

et dans la même procédure :
ParametrageSIMBAD.TabContexteBainDecapage.Options : = ParametrageSIMBAD.TabContexteBainDecapage.Options - [goEditing];

Peut s'écrire comme ceci :
TabContexteBainDecapage.Options := TabContexteBainDecapage.Options - [goEditing];
pas besoin de donner le nom de la Form ici comme dans toutes les Procédures et Fonctions qui commence par le nom de la Form

@+
Cirec

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Cirec

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.