Ich möchte gern mittels einer ComboBox in einem StringGrid diverse Werte eingeben. Diese sollen in der ComboBox gewählt werden, falls dieser Wert jedoch noch nicht in der TStringlist der ComboBox enthalten ist, soll dieser neu eingefügt werden. Dies habe ich mit Hilfe dieses Forums und einigem Suchen/Probieren auch soweit hinbekommen.
Nun habe ich folgende 2 Fragen:
1. Wie bekomme ich es hin, dass nach Schließen der ComboBox der Fokus (rote Umrandung) wieder auf diese bzw. auf die nächste zu bearbeitende Zelle im Stringgrid gesetzt wird?!
2. Wie kann ich dem Stringgrid sagen, dass als nächstes die Zelle unterhalb der derzeit aktiven Zelle bearbeitet werden soll (die Zellen neben der bearbeitenden Zelle werden nach Auswahl in der ComboBox automatisch gefüllt)?!
Code: Alles auswählen
procedure TForm1.StringGrid1SelectEditor(Sender: TObject; aCol, aRow: Integer; var Editor: TWinControl);
begin
if aCol=1 then begin
ComboBox1.BoundsRect:=StringGrid1.CellRect(aCol,aRow);
ComboBox1.Text:=StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row];
ComboBox1.ItemIndex:=-1;
Editor:=ComboBox1;
end;
if acol>1 then Editor:=nil;
end;
procedure TForm1.ComboBox1Exit(Sender: TObject);
begin
StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row]:=ComboBox1.Text;
// StringGrid1.Row:=StringGrid1.Row+1;
// ComboBox1.EditingDone;
// ComboBox1.Hide;
// StringGrid1.EditingDone;
// StringGrid1.SetFocus;
end;
procedure TForm1.ComboBox1EditingDone(Sender: TObject);
begin
ComboBox1.Hide;
end;
procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if key=13 then begin
if ComboBox1.ItemIndex<0 then ComboBox1.ItemIndex:=ComboBox1.Items.Add(ComboBox1.Text);
ComboBox1.EditingDone;
end;
end;
Vielen Dank im Voraus!!!