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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2009, 23:45   #1
Хитрец
Пользователь
 
Регистрация: 26.01.2009
Сообщений: 48
По умолчанию Обрашение к Лейблам

Задача обратится к Label не по имяни, а по индексу т.к. их очень много на форме и береберать их по одному в коде мне кажется не прилично!

И тут вдруг я понял, что не знаю как обратится к ним в цикле. Я его и так и сяк он не как.

Знаю, что если указать TLabel(Label11).captino := 'asdf' , то все будет пучком, но не знаю как определить эту переменную TObject, чтобы определить в цикл. Путем долгих мучений нашел выход описать так

for I := 22 to 26 do
begin
Tlabel(FindComponent('Label' + IntToStr(i))).Caption := 'test';
end;

Товариши эксперты скажите есть др. вариант или я нашел единственно верное решение этого вопроса?
Хитрец вне форума Ответить с цитированием
Старый 20.04.2009, 23:55   #2
Лукманов Александр
работа не волк....
Форумчанин
 
Аватар для Лукманов Александр
 
Регистрация: 09.06.2008
Сообщений: 337
По умолчанию

Код:
procedure TForm1.btn2Click(Sender: TObject);
var i,k: Integer;
begin
 for i:=0 to ComponentCount-1 do
 if Components[i].ClassType=TLabel  then begin
 k:=k+1;
 (Components[i] as TLabel).Caption:=IntToStr(k);
end;
end;
одного не пойму. цифры слишком большие получаются. Но по порядку.
Цель, для которой требуются неправые средства, не есть неправая цель.
Лукманов Александр вне форума Ответить с цитированием
Старый 21.04.2009, 00:15   #3
Хитрец
Пользователь
 
Регистрация: 26.01.2009
Сообщений: 48
По умолчанию

Цитата:
Сообщение от Лукманов Александр Посмотреть сообщение
Код:
procedure TForm1.btn2Click(Sender: TObject);
var i,k: Integer;
begin
 for i:=0 to ComponentCount-1 do
 if Components[i].ClassType=TLabel  then begin
 k:=k+1;
 (Components[i] as TLabel).Caption:=IntToStr(k);
end;
end;
одного не пойму. цифры слишком большие получаются. Но по порядку.

Так не пойдет ты мне предлогаешь переберать вообще все компоненты на форме.
Хитрец вне форума Ответить с цитированием
Старый 21.04.2009, 09:14   #4
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Я думаю FindComponent тоже перебирает все компоненты на форме пока не найдет нужное имя (причем перебор будет при каждом поиске) так что это не страшно.
Если тебе нужно не все TLabel а только одна или несколько групп то используй еще свойство TLabel.Tag
Например назначаешь для нужной тебе группы Tag := 1
и дорабатываешь код Александра
Код:
procedure TForm1.ChangeCaptions(aTag: Longint; newCaption: string);
var i: Integer;
begin
 for i:=0 to ComponentCount-1 do
 if (Components[i].ClassType = TLabel) and (Components[i].Tag = aTag)  then 
 begin
   (Components[i] as TLabel).Caption := newCaption;// или делаешь что тебе надо
 end;
end;
используем:
Код:
procedure TForm1.btn2Click(Sender: TObject);
begin
  ChangeCaptions(1, 'test');
end;
s.Creator вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обрашение к фиксированным ячейкам Лубышев Помощь студентам 1 29.10.2008 13:47