Delphi DBGrid cella kijelölés + ComboBox
2021-11-06T14:55:50+01:00
2021-11-08T09:07:43+01:00
2022-08-12T05:35:29+02:00
csanesz
Sziasztok!

Készítettem egy alkalmazást, melyben a DBGrid 1 oszlopában listát jelenítek meg (ComboBox) amiből lehet választani egy értéket.
Amikor először enterrel belépek a mezőbe, majd enterrel kilépek, akkor jól működik, a cellát kijelöli. Viszont ha újra nyomok egy entert és belépek a listába és enterrel vissza ki, akkor már nem a cellát csak a benne lévő szöveget jelöli ki.
Van tipp hogy tudnám megoldani, hogy kilépéskor a cella legyen kijelölve ne a szöveg?

type THackDBGrid = class(TDBGRid); procedure TForm1.DBGrid1ColExit(Sender: TObject); begin IncComboBox1.Hide; end; procedure TForm1.IncComboBox1Exit(Sender: TObject); begin DBGrid1.SetFocus; DBGrid1.SelectedField := tblTablaMezo; end; procedure TForm1.IncComboBox1Change(Sender: TObject); begin tblTabla.Edit; tblTablaTarolo.Value := IncComboBox1.Text; tblTabla.Post; end; procedure TForm1.IncComboBox1KeyPress(Sender: TObject; var Key: Char); begin If (Key = #13) Then Begin tblTabla.Edit; tblTablaMezo.Value := IncComboBox1.Text; tblTabla.Post; IncComboBox1.Hide; DBGrid1.SetFocus; End; end; procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char); var Rect: TRect; begin If (Key = #13) And (DBgrid1.SelectedField.FieldName = 'Mezo') And (Not IncComboBox1.Visible) Then Begin Rect := THackDBGrid(DBGrid1).CellRect(13,THackDBGrid(DBGrid1).Row); with IncComboBox1 do Begin Left := Rect.LEft + DBGrid1.Left + 2; Top := Rect.Top + DBGrid1.Top + 2; Width := Rect.Right - Rect.Left; Height := Rect.Bottom - Rect.Top; Visible := True; SetFocus; itemindex := items.IndexOf(tblTabla.FieldByName('Mezo').AsString); end; End; end; procedure TForm1.DBGrid1CellClick(Column: TColumn); var Rect: TRect; begin If (Column.FieldName = 'Mezo') Then Begin Rect := THackDBGrid(DBGrid1).CellRect(13,THackDBGrid(DBGrid1).Row); with IncComboBox1 do Begin Left := Rect.LEft + DBGrid1.Left + 2; Top := Rect.Top + DBGrid1.Top + 2; Width := Rect.Right - Rect.Left; Height := Rect.Bottom - Rect.Top; Visible := True; SetFocus; itemindex := items.IndexOf(tblTabla.FieldByName('Mezo').AsString); end; End; end; procedure TForm1.DBGrid1ColEnter(Sender: TObject); var Rect: TRect; begin If (DBGrid1.SelectedField.FieldName = 'Mezo') Then Begin Rect := THackDBGrid(DBGrid1).CellRect(13,THackDBGrid(DBGrid1).Row); with IncComboBox1 do Begin Left := Rect.LEft + DBGrid1.Left + 2; Top := Rect.Top + DBGrid1.Top + 2; Width := Rect.Right - Rect.Left; Height := Rect.Bottom - Rect.Top; Visible := True; SetFocus; itemindex := items.IndexOf(tblTabla.FieldByName('Mezo').AsString); end; End; end;
Köszönöm!
Mutasd a teljes hozzászólást!
Megvan a megoldás.
EditorMode értékét át kell állítani False-ra.

procedure TForm1.IncComboBox1KeyPress(Sender: TObject; var Key: Char); begin If (Key = #13) Then Begin tblTabla.Edit; tblTablaMezo.Value := IncComboBox1.Text; tblTabla.Post; IncComboBox1.Hide; DBGrid1.SetFocus; DBGRid1.EditorMode := False; end; end;
Mutasd a teljes hozzászólást!

abcd