Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

перебор 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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо