Для успешного кодирования необходимо включить 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; |
OAmiry/Borland |