![]() |
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 |
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 |
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 |
Re: TButton in VirtualTreeView einfügen
Sorry, verguckt .... das war eine TVirtualDrawTree ...
Guck mal unter OnAfterCellPaint. ... Aber damit hab ich noch nicht gearbeitet. |
Re: TButton in VirtualTreeView einfügen
hat vielleicht jemand anders eine Idee?
Der Button wird im "OnInitNode" erzeugt und bei "BeforeCellPaint" zugewiesen. MfG Bacardifeeling |
Re: TButton in VirtualTreeView einfügen
*push*
|
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. |
Re: TButton in VirtualTreeView einfügen
Zitat:
Deine Lösung werde ich mir jetzt erstmal anschauen, danke für die Hilfe. MfG Bacardifeeling |
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 |
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 |
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. |
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.
|
AW: TButton in VirtualTreeView einfügen
Danke für die Hilfe, es hat mir sehr geholfen :thumb: :)
|
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:
OnCollapsing event:
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;
Code:
OnExpanded event:
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;
Code:
gruss
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:54 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