TTreeView/fi

From Free Pascal wiki
Jump to: navigation, search

English (en) español (es) suomi (fi) français (fr) magyar (hu)

Puunäkymä

TTreeView ttreeview.png eli puunäkymä on on graafinen ohjauselementti, joka esittää hierarkkisen näkymän informaatiosta. Jokaisella kohteella voi olla useita alakohteita.

Kohteet voidaan laajentaa paljastamaan alakohteita, jos niitä on olemassa ja piilottamaan sen alle kuuluvat kohteet.


Uuden kohteen lisääminen koodilla

Käytä TTreeView.Items.AddChild tai AddChildObject.

Puunäkymän luominen joka lataa kohteita vain laajentamisen yhteydessä

Jos halutaan lisätä laajennussymboli solmuun, jossa ei ole osia, käytä:

MyNode.HasChildren := True;

Aseta sitten tapahtumakäsittelijä OnExpanding-tapahtumaan. Tässäkin sinun pitäisi palata, jos laajennus todella voidaan tehdä tai ei, ja jos kyllä, niin pitäisi lisätä alikohtia solmuun. Jos laajennusta ei voida tehdä, laajennusmerkki poistuu automaattisesti, vaikka olet aiemmin asettanut HasChildrenin todeksi.

Lyhyt esimerkki puunäkymän käyttämisestä

Tässä on nopeasti tehty esimerkki:

Luodaan uusi sovellus. Laitetaan lomakkeelle TTreeview-komponentti. Lisätään vielä pari painiketta (TButton). Muutetaan Button1:n Caption-ominaisuus arvoon "Add Child" ja button2:n Caption-ominaisuus arvoon "Delete".

Liitetään seuraava koodi näiden painikkeiden OnClick-tapahtumiin, käännetään ja ajetaan ohjelma.

procedure TForm1.Button1Click(Sender: TObject);
var 
  i: integer;
  s: string;
begin
  // if there are no nodes, create a root node with a parent of nil
  if TreeView1.Items.Count = 0 then
  begin
    Treeview1.Items.Add (nil,'Root Node');
    exit;
  end;
 
  // Set up a simple text for each new node - Node1 , Node2 etc
  i := treeview1.Items.Count;
  s := 'Node ' + inttostr(i);
  //Add a new node to the currently selected node
  if TreeView1.Selected <> nil then
    Treeview1.Items.AddChild(Treeview1.Selected ,s);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
 
    //A procedure to recursively delete nodes
  procedure DeleteNode(Node:TTreeNode);
  begin
    while Node.HasChildren do 
      DeleteNode(node.GetLastChild);
    TreeView1.Items.Delete(Node) ;
  end;
 
begin
  if TreeView1.Selected = nil then 
    exit;
 
    //if selected node has child nodes, first ask for confirmation
  if treeview1.Selected.HasChildren then
    if messagedlg( 'Delete node and all children ?',mtConfirmation, [mbYes,mbNo],0 ) <> mrYes then 
      exit;
  DeleteNode(TreeView1.Selected);
end;


Ohjelman ajon alussa puunäkymä on tyhjä. Jos valitaan "Lisää lapsi" ("Add Child"-painike), luodaan juurisolmu. Sen jälkeen lapsi lisätään mihin tahansa valitulle solmulle klikkaamalla painiketta "Lisää lapsi".

"Delete" (poista) painike poistaa valitun solmun. Jos sillä ei ole lapsia, se poistaa sen välittömästi, mutta jos sillä on lapsia, se kysyy ensin.


Esimerkki usean solmun valinnasta useille käyttäjävalinnoille

Valitaan TTreeview-komponentti, siirrytään komponenttimuokkaimeen ja asetetaan options ominaisuus "tvoAllowMultiSelect" arvoon true. Sitten toistetaan valittujen solmujen päälle ja hankitaan valittujen kansioiden tai tiedostojen polut, seuraava esimerkki täyttää kyseisten valittujen solmujen tekstipolut muistikentille

Koodi:

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  if TreeView1.SelectionCount=0 then
  exit;
  Memo1.Lines.Clear;
  for i:=0 to TreeView1.SelectionCount-1 do
  Memo1.Lines.Add(TreeView1.Selections[i].GetTextPath);
end;

Puunäkymän datan vapautus

Käyteään puunäkymän OnDeletion -tapahtumaa vapauttaamaan objektit.

procedure TForm1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
begin
  TMyObject(Node.Data).Free;
end;

Vedä ja pudota menetelmän käyttö puunäkymässä

Jos halutaan sallia "vedä ja pudota"-menetelmä, niin on

  1. Asetetaan ominaisuus "DragMode" arvoon DmAutomatic.
  2. Luodaan tapahtuma "OndragOver":
procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;  State: TDragState; var Accept: Boolean);
begin
  Accept := true;
end;

Katso myös


LCL Components
Component Tab Components
Standard TMainMenu • TPopupMenu • TButton • TLabel • TEdit • TMemo • TToggleBox • TCheckBox • TRadioButton • TListBox • TComboBox • TScrollBar • TGroupBox • TRadioGroup • TCheckGroup • TPanel • TFrame • TActionList
Additional TBitBtn • TSpeedButton • TStaticText • TImage • TShape • TBevel • TPaintBox • TNotebook • TLabeledEdit • TSplitter • TTrayIcon • TControlBar • TFlowPanel • TMaskEdit • TCheckListBox • TScrollBox • TApplicationProperties • TStringGrid • TDrawGrid • TPairSplitter • TColorBox • TColorListBox • TValueListEditor
Common Controls TTrackBar • TProgressBar • TTreeView • TListView • TStatusBar • TToolBar • TCoolBar • TUpDown • TPageControl • TTabControl • THeaderControl • TImageList • TPopupNotifier • TDateTimePicker
Dialogs TOpenDialog • TSaveDialog • TSelectDirectoryDialog • TColorDialog • TFontDialog • TFindDialog • TReplaceDialog • TOpenPictureDialog • TSavePictureDialog • TCalendarDialog • TCalculatorDialog • TPrinterSetupDialog • TPrintDialog • TPageSetupDialog • TTaskDialog
Data Controls TDBNavigator • TDBText • TDBEdit • TDBMemo • TDBImage • TDBListBox • TDBLookupListBox • TDBComboBox • TDBLookupComboBox • TDBCheckBox • TDBRadioGroup • TDBCalendar • TDBGroupBox • TDBGrid • TDBDateTimePicker
Data Access TDataSource • TBufDataset • TMemDataset • TSdfDataSet • TFixedFormatDataSet • TDbf
System TTimer • TIdleTimer • TLazComponentQueue • THTMLHelpDatabase • THTMLBrowserHelpViewer • TAsyncProcess • TProcessUTF8 • TProcess • TSimpleIPCClient • TSimpleIPCServer • TXMLConfig • TEventLog • TServiceManager • TCHMHelpDatabase • TLHelpConnector
Misc TColorButton • TSpinEdit • TFloatSpinEdit • TArrow • TCalendar • TEditButton • TFileNameEdit • TDirectoryEdit • TDateEdit • TTimeEdit • TCalcEdit • TFileListBox • TFilterComboBox • TComboBoxEx • TCheckComboBox • TButtonPanel • TShellTreeView • TShellListView • TXMLPropStorage • TINIPropStorage • TIDEDialogLayoutStorage • TMRUManager • TStrHolder
LazControls TCheckBoxThemed • TDividerBevel • TExtendedNotebook • TListFilterEdit • TListViewFilterEdit • TTreeFilterEdit • TShortPathEdit • TLvlGraphControl
RTTI TTIEdit • TTIComboBox • TTIButton • TTICheckBox • TTILabel • TTIGroupBox • TTIRadioGroup • TTICheckGroup • TTICheckListBox • TTIListBox • TTIMemo • TTICalendar • TTIImage • TTIFloatSpinEdit • TTISpinEdit • TTITrackBar • TTIProgressBar • TTIMaskEdit • TTIColorButton • TMultiPropertyLink • TTIPropertyGrid • TTIGrid
SQLdb TSQLQuery • TSQLTransaction • TSQLScript • TSQLConnector • TMSSQLConnection • TSybaseConnection • TPQConnection • TPQTEventMonitor • TOracleConnection • TODBCConnection • TMySQL40Connection • TMySQL41Connection • TMySQL50Connection • TMySQL51Connection • TMySQL55Connection • TMySQL56Connection • TSQLite3Connection • TIBConnection • TFBAdmin • TFBEventMonitor • TSQLDBLibraryLoader
Pascal Script TPSScript • TPSScriptDebugger • TPSDllPlugin • TPSImport_Classes • TPSImport_DateUtils • TPSImport_ComObj • TPSImport_DB • TPSImport_Forms • TPSImport_Controls • TPSImport_StdCtrls • TPSCustomPlugin
SynEdit TSynEdit • TSynCompletion • TSynAutoComplete • TSynMacroRecorder • TSynExporterHTML • TSynPluginSyncroEdit • TSynPasSyn • TSynFreePascalSyn • TSynCppSyn • TSynJavaSyn • TSynPerlSyn • TSynHTMLSyn • TSynXMLSyn • TSynLFMSyn • TSynDiffSyn • TSynUNIXShellScriptSyn • TSynCssSyn • TSynPHPSyn • TSynTeXSyn • TSynSQLSyn • TSynPythonSyn • TSynVBSyn • TSynAnySyn • TSynMultiSyn • TSynBatSyn • TSynIniSyn • TSynPoSyn
Chart TChart • TListChartSource • TRandomChartSource • TUserDefinedChartSource • TCalculatedChartSource • TDbChartSource • TChartToolset • TChartAxisTransformations • TChartStyles • TChartLegendPanel • TChartNavScrollBar • TChartNavPanel • TIntervalChartSource • TDateTimeIntervalChartSource • TChartListBox • TChartExtentLink • TChartImageList
IPro TIpFileDataProvider • TIpHttpDataProvider • TIpHtmlPanel