![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перебор форм [D7, XP]
Fr © (2009-09-22 17:34:00)Приложение создает несколько однотипных форм Form1. Как перебрать все созданные формы в цикле?
Германн (2009-09-25 16:55:00) [21]
> > Screen.Forms[i].Panel2.Caption:='Сменили надпись';
>
> компилятор не пропускает
>
TForm2(Screen.Forms[i]).Panel2.Caption:='Сменили надпись';
Fr (2009-09-25 16:53:00) [22]
> Screen.Forms[i].Panel2.Caption:='Сменили надпись';
компилятор не пропускает
> Потому что Form2.Panel2.Caption:='Сменили надпись';
Как правильно плодить формы, чтобы потом ссылаться на нужную?
Thrashead (2009-09-25 16:48:00) [23]После создания новых Form2 ссылается на последнюю форму.
procedure TForm1.Button2Click(Sender: TObject);
var i: integer;
begin
for i:=0 to Screen.FormCount-1 do
if Screen.Forms[i].Caption='3' then begin
Screen.Forms[i].Panel2.Caption:='Сменили надпись';
break;
end;
end;
Германн (2009-09-25 16:46:00) [24]
> В результате надпись меняется всегда у последней формы цикла
> for i:=0 to ... Почему?
Потому что Form2.Panel2.Caption:='Сменили надпись';
Fr (2009-09-25 16:38:00) [25]Есть форма, на ней 2 кнопки. По нажатию на первую плодятся формы на экране. При нажатии на вторую думал, что поменяется надпись на панели у формы с заголовком "3". В результате надпись меняется всегда у последней формы цикла for i:=0 to ... Почему? И как заставить смениться надпись напанели у нужной формы, а остальные оставить без изменения?:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
for i:=0 to 7 do begin
Form2:=TForm2.Create(Application);
Form2.Caption:=IntToStr(i);
Form2.Show;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var i: integer;
begin
for i:=0 to Screen.FormCount-1 do
if Screen.Forms[i].Caption='3' then begin
Form2.Panel2.Caption:='Сменили надпись';
break;
end;
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm2 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
end.
Fr (2009-09-22 17:44:00) [26]спасибо
Сергей М. (2009-09-22 17:37:00) [27]Существующими в ран-тайм формами заведует объект Screen и его св-ва FormCount, Forms
{RASkov} (2009-09-22 17:36:00) [28]Screen.FormCount
Screen.Forms[]