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

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

Перебор форм [D7, XP]


Страницы:   1 2

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;


Страницы:   1 2

Наверх

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