![]() |
|
|
#1
|
|||
|
|||
|
Имею на форме 25 лейблов. Надо, чтобы при загрузке их caption'ы были 0. Я так понимаю это надо реализовать с помощью цикла, как?
|
|
#2
|
||||
|
||||
|
Цитата:
Код:
var i:integer; begin for i:=0 to ComponentCount-1 do begin if Components[i] is TLabel then begin Components[i].Caption:='0'; end; end; |
|
#3
|
||||
|
||||
|
Так он все Label изменит, лучше через FindComponent имхо.
|
|
#4
|
|||
|
|||
|
подскажите и мне чтоли. Новую тему создавать не стал, потому что вопрос у мну почти тоот же самый.
Код:
procedure Tcalculator.ComboBox6Exit(Sender: TObject);
begin
GroupBox2.Visible:=false; // здесь оно обнуляет видимость
GroupBox3.Visible:=false; // всех девяти групбоксов.
GroupBox4.Visible:=false; // Первый всегда видимый, поэтому он не упомянут
GroupBox5.Visible:=false;
GroupBox6.Visible:=false;
GroupBox7.Visible:=false;
GroupBox8.Visible:=false;
GroupBox9.Visible:=false;
GroupBox10.Visible:=false;
KolSek:= StrToInt(ComboBox6.Text); //KolSek-это количество секций,
//которое пользователь указывает
for i:=2 to KolSek do
GroupBox[i].Visible:=true; //в зависимости от того, что укажет пользователь нужно сделать видимыми
//определённое количество Групбоксов
end;Вопрос в том, что он выдаёт ошибку в строке GroupBox[i].Visible:=true; нужно как-то массив объявить или что? Сильно прошу не пинать, это мой первый код, и соответственно, первый вопрос на форуме. |
|
#5
|
|||
|
|||
|
Читайте, что написал TOJluK. Грубо говоря, так.
Код:
for i:=2 to KolSek do
(FindComponent('GroupBox' + IntToStr(i)) as TGroupBox).Visible:=true; |
|
#6
|
|||
|
|||
|
Вот спасибо! Я с этим дня три плясал, всё никак не получалось. Теперь надо разобраться как здесь плюсы в репутацию ставить и что это за FindComponent такой.)))
Спасибо! |
|
#7
|
|||
|
|||
|
вот тогда ещё вопрос такой появился.
вот такой кусок Код:
for i:=2 to 10 do
(FindComponent('GroupBox' + IntToStr(i)) as TGroupBox).Visible:=false;
for i:=8 to 52 do
(FindComponent('ComboBox' + IntToStr(i)) as TComboBox).Visible:=false;работает нормально. А как сделать в одном цикле две операции? Чтобы он не крутил их последовательно, сначла один, потом другой. То что длина их разная - не страшно, это я формулу запхну для определения второго индекса i (i+6 или какнить там соображу). Вобщем нужно, чтобы обе операции выполнялись в одном цикле, одна за другой. Между ними нужно ставить не точку с запятой а что-то другое. Перепробовал уже всё: и запятую и and и в скобки брал - не помогает. Это касается вобщем не только циклов с if-then-else такая же проблема. Засада в том, что толком не знаю ещё терминов, приходится изъясняться сами видите как. |
|
#8
|
|||
|
|||
|
Цитата:
Код:
for i:=2 to 10 do
begin
(FindComponent('GroupBox' + IntToStr(i)) as TGroupBox).Visible:=false;
(FindComponent('ComboBox' + IntToStr(???)) as TComboBox).Visible:=false;
end;Последний раз редактировалось Nyctos Kasignete, 02.07.2009 в 20:32. |
|
#9
|
|||
|
|||
|
Формулу выдумывать именно в этом случае оказывается что и не стоит. Эт точно. Выигрыш по времени расчёта может и не значительный.
Просто преследовал две цели: 1. Увидят может моё творение программисты - обсмеют, скажут"шож ты тут понагородил-то" 2. В связке if-then, (ну я уже упоминал) до это приходилось городить невесть чо. А теперь перепишу как нужно. Вот незадача - два раза подряд одному и тому же человеку плюс в репу не ставится. А больше тут и не отвечает никто.))) спасибо! |
|
#10
|
|||
|
|||
|
Всем спасибо!
Цитата:
|
|
#11
|
|||
|
|||
|
А так попробуйте.
Код:
(Components[i] as TLabel).Caption:='0'; |
|
#12
|
|||
|
|||
|
Цитата:
Ок. Работает. Спасиб ))) |