Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Присваивания имен в цикле


DJ_UZer ©   (2008-07-01 08:29:00) 

Привет все, такая проблема, не знаю как сдлать присваивание имен в цикле, например, есть label от 1 до 5:
for i:=1 to 5 do
label.caption := inttostr(i);


Leonid Troyanovsky   (2008-07-01 13:36:00) [1]


> DJ_UZer ©   (01.07.08 09:34) [5]

> там есть зависимость от числа мне нужно от 5 до 20 присваиваний.


uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TLabels = record
   ARect: TRect;
   Caption: String;
 end;

 TForm1 = class(TForm)
   Button1: TButton;
   procedure FormCreate(Sender: TObject);
   procedure FormPaint(Sender: TObject);
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
   Labels: array [0..9] of TLabels;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

const
 cformat = 'Label%2.2d';

procedure TForm1.FormCreate(Sender: TObject);
var
 i: Longint;
begin
 for i := Low(Labels) to High(Labels) do
   with Labels[i] do
     begin
       ARect := Rect(10, 24*i, 100, 24*i + 24);
       Caption := Format(cformat, [i]);
     end;
end;

procedure TForm1.FormPaint(Sender: TObject);
var
 i: Longint;
begin
 for i := Low(Labels) to High(Labels) do
   with  Labels[i] do
     begin
       Canvas.FillRect(ARect);
       Canvas.TextRect(ARect, ARect.Left, ARect.Top, Caption);
     end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 i: Longint;
begin
 for i := Low(Labels) to High(Labels) do
   with Labels[i] do
     Caption := Format(cformat, [Random(10)]);
 Invalidate;
end;

--
Regards, LVT.


KilkennyCat   (2008-07-01 12:52:00) [2]

Ты же сам индексы перепутал (только не надо говорить, что автора ловил).
c x я опечатался. это да. что же касается индексов, то я не путал. и не ловил. я скопипастил из сабжа. Но я не писал программу, я не давал готового решения, чтоб сразу вставить  в проект, а показывал пример.


Галинка   (2008-07-01 12:44:00) [3]

так у тебя уже в коде ошибка. Ты же сам индексы перепутал (только не надо говорить, что автора ловил).


KilkennyCat   (2008-07-01 12:16:00) [4]


> Или?

Возможно. Я понятия не имею, чего хочет автор. Сейчас он хочет то, потом захочет это. Я привел один из вариантов работы с компонентами как с массивом.

> Да и у тебя в примере только с заголовками меток работаешь.

Мне нужно было привести примеры всего, что можно сделать с TLabel?

> зачем-то забиваешь память ненужным массивом объектов.

Не знаю, что и сказать...

> Когда с ними и напрямую работать можно.

Это как в Вашем примере? Прямее некуда. Особенно, если потребуется обратиться, например, к пятой, шестой, десятой и пятнадцатой.

> Зачем так сложно?

Для простоты.

> больше возможностей ошибиться

Ну, если ЭТОТ код допускает возможности ошибки, то, может, лучше пойти работать дворником?


Галинка   (2008-07-01 09:59:00) [5]

в исходном коде автора вроде только заголовки надо присваивать меткам. Или? Да и у тебя в примере только с заголовками меток работаешь. Только дополнительно зачем-то забиваешь память ненужным массивом объектов. Когда с ними и напрямую работать можно. Зачем так сложно? Опять же такой вариант допускает больше возможностей ошибиться ((


Anatoly Podgoretsky   (2008-07-01 09:57:00) [6]


> там неправильные границы массива, это факт.

Откуда взялся массив в Label?


Anatoly Podgoretsky   (2008-07-01 09:55:00) [7]


> Anatoly Podgoretsky, а то код большой будет, да к тому же
> там есть зависимость от числа мне нужно от 5 до 20 присваиваний.
> .

Зачем нужно?


KilkennyCat   (2008-07-01 09:47:00) [8]


> Галинка   (01.07.08 09:40) [7]


???? при чем здесь имя переменной ???
там неправильные границы массива, это факт.


Галинка   (2008-07-01 09:40:00) [9]

ну так и будет ругаться... там вообще-то в первом цикле надо бы arlab[ x]=... А то i это индекс массива контролов формы, а тут им же по массиву [0..4] пробегается.


Галинка   (2008-07-01 09:38:00) [10]

а зачем два цикла? Одного должно бы хватить

var
x: integer;
.........................
x := 1;
for i := 0 to Form.ComponentCount - 1 do begin
if (components[i] is TLabel) then begin
  (components[i] As TLabel).Caption = inttostr(x++);
end
end;


DJ_UZer   (2008-07-01 09:34:00) [11]

KilkennyCat, а я и не бездумно!
вот на это ругается for i:=1 to 5 do arlab[i].caption := inttostr(i);
Anatoly Podgoretsky, а то код большой будет, да к тому же там есть зависимость от числа мне нужно от 5 до 20 присваиваний..


KilkennyCat   (2008-07-01 09:25:00) [12]


> DJ_UZer ©   (01.07.08 09:14) [2]

а не копируй бездумно....


Anatoly Podgoretsky   (2008-07-01 09:24:00) [13]

А для чего тут цикл?


DJ_UZer   (2008-07-01 09:14:00) [14]

компилятор ругается!


KilkennyCat   (2008-07-01 08:39:00) [15]

Можно так:

var
arlab : array[0..4] of TLabel;
.........................
x := 0;
for i := 0 to Form.ComponentCount - 1 do begin
 if (components[i] is TLabel) then begin
   inc(x);
   arlab[i] := TLabel(components[i]);
 end
end;
........................
for i:=1 to 5 do arlab[i].caption := inttostr(i);


Наверх

Титульная страница Поиск, карта сайта Написать письмо