Dynamika

werw0e

Po co komu dynamika??
Nie będę tego tłumaczył bo skoro tu wszedłeś to jednak myślisz, że ci się przyda :)
A więc tak najpierw zrobimy tablicę dynamiczną :
Tak wygląda jej deklaracja:

var tablica : array of integer;

Rozmiary zmienia się w inny prosty sposób:

SetLength(var S; NewLength: Integer);

S to tablica, a NewLength - zgadnijcie sami :P
Bym był zapomniał numeruje się w tablicy od 0.
Równie łatwe jest tworzenie tablicy np 2D:

var tablica2D : array of array of integer (albo cos innego:);

A zmienianie rozmiarów:

SetLength(var S; NewLength1: Integer; NewLength2: Integer);

Analogicznie dla trójwymiarowych i większych :)

DYNAMICZNE TWORZENIE KOMPONENTÓW
Teraz przejdziemy do trudniejszego zagadnienia czyli patrz wyżej.
Utworzymy teraz Buttona na formie:

 
uses  StdCtrls;
var buttony : array of TButton; //Jako zmienna globalna
//Gdzieś w jakiejś prodedurze to co niżej :
begin
 SetLength(buttony,Length(buttony)+1); //Zmienia wielkość tablicy buttonów o jeden
 //Ach wreszcie tworzymy to co trzeba :)
 Buttony[jakas_liczba] := TButton.Create(Self {np Form1,Panel1 itp}) ; 
 Buttony[jakas_liczba].Parent := Self {np Form1,Panel1 itp}; 
 Buttony[jakas_liczba].Caption := 'Dynamika RLZ';
 Buttony[jakas_liczba].inne_właściwości:=inne_wartości; :)

//  A teraz zdarzenia do tego:  //
 Buttony[0].OnClick:= Procedura_typu_onClick //napisana wcześniej :)

Na przykład:

procedure TForm1.KlikDynamicznegoBatona(Sender: TObject);
begin
 ShowMessage('Co mnie klikasz :>');
 Buttony[0].visible:=false;
// I tym podobne //
end;

Odczytanie danych z tego jest bardzo łatwe (lepszy byłby w tym przypadku np TEdit :) )

IF buttony[0].caption='Dynamika RLZ' then ShowMessage('Prawidłowy text w Buttonie dynamicznym')
                                     else ShowMessage('Nie prawidłowy text w Buttonie dynamicznym :(') 

To tylko tyle

3 komentarzy

Ten artykuł jest jakiś %#*$&^#@$)(

Usuwasz wywolujac buttonom(kazdemu elementowi tej taclicy) metode free a pozniej dajesz im wartosc null

Gdyby było jeszcze dynamiczne usuwanie...