Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 078

/ вопрос открыт /

И снова -Здравствуйте, эксперты!
Вопрос у меня весьма не сложный. Говорят размер кода показывает опыт программиста, так вот хачу чтобы вы поделились опытом, сильно разгружающим зачастую размер кода.

Ситуация(например): есть 10 компонентнов TLabel :
Label1..label10. -Мне надо поменять их caption по какому нибудь алгоритму(например присвоить данные из массива 1..10).
Так вот чтобы не писать
label1.caption:=M(1); //M(n) -массив что упомянут выше
...
label10.caption:=M(10);
Хотелось бы узнать как обращаться к набору обьектов с помощью переменной (ну как нить в виде LabelX.caption).
Не для конкретного примера , авообще сама реализация этого дела..

Заранее благодарен!

Примечание #1 (22 апреля 2010, 12:42):
И так же чтобы не создавать отдельную тему для такого мелочного вопроса с ответом в 1ну строчку, задам его тут : Как обьявить в delphi создаваемый(рантайм) обьекты, чтобы Delphi дебаггер не пытался его удалить из Type каждый раз при прогоне программы?
(Создаю в рантайм обьект Label и потом работаю с ним, так что в коде присутствует его упоменнание, для того чтобы скомпелировать прописываю label в Type,но учитывая что он еще не создан дебаггер вечно пытается его удалить ).З.Ы Rad 2010.

TeM Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: TeM (статус: Посетитель)
Вопрос отправлен: 22 апреля 2010, 12:22
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, TeM!
Буквально неделю назад писал идею, как это делать.

var l:TLabel;
//...
begin
  l := Form1.FindComponent('label'+inttostr(i)) as TLabel;
  if l = nil then <ЧП, компонента нет!>
  else l.caption := 'чего то там'
 
end;
Но если метка лежит не на форме, а на панельке к примеру, то нужно писать Panel1.FindComponent(...).
В скобках передается имя компонента, который мы хотим найти. Метод возвратит ссылку на компонент, которая будет ссылкой на TObject (в делфи любой объект есть наследником TObject и может быть к нему приведен). дальше, конструкция as пытается проверить, есть ли данный объект TLabel или наследником его (то есть, если мы сделаем компонент наследник TLabel, то этот код будет работать с такими объектами). Если приведение не удалось - возвратит nil (нулевой указатель). А если все хорошо, то имеем фактически псевдоним объекта, с которым можно работать.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 22 апреля 2010, 12:40
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 22 апреля 2010, 13:06; участников в обсуждении: 3.
Вадим К

Вадим К (статус: Академик), 22 апреля 2010, 12:41 [#1]:

Не размер кода важен, а его читаемость и красота. А это начинается как минимум с знания языка. И русского также.
Галочка "подтверждения прочтения" - вселенское зло.
TeM

TeM (статус: Посетитель), 22 апреля 2010, 12:47 [#2]:

Спасибо Вадим, все довольно легко и доступно.
З.Ы Зание языка, способов алгоритмизации -все это приходит с опытом. За русский извеняюсь.
DNK

DNK (статус: Студент), 22 апреля 2010, 12:54 [#3]:

Вопрос больше относится к разделу "Delphi » Работа с компонентами и библиотеками" и разбираля уже не раз. Например 515, 1 059, 1 526, 1 698, 3 939.
"Digital Networked Knight"
TeM

TeM (статус: Посетитель), 22 апреля 2010, 13:06 [#4]:

Да и правда много раз разбиралось, однако для нормального поиска я не смог сформулировать критерии, а просмотреть все вопросы и ответы весьма проблематично.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:43
Выполнено за 0.02 сек.