VirtualStringTreeData - pobranie wartości Caption z zaznaczonego Node

0

Witam,

Mam pytanie jak pobrać wartość Caption z Zaznaczonego Node na kontrolce VirtualStringTreeData. Używam CodeTyphon 5.4

procedure TBOMFrm.Button3Click(Sender: TObject);
var dane, dane2 : PVirtualNode;
begin
  dane:=VirtualStringTreeData1.FocusedNode;
  ShowMessage(VirtualStringTreeData1.Data.Items[dane^.Index].Caption);
end;

Przy tym kodzie zwraca mi inne wartości

Drzewa wygląda następująco:

df165cb8ed.png

Co jest źle?

2

Nie mam teraz zainstalowanego tego komponentu, ale chyba powinno być coś w stylu:

procedure TBOMFrm.Button3Click(Sender: TObject);
var dane, dane2 : PVirtualNode;
begin
  dane:=VirtualStringTreeData1.FocusedNode;
  TutajWskaznikNaTwojRekord := VirtualStringTreeData1.GetNodeData(dane);
  ShowMessage(TutajWskaznikNaTwojRekord^.Caption);
end;

Tzn. VirtualStringTreeData1.FocusedNode zwraca ci węzeł z focusem a ty musisz z niego jeszcze uzyskać wskaźnik na swój rekord i dopiero możesz coś odczytać. Nie wiem jak u ciebie jest on zadeklarowany.

//nazywanie dane2 : PVirtualNode; jest średnim pomysłem bo to raczej nie są dane tylko wskaźnik na node

0

VST ma bardzo dobre demo i opis - ZACZNIJ TAM!!

0

Niestety, szukałem w demach dotyczących VirtualStringTree(nie znalazłem VirtualStringTreeData) dodałem WirtualnyRekord:

type
  PWirtualnyRekord = ^TWirtualnyRekord;
  TWirtualnyRekord = record
    Caption : String;
    Column1 : String;
    Column2 : String;
    Column3 : String;
    Column4 : String;
    Size : Integer;
  end;   

Niestety wywala błąd SIGSEV. VirtualStringTreeData nie ma metody OnGetText;
Ale udało mi się to zrobić inaczej:

var i : integer;
begin
  for i:=0 to VirtualStringTreeData1.Items.Count-1 do
  begin
    if VirtualStringTreeData1.Items[i].Focused=True then
      ShowMessage(VirtualStringTreeData1.Items[i].Caption);
  end;  
0

Niestety wywala błąd SIGSEV. VirtualStringTreeData nie ma metody OnGetText;

Pokaż linijkę, w której występuje ten błąd oraz dokładną treść błędu.

0

Robiłem na podstawie tego tutoriala tylko że u mnie jest inna kontrolna VirtualStringTreeData zamiast VirtualStringTree.

procedure TBOMFrm.Button3Click(Sender: TObject);
var i : integer;
    dane : PWirtualnyRekord;
    wskaznik : PVirtualNode;
begin

  wskaznik:=VirtualStringTreeData1.FocusedNode;
  dane:=VirtualStringTreeData1.GetNodeData(wskaznik);
  ShowMessage(dane^.Caption);

Wywala na

ShowMessage(dane^.Caption);

a komunikat błędu:

Error: Project DesSystem raised exception class 'External: SIGSEGV'.

At address 409210
0

podstawa to jednak brak zaufania do tego co sie dzieje w aplikacji i zakładanie najgorszego wiec ja bym sprawdzał jednak czy zmienne sa NULL(NIL)
bo to mi wyglada na prosty problem ze zmienna jest NULL (NIL)

1 użytkowników online, w tym zalogowanych: 0, gości: 1