Советы по Delphi

         

ActiveControl имеет DataSet?


Для успешного кодирования необходимо включить 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{ Основной код ниже }tryds := nil ;{ Проверяем, имеет ли компонент свойство DataSource }PropInfo := GetPropInfo(ActiveControl.ClassInfo, 'DataSource') ;if PropInfo <> nil then{ Свойство компонента datasource типа class (например, TDataSource) }if PropInfo^.PropType^.Kind = tkClass thenbeginPropValue := TObject(GetOrdProp(ActiveControl, PropInfo));{ Создаем слепок найденного TDataSource }ds := (PropValue as DB.TDataSource);{ Используем dataset, связанный с datasource }if not (ds.DataSet.State in dsEditModes) thends.DataSet.Active := not ds.DataSet.Active ;end ;excepton E: EInvalidCast do ShowMessage('Ошибка. Ожидался DataSource') ;end ;end;

OAmiry/Borland [000566]



Содержание раздела