Dovrei fare questa operazione se inserisco un carattere in una LabelEdit
mi vengono proposte in una List Box affiancata tutti i dati che iniziano per quel carattere:
esempio se digito 's' ho tutti in nomi che iniziano per s (Stefano, Sandro ecc..), se digito
'sa' solo Sandro, Salvatore; tramite l'evento OnChange ogni volta che cambia quanto presente
nella LabelEdit1.Text cambia anche l'elenco della ListBox. Il problema è che se utilizzo una
StringGrid editabile, non ho l'evento (o non lo trovo) on change; ho provato con "KeyPressed",
ma se assegno ad una variabile
text1:=StringGrid1.Cells[cl,rg];
il valore di text1 è sempre vuoto.
Grazie per l'aiuto
Sì, sfruttando l'evento onSelectCell
procedure TForm1.StringGrid1SelectCell(Sender: TObject; aCol, aRow: Integer;
var CanSelect: Boolean);
begin
if aCol in [2, 4] then
StringGrid1.Options := StringGrid1.Options + [goEditing]
else
StringGrid1.Options := StringGrid1.Options - [goEditing];
end;
Prova a selezionare la cella prima di passare il focus:
stringgrid2.col := 1;
stringgrid2.row := 1;
stringgrid2.setfocus;
Uhm... ho provato a fare una cosa del genere:
procedure TForm1.StringGrid1EditingDone(Sender: TObject);
begin
StringGrid1.Cells[3,2] := '';
StringGrid1.Cells[3,2] := StringGrid1.Cells[2,2] + ' - editato';
end;
e funziona come dovrebbe. Riesci a fare un esempio minimo con il bug che hai riscontrato e postarlo qui?
A dire il vero non capisco dove sia la differenza: ho fatto una prova con una procedura
di prova e funziona (!!)
procedure TForm1.StringGrid1EditingDone(Sender: TObject);
var
cl,rg:integer;
a,b:integer;
begin
cl:=StringGrid1.Col;rg:=StringGrid1.Row;
case cl of
1: begin
a:=strtoint(StringGrid1.Cells[cl,rg]);
a:=a*3;
StringGrid1.Cells[4,rg]:=inttostr(a);
end;
2:begin
b:=strtoint(StringGrid1.Cells[cl,rg]);
b:=b*10;
StringGrid1.Cells[3,rg]:=inttostr(b); ;
end;
end;