ActiveControl имеет DataSet

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Автор: OAmiry (Borland)

Для успешного кодирования необходимо включить typinfo в список используемых модулей. Код данного примера инвертирует логическое свойство Active набора данных, связанного с активным элементом управления при каждом нажатии пользователем клавиши ESC.

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;

Shift: TShiftState);

var

PropInfo: PPropInfo;

PropValue: TObject;

ds: TDataSource;

begin

if Key = VK_ESCAPE then

{ Основной код ниже }

try

ds := nil;

{ Проверяем, имеет ли компонент свойство DataSource }

PropInfo := GetPropInfo(ActiveControl.ClassInfo, ‘DataSource’);

if PropInfo nil then

{ Свойство компонента datasource типа class (например, TDataSource) }

if PropInfo^.PropType^.Kind = tkClass then

begin

PropValue := TObject(GetOrdProp(ActiveControl, PropInfo));

{ Создаем слепок найденного TDataSource }

ds := (PropValue as DB.TDataSource);

{ Используем dataset, связанный с datasource }

if not (ds.DataSet.State in dsEditModes) then

ds.DataSet.Active := not ds.DataSet.Active;

end;

except

on E: EInvalidCast do

ShowMessage(‘Ошибка. Ожидался DataSource’);

end;

end;

{/codecitation}

Добавить комментарий