Ostatnio gwałtownie tworzyłem nowe oprogramowanie, gdzie
komponent TTreeView był bardzo istotnym elementem tego programu.
Reminiscencje z terenu walki z relaksacyjną muzą w tlehttps://www.youtube.com/watch?v=QCPbMnwGhbU
Lazarus - zintegrowane środowisko programistyczne (IDE) oparte na kompilatorze Free Pascal. Jest to wzorowane na Delphi wizualne środowisko programistyczne oraz biblioteka Lazarus Component Library (LCL), która jest odpowiednikiem VCL. Program napisany w środowisku Lazarus można bez żadnych zmian skompilować dla dowolnego obsługiwanego procesora, systemu operacyjnego i interfejsu okienek. Lazarus (w większości przypadków) jest zgodny z Delphi. Jest brakującą częścią układanki, która pozwala na rozwijanie programów, podobnie jak w Delphi, na wszystkich platformach obsługiwanych przez FPC. W odróżnieniu od Javy, która stara się, aby raz napisana aplikacja działała wszędzie (write once run anywhere), Lazarus i Free Pascal starają się, aby raz napisana aplikacja kompilowała się wszędzie (write once compile anywhere). Ponieważ dostępny jest dokładnie taki sam kompilator, w większości przypadków nie trzeba wprowadzać żadnych zmian, aby otrzymać taki sam produkt dla różnych platform.
Lazarus zawiera wiele komponentów przydatnych do szybkiego tworzenia aplikacji. Jednym z takich komponentów jest TTreeView → komponent do „obróbki na ekranie” wszelkich zagadnień o strukturze drzewiastej. Sam komponent wygląda jak okienko do przeglądania tekstów.
Budowanie drzewa
Typowym problemem w posługiwaniu się komponentem TreeView jest zasilenie go w dane. Poniższy przykład pokazuje sposób zainicjowania „płaskiej” (jednowarstwowej) struktury danych. W programie, jest utworzona operacja związana z utworzeniem formy programu, w której jest wypełniona wstępnie jakaś struktura drzewa.
Kod: Zaznacz cały
unit treev1unit ;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls;
type
{ TTreeViewExample1Form }
TTreeViewExample1Form = class(TForm)
TreeView: TTreeView;
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
TreeViewExample1Form: TTreeViewExample1Form ;
implementation
{$R *.lfm}
{ TTreeViewExample1Form }
procedure TTreeViewExample1Form.FormCreate(Sender: TObject);
var
RootNode : TTreeNode ;
begin
TreeView . Items . Clear ;
RootNode := TreeView . Items . AddFirst ( nil , '<root>' ) ;
TreeView . Items . AddChild ( RootNode , 'Element 1' );
TreeView . Items . AddChild ( RootNode , 'Element 2' );
TreeView . Items . AddChild ( RootNode , 'Element 3' );
TreeView . Items . AddChild ( RootNode , 'Element 4' );
end;
end.
Kod istotnego fragmentu programu wygląda następująco:
Kod: Zaznacz cały
procedure TTreeViewExample1Form.FormCreate(Sender: TObject);
var
RootNode : TTreeNode ;
begin
TreeView . Items . Clear ;
RootNode := TreeView . Items . AddFirst ( nil , '<root>' ) ;
TreeView . Items . AddChild ( RootNode , 'Element 1' );
TreeView . Items . AddChild ( RootNode , 'Element 2' );
TreeView . Items . AddChild ( RootNode , 'Element 3' );
TreeView . Items . AddChild ( RootNode , 'Element 4' );
RootNode . Expanded := True ;
end;
Kod: Zaznacz cały
procedure TTreeViewExample1Form.FormCreate(Sender: TObject);
var
RootNode : TTreeNode ;
ElementNode : TTreeNode ;
begin
TreeView . Items . Clear ;
RootNode := TreeView . Items . AddFirst ( nil , '<root>' ) ;
ElementNode := TreeView . Items . AddChild ( RootNode , 'Element 1' );
TreeView . Items . AddChild ( ElementNode , 'Element 1 ---> 1' );
TreeView . Items . AddChild ( ElementNode , 'Element 1 ---> 2' );
TreeView . Items . AddChild ( ElementNode , 'Element 1 ---> 3' );
TreeView . Items . AddChild ( ElementNode , 'Element 1 ---> 4' );
ElementNode . Expanded := True ;
ElementNode := TreeView . Items . AddChild ( RootNode , 'Element 2' );
TreeView . Items . AddChild ( ElementNode , 'Element 2 ---> 1' );
TreeView . Items . AddChild ( ElementNode , 'Element 2 ---> 2' );
TreeView . Items . AddChild ( ElementNode , 'Element 2 ---> 3' );
TreeView . Items . AddChild ( ElementNode , 'Element 2 ---> 4' );
ElementNode := TreeView . Items . AddChild ( RootNode , 'Element 3' );
TreeView . Items . AddChild ( ElementNode , 'Element 3 ---> 1' );
TreeView . Items . AddChild ( ElementNode , 'Element 3 ---> 2' );
TreeView . Items . AddChild ( ElementNode , 'Element 3 ---> 3' );
TreeView . Items . AddChild ( ElementNode , 'Element 3 ---> 4' );
ElementNode := TreeView . Items . AddChild ( RootNode , 'Element 4' );
RootNode . Expanded := True ;
end;
Kod: Zaznacz cały
procedure TTreeViewExample1Form.FormCreate(Sender: TObject);
var
RootNode : TTreeNode ;
ElementNode : TTreeNode ;
ElementNode1 : TTreeNode ;
ElementNode2 : TTreeNode ;
begin
TreeView . Items . Clear ;
RootNode := TreeView . Items . AddFirst ( nil , '<root>' ) ;
ElementNode := TreeView . Items . AddChild ( RootNode , 'Element 1' );
ElementNode1 := TreeView . Items . AddChild ( ElementNode , 'El 1 -> 1' );
ElementNode2 := TreeView . Items . AddChild ( ElementNode1 , 'El 1 -> 1 -> 1' );
TreeView . Items . AddChild ( ElementNode2 , 'El 1 -> 1 -> -> 1' );
TreeView . Items . AddChild ( ElementNode2 , 'El 1 -> 1 -> -> 2' );
TreeView . Items . AddChild ( ElementNode2 , 'El 1 -> 1 -> -> 3' );
TreeView . Items . AddChild ( ElementNode2 , 'El 1 -> 1 -> -> 4' );
TreeView . Items . AddChild ( ElementNode1 , 'El 1 -> 1 -> 2' );
TreeView . Items . AddChild ( ElementNode1 , 'El 1 -> 1 -> 3' );
TreeView . Items . AddChild ( ElementNode1 , 'El 1 -> 1 -> 4' );
TreeView . Items . AddChild ( ElementNode , 'El 1 -> 2' );
TreeView . Items . AddChild ( ElementNode , 'El 1 -> 3' );
TreeView . Items . AddChild ( ElementNode , 'El 1 -> 4' );
ElementNode := TreeView . Items . AddChild ( RootNode , 'Element 2' );
TreeView . Items . AddChild ( ElementNode , 'El 2 ---> 1' );
TreeView . Items . AddChild ( ElementNode , 'El 2 ---> 2' );
TreeView . Items . AddChild ( ElementNode , 'El 2 ---> 3' );
TreeView . Items . AddChild ( ElementNode , 'El 2 ---> 4' );
ElementNode := TreeView . Items . AddChild ( RootNode , 'Element 3' );
TreeView . Items . AddChild ( ElementNode , 'El 3 ---> 1' );
TreeView . Items . AddChild ( ElementNode , 'El 3 ---> 2' );
TreeView . Items . AddChild ( ElementNode , 'El 3 ---> 3' );
TreeView . Items . AddChild ( ElementNode , 'El 3 ---> 4' );
ElementNode := TreeView . Items . AddChild ( RootNode , 'Element 4' );
RootNode . Expanded := True ;
end;