|
![]() |
|
Registriert seit: 4. Mär 2005 40 Beiträge |
#1
Es ist zum verzweifeln - hab jetzt alles durchgesehen, einen Tag Tutorial studiert, aber ich komm nicht drauf.
VST funktioniert eigentlich, nur zeigt er nicht die Daten an, sondern schlicht an jeder Stelle nur das Word Node. Die Struktur würde passen, d.h. die Anzahl der 'Nodes', die Knoten und die Anzahl der Childs je Knoten passt exakt zur Datenbank, nur hab ich folgendes Problem: Anstatt Anzeige der Daten das Wort 'Node' und wenn ich einen Knoten öffne, dann hängt sich das Prog auf. Nochmals der akutelle Source
Delphi-Quellcode:
Hoffentlich findet sich eine gute Seele, die sich meinem Problem annimmt und mir den entscheidenden Tip gibt.
unit Hauptkalkulation;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, DB, ADODB, BetterADODataSet, jpeg, ExtCtrls, StdCtrls, Mask, DBCtrls, Grids, DBGrids, VirtualTrees; type PTreeData = ^TTreeData; TTreeData = record FObject : TObject; 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; 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; Kunden: TDataSource; Seitenwahl: TPageControl; Objektauswahl: TTabSheet; Kundendaten: TTabSheet; ADO_objektkunde: TADOConnection; ADO_objektarchitekt: TADOConnection; ADO_objektparameter: TADOConnection; ADO_Objektbetrag: TADOConnection; ADO_Objektverlauf: TADOConnection; db_objektkunde: TBetterADODataSet; db_objektarchitekt: TBetterADODataSet; db_objektparameter: TBetterADODataSet; db_objektbetrag: TBetterADODataSet; db_objektverlauf: TBetterADODataSet; Objektkunde: TDataSource; objektarchitekt: TDataSource; Objektparameter: TDataSource; Objektbetrag: 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_objektkundeTelefonnummer: TWideStringField; db_objektkundeTelefonnummer2: TWideStringField; db_objektkundeTelefaxnummer: TWideStringField; db_objektkundeHandynummer: TWideStringField; db_objektverlaufObjektnummer: TWideStringField; db_objektverlaufKundennummer: TWideStringField; db_objektverlaufArtdesObjektes: TWideStringField; db_objektverlaufArtdesObjektesNummer: TWideStringField; db_objektverlaufBezeichnung: TWideStringField; db_objektverlaufDatum: TDateTimeField; db_objektverlaufDateiablage: TWideStringField; db_objektkundeNummerbeschreibung: TWideStringField; db_kundenSuchname: TWideStringField; vst: TVirtualStringTree; function AddVSTObject(avst: TCustomVirtualStringTree; aNode: PVirtualNode; aObject: TObject): PVirtualNode; procedure vstFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode); procedure vstCompareNodes(Sender: TBaseVirtualTree; Node1, Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer); procedure vstHeaderClick(Sender: TVTHeader; Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure vstGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Kalk: TKalk; implementation {$R *.dfm} function Tkalk.AddVSTObject(avst: TCustomVirtualStringTree; aNode: PVirtualNode; aObject: TObject): PVirtualNode; var Data: PTreeData; begin Result := avst.Addchild(aNode); data := avst.GetNodeData(Result); avst.ValidateNode(Result, False); data^.FObject := aObject; end; procedure Tkalk.vstFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode); var Data: PTreeData; begin Data := vst.GetNodeData(Node); if not Assigned(Data) then exit; Data.FObject.Free; end; procedure TKalk.vstCompareNodes(Sender: TBaseVirtualTree; Node1, Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer); var Data1, Data2: PTreeData; begin Data1 := Sender.GetNodeData(Node1); Data2 := Sender.GetNodeData(Node2); case Column of 0: Result := CompareText(TtreeDataClass(Data1.FObject).FKunde, TtreeDataClass(Data2.FObject).FKunde); 1: Result := CompareText(TTreeDataClass(Data1.FObject).FObjektnummer, TtreeDataClass(Data2.FObject).FObjektnummer); 2: Result := CompareText(TTreeDataClass(Data1.FObject).FObjektbeschreibung, TtreeDataClass(Data2.FObject).FObjektbeschreibung); end; end; procedure TKalk.vstHeaderClick(Sender: TVTHeader; Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then begin with Sender, TreeView do begin if SortColumn > NoColumn then Columns[SortColumn].Options := Columns[SortColumn].Options + [coParentColor]; if Column = 0 then SortColumn := NoColumn else begin if (SortColumn = NoColumn) or (SortColumn <> Column) then begin SortColumn := Column; SortDirection := sdAscending; end else if SortDirection = sdAscending then SortDirection := sdDescending else SortDirection := sdAscending; Columns[SortColumn].Color := $F7F7F7; SortTree(SortColumn, SortDirection, False); end; end; end; end; procedure TKalk.vstGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString); var Data: PTreeData; begin Data := Sender.GetNodeData(Node); if data.FObject <> nil then begin case Column of 0: begin if Node.Parent = Sender.RootNode then celltext := TTreeDataClass(Data.FObject).FKunde else celltext := TTreeDataClass(Data.FObject).FKunde end; 1: if Node.Parent = Sender.RootNode then celltext := '' else celltext := TTreeDataClass(Data.FObject).FObjektnummer; 2: if Node.Parent = Sender.RootNode then celltext := '' else celltext := TTreeDataClass(Data.FObject).FObjektbeschreibung; end; end; end; procedure TKalk.FormCreate(Sender: TObject); 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_kunden.next; end; end; end. Vielen, vielen Dank. LG Karl |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |