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 Frage zur Virtual Tree View (https://www.delphipraxis.net/39693-frage-zur-virtual-tree-view.html)

m0sch3r 6. Feb 2005 16:11


Frage zur Virtual Tree View
 
Habe seit einiger Zeit - einen komischen bug...

In meinem VST verschwindent ein childnode einfach so nach einer gewissen zeit und zu dem auch noch nicht jedesmal..

ich habe in die ganzen on erreignisse debugmessages eingebaut, sie werden aber beim verschwinden nicht aufgerufen - ich kann den fehler nicht mal localisieren...!!!

Der bug ist erst seit einiger zeit da...

das ist die procedure zum hinzufugen des childnodes
Delphi-Quellcode:
         form1.UsersOnlinVST.nodeDatasize := Sizeof(UTTreeData);
         form1.UsersOnlinVST.BeginUpdate;

         Hauptknoten     := form1.UsersOnlinVST.GetFirst() ;
         Knoten          := form1.UsersOnlinVST.AddChild(form1.UsersOnlinVST.GetFirstChild(  Hauptknoten));
         data            := form1.UsersOnlinVST.GetNodeData(Knoten);
         form1.UsersOnlinVST.ValidateNode(knoten, true);
         dummy:= Chuwak.name;
         data^.FCaption:= chuwak.name;

         Unterknoten:= form1.UsersOnlinVST.AddChild(knoten);
         data          := form1.UsersOnlinVST.GetNodeData(UnterKnoten);
         data^.FCaption:= Chuwak.decs;
         form1.UsersOnlinVST.NodeHeight[unterknoten] := 13;
         form1.UsersOnlinVST.EndUpdate;
         form1.UsersOnlinVST.FullExpand();
         form1.UsersOnlinVST.Repaint;
hatt jemmand einen tip...!?

Sprint 6. Feb 2005 21:57

Re: Frage zur Virtual Tree View
 
Ist UTTreeData eine Klasse oder ein Record? Wenn es eine Klasse ist, dann kann data^.FCaption:= chuwak.name doch nicht richtig sein.

m0sch3r 9. Feb 2005 20:11

Re: Frage zur Virtual Tree View
 
das Problemm war gelöst.

habe leider noch paar kleine Fragen...!!!

1. Welche Eingenschaft im VirtualTreeView sorgt dafur das beim doppelclick sich die Childnodes nicht einklappen...!? sondern die ganze Zeit ausgeklappt bleiben...

2. Kann man zwischen jedem 0'ten nodelevel einen strich ziehen....!?
bzw.
Hauptnode
|------Unternode
|------Unternode

-------------------------------------------------- <strich

Hauptnode
|------Unternode
|------Unternode

-------------------------------------------------- <strich

Hauptnode
|------Unternode
|------Unternode







Danke im Voraus

mason 9. Feb 2005 21:27

Re: Frage zur Virtual Tree View
 
Zitat:

Zitat von m0sch3r
1. Welche Eingenschaft im VirtualTreeView sorgt dafur das beim doppelclick sich die Childnodes nicht einklappen...!? sondern die ganze Zeit ausgeklappt bleiben...

Wenn die Nodes generell ausgeklappt bleiben sollen, also auch, wenn man auf das - daneben klickt, dann kannst du einfach im Ereignis OnExpanding die Variable Allowed auf false setzen:
Delphi-Quellcode:
procedure TMyForm.VTCollapsing(Sender: TBaseVirtualTree; Node: PVirtualNode; var Allowed: Boolean);
begin
  Allowed := false;
end;
Wenn allerdings nur bei einem Doppelklick nichts passieren soll, fällt mir nur ein, dass du im OnDblClick eine Variable auf true setzt, und im OnExpanding dann abfragst, ob diese true ist - dann setzt du wieder Allowed false, ansonsten Allowed auf true:
Delphi-Quellcode:
type
  TMyForm = class(TForm)
    VT: TVirtualStringTree;
    ...
    procedure VTCollapsing(Sender: TBaseVirtualTree; Node: PVirtualNode; var Allowed: Boolean);
    procedure VTDblClick(Sender: TObject);
  private
    IsDblClick: boolean;
  end;

implementation

procedure TMyForm.VTDblClick(Sender: TObject);
begin
  IsDblClick := true;
end;

procedure TMyForm.VTCollapsing(Sender: TBaseVirtualTree; Node: PVirtualNode; var Allowed: Boolean);
begin
  Allowed := not IsDblClick;
  if IsDblClick then
    IsDblClick := false;
end;

m0sch3r 9. Feb 2005 21:47

Re: Frage zur Virtual Tree View
 
Danke, hat soweit geklappt...:)))

Noch mal zu meiner 2 Frage, gibt es vieleicht eine Eingenschaft die zwischen jedem Hauptnode ein Grid hin malt.....!?

mason 9. Feb 2005 22:17

Re: Frage zur Virtual Tree View
 
Zitat:

Zitat von m0sch3r
Danke, hat soweit geklappt...:)))

Noch mal zu meiner 2 Frage, gibt es vieleicht eine Eingenschaft die zwischen jedem Hauptnode ein Grid hin malt.....!?

Ich kenn mich mit den Malereien nicht so aus - aber eine einfache Lösung wäre Folgendes im OnAfterItemPaint:
Delphi-Quellcode:
procedure TForm1.VTAfterItemPaint(Sender: TBaseVirtualTree;
  TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect);
var r: TRect;
begin
  if (VT.GetNodeLevel(Node) = 0) and (VT.AbsoluteIndex(Node) > 0) then begin
    r.Left := ItemRect.Left;
    r.Right := ItemRect.Right;
    r.Top := ItemRect.Top;
    r.Bottom := ItemRect.Top + 1;
    TargetCanvas.Brush.Color := clBlack;
    TargetCanvas.FillRect(r);
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:05 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