Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.09.2007, 12:41   #1
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию наличие определенного свойства у контрола

доброго времени суток!
подскажите как узнать есть ли определенное свойство у контрола программно?
у меня есть например лэйбел и имадж, мне надо программно узнать есть ли у этих контролов свойство font и в зависимости от этого действовать далее
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 03.09.2007, 12:54   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Код:
function HasProperty(Obj: TObject; Prop: string) : PPropInfo;
begin
  Result := GetPropInfo(Obj.ClassInfo, Prop);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  p : pointer;
begin
  p := HasProperty(Button1, 'Color');
  if p <> nil then
    SetOrdProp(Button1, p, clRed)
  else
    ShowMessage('Button has no color property');
  p := HasProperty(Label1, 'Color');
  if p <> nil then
    SetOrdProp(Label1, p, clRed)
  else
    ShowMessage('Label has no color property');
  p := HasProperty(Label1.Font, 'Color');
  if p <> nil then
    SetOrdProp(Label1.Font.Color, p, clBlue)
  else
    ShowMessage('Label.Font has no color property');
end;
_SERGEYX_ вне форума Ответить с цитированием
Старый 03.09.2007, 15:47   #3
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
Код:
function HasProperty(Obj: TObject; Prop: string) : PPropInfo;
begin
  Result := GetPropInfo(Obj.ClassInfo, Prop);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  p : pointer;
begin
  p := HasProperty(Button1, 'Color');
  if p <> nil then
    SetOrdProp(Button1, p, clRed)
  else
    ShowMessage('Button has no color property');
  p := HasProperty(Label1, 'Color');
  if p <> nil then
    SetOrdProp(Label1, p, clRed)
  else
    ShowMessage('Label has no color property');
  p := HasProperty(Label1.Font, 'Color');
  if p <> nil then
    SetOrdProp(Label1.Font.Color, p, clBlue)
  else
    ShowMessage('Label.Font has no color property');
end;
код помог, спасибо, но появился еще вопрос, при чтении свойств у невизуального контрола выскакивает ошибка, как ее можно отловить, или узнать что контрол не визуальный? заранее спасибо
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 03.09.2007, 16:13   #4
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

хз. Ну, компонентов не так уж много... можно сделать так
var i: Integer;
begin
for i := 0 to ComponentCount - 1 do
if (Components[i] is TEdit) or (Components[i] is TLabel) or (Components[i] is TPanel) then
{...}
_SERGEYX_ вне форума Ответить с цитированием
Старый 03.09.2007, 16:35   #5
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

Цитата:
Сообщение от Toxa Посмотреть сообщение
появился еще вопрос, при чтении свойств у невизуального контрола выскакивает ошибка, как ее можно отловить, или узнать что контрол не визуальный? заранее спасибо
разобрался сам, проверял self.component вместо self.control, теперь работает
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 03.09.2007, 16:54   #6
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

мне надо динамически изменять шрифт у всех контролов на форме я пишу
(Self.Controls[i] as tbutton).font.size:=14;
а вот вместо tbutton можно динамически как нить подставлять все классы по очереди или только перечислять?
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверить наличие листа с данным названием Sega Microsoft Office Excel 2 05.08.2008 17:18
Получение хэндла дочернего контрола Lich Win Api 7 01.07.2008 10:58
Си - Написать функцию, проверяющую наличие в строке заданного слова Cvetok Помощь студентам 1 14.05.2008 05:44
Определить наличие коммента softrix Microsoft Office Excel 2 28.04.2008 23:01
Создание файла определенного типа Македонский Общие вопросы Delphi 12 06.09.2007 11:58