Хочу при наведении на ячейку DBGridEh получать ID записи и что бы в правой части ячейки появлялась кнопка.
Кнопка одна для всех записей, представляет из себя TPanel в инвизе с событием OnClick.
Я навожу курсор мыши на ячейку, панель перемещается в нужно место, меняет свойство Visible и Enable на true, в её событии нажатия обрабатываю запись с ID в этой же ячейки. (Выбранная запись в DBgridEh не меняется).
Нашел такой способ:
procedure TFSprav.DBGridEh2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
grCoord: TGridCoord;
aGrid: TCrackDBGrid;
NewActiveRecord, oldActiveRecord: integer;
delta: string;
begin
aGrid := TCrackDBGrid(Sender);
grCoord := aGrid.MouseCoord(X, Y);
aGrid.DataSource.DataSet.DisableControls;
oldActiveRecord := aGrid.DataLink.ActiveRecord; // запоминаем текущую строку (отображаемую) не номер записи
newActiveRecord := grCoord.Y - aGrid.DataLink.ActiveRecord; // получаем положение строки на которой наведена мышка.
aGrid.DataLink.MoveBy(newActiveRecord);
delta := aGrid.DataLink.DataSet.FieldByName('Name').AsString;
if grCoord.X > 0 then
begin
caption := delta;
end;
aGrid.DataLink.ActiveRecord := oldActiveRecord; // возвращаем положение к изначальной строке
aGrid.DataSource.DataSet.EnableControls;
end;
Но возникла трудность.
На DataSource стоит обработчик события OnDataChange, который передает ID выбранной в гриде записи в параметры другого ADOQuery.
По отдельности оба методы работают, а вместе - нет. Программа залипает в тот момент когда происходит MoveBy у DataSet при изменении положения курсора, он вызывает событие OnDataChange, что при перерисовке видимо опять получает положение мыши и вызывает MoveBy и так по кругу, пока курсор мыши не уберу с грида.
Как поправить?