Показать сообщение отдельно
  #5  
Старый 18.10.2012, 10:20
Аватар для Lost_Fish
Lost_Fish Lost_Fish вне форума
Начинающий
 
Регистрация: 21.07.2011
Адрес: Новосибирск
Сообщения: 103
Версия Delphi: Delphi 7,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от dr. F.I.N.
Вот тебе процедурка без всяких задурений с типом объектов.
Код:
uses
  TypInfo;

function CheckRedFont(ParentControl: TObject; CheckSelf: Boolean = false): Boolean;
var
  i: Integer;
  PropInfo: PPropInfo;
begin
  Result := false;
  if CheckSelf
  then
  begin
    PropInfo := GetPropInfo(ParentControl.ClassInfo, 'Font');
    if PropInfo <> nil
    then Result := Result and  (TFont(GetOrdProp(ParentControl, 'Font')).Color = clRed);
  end;
  if ParentControl is TControl
  then
  for i := 0 to TControl(ParentControl).ComponentCount - 1 do
  begin
    if TControl(ParentControl).Components[i] is TControl
    then Result := CheckRedFont(TControl(ParentControl).Components[i], true)
    else
    begin
      PropInfo := GetPropInfo(TControl(ParentControl).Components[i].ClassInfo, 'Font');
      if PropInfo <> nil
      then Result := Result and (TFont(GetOrdProp(TControl(ParentControl).Components[i], 'Font')).Color = clRed);
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if CheckRedFont(form1)
  then
  ShowMessage('red');
end;


Спасибо за процедурку та же рекурсия просто более универсальная для .font.color, но у меня ещё есть компоненты в которых нужно проверить .TControlEmptyDataInfoEh.Font.Color и свойство Not VarIsNull(.Value)
и + ко всему обнаружил невидимые SpeedButton's на текстовом поле ввода которые имеют красный цвет
__________________
Код сырец
Ответить с цитированием