Bonjour à tous,
Comment faire sur une XStringGrid qui contient x colonnes pour protéger 1 colonne précise en écriture ? Les autres étant ouverte en écriture...
Merci
a+
Version imprimable
Bonjour à tous,
Comment faire sur une XStringGrid qui contient x colonnes pour protéger 1 colonne précise en écriture ? Les autres étant ouverte en écriture...
Merci
a+
Salut
Je ne connais pas ce composant, mais si il dérive d'un TStringGrid tu dois avoir accès à l'évènement OnSelectCell qui te permettra d'accepter/interdire la sélection d'une cellule d'une colonne particulière.
Dans le cas contraire il existe certainement un évènement ou propriété similaire.
@+ Claudius
"l'évènement OnSelectCell qui te permettra d'accepter/interdire la sélection d'une cellule d'une colonne particulière"
Comment fais-tu pour interdire ou accepter la sélection d'une cellule d'une colonne ?
Je change avec true / false la valeur de CanSelect mais ça ne marche pô...
Re,
Un exemple:
Ceci interdit la sélection des cellules de la 1° colonne.Code:
1
2
3
4
5 procedure TForm1.XStringGrid1SelectCell(Sender: TObject; Col, Row: Longint; var CanSelect: Boolean); begin CanSelect := (Col > 0); end;
@+
je n'y arrive pas.
voici mon événement OnSelectCell :
j'ai essayé de mettre directement true ou false dans le CanSelect mais je peux toujours sélectionner ma cellule et y saisir des infos...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 procedure XStringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); var i : integer; str1, str2 : string; begin if(ACol = -1)then exit; for i := 0 to XStringGrid1.ColCount-1 do begin str1 := StrReplace(' ', '', XStringGrid1.Cells[ACol,0]); str2 := StrReplace(' ', '', tab[i].name); if(str1 = str2) then begin if(tab[i].read_only = 1)then begin CanSelect := (ACol > 0); break; end else begin CanSelect := not (ACol > 0); break; end; end; end; end;
Salut
J'ai du mal à saisir ce que fait ton code. :koi:
Je pense que le problème viens du fait que tu fais une boucle
Cette boucle est-elle nécessaire ? Ne suffit-il pas de comparer la cellule en question (ACol) avec Tab[ACol].ReadOnly ?Code:
1
2 for i := 0 to XStringGrid1.ColCount-1 do
@+ Claudius
l'indice de Tab[indice].ReadOnly ne suit pas exactement l'indice ACol, c'est pour ça que je dois faire une recherche avec un for.
Re-salut
Essaye comme ça pour voir (nota dans cette exemple Read_Only est un Boolean):
@+Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); var I: Integer; ColName: string; begin CanSelect := False; with TStringGrid(Sender) do begin ColName := StringReplace(Cells[ACol, 0], ' ', '', [rfReplaceAll]); for I := Low(Tab) to High(Tab) do begin if ColName = StringReplace(Tab[I].Name, ' ', '', [rfReplaceAll]) then begin CanSelect := not Tab[I].Read_Only; Break; end; end; end; end;
toujours pas