![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
перебор Label'ов [D7, XP]
dis12345 © (2006-12-13 17:30:00)подскажите пожалуйста как перебрать в цикле десяток однотипных элементов (например TLabel) И i -му присвоить соотв значение из массива, когда-то делал а сейчас никак не найду и не вспомню как
MsGuns (2006-12-15 09:18:00) [1]Возможно, я несколько неуклюже построил фразу, но имелось в виду то, что сразу "ухватил" jack128, а именно обращение к объекту именно как экземпляру класса, а не его наследников. У Пачеко есть куда лучше пример (там используются методы класса, перекрытые наследниками)
Юрий Зотов (2006-12-15 00:31:00) [2]>>if (Components[i] is TLabel) then
> Корректнее так: if Components[i].ClassType=TLabel
Чи-го??? Чиго-чиго, извините?
type
TMyLabel = class(TLabel)
...
end;
А теперь что коректнее?
jack128 (2006-12-15 00:17:00) [3]Loginov Dmitry © (14.12.06 23:43) [10]
Чем же извените, это корректней?
ничем. Вот если бы задача стояла найти всем компоннеты одного КЛАССА, то решение МсГанза - было бы правельным.
MsGuns © (14.12.06 22:09) [9]
Первая и самая концептуальная - категорически не рекомендуется обращаться к внешним объектам по имени.
А кто сказал, что код Еги23 выполняется в методе TForm1 ?
MsGuns © (14.12.06 22:09) [9]
> Про преимущество Controls перед Components при переборе визуальных контролов тут уже говорено
Всё зависит от деталей задачи..
Anatoly Podgoretsky (2006-12-15 00:11:00) [4]> Loginov Dmitry (15.12.2006 0:09:14) [14]
А ты о чем спрашиваешь?
И действительно ли хочешь узнать?
Loginov Dmitry (2006-12-15 00:09:00) [5]> Похоже у тебя.
Енто на что намекать изволите?
Anatoly Podgoretsky (2006-12-15 00:00:00) [6]> Loginov Dmitry (14.12.2006 23:58:12) [12]
Похоже у тебя.
Loginov Dmitry (2006-12-14 23:58:00) [7]А что, у кого-то где-то какая-то проблема?
Anatoly Podgoretsky (2006-12-14 23:44:00) [8]> Loginov Dmitry (14.12.2006 23:43:10) [10]
Ну и как это решает проблему? Если вообще решает.
Loginov Dmitry (2006-12-14 23:43:00) [9]> Корректнее так: if Components[i].ClassType=TLabel
Чем же извените, это корректней?
> Сл-но, достаточно перебрать (рекурсивно), начав с формы.
Зачем ентот геморрой, когда проще использовать Components[] и ComponentCount?
MsGuns (2006-12-14 22:09:00) [10]>novill © (14.12.06 09:14) [5]
>Вот это припечатал! Может покажешь пример кончетуально верного кода?
>With Form1 do
Первая и самая концептуальная - категорически не рекомендуется обращаться к внешним объектам по имени.
>if (Components[i] is TLabel) then
Корректнее так: if Components[i].ClassType=TLabel
В данном случае это не так существенно, но, принятая за методологию, такая "техника" может привести к трудноуловимым багам
> Про преимущество Controls перед Components при переборе визуальных контроловтут уже говорено
Leonid Troyanovsky (2006-12-14 17:36:00) [11]
> ЮЮ © (14.12.06 10:25) [7]
> Но будучи созданными в IDE, они точно все в TForm.Components
Будучи контролами они точно в Controls парента, независимо
от их Owner (т.е., и необязательно в IDE).
Сл-но, достаточно перебрать (рекурсивно), начав с формы.
Вырожденные же случаи, когда контрол создан, а парент
не назначен - вырождены.
--
Regards, LVT.
ЮЮ (2006-12-14 10:25:00) [12]
> ControlCount, Controls[] тут уместнее
Зависит, где эти TLabel разбросаны. А если по разным панелям? Но будучи созданными в IDE, они точно все в TForm.Components
clickmaker (2006-12-14 10:15:00) [13]ControlCount, Controls[] тут уместнее
novill (2006-12-14 09:14:00) [14]> сам данный им код концептуально неверен.
Вот это припечатал! Может покажешь пример кончетуально верного кода?
MsGuns (2006-12-14 01:08:00) [15]>dis12345 (13.12.06 17:40) [3]
>спасибо Ega23 !!!!!!!!!! то что нужно !!!!!!!!!!
Ega23 © подсказал идею, но сам данный им код концептуально неверен.
dis12345 (2006-12-13 17:40:00) [16]спасибо Ega23 !!!!!!!!!! то что нужно !!!!!!!!!!
Kostafey (2006-12-13 17:37:00) [17]Может это поможет:
http://www.delphimaster.ru/cgi-bin/forum.pl?n=18&id=1165941009
Нпример, LabelN перебирать по названию.
Ega23 (2006-12-13 17:34:00) [18]
With Form1 do
begin
for i:=0 to ComponentCount-1 do
if (Components[i] is TLabel) then
if TLabel(Components[i]).Name='MySuperLabel' then
TLabel(Components[i]).Caption := 'lajksgjpsfhgodfngb';
end;