AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Virtualstringtree Exception beim aufklappen

Ein Thema von WS1976 · begonnen am 20. Jan 2009 · letzter Beitrag vom 20. Jan 2009
Antwort Antwort
WS1976
(Gast)

n/a Beiträge
 
#1

Virtualstringtree Exception beim aufklappen

  Alt 20. Jan 2009, 07:31
Hallo,
ich habe, mit virtualstringtree, eine Tabelle mit Subnodes erzeugt.
Beim Aufklappen des Subnodes bekomme ich eine in der VSTGetText Methode eine Zugriffsverletzung. Weiss nicht warum.
Kann mir jemand helfen?

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, VirtualTrees, StdCtrls, ImgList;

type
  POmeinedaten=^TOmeinedaten;
  TOmeinedaten=class
  private
  published
  public
    Bezeichnung:string;
    Feld:array[1..6] of string;
    Fobject:tobject;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    VST: TVirtualStringTree;
    ImageList1: TImageList;
    procedure Button1Click(Sender: TObject);
    procedure VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
      Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
    procedure FormCreate(Sender: TObject);
  private
    function add_entry(node:PVirtualNode;bez,f1,f2,f3,f4,f5,f6:string):PVirtualNode;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.add_entry(node:PVirtualNode;bez,f1,f2,f3,f4,f5,f6:string):PVirtualNode;
var daten:TOmeinedaten;
begin
  daten:=TOmeinedaten.Create;
  If node<>nil then
     Begin
       daten:=vst.GetNodeData(node);
     End;
        daten.Bezeichnung:=bez;
        daten.Feld[1]:=f1;
        daten.Feld[2]:=f2;
        daten.Feld[3]:=f3;
        daten.Feld[4]:=f4;
        daten.Feld[5]:=f5;
        daten.Feld[6]:=f6;
  result:=vst.addchild(node,daten);
end;

procedure TForm1.Button1Click(Sender: TObject);
var I:Integer;
aNode:PVirtualNode;
begin
  anode:=add_entry(nil,'Telegramm aktiv Ein','s','s','s','s','s','s');
  add_entry(anode,'Telegramm aktiv Ein passiv','a','a','a','a','a','a');
// node:=add_entry(nil,'Telegramm aktiv Aus','','','','','','');
// node:=add_entry(nil,'Telegramm aktiv Aus passiv','','','','','','');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  vst.nodedatasize:=sizeof(TOmeinedaten);
end;

procedure TForm1.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
var
  data : TOmeinedaten;t0:integer;
begin
  data:=TOmeinedaten(VST.getnodedata(node)^);
        case Column of
        0: celltext:=Data.Bezeichnung;
        1: celltext:=Data.Feld[1];
        2: celltext:=Data.Feld[2];
        3: celltext:=Data.Feld[3];
        4: celltext:=Data.Feld[4];
        5: celltext:=Data.Feld[5];
        6: celltext:=Data.Feld[6];
        end;
end;

end.
Grüsse
Rainer
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Virtualstringtree Exception beim aufklappen

  Alt 20. Jan 2009, 07:49
Was hast du denn bisher schon versucht, um die Zugriffsverletzung im OnGetText einzugrenzen? Kommt die AV IMMER, egal welche Column? Oder nur bei bestimmten Columns? Oder erwartest du, dass jemand deinen Code kopiert, ein neues Projekt erstellt und es für dich debuggt? ... Oder oder oder?

Vorallem verstehe ich hier wieder nicht, warum du in deinem Fall mit Klassen als Knotendaten arbeitest, statt mit Records?

Dir sollte auch klar sein, dass du - nach meinem Verständnis der Materie - mit
Delphi-Quellcode:
daten:=TOmeinedaten.Create;
  If node<>nil then
     Begin
       daten:=vst.GetNodeData(node);
     End;
die Instanz des Objekts "daten" überschreibst, wenn "node<>nil" ist. Somit haben deine Unterknoten keine "TOmeinedaten"-Instanz, was auch der Grund für deine AV sein wird.
  Mit Zitat antworten Zitat
WS1976
(Gast)

n/a Beiträge
 
#3

Re: Virtualstringtree Exception beim aufklappen

  Alt 20. Jan 2009, 08:25
Hallo nuclearping,

es geht doch sicherlich, im Ton, auch etwas freundlicher oder?

Zitat:
Vorallem verstehe ich hier wieder nicht, warum du in deinem Fall mit Klassen als Knotendaten arbeitest, statt mit Records?
Ist ganz einfach! In die Klasse werden später Objects aufgenommen. (Checkboxes, Comboboxes usw)

Zitat:
Oder erwartest du, dass jemand deinen Code kopiert, ein neues Projekt erstellt und es für dich debuggt? ... Oder oder oder?
Um Himmels Willen, das erwarte ich nicht. Aber es könnte ja sein, dass irgendjemand eine Idee hat.

Sobald ich die celltext aus der VSTGetText rausnehme funktioniert das.

Ich habe die get_entry Methode geändert. Bringt auch nichts.
Delphi-Quellcode:
function TForm1.add_entry(node:PVirtualNode;bez,f1,f2,f3,f4,f5,f6:string):PVirtualNode;
var daten:TOmeinedaten;
begin
  If node<>nil then
     Begin
       daten:=vst.GetNodeData(node);
     End
  else
     Begin
       daten:=TOmeinedaten.Create;
     End;
        daten.Bezeichnung:=bez;
        daten.Feld[1]:=f1;
        daten.Feld[2]:=f2;
        daten.Feld[3]:=f3;
        daten.Feld[4]:=f4;
        daten.Feld[5]:=f5;
        daten.Feld[6]:=f6;
  result:=vst.addchild(node,daten);
end;
Grüsse
Rainer
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Virtualstringtree Exception beim aufklappen

  Alt 20. Jan 2009, 08:44
Ich kling nur so unfreundlich, weil das da absolut "dahingeschusselt" aussieht. Fast so, als ob du selbst nicht wirklich wüßtest, was du da machst.

Afaik werden Check- und Comboboxes auch nicht SO in den Baum gebracht, sondern über Property-Links oder wie das heisst.

Zitat:
Ich habe die get_entry Methode geändert. Bringt auch nichts.
Ja, weil du's damit noch schlimmer gemacht hast. Wie wäre es so?
Delphi-Quellcode:
function TForm1.add_entry(node:PVirtualNode;bez,f1,f2,f3,f4,f5,f6:string):PVirtualNode;
var daten:TOmeinedaten;
begin
  daten:=TOmeinedaten.Create;

        daten.Bezeichnung:=bez;
        daten.Feld[1]:=f1;
        daten.Feld[2]:=f2;
        daten.Feld[3]:=f3;
        daten.Feld[4]:=f4;
        daten.Feld[5]:=f5;
        daten.Feld[6]:=f6;
  result:=vst.addchild(node,daten);
end;
  Mit Zitat antworten Zitat
WS1976
(Gast)

n/a Beiträge
 
#5

Re: Virtualstringtree Exception beim aufklappen

  Alt 20. Jan 2009, 09:06
Hallo nuclearping,

ich hab das Teil (VST) nach der Anleitung ( Video hier in der DP ) programmiert.
Wieso ist der Code "hingeschusselt"?
Könntest du mir etwas genauer erklären was du damit meinst?

Grüsse
Rainer
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: Virtualstringtree Exception beim aufklappen

  Alt 20. Jan 2009, 09:11
Schau dir doch einfach die Demos an, die beim VST dabei sind (Advanced Demo). Die deckt eigentlich alles ab.
  Mit Zitat antworten Zitat
WS1976
(Gast)

n/a Beiträge
 
#7

Re: Virtualstringtree Exception beim aufklappen

  Alt 20. Jan 2009, 09:21
Hallo,

beim neuesten Installationsteil zum VST sind keine Beispiele mehr dabei und die alten funktionieren nicht mehr komplett.
Man kann damit eigentlich nichts mehr anfangen. Uminstallieren mag ich das Ganze auch nicht.

Noch etwas:
Lass doch bitte, in deinen Beiträgen, die bewertenden Äusserungen weg.
Könnte sein, dass du damit jemanden kränkst oder verletzt.
Bitte antworte nicht mehr. Für mich ist das Thema erledigt.

Grüsse
Rainer
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:09 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