Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Поиск и управление TEdit и TField

Delphi , Компоненты и Классы , TEdit

Поиск и управление TEdit и TField

Автор: Robert Wittig

Компания Microsoft благодарит Вас за покупку операционнй системы Microsoft ScanDisk.

Я хотел бы менять цвет компонентов TDBEdit и TEdit, расположенных на форме, на другой, "отчетливый" цвет, в том случае, если с помощью них требуется ввести какие-либо данные.

Как насчет этого? Представляю вашему вниманию два метода. Первый метод задает цвет каждому DBEdit, имеющему требуемое поле. Второй метод (более сложный) задает цвет каждому БД-компоненту, имеющему необходимое поле.


procedure TForm3.Button3Click(Sender: TObject);
var
  Control: Integer;
begin
  for Control := 0 to ControlCount - 1 do
    if Controls[Control] is TDBEdit then
      with TDBEdit(Controls[Control]) do
        if DataSource.DataSet.FieldByName(DataField).Required then
          Color := clRed;
end;

{ Данный метод будет работать только в случае, если
БД-компонент обладает тремя полями: DataSource, типа
TDataSource, DataField, типа String, и Color, типа
TColor (это не должно быть проблемой). Также вам
необходимо включить TypInfo в список используемых
модулей }

procedure TForm3.Button4Click(Sender: TObject);
var
  Control: Integer;

  DataSource: TDataSource;
  DataField: string;

  function GetDataSource(Instance: TComponent): Boolean;
  var
    PropInfo: PPropInfo;
  begin
    Result := False;
    PropInfo := TypInfo.GetPropInfo(Instance.ClassInfo, 'DataSource');
    if (PropInfo <> nil) and
      (PropInfo^.PropType^.Kind = tkClass) then
    begin
      DataSource := TDataSource(TypInfo.GetOrdProp(Instance, PropInfo));
      Result := DataSource <> nil;
    end;
  end;

  function GetDataField(Instance: TComponent): Boolean;
  var
    PropInfo: PPropInfo;
  begin
    Result := False;
    PropInfo := TypInfo.GetPropInfo(Instance.ClassInfo, 'DataField');
    if (PropInfo <> nil) and
      (PropInfo^.PropType^.Kind = tkString) then
    begin
      DataField := TypInfo.GetStrProp(Instance, PropInfo);
      Result := True;
    end;
  end;

  procedure SetColor(Instance: TComponent; Color: TColor);
  var
    PropInfo: PPropInfo;
  begin
    PropInfo := TypInfo.GetPropInfo(Instance.ClassInfo, 'Color');
    if (PropInfo <> nil) and
      (PropInfo^.PropType^.Kind = tkInteger) then
      TypInfo.SetOrdProp(Instance, PropInfo, Ord(Color));
  end;

begin
  for Control := 0 to ControlCount - 1 do
    if GetDataSource(Controls[Control]) and
      GetDataField(Controls[Control]) and
      (DataSource.DataSet <> nil) and
      DataSource.DataSet.FieldByName(DataField).Required then
      SetColor(Controls[Control], clRed);
end;

Комментарий к коду:

Код написан на языке Delphi, основанном на Паскале, и предназначен для поиска и управления компонентами TEdit и TField на форме. Цель - изменить цвет этих компонентов в зависимости от необходимости ввода.

В коде есть два метода: Button3Click и Button4Click. Оба метода используют цикл for для перебора всех контролов на форме, но они используют разные подходы для достижения своих целей.

Метод 1 (Button3Click): Этот метод изменяет цвет каждого компонента DBEdit, который имеет обязательное поле. Он делает это, проверяя, есть ли в DataSource'е DataSet поле с тем же именем, как у свойства DataField компонента TDBEdit. Если такое поле существует и является обязательным, то цвет компонента TDBEdit изменяется на clRed.

Метод 2 (Button4Click): Этот метод более сложен и изменяет цвет каждого DB-компонента, который имеет обязательное поле. Он использует два вспомогательных функции: GetDataSource и GetDataField. Эти функции проверяют, имеет ли компонент свойство DataSource и свойство DataField соответственно. Если оба условия выполняются, то метод вызывает еще одну вспомогательную функцию под названием SetColor, которая изменяет цвет компонента на clRed.

В обоих методах цвета компонентов изменяются с помощью свойства Color. Функции GetDataSource и GetDataField используют TypInfo для получения информации о свойствах компонентов.

Код предполагает, что каждый DB-компонент имеет свойства DataSource, DataField и Color. Если эти предположения не выполняются, то код может работать не так, как ожидается.

В целом, оба метода могут использоваться для изменения цвета TEdit и TField компонентов в зависимости от необходимости ввода. Однако Метод 2 более гибок и может быть применен к любому DB-компоненту, который имеет свойства DataSource и DataField.

В статье описаны два метода изменения цвета компонентов TDBEdit и TEdit на форме Delphi, если они требуют ввода данных.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TEdit ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-08 18:57:32/0.011994123458862/0