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 TButton in VirtualTreeView einfügen (https://www.delphipraxis.net/52950-tbutton-virtualtreeview-einfuegen.html)

Bacardifeeling 7. Sep 2005 12:31


TButton in VirtualTreeView einfügen
 
Hallo liebe DP'ler

Ich möchte einen Button in eine Spalte eines Virtual String Tree's einfügen.

Leider tappe ich mit meinen Lösungsansätzen völlig im Dunkeln.
Alles was funktioniert ist die Erstellung des buttons zu Laufzeit.

Jedoch wird der Button bei jeder frischen Zeile in der ersten Zeile dargestellt, quasi "übermalt".

Bin für jeden Lösungsansatz dankbar.


MfG

Bacardifeeling

chaosben 7. Sep 2005 13:10

Re: TButton in VirtualTreeView einfügen
 
Tja, ich nutze in einem VirtualStringTree eine Combobox, die sich in diesem Falle ja kaum von einem Button unterscheidet.
Du könntest dir zur Laufzeit pro Node einen Button erstellen und ihn in den Daten, die du zu den Nodes speicherst hinterlegen. Schlussendlich richtest du ihn bei jedem OnDrawNode für jeden Knoten per Hand an der richtigen Stelle aus (PaintInfo.ContentRect). Ach ja .. und Button.Parent=TreeView

Bacardifeeling 7. Sep 2005 13:20

Re: TButton in VirtualTreeView einfügen
 
Danke Ben,
Leider finde ich in den Ereignissen meines VST kein "OnDrawNode".

Nichts desto Trotz wäre mir ein kleines Code Beispiel sehr hilfreich...

MfG
Bacardifeeling

chaosben 7. Sep 2005 13:42

Re: TButton in VirtualTreeView einfügen
 
Sorry, verguckt .... das war eine TVirtualDrawTree ...
Guck mal unter OnAfterCellPaint. ... Aber damit hab ich noch nicht gearbeitet.

Bacardifeeling 7. Sep 2005 15:18

Re: TButton in VirtualTreeView einfügen
 
hat vielleicht jemand anders eine Idee?

Der Button wird im "OnInitNode" erzeugt und bei "BeforeCellPaint" zugewiesen.

MfG
Bacardifeeling

Bacardifeeling 14. Sep 2005 07:44

Re: TButton in VirtualTreeView einfügen
 
*push*

generic 14. Sep 2005 09:21

Re: TButton in VirtualTreeView einfügen
 
Liste der Anhänge anzeigen (Anzahl: 3)
pushen ist erst *nach* 24 stunden erwünscht.

aber hier eine mögliche lösung.

Bacardifeeling 14. Sep 2005 10:17

Re: TButton in VirtualTreeView einfügen
 
Zitat:

Zitat von generic
pushen ist erst *nach* 24 stunden erwünscht.

[..]

vielleicht ist dir aufgefallen, daß mein letzter Post zu diesem Thema 7 Tage (c.a. 168 Std. :wink: ) zurückliegt, glaube das reicht um einen *push* zu rechtfertigen. :-D

Deine Lösung werde ich mir jetzt erstmal anschauen, danke für die Hilfe.

MfG
Bacardifeeling

Bacardifeeling 14. Sep 2005 10:59

Re: TButton in VirtualTreeView einfügen
 
Vielen Dank Generic

... für den Code, werde das in mein VST einbauen... hat sehr gut geholfen :thumb:
Damit, denke ich, kann dieser Thread auch geschlossen werden.

MfG
Bacardifeeling

generic 22. Sep 2005 15:05

Re: TButton in VirtualTreeView einfügen
 
Liste der Anhänge anzeigen (Anzahl: 1)
aufgrund eine pn anfrage von bar.

hier nochmal eine demo zum löschen der knoten.
hab etwas mehr object orientierte programmierung reingebracht.
aber nach wie vor hat das demo charakter!

gruss

Natia 19. Mai 2017 09:37

AW: TButton in VirtualTreeView einfügen
 
Hallo leute, das Thema ist schon alt aber kein ding :P

@Bacardifeeling
wie machst du wenn Node.State = vsExpanded ist?
Ich meine, Ich kann Button zum Tree hinfügen, aber es bleibt sichtbar, wenn ich den Parent minimiziere.

Hat jemand irgendein Lösung dafür?

Danke im Voraus.

Aviator 19. Mai 2017 09:58

AW: TButton in VirtualTreeView einfügen
 
Es gibt die Events OnCollapsing und OnCollapsed. Da solltest du ansetzen. Im OnCollapsing könntest du die Buttons entsprechend wieder unsichtbar schalten oder freigeben. Wenn du sie frei gibst, dann musst du sie natürlich im OnExpanding wieder erstellen.

Natia 19. Mai 2017 12:01

AW: TButton in VirtualTreeView einfügen
 
Danke für die Hilfe, es hat mir sehr geholfen :thumb: :)

Natia 22. Mai 2017 14:21

AW: TButton in VirtualTreeView einfügen
 
Hallo noch einmal

Am OnCollapsing un am OnExpanded habe ich erfolgreich mein Button gezeigt/versteckt.

Das problem ist jetzt aber nur, wenn ich den oberen Node minimisiere, geht der undere nach oben(so sei es)....aber Buttons bleiben darunter://

Mein InitNode(wo ich Buttons erzeuge)
Code:
 Data.RefreshButton := TButton.Create(nil);
    Data.RefreshButton.Parent := VST;
    Data.RefreshButton.Height := VST.DefaultNodeHeight;
    Data.RefreshButton.Caption := 'Refresh';
    R := Sender.GetDisplayRect(Node, 2, False);
    Data.RefreshButton.BoundsRect := R;
    Data.RefreshButton.Visible := True;
    Data.RefreshButton.Enabled := True;
    Data.RefreshButton.Node := Node;
    Data.RefreshButton.OnClick := RefreshbtnClick;
    Sender.SetNodeData<TService>(Node, Service);
    Node.CheckType := ctNone;
OnCollapsing event:
Code:
  if Assigned(Node) then
  begin
    Child := Sender.GetFirstChild(Node);
    while Assigned(Child) do
    begin
      Data := Sender.GetNodeData<TService>(Child);
      Data.RefreshButton.Visible := False;
      Child := Sender.GetNextSibling(Child);
    end;
  end;
OnExpanded event:
Code:
  if Assigned(Node) then
  begin
    Child := Sender.GetFirstChild(Node);
    while Assigned(Child) do
    begin
      Data := Sender.GetNodeData<TService>(Child);
      R := Sender.GetDisplayRect(Child, 2, False);
      Data.RefreshButton.BoundsRect := R;
      Data.RefreshButton.Visible := True;
      Child := Sender.GetNextSibling(Child);
    end;
  end;
gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:08 Uhr.

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