AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi TTreeView nach TVirtualStringTree umsetzen - Hilfe !!!
Thema durchsuchen
Ansicht
Themen-Optionen

TTreeView nach TVirtualStringTree umsetzen - Hilfe !!!

Ein Thema von karl der große · begonnen am 13. Mär 2005 · letzter Beitrag vom 17. Mär 2005
Antwort Antwort
Seite 1 von 2  1 2      
karl der große

Registriert seit: 4. Mär 2005
40 Beiträge
 
#1

TTreeView nach TVirtualStringTree umsetzen - Hilfe !!!

  Alt 13. Mär 2005, 22:14
Datenbank: ACCESS • Version: 2000 • Zugriff über: ADO
Hallo an Alle!

Ich hab ein großes Problem!

Ich bin Delphi-Anfänger und hab eine kleine Applikation geschrieben mit einem TTreeView. Es funktioniert, aber: Erstens hab ich Performanceprobleme und zweitens kann ich einige wichtige Dinge damit nicht machen.

Nun hab ich hier im Forum den Verweis auf TVirtualStringTree gesehen, dieses downgeloadet, ca. 1 Stunde mit der Installation verbraten und jetzt weiß ich nicht mehr weiter .

Wie kann ich TTreeView nach TVirtualStringTree umsetzen.

Zur Erläuterung mein Code vom TTreeView:

Delphi-Quellcode:
procedure Tstamm.TreeViewInit;
var
   tv: TTreeView;
   n: TTreeNode;
   m: TTreeNode;
   ipSender : string;

begin
   tv := TreeView1;
   tv.Items.BeginUpdate;
   tv.Items.Clear;

   db_database1.First;
   db_database2.First;
   db_database3.First;

   while not db_database1.Eof do
   begin
      n := tv.Items.AddChild(nil,db_database1.FieldByName('Name').AsString);

      while not db_database2.eof do
      begin
         m := tv.Items.AddChild(n, db_database2.FieldByName('Nummerbeschreibung').AsString);
         while not db_database3.eof do
         begin
            ipSender := db_database3.FieldByName('Bezeichnung').AsString;
            with tv.Items.AddChild(m, ipSender) do
            begin
            end;
            db_database3.Next;
         end;
         db_database2.Next;
      end;
      db_database1.Next;
   end;
   tv.FullExpand;
   tv.Items.EndUpdate;
end;
Hoffentlich kann mir jemand helfen, wär sehr wichtig für mich.

Besten Dank im Voraus an Alle, die sich meinetwegen bemühen.

LG Karl
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#2

Re: TTreeView nach TVirtualStringTree umsetzen - Hilfe !!!

  Alt 14. Mär 2005, 07:51
Guten morgen,

Du kannst Dir ja mal diesen Thread anschauen.

Das sollte deine Fragen beantworten.

VirtualTreeview
Gruß

Albi
  Mit Zitat antworten Zitat
karl der große

Registriert seit: 4. Mär 2005
40 Beiträge
 
#3

Re: TTreeView nach TVirtualStringTree umsetzen - Hilfe !!!

  Alt 14. Mär 2005, 21:39
Erstmal vielen Dank für Deine Antwort!

Jetzt hab ich ein grosses Problem

Delphi 6 bringt beim Compilieren in der Zeile

function TFormChildArchiv.AddVSTObject(avst: TCustomVirtualStringTree; aNode: PVirtualNode; aObject: TObject): PVirtualNode; den Fehler

Funktion benötigt Ergebnistyp Zur Erklärung der gesamte Source

Delphi-Quellcode:
unit Hauptprogramm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, DB, ADODB, BetterADODataSet, jpeg, ExtCtrls, StdCtrls,
  Mask, DBCtrls, Grids, DBGrids, VirtualTrees;

type
  TKalk = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Image1: TImage;
    ADO_kunden: TADOConnection;
    db_kunden: TBetterADODataSet;
    db_kundenNummer: TWideStringField;
    db_kundenUIDNummer: TWideStringField;
    db_kundenAnrede: TWideStringField;
    db_kundenAnrede2: TWideStringField;
    db_kundenGrad: TWideStringField;
    db_kundenVorname: TWideStringField;
    db_kundenNachname: TWideStringField;
    db_kundenName: TWideStringField;
    db_kundenBranche: TWideStringField;
    db_kundenBranche2: TWideStringField;
    db_kundenStrasse: TWideStringField;
    db_kundenLKZ: TWideStringField;
    db_kundenPLZ: TWideStringField;
    db_kundenOrt: TWideStringField;
    db_kundenTelefon: TWideStringField;
    db_kundenTelefon2: TWideStringField;
    db_kundenTelefax: TWideStringField;
    db_kundenZuhanden: TWideStringField;
    db_kundeneMail: TWideStringField;
    db_kundenWebsite: TWideStringField;
    Kunden: TDataSource;
    Seitenwahl: TPageControl;
    Objektauswahl: TTabSheet;
    Kundendaten: TTabSheet;
    TreeView1: TTreeView;
    ADO_objektkunde: TADOConnection;
    ADO_Objektverlauf: TADOConnection;
    db_objektkunde: TBetterADODataSet;
    db_objektverlauf: TBetterADODataSet;
    Objektkunde: TDataSource;
    Objektverlauf: TDataSource;
    db_objektkundeObjektnummer: TWideStringField;
    db_objektkundeKundennummer: TWideStringField;
    db_objektkundeObjektbeschreibung: TWideStringField;
    db_objektkundeAnrede: TWideStringField;
    db_objektkundeKunde: TWideStringField;
    db_objektkundeSuchname: TWideStringField;
    db_objektkundeBranche: TWideStringField;
    db_objektkundeBranche2: TWideStringField;
    db_objektkundeStrasse: TWideStringField;
    db_objektkundeOrt: TWideStringField;
    db_objektverlaufObjektnummer: TWideStringField;
    db_objektverlaufKundennummer: TWideStringField;
    db_objektverlaufArtdesObjektes: TWideStringField;
    db_objektverlaufArtdesObjektesNummer: TWideStringField;
    db_objektverlaufBezeichnung: TWideStringField;
    db_objektverlaufDatum: TDateTimeField;
    db_objektverlaufDateiablage: TWideStringField;
    db_objektverlaufSuchnummer: TWideStringField;
    db_objektkundeNummerbeschreibung: TWideStringField;
    db_kundenSuchname: TWideStringField;
    VirtualTreeView1: TVirtualStringTree;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  TTreeDataClass = class
     private
        FKunde: string;
        FObjektnummer: string;
        FObjektbeschreibung: string;
     published
        property Kunde: string read FKunde write Fkunde;
        property Objektnummer: string read FObjektnummer write FObjektnummer;
        property Objektbeschreibung: string read FObjektbeschreibung write FObjektbeschreibung;
  end;

  PTreeData = ^TTreeData;
  TTreeData = record
     FObject: TObject;
  end;

var
  Kalk: TKalk;
  avst: TCustomVirtualStringTree;
  aNode: PVirtualNode;
  aObject: TObject;

implementation

{$R *.dfm}

function TFormChildArchiv.AddVSTObject(avst: TCustomVirtualStringTree; aNode: PVirtualNode; aObject: TObject): PVirtualNode;
var
   Data: PTreeData;
begin
   Result := avst.Addchild(aNode);
   avst.ValidateNode(Result, False);
   data := avst.GetNodeData(Result);
   data^.FObject := aObjekt;
end;

procedure TVirtualStringTree1.BuildTree;
var
   TreeObject: TTreeDataClass;
   Wurzel: PVirtualNode;
   begin
      vst.BeginUpdate;
      vst.NodeDataSize := SizeOf(TTreeData);
      vst.DeleteChildren(vst.RootNode, true);
      TreeObject := TTreeDataClass.Create;
      while not db_kunden.Eof do
      begin
         TreeObject.Kunde := db_kunden.fieldByName('Name').AsString;
         Wurzel := AddVSTObject(VST, Nil, TreeObject);
         while not db_objektkunde.eof do
         begin
            TreeObject.Objektnummer := db_objektkunde.fieldbyName('Objektnummer').AsString;
            TreeObject.Objektbeschreibung := db_objektkunde.fieldbyName('Objektbeschreibung').AsString;
            addvstObject(vst, Wurzel, TreeObject)
            db_objektkunde.next;
         end;
         db_kunde.next;
      end;
   end;
end;

end.
Besten Dank für Deine Mühen.

Karl
  Mit Zitat antworten Zitat
DelphiDeveloper

Registriert seit: 9. Apr 2003
Ort: Köln
256 Beiträge
 
Delphi XE2 Enterprise
 
#4

Re: TTreeView nach TVirtualStringTree umsetzen - Hilfe !!!

  Alt 15. Mär 2005, 10:15
Die Funktion bzw. Prozedur Klassifizieren sind falsch

function TFormChildArchiv.AddVSTObject...
procedure TVirtualStringTree1.BuildTree;

muss wohl in deiner Klasse TKalk definiert werden.

stichwort: Methoden werden in einer Klassendeklaration als Funktions- oder Prozedurköpfe ohne Rumpf angegeben. Die definierenden Deklarationen folgen dann an einer anderen Stelle im Programm.

also

TKalk = class(TForm)
...
function AddVSTObject(avst: TCustomVirtualStringTree; aNode: PVirtualNode; aObject: TObject): PVirtualNode;
procedure BuildTree;

...
end;

und im implemtationsteil:

function TKalk.AddVSTObject(avst: TCustomVirtualStringTree; aNode: PVirtualNode; aObject: TObject): PVirtualNode;
...

procedure TKalk.BuildTree; ...

mfg
DD
  Mit Zitat antworten Zitat
karl der große

Registriert seit: 4. Mär 2005
40 Beiträge
 
#5

Re: TTreeView nach TVirtualStringTree umsetzen - Hilfe !!!

  Alt 15. Mär 2005, 20:17
Vielen Dank - jetzt hab ich das kapiert.

hab aber schon wieder eine Frage:

in der Zeile

vst.BeginUpdate; den Fehler Undefinierter Bezeichner.'vst'

Sorry an Alle, wenn ich wegen solcher 'einfacher' Fragen nerve, aber ich bin blutiger Anfänger und lerne jeden Tag eine Menge dazu.

Danke Karl
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#6

Re: TTreeView nach TVirtualStringTree umsetzen - Hilfe !!!

  Alt 15. Mär 2005, 20:23
VST steht hier für "VirtualStringTree" und muss entsprechend mit dem Namen _DEINES_ VST ersetzt werden.

Ein gutes Einsteiger-Tutorial zum VST findest du auch hier: http://www.dsdt.info/tutorials/virtualtreeview/

Lass dich nicht entmutigen von dem VST. Der Einstieg ist etwas hart und ungewohnt, wenn's jedoch einmal Klick gemacht hat und du das Potential damit erkennst, willste garnicht mehr ohne das Teil arbeiten.

Grüße,
Mario
  Mit Zitat antworten Zitat
karl der große

Registriert seit: 4. Mär 2005
40 Beiträge
 
#7

Re: TTreeView nach TVirtualStringTree umsetzen - Hilfe !!!

  Alt 15. Mär 2005, 20:30
Supppppeeerrrr.

Danke. Funzt bis dato fehlerfrei.

Jetzt muss ich mich darum kümmern, die Daten anzuzeigen.

Nochmals vielen Dank.

LG Karl
  Mit Zitat antworten Zitat
karl der große

Registriert seit: 4. Mär 2005
40 Beiträge
 
#8

Re: TTreeView nach TVirtualStringTree umsetzen - Hilfe !!!

  Alt 15. Mär 2005, 22:26
So bin schon ein wenig weiter.

Jetzt hab ich noch ein Problem mit dem Icon

Code:

Delphi-Quellcode:
procedure Tkalk.vstGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode;
   Kind: TVTImageKind; Column: Integer; var Ghosted: Boolean;
   var ImageIndex: Integer);
var
   Data: PTreeData;
begin
   Data := Sender.GetNodeData(Node);
   case Kind of
      ikNormal, ikSelected:
         if (Column = 0) and (Node.Parent = Sender.RootNode) then
            ImageIndex := TTreeDataClass(Data.FObject).Icon;
      ikState:
         case Column of
            0:
               if Node.Parent <> Sender.RootNode then
                  ImageIndex := 5;
      end;
   end;
end;
In der Zeile

            ImageIndex := TTreeDataClass(Data.FObject).Icon; bringt er folgende Fehlermeldung:

 Undefinierter Bezeichner 'Icon'
Und dann noch eine Frage:

Hab jetzt alle Proceduren angelegt. Wie kann ich das Ding jetzt anwerfen. Er zeigt mir noch nichts an.

Gruß Karl
  Mit Zitat antworten Zitat
m.wollert

Registriert seit: 18. Aug 2003
Ort: Heilbronn
92 Beiträge
 
FreePascal / Lazarus
 
#9

Re: TTreeView nach TVirtualStringTree umsetzen - Hilfe !!!

  Alt 15. Mär 2005, 22:36
Zur 2. Frage: Es gibt ein Ereignis "OnGetText". Dort musst Du selber den Text zuweisen.
Zur 1. Frage:

Hier Deine Klasse:
Delphi-Quellcode:
TTreeDataClass = class
     private
        FKunde: string;
        FObjektnummer: string;
        FObjektbeschreibung: string;
     published
        property Kunde: string read FKunde write Fkunde;
        property Objektnummer: string read FObjektnummer write FObjektnummer;
        property Objektbeschreibung: string read FObjektbeschreibung write FObjektbeschreibung;
  end;
ImageIndex := TTreeDataClass(Data.FObject).Icon; Wo in Deinem Typecast soll hier 'Icon' hinterlegt sein?
So, und warum findet er jetzt nix? ;-)
Michael
*Im Auftrag ewiger Jugend und Glückseligkeit*
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#10

Re: TTreeView nach TVirtualStringTree umsetzen - Hilfe !!!

  Alt 15. Mär 2005, 22:38
Yo, is ja klar, dass er dir die Fehlermeldung bringt. Icon ist ja auch keine Eigenschaft in der TTreeDataClass-Klasse.

Lies und befolge das Tutorial. Dann verstehst du auch die Grundlagen, wie und warum der VST wann was anzeigt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:36 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