Dynamiczne tworzenie komponentów

0

21,21,21,21,clwhite,onclick:gogo,onmove:blabla,onpaint:pokaz;

Przeszukałem google,fora i faq i nie znalazłem ..:
w jaki sposób zrobic cos takiego -
np. onCreate stworzyc procedure która z pliku np. takiego
[code]
panel:21,21,21,21,clwhite,onclick:gogo,onmove:blabla,onpaint:pokaz;
button:211,291,241,11,clwhite,onclick:gogo,onmove:blabla,onpaint:pokaz;[/code]

stowrzy w pętli [tyle ile jest linijek tego napisu - ] panel o wymiarach 21,21 polozonych left:21,top:21,
o kolorze clwhite w onclick wykona procedure "gogo" w onMove - "blabla" itd.

w jaki sposób można dynamicznie tworzyć koponenty które będą Od razu mialy stowrzone procedury "dynamicznie" i jak to wczytac z pliku txt??
proszę o pomoc.

0

komponety sie tworzy nastepujaca:

var
  Panel: TPanel;
begin
  Panel := TPanel.Create;
  Panel.Parent := Form1; //tu zamieniasz w zaleznosci od potrzeb
  //i tu wlasciwosci panela, top := 5 np
end;

a z czytaniem z pliku, to wymysl sam... te rzeczy opieraja sei o podstawy (petle i kilka if), wystarczy troche pomyslec

0

Tablica procedur z powiazanymi do nich nazwami(np 2-wymiarowa tablica), nazwy porównujesz z tymi z txt.

0
  Panel := TPanel.Create;
  Panel.Parent := Form1; //tu zamieniasz w zaleznosci od potrzeb
  //i tu wlasciwosci panela, top := 5 np
end;

A o Ownerze nie zapomniałeś? Ja bym dał TPanel.Create(Form1); Może to nie konieczne, ale wydaje mi się, że trzeba podać...

0

Może to nie konieczne, ale wydaje mi się, że trzeba podać...

Sam sobie zaprzeczasz :-D
Owner ma (chyba) jedynie znaczenie np. jeśli chiałoby się wyszukiwać komponenty poprzez FindComponent. Wtedy jeśli Owner ustawimy na nil to nie znajdziemy tego komponentu używając:

Form.FindComponent('nazwa')

...ponieważ nie należy on do formy 'Form', chociaż leży na niej ;-)

0

Danie formy jako Ownera dla komponentu spowoduje, że przy niszczeniu formy ona sama automatycznie zwolni pamięć dla tego komponentu. W przeciwnym razie sami musimy się o to troszczyć.

0

Procedurki to:

  Panel1.OnCreate:=TForm1.PanelCreate(Sender:TObject); // na przykład

Oczywiście ta procedura PanelCreate musi być zdeklarowana i wypełniona no i oczywiście może mieć jakąkolwiek nazwe byle by było to co ma być w nawiasie (różne procedury mają to inne najlepiej F1 )

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