Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2007, 19:55   #1
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
Плохо Динамический Label для динамической формы...

Привет. Я сравнительно недавно взялся за Делфи. Делаю простенькие вещи. Вот возник вопрос.
Как мне привязать динамически создающиеся лэйблы к динамически создающимся формам? У меня массив форм, которые создаются. И теперь мне нужно массив лэйблов привязать к массиву форм, и чтобы на каждой форме отображался лэйбл!!!
Заранее спасибо...

Вот отрывок кода:

begin
randomize;
for i:=1 to n do
begin
a[i]:=TForm.Create(Application);
l[i]:=Tlabel.Create(a[i]);
x:=screen.Width;
y:=screen.Height;
a[i].Top:=random(x);
a[i].Left:=random(y);
a[i].Show;
end;
Form1.SetFocus;
Button2.Visible:=true;
Button1.Visible:=false;
end;

Последний раз редактировалось Arkuz; 23.09.2007 в 10:44.
Arkuz вне форума Ответить с цитированием
Старый 23.09.2007, 18:59   #2
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
По умолчанию

Может создать клас в котором будет уже все лэйблы а потом просто сколько надо раз его создать?
bill вне форума Ответить с цитированием
Старый 23.09.2007, 21:14   #3
Showy
Форумчанин Подтвердите свой е-майл
 
Аватар для Showy
 
Регистрация: 08.08.2007
Сообщений: 183
По умолчанию

Попробуй так

begin
randomize;
for i:=1 to n do
begin
a[i]:=TForm.Create(Application);
l[i]:=Tlabel.Create(a[i]);
l[i].width:=40;
l[i].height:=10;
l[i].caption:='label';
l[i].left;=0;
l[i].top:=0;
a[i].insertcontrol(l[i]);
x:=screen.Width;
y:=screen.Height;
a[i].Top:=random(x);
a[i].Left:=random(y);
a[i].Show;
end;
Form1.SetFocus;
Button2.Visible:=true;
Button1.Visible:=false;
end;
Until The End Of Time
Showy вне форума Ответить с цитированием
Старый 24.09.2007, 14:33   #4
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Спасибо
Фишка с a[i].insertcontrol(l[i]); помогла.
Ещё раз благодарен...
Arkuz вне форума Ответить с цитированием
Старый 24.09.2007, 15:11   #5
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
Плохо

Здесь всё работает...
---------------------------------------------

procedure TForm1.Button1Click(Sender: TObject);
var
x,y,i:integer;
begin
randomize;
for i:=1 to n do
begin
l[i]:=Tlabel.Create(a[i]);{создание динамических лэйблов}
l[i].Caption:='Ты ламер!!!';
l[i].Font.Size:=36;
l[i].Font.Color:=clRed;
a[i]:=TForm.Create(Application);{создан ие динамических форм}
a[i].Caption:='Ты ламер!!!';
x:=screen.Width; {определение}
y:=screen.Height; {разрешения}
a[i].Top:=random(x);
a[i].Left:=random(y);
a[i].insertcontrol(l[i]);{вставка лэйблов в формы}
a[i].Show;
end;
Form1.SetFocus;
Button2.Visible:=true; (*временные элементы*)
Button1.Visible:=false;
end;
--------------------------------------------------------

Но только лэйблы появляются на формах после создания всех форм. А мне нужно, чтобы появлялась форма, на ней лэйбл, а только потом следующая форма, как этого добиться?
Вложения
Тип файла: rar CrazyWin.rar (156.5 Кб, 18 просмотров)
Arkuz вне форума Ответить с цитированием
Старый 24.09.2007, 17:35   #6
Showy
Форумчанин Подтвердите свой е-майл
 
Аватар для Showy
 
Регистрация: 08.08.2007
Сообщений: 183
По умолчанию

попробуй всавь в цикл application.ProcessMessages
вот так:

procedure TForm1.Button1Click(Sender: TObject);
var
x,y,i:integer;
begin
randomize;
for i:=1 to n do
begin
l[i]:=Tlabel.Create(a[i]);{создание динамических лэйблов}
l[i].Caption:='Ты ламер!!!';
l[i].Font.Size:=36;
l[i].Font.Color:=clRed;
a[i]:=TForm.Create(Application);{создан ие динамических форм}
a[i].Caption:='Ты ламер!!!';
x:=screen.Width; {определение}
y:=screen.Height; {разрешения}
a[i].Top:=random(x);
a[i].Left:=random(y);
a[i].insertcontrol(l[i]);{вставка лэйблов в формы}
application.ProcessMessages;
a[i].Show;
end;
Form1.SetFocus;
Button2.Visible:=true; (*временные элементы*)
Button1.Visible:=false;
end;
Until The End Of Time
Showy вне форума Ответить с цитированием
Старый 24.09.2007, 20:21   #7
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Спасибо.. как всегда работает (application.ProcessMessages
А что она значит эта срочка application.ProcessMessages;
Arkuz вне форума Ответить с цитированием
Старый 24.09.2007, 23:11   #8
Showy
Форумчанин Подтвердите свой е-майл
 
Аватар для Showy
 
Регистрация: 08.08.2007
Сообщений: 183
По умолчанию

application.ProcessMessages это метод который предписывает приложению обработать поступившие и ожидающие своей очереди сообщения
Until The End Of Time
Showy вне форума Ответить с цитированием
Старый 25.09.2007, 00:03   #9
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Говорю спасибо в 3 или в 4 раз...
Showy, спасибо за полные аргументированные ответы...
Arkuz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка по динамической памяти в Delphi Schakhmaev Помощь студентам 1 24.06.2008 01:27
Проблемы с динамической структурой данных Mailz Общие вопросы C/C++ 1 21.05.2008 00:18
Помогите пожалуйста с динамической памятью и указателями Riddick2013 Помощь студентам 1 19.12.2007 14:41
Вопрос по label. Как сделать так чтобы label была прозрачной. Lonix Компоненты Delphi 2 01.04.2007 06:23