Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

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

 
Константин   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.077 c
15-1345714419
oldman
2012-08-23 13:33
2013.03.22
Видео на скайпе в одну сторону.


15-1331411403
Юрий
2012-03-11 00:30
2013.03.22
С днем рождения ! 11 марта 2012 воскресенье


15-1347866452
Scott Storch
2012-09-17 11:20
2013.03.22
AppStore


15-1343713763
Артём
2012-07-31 09:49
2013.03.22
MD5 hash


4-1264158728
maxistent
2010-01-22 14:12
2013.03.22
Ошибка при блокировке компа (Window+L)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский