[PR] odwoływanie do dynamicznego komponentu

0

Mam stworzony drugą formę, na ktorej jest przycisk. Teraz chcę stworzyć tą formę i robię to tak :

procedure TForm1.Button1Click(Sender: TObject);
var
a : TForm;
begin
a := TForm2.Create(self); // TForm2 to klasa z drugiego unita
a.Name := 'drugiform';
a.Show;
end;

i teraz chcę zmienić caption buttona, który znajduje się na dynamicznie stworzonej formie o Name = 'drugiform';

Jak to zrobić??

Takie tworzenie jest mi potrzebne, gdyż muszę tworzyć nowe okna, wyglądająca tak samo, i operować na ich zawartości.

Może jest na to jakiś inny sposób, ale nigdzie tego nie znalazłem.

0
drugiform.Button1.Caption := 'czy to nie oczywiste?';

[dopisane]
[wstyd] rzeczywiście. Ale tak ja napisał Detox też nie może być bo a to zmienna lokalna :p .

0

[Error] Unit1.pas(33): Undeclared identifier: 'drugiform'

właśnie to nie takie proste i oczywiste.

0

procedure TForm1.Button1Click(Sender: TObject);
var
a : TForm;
begin
a := TForm2.Create(self); // TForm2 to klasa z drugiego unita
a.Show;
end;

...
a.Button.Caption := 'text';

0

[Error] Unit1.pas(32): Undeclared identifier: 'button'

a nie posiada takiego komponentu jak button, bo a to jest TForm;

[dopisane]

nawet gdy zrobię z tego zmienną globalną to nadal nie działa :(

0

Wydaję mi się, że jednak chodzi o takie coś:

var
  Idx: Integer;
  Form: TForm;
begin

 Form := nil;
 for Idx := 0 to Screen.FormCount -1 do
     if Screen.Forms[Idx].Name = 'drugiform' then
           Form := Screen.Forms[Idx];

 if Form = nil then Exit; // jeśli nie znalazl formy to Qniec

 // jesli znalazl forme to mozna sie do niej odwolywac poprzez zmienna Form
 // a tu szukamy buttona o nazwie 'button'
 TButton(Form.FindComponent('button')).Caption := 'bla';

end;
0
procedure TForm1.Button1Click(Sender: TObject);
begin
with (TForm1.Create(Form1) as TForm) do
  begin
    Name := 'drugiform';
    Show;
    Button1.Caption := 'to jednak nie takie oczywiste :)';
  end;
end;

Tyle że ja tworzyłem kopię Form1 a nie Form2, ale to chyba nic nie zmienia.

[dopisane]

Mam jeszcze tylko jedno pytanko :
do jakiego typu zmiennej można to przypisać:
(TForm1.Create(Form1) as TForm)
,żeby nie robić z with..do ?

Hmmm, teoretycznie TForm, ale własnie nie bardzo chce działać ... [???]

0

Działa, dzięki.

Mam jeszcze tylko jedno pytanko :

do jakiego typu zmiennej można to przypisać:
(TForm1.Create(Form1) as TForm)

,żeby nie robić z with..do ?

[dopisane]
Dokładniej, chodzi mi o to, żeby najpierw stworzyć formę, potem wykonać jakiś tam kod i dopiero potem zmienić caption buttona, bo to co jest teraz pozwala na zmianę captiona, ale tylko podczas tworzenia formy.

0

Ok, mam już wsio. A wygląda to tak :

zmienna globalna
a : TForm;

procedure TForm1.Button1Click(Sender: TObject);
begin
a := TForm1.Create(self);
a.Show;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
TButton(a.FindComponent('button1')).Caption := 'hhh';
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1