Delphi-PRAXiS
Seite 2 von 3     12 3      

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 VirtualStringTree und OnLoadNode (https://www.delphipraxis.net/47980-virtualstringtree-und-onloadnode.html)

GuenterS 20. Jun 2005 21:05

Re: VirtualStringTree und OnLoadNode
 
Liste der Anhänge anzeigen (Anzahl: 1)
So bin gerade nach Hause gekommen und habe versucht Deine Änderungsvorschläge einzubauen, jedoch funktioniert das mit dem kleinen Beispielprojekt überhaupt nicht. Es wird nach wie vor nur 'Node' angezeigt.

Ich habs mal wieder angehängt.

Igotcha 21. Jun 2005 00:12

Re: VirtualStringTree und OnLoadNode
 
Zitat:

Zitat von GuenterS
So bin gerade nach Hause gekommen und habe versucht Deine Änderungsvorschläge einzubauen, jedoch funktioniert das mit dem kleinen Beispielprojekt überhaupt nicht. Es wird nach wie vor nur 'Node' angezeigt.

Err, "Node" ist der Defaulttext für Nodeeinträge ;-)

Mittels "OnGetText" musst Du den Text setzen. In dem Event steuerst Du, welche Information in welcher "Column" angezeigt werden soll.

Beispiel:

Delphi-Quellcode:
procedure TKOM.VTISTGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: WideString);
var
  myData: PIstData;
begin
    myData:=VTIST.GetNodeData(Node);
    Node.Align:=3;
  if (TextType=ttNormal) AND (myData.FGTyp<>6) then
  begin
    case Column of
    0: Celltext:=myData.FGBez;
    1: Celltext:=format('%.0n', [myData.FMonat[0]]);
    2: Celltext:=format('%.0n', [myData.FMonat[1]]);
    3: Celltext:=format('%.0n', [myData.FMonat[2]]);
    4: Celltext:=format('%.0n', [myData.FMonat[3]]);
    5: Celltext:=format('%.0n', [myData.FMonat[4]]);
    6: Celltext:=format('%.0n', [myData.FMonat[5]]);
    7: Celltext:=format('%.0n', [myData.FMonat[6]]);
    8: Celltext:=format('%.0n', [myData.FMonat[7]]);
    9: Celltext:=format('%.0n', [myData.FMonat[8]]);
    10: Celltext:=format('%.0n', [myData.FMonat[9]]);
    11: Celltext:=format('%.0n', [myData.FMonat[10]]);
    12: Celltext:=format('%.0n', [myData.FMonat[11]]);
    13: Celltext:=format('%.0n', [myData.FMonat[12]]);
    14: Celltext:=format('%.0n', [myData.FMonat[13]]);
    15: Celltext:=format('%.0n', [myData.FMonat[14]]);
    16: Celltext:=format('%.0n', [myData.FMonat[15]]);
    17: Celltext:=format('%.0n', [myData.FMonat[16]]);
    18: Celltext:=format('%.0n', [myData.FMonat[17]]);
    end;
  end;
Gruß Igotcha

GuenterS 21. Jun 2005 07:39

Re: VirtualStringTree und OnLoadNode
 
Zitat:

Zitat von Igotcha
Zitat:

Zitat von GuenterS
So bin gerade nach Hause gekommen und habe versucht Deine Änderungsvorschläge einzubauen, jedoch funktioniert das mit dem kleinen Beispielprojekt überhaupt nicht. Es wird nach wie vor nur 'Node' angezeigt.

Err, "Node" ist der Defaulttext für Nodeeinträge ;-)

Mittels "OnGetText" musst Du den Text setzen. In dem Event steuerst Du, welche Information in welcher "Column" angezeigt werden soll.

Beispiel:

Delphi-Quellcode:
procedure TKOM.VTISTGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: WideString);
var
  myData: PIstData;
begin
    myData:=VTIST.GetNodeData(Node);
    Node.Align:=3;
  if (TextType=ttNormal) AND (myData.FGTyp<>6) then
  begin
    case Column of
    0: Celltext:=myData.FGBez;
    1: Celltext:=format('%.0n', [myData.FMonat[0]]);
    2: Celltext:=format('%.0n', [myData.FMonat[1]]);
    3: Celltext:=format('%.0n', [myData.FMonat[2]]);
    4: Celltext:=format('%.0n', [myData.FMonat[3]]);
    5: Celltext:=format('%.0n', [myData.FMonat[4]]);
    6: Celltext:=format('%.0n', [myData.FMonat[5]]);
    7: Celltext:=format('%.0n', [myData.FMonat[6]]);
    8: Celltext:=format('%.0n', [myData.FMonat[7]]);
    9: Celltext:=format('%.0n', [myData.FMonat[8]]);
    10: Celltext:=format('%.0n', [myData.FMonat[9]]);
    11: Celltext:=format('%.0n', [myData.FMonat[10]]);
    12: Celltext:=format('%.0n', [myData.FMonat[11]]);
    13: Celltext:=format('%.0n', [myData.FMonat[12]]);
    14: Celltext:=format('%.0n', [myData.FMonat[13]]);
    15: Celltext:=format('%.0n', [myData.FMonat[14]]);
    16: Celltext:=format('%.0n', [myData.FMonat[15]]);
    17: Celltext:=format('%.0n', [myData.FMonat[16]]);
    18: Celltext:=format('%.0n', [myData.FMonat[17]]);
    end;
  end;
Gruß Igotcha

Danke für Deinen Beitrag ;)
Wenn Du das angehängte Zip File angeschaut hättest, hättest Du sicher auch bemerkt, dass dies _nicht_ die Lösung für mein Problem ist, bzw. das Problem an anderer Stelle zu suchen ist.

marabu 21. Jun 2005 07:55

Re: VirtualStringTree und OnLoadNode
 
Hallo Günter,

in deinem Demo-Projekt fragst du im Ereignis OnGetText() auf Column = 0 ab. Das funktioniert nur, wenn du auch in vst.header.columns Spalten eingetragen hast. Ansonsten ist der Parameter Column von OnGetTExt() immer -1 und kann ignoriert werden.

marabu

GuenterS 21. Jun 2005 08:06

Re: VirtualStringTree und OnLoadNode
 
Ups, danke für den Hinweis, hab ich jetzt ganz übersehen. Im nicht Demo Projekt habe ich eine Column definiert, da hat die Abfrage auf column=0 funktioniert.

Bin gespannt obs funktioniert heute abend :), scheint aber eine sehr plausible Erklärung dafür zu sein, warum es vorher nicht geklappt hat.

:)

dahead 21. Jun 2005 08:57

Re: VirtualStringTree und OnLoadNode
 
wie wärs mit:

Code:
procedure TKOM.VTISTGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: WideString);
var
  myData: PIstData;
begin
  myData := VTIST.GetNodeData(Node);
  Node.Align := 3;
  if (TextType = ttNormal) and (myData.FGTyp <> 6) then
  begin
   if Column = 0 then
    Celltext := myData.FGBez
   else
    Celltext := format('%.0n', [myData.FMonat[Column-1]]);
  end;

GuenterS 21. Jun 2005 09:06

Re: VirtualStringTree und OnLoadNode
 
Zitat:

Zitat von dahead
wie wärs mit:

Code:
procedure TKOM.VTISTGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: WideString);
var
  myData: PIstData;
begin
  myData := VTIST.GetNodeData(Node);
  Node.Align := 3;
  if (TextType = ttNormal) and (myData.FGTyp <> 6) then
  begin
   if Column = 0 then
    Celltext := myData.FGBez
   else
    Celltext := format('%.0n', [myData.FMonat[Column-1]]);
  end;

oder
Code:
procedure TKOM.VTISTGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: WideString);
var
  myData: PIstData;
begin
  myData := VTIST.GetNodeData(Node);
  Node.Align := 3;
  if (TextType = ttNormal) and (myData.FGTyp <> 6) then
  begin
    case column of
      0: Celltext := myData.FGBez;
    else
      Celltext := format('%.0n', [myData.FMonat[Column-1]]);
    end;
  end;
end;

GuenterS 21. Jun 2005 19:45

Re: VirtualStringTree und OnLoadNode
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von marabu
Hallo Günter,

in deinem Demo-Projekt fragst du im Ereignis OnGetText() auf Column = 0 ab. Das funktioniert nur, wenn du auch in vst.header.columns Spalten eingetragen hast. Ansonsten ist der Parameter Column von OnGetTExt() immer -1 und kann ignoriert werden.

marabu

So danke, jetzt kommt zumindest keine Zugriffsverletzung mehr :) Speicher und Laden klappt auch, nun habe ich allerdings ein neues seltsames Verhalten des Trees beobachten können.

Zeitweise kann ich meine Nodes nicht auswählen mit der Maus und mit Tastatatur zeichnet er sich irgendwie sehr komisch.

Ich hab mal das ganze Projekt angehängt.

marabu 21. Jun 2005 20:38

Re: VirtualStringTree und OnLoadNode
 
Hallo Günter,

im Ereignis OnEdited() des VST solltest du folgende Zeile einfügen:

Delphi-Quellcode:
Sender.InvalidateNode(Node);
Sag mal, was ich machen muss um das unerwünschte Verhalten zu beobachten.

marabu

GuenterS 21. Jun 2005 20:41

Re: VirtualStringTree und OnLoadNode
 
An und für sich habe ich nur ein paar Kategorien und Notizen hinzugefügt und konnte mit der Maus nicht alle auswählen. Mit der Tastatur hab ich dann allerdings die Darstellung des Baumes ruiniert. Die Notizen sind zu Kategorien worden und umgekehrt.

Nachdem ich aber mal die Datei in welche ich das Speicher gelöscht habe, konnte ich es auch nicht mehr reproduzieren, vielleicht hatte ich in dieser Datei noch einen Knopf.


Ich danke Dir schon mal für Deine vielen Mühen, mit meinen Problemen. :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:23 Uhr.
Seite 2 von 3     12 3      

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