Для успешного кодирования необходимо включить typinfo в список используемых
модулей. Код данного примера инвертирует логическое свойство Active набора
данных, связанного с активным элементом управления при каждом нажатии
пользователем клавиши ESC.
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
PropInfo: PPropInfo;
PropValue: TObject;
ds: TDataSource;
beginif Key = VK_ESCAPE then{ Основной код ниже }try
ds := nil;
{ Проверяем, имеет ли компонент свойство DataSource }
PropInfo := GetPropInfo(ActiveControl.ClassInfo, 'DataSource');
if PropInfo <> nilthen{ Свойство компонента datasource типа class (например, TDataSource) }if PropInfo^.PropType^.Kind = tkClass thenbegin
PropValue := TObject(GetOrdProp(ActiveControl, PropInfo));
{ Создаем слепок найденного TDataSource }
ds := (PropValue as DB.TDataSource);
{ Используем dataset, связанный с datasource }ifnot (ds.DataSet.State in dsEditModes) then
ds.DataSet.Active := not ds.DataSet.Active;
end;
excepton E: EInvalidCast do
ShowMessage('Ошибка. Ожидался DataSource');
end;
end;
Программный код на Delphi, демонстрирующий, как инвертировать свойство Active для связанного с активным контролем датасета при нажатии клавиши Escape.
Обзор того, что код делает:
Процедура FormKeyUp вызывается каждый раз, когда форма получает событие key-up.
Если нажатая клавиша - это клавиша Escape (VK_ESCAPE), код пытается инвертировать свойство Active для датасета, связанного с активным контролем.
Для достижения этого код использует функцию GetPropInfo, чтобы получить информацию о свойстве DataSource класса активного контрола.
Если свойство DataSource найдено и его тип - это класс (например, TDataSource), код создает экземпляр этого класса с помощью функции GetOrdProp.
Код затем кастит полученный объект в экземпляр класса TDataSource и получает датасет, связанный с ним.
Если датасет не находится в одном из режимов редактирования (dsEditModes), код инвертирует свойство Active для датасета.
Блок обработки исключений ловит любые исключения, возникшие при попытке кастинга, и отображает сообщение об ошибке, если такое событие происходит.
В целом, этот код предоставляет простой способ инвертировать активное состояние датасета, связанного с активным контролем, при нажатии клавиши Escape.
В статье описывается пример кода на языке Delphi, который изменяет логическое свойство Active набора данных, связанного с активным элементом управления, при нажатии клавиши ESC.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.