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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2012, 13:54   #1
McFrey
Форумчанин
 
Аватар для McFrey
 
Регистрация: 15.10.2011
Сообщений: 306
По умолчанию Delphi Получение списка "основных" свойств компонента

Доброго времени суток уважаемые программисты.
Есть некая проблема...На форме находится TListBox и TМemo. В TListBox есть несколько строк с именами компонентов
(for example: button
label
edit)
Выбрав какой-то из этих компонентов в TМemo должны отобразиться его основные свойства (например имя, положение х,у).

Как получить список тех свойств которые меня интересуют?
На просторах интернета нашел такой код:
Код:
uses
  TypInfo;

procedure TForm1.FormCreate(Sender: TObject);
var
  PropList: PPropList;
  i: integer;
begin
  PropList := AllocMem(SizeOf(PropList^));
  i := 0;
  try
    GetPropList(TForm.ClassInfo, tkProperties + [tkMethod], PropList);
    while (PropList^[i] <> nil) and (i < High(PropList^)) do
    begin
      ListBox1.Items.Add(PropList^[i].Name + ': ' +
        PropList^[i].PropType^.Name);
      Inc(i);
    end;
  finally
    FreeMem(PropList);
  end;
end;
Но он, по моему выводит все свойства компонента. Как вот привязать элемент из списка с реально существующим компонентом в делфи, и вывести несколько его свойств?
Если твоя программа выполняет мистические действия, значит, ты сделал что-то невероятно тупое...
McFrey вне форума Ответить с цитированием
Старый 25.11.2012, 14:37   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как получить список тех свойств которые меня интересуют?
Отсекать по именам:
Код:
if pos(PropList^[i].Name,'Left Top Width и так далее список нужных')<>0 then 
       ListBox1.Items.Add(PropList^[i].Name + ': ' +
        PropList^[i].PropType^.Name);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.11.2012, 14:53   #3
McFrey
Форумчанин
 
Аватар для McFrey
 
Регистрация: 15.10.2011
Сообщений: 306
По умолчанию

Stilet, да, большое спасибо, это действительно помогло))
А вот как связать реальный компонент с именем в TListBox - загадка, и выше приведенный код выводит сейчас не конкретные значения, а просто тип, который имеют св-ва компонента...это возможно исправить?
Если твоя программа выполняет мистические действия, значит, ты сделал что-то невероятно тупое...
McFrey вне форума Ответить с цитированием
Старый 25.11.2012, 15:23   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
это возможно исправить?
Я с этим модулем никогда не работал, так что брехать не хочу )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.11.2012, 15:29   #5
McFrey
Форумчанин
 
Аватар для McFrey
 
Регистрация: 15.10.2011
Сообщений: 306
По умолчанию

Ну а средствами другого модуля это реально реализовать? мне способ то не важен, важно научиться, ну и сделать чтоб работало)
Если твоя программа выполняет мистические действия, значит, ты сделал что-то невероятно тупое...
McFrey вне форума Ответить с цитированием
Старый 25.11.2012, 16:26   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я не в курсе, задачи такой никогда не ставил )
Очень мало про RTTI знаю.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.11.2012, 16:30   #7
McFrey
Форумчанин
 
Аватар для McFrey
 
Регистрация: 15.10.2011
Сообщений: 306
По умолчанию

Stilet, спасибо и на этом, с именами помогли!! Если накопаю чего выложу мало-ли кому пригодиться)....

А так вдруг знающие люди сюда случайно заглянут? Вопрос остается открытым Оо....
Если твоя программа выполняет мистические действия, значит, ты сделал что-то невероятно тупое...
McFrey вне форума Ответить с цитированием
Старый 25.11.2012, 18:39   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
А вот как связать реальный компонент с именем в TListBox
1. получение списка компонентов, принадлежащих объекту xxx
Код:
Listbox1.Clear;
for j:=0 to xxx.componentscount-1 do 
  { if xxx.components[j] is Tcontrol then }//если нужны только наследники Tcontrol 
  listbox1.add(xxx.components[j].name, xxx.components[j]);
2. //определение объекта связанного с данной строкой
Код:
j:=listbox1.selectedindex;
if listbox1.items.objects[j] is Tcontrol then begin
  r:=listbox1.items{?strings?}.objects[j] as Tcontrol; 
  memo1.clear;
  memo1.lines.add(r.classname);
  memo1.lines.add(r.name);
  memo1.lines.add(inttostr(r.left));
  memo1.lines.add(inttostr(r.top));
  memo1.lines.add(inttostr(r.width));
  memo1.lines.add(inttostr(r.height));
end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 25.11.2012 в 18:42.
evg_m вне форума Ответить с цитированием
Старый 25.11.2012, 20:48   #9
McFrey
Форумчанин
 
Аватар для McFrey
 
Регистрация: 15.10.2011
Сообщений: 306
По умолчанию

evg_m, толи вечер уже, толи я туплю неимоверно
Код:
for j:=0 to xxx.componentscount-1 do
xxx это какая-то строка из Tlistbox? т.е. в ххх мы записываем то что пользователь выбрал из списка?
Если твоя программа выполняет мистические действия, значит, ты сделал что-то невероятно тупое...
McFrey вне форума Ответить с цитированием
Старый 25.11.2012, 21:41   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
evg_m
А если нужно определить свойства любого обьекта? Не только контрола.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. воваава Помощь студентам 3 01.12.2011 12:50
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Поиск компонента - "набор панелей" (Delphi 7) Lime Компоненты Delphi 5 27.05.2009 23:08