![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перебор форм [D7, XP]
Fr © (2009-09-22 17:34:00)Приложение создает несколько однотипных форм Form1. Как перебрать все созданные формы в цикле?
anonims (2009-10-09 18:32:00) [1]слелать процклцру v1 методом
type
TForm2 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure v1;
public
{ Public declarations }
tmpArr: array[0..7] of integer;
end;
procedure v1();
implementation
uses Unit1;
{$R *.dfm}
procedure tform1.v1();
begin
ShowMessage(IntToStr(tmpArr[0]))
end;
Германн (2009-10-09 17:44:00) [2]TButton(Sender).Parent
Fr (2009-10-09 17:10:00) [3]Не стал создавать новую тему, т.к. новый вопрос пересекается с первым.
Есть 2 формы. На первой кнопка и TEdit. На второй кнопка.
Первая:
...
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
for i:=0 to 4 do begin
TForm2.Create(Application);
end;
end;
...
Вторая:
...
type
TForm2 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
tmpArr: array[0..7] of integer;
end;
procedure v1();
implementation
uses Unit1;
{$R *.dfm}
procedure v1();
begin
ShowMessage(IntToStr(tmpArr[0])) // здесь ошибка компиляции
end;
procedure TForm2.FormCreate(Sender: TObject);
var i,j:Integer;
begin
j:=0;
for i:=0 to Screen.FormCount-1 do
if Pos('Form2',Screen.Forms[i].Name)>0 then inc(j);
Caption:=IntToStr(j);
tmpArr[0]:=j;
tmpArr[1]:=j*j;
Show;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
with TForm2(Screen.ActiveForm) do begin
Form1.Edit1.Text:=Caption+' '+IntToStr(tmpArr[0])+' '+
IntToStr(tmpArr[1]);
tmpArr[0]:=tmpArr[0]*15;
tmpArr[1]:=tmpArr[1]*15;
v1();
end;
end;
...
Вопрос: как запустить процедуру v1() из TForm2.Button1Click без перебора в ней Screen.Forms для определения нужной формы и доступа к tmpArr? Таких процедур будет много и в каждой перебирать экранные формы, по-моему, неправильно...
Омлет (2009-09-25 22:52:00) [4]Я использую фреймы, наследованные от базового фрейма с абстрактными методами.
Возможно и формы можно наследовать.
Leonid Troyanovsky (2009-09-25 18:25:00) [5]
> Германн © (25.09.09 18:18) [23]
> > Виимо, нажал на что-то.
> А нынче не нажал :)
Неа, жал что-то, все не упомнишь.
Мобыть в твердое попал, иль в упругое.
--
Regards, LVT.
Германн (2009-09-25 18:18:00) [6]
> Виимо, нажал на что-то.
А нынче не нажал :)
Leonid Troyanovsky (2009-09-25 18:13:00) [7]Кочерга случайно прицепилась, sorry.
Виимо, нажал на что-то.
Leonid Troyanovsky (2009-09-25 18:11:00) [8]
> Германн © (25.09.09 18:05) [20]
> А почему бы и не?
]
Ну, ладно, долаживай, или, как там,
по новоязу положено.
--
Regards, LVT.
Германн (2009-09-25 18:05:00) [9]
> Leonid Troyanovsky © (25.09.09 17:54) [19]
>
> Замахнулся на треугольные? :)
А почему бы и не?
:)
Leonid Troyanovsky (2009-09-25 17:54:00) [10]
> Германн © (25.09.09 17:23) [18]
> Слишком обобщаешь, имхо. :)
Замахнулся на треугольные? :)
--
Regards, LVT.
Германн (2009-09-25 17:23:00) [11]
> Leonid Troyanovsky © (25.09.09 17:17) [16]
Слишком обобщаешь, имхо. :)
Leonid Troyanovsky (2009-09-25 17:21:00) [12]
> Fr (25.09.09 17:08) [14]
> Как тогда создавать однотипные формы? И как обращаться к
> их свойствам/методам?
Однотипные - однотипно, IMHO.
А обращаться исходя из их типа.
--
Regards, LVT.
Leonid Troyanovsky (2009-09-25 17:17:00) [13]
> Германн © (25.09.09 17:05) [13]
> Слишком обобщаешь, имхо.
Массивы и списки нужно еще снабжать механизмом
поддержания актуальности хранимого.
У Screen.Forms он есть.
Нах велосипеды с квадратными колесами.
--
Regards, LVT.
Сергей М. (2009-09-25 17:14:00) [14]
> Это помогло
Как это могло помочь, если список - он и в Африке список ?)
Что собственный, что Screen.Forms - один шиш список)
Fr (2009-09-25 17:08:00) [15]
> Германн © (25.09.09 16:55) [8]
Это помогло :). Спасибо.
> Anatoly Podgoretsky © (25.09.09 16:55) [9]
Как тогда создавать однотипные формы? И как обращаться к их свойствам/методам?
Германн (2009-09-25 17:05:00) [16]
> Anatoly Podgoretsky © (25.09.09 17:02) [12]
>
> > Германн (25.09.2009 16:59:11) [11]
>
> Вариантов один - Screen.Forms, остальное извращения.
>
Слишком обобщаешь, имхо.
Anatoly Podgoretsky (2009-09-25 17:02:00) [17]> Германн (25.09.2009 16:59:11) [11]
Вариантов один - Screen.Forms, остальное извращения.
Германн (2009-09-25 16:59:00) [18]
> Как правильно плодить формы, чтобы потом ссылаться на нужную?
>
>
Вариантов много. Массивы, списки и т.д.
Сергей М. (2009-09-25 16:56:00) [19]
> надпись меняется всегда у последней формы цикла
А какая разница, какая по счету форма в списке Screen.Forms оказалась подходящей под условие Caption='3' ?
Если подписи у форм, которые ты наплодил, разные - а они действительно разные, судя по циклу, создающему формы, - то подпись панели изменится именно у той формы, которая тебя как раз и интересует, т.е. у формы с подписью '3'
Anatoly Podgoretsky (2009-09-25 16:55:00) [20]> Fr (25.09.2009 16:38:04) [4]
Глобальные переменные до добра не доведут.
Для начала убери Form2: TForm2;