Выпустил новую версию с поддержкой события. Вставил код из Вашего примера, Есть отличие:
Для получения прямоугольника, где отображать редактор, использовать r = xDBGrid1.SelectedEditorRect;
Если в столбце используется 2 поля и нужно понять где и как отображать редаткор, для верхнего поля или для нижнего, использовать xDBGrid1.CellCursorPos.
Если (Column.Index = 5) and (xDBGrid1.CellCursorPos = ccpTop) курсор в столбце с индексом 5 и в верхнем положении для поля Field
Если (Column.Index = 5) and (xDBGrid1.CellCursorPos = ccpBottom) курсор в столбце с индексом 5 и в нижнем положении для поля xField
Я убрал связь с полями и пробовал без данных, время было мало на эксперименты, сам редактор отображается. Попробуйте, получится с данными или нет?
- Код: Выделить всё
method TNomenkForm.xDBGrid1SelectEditor(Sender: TObject; Column: TxColumn; var Editor: TWinControl);
var
r: TRect;
Ed: TDBLookupComboBox;
begin
//if (Column.Index = 5) then
//Если в столбце используется 2 поля и нужно понять где и как отображать редаткор,
//Для верхнего поля или для нижнего, использовать xDBGrid1.CellCursorPos
//На примере ниже проверяется что курсор стоит в верхнем положении.
//Если второе поле в столбце не используется то использовать как if (Column.Index = 5) then, без проверки позиции курсора
if (Column.Index = 5) and (xDBGrid1.CellCursorPos = ccpTop) then
if ED = nil then
ED = TDBLookupComboBox.Create(Self);
end;
ED.Parent = TWinControl(Sender);
ED.Visible = False;
ED.Color = clLime;
//ED.DataSource:=ALBUMS_DS;
//ED.DataField:='ArtistId';
//ED.ListSource:=ARTISTS_DS;
//ED.KeyField:='ArtistId';
//ED.ListField:='Name';
ED.AutoComplete = True;
// ED.AutoDropDown:=True;
// ED.AutoSelect:=True;
r = xDBGrid1.SelectedEditorRect;
ED.Left = r.Left-2;
ED.Top = r.Top-2;
ED.Width = r.Width;
ED.Height = r.Height;
Editor = ED;
end;
end;
ps. Пример на Дизель-Паскале.