Отображаем цветом управление, когда оно заблокировано
Теперь, шаг за шагом создание простого примера, который состоит из TForm с TButton и TDBRichEdit и демонстрирует это поведение.
- Выберите
File|New Application
из меню Delphi - Поместите TDataSource, TTable, TButton и TDBEdit на форму
- Установите свойство DatabaseName таблицы в DEMOS
- Установите свойство TableName таблицы в ORDERS.DB
- Установите свойство DataSet набора данных в Table1
- Установите свойство DataSource управления DBEdit в DataSource1
- Установите свойство DataField управления DBEdit в CustNo
- Установите свойство Active управления DBEdit в False
- Добавьте TypInfo в раздел Uses формы
Ниже фактическая процедура, которую поместите в Implementation:
// Эта процедура устанавливает цвет текста // управления в серый или определенный пользователем // константы цвета clInfoText. procedure SetDBControlColor(aControl: TControl); var FontPropInfo: PPropInfo; begin // Проверить, является ли управление знающим данные if (GetPropInfo(aControl.ClassInfo, 'DataSource') = nil) then exit else begin // Извлеките свойство шрифта FontPropInfo:= GetPropInfo(aControl.ClassInfo, 'Font'); // Проверьте управление включено/отключено if (aControl.Enabled = false) then // Если отключено, установите цвет текста в серый TFont(GetOrdProp(aControl, FontPropInfo)).Color:= clGrayText else // Если включено, установите цвет текста в цвет clInfoText TFont(GetOrdProp(aControl, FontPropInfo)).Color:= clInfoText; end; end;
Код для события ButtonClick должен содержать:
// Этот код циклически повторяется через массив Controls // и вызывает SetDbControlColor для каждого управления на форме, // чтобы убедиться, что цвет текста установлен правильно procedure TForm1.Button1Click(Sender: TObject); var i: integer; begin // Цикл через массив управлений for i:= 0 to ControlCount-1 do SetDBControlColor(Controls[i]); end;
Комментарии