Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Можно ли имена компонентов формировать программго?   Найти похожие ветки 

 
Константин   (2012-02-10 14:47) [0]

Здравствуйте, подскажите можно ли обращаться к компонентами яростная их имена в программе? Например у меня есть label1...label10. Мне нужно записать одну и ту же информацию во все label.  Можно ли создать цикл и номер label подставлять из переменной


 
sniknik ©   (2012-02-10 14:49) [1]

можно, но не нужно, наоборот нужно приучать себя к мысли, что имена не нужны...


 
Константин   (2012-02-10 15:39) [2]

А подскажите как? Как записать циклом во все ячейки? Что то вроде
For i:=1 to 10 do label[i] := "111222";
А то код очень разрастается.


 
MBo ©   (2012-02-10 15:47) [3]

label[i] - это если у тебя массив  компонентов (динамически созданных, или внесенных в массив).
Если массива нет, то функция FindComponent ищет по имени.

Как уже сказано в [1] - это весьма плохой дизайн.


 
sniknik ©   (2012-02-10 15:47) [4]

for i:=0 to ComponentCount-1 do
 if Components[i] is TLabel then TLabel(Components[i]).Caption:= "111222";


 
_Юрий   (2012-02-10 15:50) [5]

создаем массив
TForm1  = class(TForm)
private
 FLabels: array of TLabel;
..

заполняем его:

SetLength(FLabels, 10);
FLabels[0]:=Label1; //важно понимать, что это еще одна ссылка на тот же самый экземпляр.
FLabels[1]:=Label2;
...

3. Цикл по массиву
for i:=0 to Length(FLabels) - 1 do
 FLabels[i].Caption:="123";
 

---
Можно конечно и цикл по компонентам формы сделать

for I:=0 to Form1.ComponentsCount - 1 do
 if Form1.Components[i] is Tlabel then
   (Form1.Components[i] as  Tlabel).Caption := "123";

Но это дурной путь. Имена не нужны


 
Anatoly Podgoretsky ©   (2012-02-10 16:44) [6]

> MBo  (10.02.2012 15:47:03)  [3]

Массив есть всегда, даже два.


 
DVM ©   (2012-02-10 17:40) [7]


> Здравствуйте, подскажите можно ли обращаться к компонентами
> яростная их имена в программе? Например у меня есть label1.
> ..label10. Мне нужно записать одну и ту же информацию во
> все label.

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


 
Константин   (2012-02-10 21:43) [8]


> FLabels[0]:=Label1; //важно понимать, что это еще одна ссылка
> на тот же самый экземпляр.

Блин, проканало... Хотя не понятно почему... У меня есть "Х", я создаю "Y" приравниваю Y=X. А получается что X и Y становятся одним и тем же.


 
sniknik ©   (2012-02-10 21:52) [9]

> Хотя не понятно почему...
что может быть не понятного в ссылке?

> У меня есть "Х", я создаю "Y" приравниваю Y=X. А получается что X и Y становятся одним и тем же.
у тебя есть рука, ты указываешь ее пальцем на дом... потом приравнял указание (направление) одного пальца на дом другому пальцу, и теперь указываешь туда же пальцем второй руки.... поменялся ли дом от этого? стало ли их(дома) два?


 
Плохиш ©   (2012-02-11 00:21) [10]


> Константин   (10.02.12 21:43) [8]

Может тебе всё-таки основы почитать...


 
Германн ©   (2012-02-11 04:47) [11]


> sniknik ©   (10.02.12 21:52) [9]


> Плохиш ©   (11.02.12 00:21) [10]

А тут нужно прочитать хорошую книжку, в которой есть объяснения когда при присваивании копируется указатель, а когда копируется содержимое.


 
mamon   (2012-02-12 17:07) [12]

var
i: Integer;
begin
 For i:=0 to 2 do
   (Components[i] as TLabel).Caption:= "123123";
end;


 
lesstab ©   (2012-02-20 10:44) [13]

Здравствуйте.
На форме размешен набор панелей. Нужно создать массив панелей и каждый элемент этого массива связывать с отдельной панелью на форме.
Связываю:

    FreeTimePanels[1,0] := Panel10;
    FreeTimePanels[2,0] := Panel20;
    FreeTimePanels[3,0] := Panel30;
    FreeTimePanels[4,0] := Panel40;
    FreeTimePanels[5,0] := Panel50;
    FreeTimePanels[6,0] := Panel60;


Ошибка (Access Violation), когда задаю свойства:

    if OnePair = "1" then FreeTimePanels[d,p].Color := clFuchsia;
    if OnePair = "0" then FreeTimePanels[d,p].Color := clLime;

Оба отрывки кода размещены в процедурах, принадлежащих форме.
Что делать, чтобы работало?


 
lesstab ©   (2012-02-20 10:48) [14]

Извините, тема не попала на первую страницу.


 
lesstab ©   (2012-02-20 11:03) [15]

Вопрос отменяю. Проблема была в цикле. Обращался к несуществующему элементу. Прошу прошения.



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.062 c
2-1330854206
wymkent
2012-03-04 13:43
2013.03.22
HelpDesk


2-1343902126
Wadimka
2012-08-02 14:08
2013.03.22
Как запись типа record записать в TStream?


15-1347470775
wl
2012-09-12 21:26
2013.03.22
freecell (win7) в win8?


2-1335041434
SiDimka
2012-04-22 00:50
2013.03.22
Как передать фокус окну


2-1328525317
whoim
2012-02-06 14:48
2013.03.22
TServerSocket, TStringList и непонятки.. RemoteAddress