Советы по 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 { Основной код ниже } 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 [000566]



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