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

Вниз

Присваивания имен в цикле   Найти похожие ветки 

 
DJ_UZer ©   (2008-07-01 08:29) [0]

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


 
KilkennyCat ©   (2008-07-01 08:39) [1]

Можно так:

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);


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

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


 
Anatoly Podgoretsky ©   (2008-07-01 09:24) [3]

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


 
KilkennyCat ©   (2008-07-01 09:25) [4]


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

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


 
DJ_UZer ©   (2008-07-01 09:34) [5]

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


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

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

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;


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

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


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


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


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


 
Anatoly Podgoretsky ©   (2008-07-01 09:55) [9]


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

Зачем нужно?


 
Anatoly Podgoretsky ©   (2008-07-01 09:57) [10]


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

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


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

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


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


> Или?

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

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

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

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

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

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

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

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

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

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

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


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

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


 
KilkennyCat ©   (2008-07-01 12:52) [14]

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


 
Leonid Troyanovsky ©   (2008-07-01 13:36) [15]


> 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.



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

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

Наверх




Память: 0.5 MB
Время: 0.022 c
2-1214910333
lead-in
2008-07-01 15:05
2008.08.03
разделитель в вещ-х числах


15-1213304967
Loginov Dmitry
2008-06-13 01:09
2008.08.03
SafeIniFiles


2-1214936261
Bear
2008-07-01 22:17
2008.08.03
Длинный запрос в AdoQuery


15-1213716332
Dmitry S
2008-06-17 19:25
2008.08.03
Перестановки


2-1215332395
RealSwift
2008-07-06 12:19
2008.08.03
Thread creation error - Недостаточно памяти