Autor Beitrag
Coder
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1383
Erhaltene Danke: 1

WinXP
D2005 PE
BeitragVerfasst: Fr 16.11.07 00:02 
Hi
Hab in der VirtualTreeView-Hilfe folgendes gefunden:
Zitat:
You could connect a TBookmark to the data. To display the name of your customer in a VT :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TFRM_WWW_main.vFavTreeGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: Integer; TextType: TVSTTextType; var Text: WideString);
begin
  // Column is -1 if the header is hidden or no columns are defined
  if Column < 0 then Exit;
  if TVirtualStringTree(Sender).Header.Columns[Column].Text = 'Customer Name' then
  begin
    Table.GotoBookmark(TBookmark(Sender.GetNodeData(Node)));
    Text := Table.FieldByName('Name').asString;
  end;
end;


Das is schonmal sehr schön.
Doch leider steht nicht da wie ich das TBookmark vorher in den Pointer des Nodes reinkriege.
Hab es so versucht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function TForm1.LoadFromDB: Boolean;
var
  Node: PVirtualNode;
  NodeData: Pointer;
begin
  ...
  Node := VSTAddNode(nil);
  NodeData := VST.GetNodeData(Node);
  NodeData := Table.GetBookmark;
end;

Wenn er im oberen Quellcode nun Zeile 7 erreicht gibt er aus
Zitat:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt *.exe ist eine Exception der Klasse EDatabaseError mit der Meldung 'Table: Datensatz nicht gefunden' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------


Ich hab keine Ahnung wies gehn soll. :?!?:

MfG


Zuletzt bearbeitet von Coder am Mo 19.11.07 21:42, insgesamt 1-mal bearbeitet
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Sa 17.11.07 13:53 
Hallo Coder,

ich glaube du musst den Bookmark anders in die NodeData schreiben.

Ich weise objekte immer so zu:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var  
  Node: PVirtualNode;  
  NodeData: Pointer;  
begin  
  ...  
  Node := VSTAddNode(nil);  
  NodeData := VST.GetNodeData(Node);  
  TObject(NodeData^) := ClientDataSet.GetBookmark;  
end;


Viele Grüße
Ken

_________________
Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte.
Coder Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1383
Erhaltene Danke: 1

WinXP
D2005 PE
BeitragVerfasst: So 18.11.07 21:07 
Sorry das funktioniert auch nicht.
Gleiche Fehlermeldung.
Hab auch schon viel mit Pointern rumprobiert etc. ...
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Mo 19.11.07 13:28 
Hi,

was machst du denn mit deinem ClientDataset und dem Table in der Zwischenzeit? Mal nen open und nen close? In deinem ersten Code-Schnippsel ist von Table.GotoBookmark die rede, in dem zweiten versuchst du aber den Bookmark von einer ClientDataset in den Node zu packen.

Sind das nur zwei namen für das selbe objekt? Ich bin mir nämlich nicht sicher, ob du nen bookmark zwischen unterschiedlichen instanzen bedenkenlos austauschen kannst.

Hast du mal geschaut, ob du überhaupt nen bookmark aus dem Node bekommst?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
begin  
  // Column is -1 if the header is hidden or no columns are defined  
  if Column < 0 then Exit;  
  if TVirtualStringTree(Sender).Header.Columns[Column].Text = 'Customer Name' then  
  begin  
    LBookMark := TBookmark(Sender.GetNodeData(Node));
    if assigned(LBookmark) then begin
      Table.GotoBookmark(LBookMark);  
      Text := Table.FieldByName('Name').asString;  
    end else
      MessageDlg('Kein Bookmark', mtInformation, [mbOk]);


Viele Grüße
Ken

_________________
Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte.
Coder Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1383
Erhaltene Danke: 1

WinXP
D2005 PE
BeitragVerfasst: Mo 19.11.07 21:41 
Der erste CodeBlock ist aus der VirtualTreeView-Hilfe.
Sollte also funktionieren.
Den zweiten hab ich geschrieben und die Komponente nur anders genannt.
Habs mal verbessert.
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Di 20.11.07 01:27 
hi,

schließt du die komponente zwischenzeitlich oder machst du nen refresh? Generell hast du recht, der code sollte funktionieren, aber 100% sicher ist das nicht.

Ich arbeite zwar seit jahren mit der TVirtualStringTree Komponente aber mit TBookmark habe ich in dem Zshg noch nicht gearbeitet. Einfach mal schauen, was mit den DB komponenten zwischenzeitlich passiert wäre ein erster Schritt.

Viele Grüße
Ken

_________________
Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte.
Coder Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1383
Erhaltene Danke: 1

WinXP
D2005 PE
BeitragVerfasst: Di 20.11.07 14:41 
user profile iconCenBells hat folgendes geschrieben:
hi,

schließt du die komponente zwischenzeitlich oder machst du nen refresh? Generell hast du recht, der code sollte funktionieren, aber 100% sicher ist das nicht.

Ich arbeite zwar seit jahren mit der TVirtualStringTree Komponente aber mit TBookmark habe ich in dem Zshg noch nicht gearbeitet. Einfach mal schauen, was mit den DB komponenten zwischenzeitlich passiert wäre ein erster Schritt.

Viele Grüße
Ken


Ich schließe die Datenbank nicht.
Ich arbeite nur mit ein paar Datensätzen.

Naja, wenns nich klappt mach ich das einfach doch mit nem Record.