Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TTreeView auf Editieren stellen (https://www.delphipraxis.net/76097-ttreeview-auf-editieren-stellen.html)

Mackhack 29. Aug 2006 21:57


TTreeView auf Editieren stellen
 
Hi,

wie kann man auf einfachste Art und weise es anstellen dass man in einem TTreeView einfach auf einen Eintrag klickt und dann entweder ich dort mit F2 den Text editieren kann oder dass die Eintraege in TEdit-Feldern erscheinen?

Danke!

Cyberbob 29. Aug 2006 22:05

Re: TTreeView auf Editieren stellen
 
Den Text des aktuell markierten Elements erhälst du per "TreeView.Selected.Text"

Etwa so:

Delphi-Quellcode:
procedure TForm.TreeViewClick(Sender: TObject);
begin
  Edit.Text := TreeView.Selected.Text;
end;

procedure TForm.ButtonClick(Sender: TObject);
begin
  Treeview.Selected.Text := Edit.Text;
end;

Mackhack 29. Aug 2006 22:07

Re: TTreeView auf Editieren stellen
 
Hi,

dank dir. Ich habe jetzt nur noch die Frage wie ich die Hirarchie davon noch in die EditFelder bekomme.

Lannes 29. Aug 2006 22:11

Re: TTreeView auf Editieren stellen
 
Hallo,

im OnKeyDown des TreeView rufst Du damit den Inplace-Editor auf:
Delphi-Quellcode:
if assigned(TreeView1.Selected) then
    if Key = vk_F2 then
      TreeView1.Selected.EditText;

Mackhack 29. Aug 2006 22:17

Re: TTreeView auf Editieren stellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Lannes,
danke!

Hilft schon viel weiter!

Jetzt muesste ich aber noch hinbekommen dass ich wenn ich eben auf diesen Eintrag klicke 4 EditFelder gefuellt werden.
Einmal mit dem Root-Node, einem SubNode davon, davon noch ein SubNode und dem letzten SubNode.

DGL-luke 29. Aug 2006 22:54

Re: TTreeView auf Editieren stellen
 
Also das ja wohl Pipifax^^

Delphi-Quellcode:
procedure TForm2.TreeView1Click(Sender: TObject);
var item, root, c1,c2: TTreeNode;
begin
  if (Sender as TTreeView).Selected <> nil then
    begin
      item := (Sender as TTreeView).Selected;
      c2 := item.Parent; //einfach nach oben durchhangeln, zur sicherheit könnte man zwischendurch auf <> nil testen
      c1 := c2.Parent;
      root := c1.Parent;
    end;
end;
Wenn der Baum NICHT fest ist, ich also nur von deinen Vorgaben OHNE das Bild ausgehen kann, wirds natürlich schwieriger.

EDIT: willst du es so machen, dass man belibig reinklicken kann?!
Dann ist mein Ansatz... ungeeignet.

Mackhack 29. Aug 2006 23:03

Re: TTreeView auf Editieren stellen
 
Hi Luke,

soweit ist der Baum Fest. Ja ich moechte einfach reinklicken koennen. Normalerweise nur in den ObjectName oder Translation.

DGL-luke 30. Aug 2006 12:40

Re: TTreeView auf Editieren stellen
 
OK.... da es ja keine abzweigungen gibt, kann man auch gleich nach unten durchtraversieren:

Delphi-Quellcode:
procedure TForm2.TreeView1Click(Sender: TObject);
var node: TTreeNode;
    item, root, c1,c2: TTreeNode;
begin
  if ((Sender as TTreeView).Selected <> nil) then
    begin
      node := (Sender as TTreeView).Selected;
      case Node.Level of
        3: item := node; //translation geklickt
        2: item := node.getFirstChild; //objektname geklickt
        else Exit; //was anderes geklickt -> Abbruch
      end;
      c2 := item.Parent; //jetzt einfach nach oben durchhangeln
      c1 := c2.Parent;
      root := c1.Parent;
    end;
end;
Eigentlich immer noch relativ einfach... die OH hat zum Thema TTreeNode(s) auch einiges zu sagen ;)

Mackhack 30. Aug 2006 17:48

Re: TTreeView auf Editieren stellen
 
Dank dir Luke.
Ich verstehe nur eins noch net so recht und zwar mit dem Case Statement.

Wenn ich auf die Translation klicke holt sich dein Code nicht das Erste Child aber wenn ich auf ObjectName klicke schon. Warum?

DGL-luke 30. Aug 2006 19:12

Re: TTreeView auf Editieren stellen
 
item ist IMMER die Translation.

sollte dir das und die kommentare noch nicht reichen: das case statement macht folgendes: wenn die geklickte node die translation ist, wird item = geklickte node. wenn die geklcikte node das objekt ist, wird item = das erste child der geklickten node. ist doch auch die einzige möglichkeit...


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz