![]() |
Datenbank: ACCESS • Version: 2000 • Zugriff über: ADO
TTreeView nach TVirtualStringTree umsetzen - Hilfe !!!
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 :twisted: und jetzt weiß ich nicht mehr weiter :wall: . Wie kann ich TTreeView nach TVirtualStringTree umsetzen. Zur Erläuterung mein Code vom TTreeView:
Delphi-Quellcode:
Hoffentlich kann mir jemand helfen, wär sehr wichtig für mich.
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; Besten Dank im Voraus an Alle, die sich meinetwegen bemühen. LG Karl |
Re: TTreeView nach TVirtualStringTree umsetzen - Hilfe !!!
Guten morgen,
Du kannst Dir ja mal diesen Thread anschauen. Das sollte deine Fragen beantworten. ![]() |
Re: TTreeView nach TVirtualStringTree umsetzen - Hilfe !!!
Erstmal vielen Dank für Deine Antwort!
Jetzt hab ich ein grosses Problem Delphi 6 bringt beim Compilieren in der Zeile
Delphi-Quellcode:
den Fehler
function TFormChildArchiv.AddVSTObject(avst: TCustomVirtualStringTree; aNode: PVirtualNode; aObject: TObject): PVirtualNode;
Delphi-Quellcode:
Zur Erklärung der gesamte Source
Funktion benötigt Ergebnistyp
Delphi-Quellcode:
Besten Dank für Deine Mühen.
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. Karl |
Re: TTreeView nach TVirtualStringTree umsetzen - Hilfe !!!
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 |
Re: TTreeView nach TVirtualStringTree umsetzen - Hilfe !!!
Vielen Dank - jetzt hab ich das kapiert.
hab aber schon wieder eine Frage: in der Zeile
Delphi-Quellcode:
den Fehler Undefinierter Bezeichner.'vst'
vst.BeginUpdate;
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 |
Re: TTreeView nach TVirtualStringTree umsetzen - Hilfe !!!
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: ![]() 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. :mrgreen: Grüße, Mario |
Re: TTreeView nach TVirtualStringTree umsetzen - Hilfe !!!
Supppppeeerrrr. :hello: :hello: :hello:
Danke. Funzt bis dato fehlerfrei. Jetzt muss ich mich darum kümmern, die Daten anzuzeigen. Nochmals vielen Dank. LG Karl |
Re: TTreeView nach TVirtualStringTree umsetzen - Hilfe !!!
So bin schon ein wenig weiter.
Jetzt hab ich noch ein Problem mit dem Icon Code:
Delphi-Quellcode:
In der Zeile
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;
Delphi-Quellcode:
bringt er folgende Fehlermeldung:
ImageIndex := TTreeDataClass(Data.FObject).Icon;
Delphi-Quellcode:
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 |
Re: TTreeView nach TVirtualStringTree umsetzen - Hilfe !!!
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;
Delphi-Quellcode:
Wo in Deinem Typecast soll hier 'Icon' hinterlegt sein?
ImageIndex := TTreeDataClass(Data.FObject).Icon;
So, und warum findet er jetzt nix? ;-) |
Re: TTreeView nach TVirtualStringTree umsetzen - Hilfe !!!
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:18 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 by Thomas Breitkreuz