Карта сайтаСсылкиКонтакты

Хостинг


Отображаем серым цветом управление данных, когда оно заблокировано

PDF Печать
Статьи

Код ниже использует RTTI (информация типа во время выполнения), чтобы извлечь информацию свойства и использовать эту информаци, чтобы установить цвет шрифта в серый, когда управление заблокировано. Если управление разрешено, цвет текста устанавливается в стандартный цвет шрифта.

Теперь, шаг за шагом создание простого примера, который состоит из 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; 

 

Добавить комментарий


Защитный код
Обновить