|
#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
|
|||
|
|||
Цитата:
Ок. Работает. Спасиб ))) |