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

furax13 90 Messages postés mardi 28 octobre 2003Date d'inscription 24 avril 2008 Dernière intervention - 2 mars 2006 à 17:51 - Dernière réponse : Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention
- 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
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 2 mars 2006 à 19:31
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

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes 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.