TTreeView Delfy komponent wyświetla hierarchiczną listę elementów - węzły drzewne. Węzeł jest prezentowany przez tekst węzła i opcjonalny obraz. Każdy węzeł w widoku drzewa jest instancją klasy TTreeNode.
Podczas gdy możesz wypełnić widok drzewa elementami w czasie projektowania, użyj Edytor przedmiotów TreeView, w większości przypadków widok drzewa byłby wypełniany w czasie wykonywania - w zależności od tego, czym jest twoja aplikacja.
TreeView Items Editor ujawnia, że istnieje tylko garść informacji, które można „dołączyć” do węzła: tekst i kilka indeksów obrazów (dla stanu normalnego, rozwiniętego, wybranego i podobnych).
Zasadniczo komponent widoku drzewa można łatwo zaprogramować. Istnieje kilka metod dodawania nowych węzłów do drzewa i ustawiania ich hierarchii.
Oto jak dodać 10 węzłów do widoku drzewa (o nazwie „TreeView1”). Należy zauważyć, że właściwość Items zapewnia dostęp do wszystkich węzłów w drzewie. AddChild dodaje nowy węzeł do widoku drzewa. Pierwszy parametr to węzeł nadrzędny (w celu zbudowania hierarchii), a drugi parametr to tekst węzła.
AddChild zwraca nowo dodane TTreeNode. W powyższym próbka kodu, wszystkie 10 węzłów zostanie dodanych jako węzły główne (nie mają węzła nadrzędnego).
W bardziej skomplikowanych sytuacjach chciałbyś, aby twoje węzły zawierały więcej informacji - najlepiej mieć jakieś specjalne wartości (właściwości), które są specyficzne dla rozwijanego projektu.
Powiedz, że chcesz wyświetlić dane pozycji zamówienia klienta z bazy danych. Każdy klient może mieć więcej zamówień, a każde zamówienie składa się z większej liczby produktów. Jest to relacja hierarchiczna, którą można wyświetlić w widoku drzewa:
W Twojej bazie danych będzie więcej informacji o każdym zamówieniu i każdym elemencie. Widok drzewa wyświetla bieżący stan (tylko do odczytu) - i chcesz zobaczyć szczegóły dla każdego zamówienia (a nawet dla elementu) dla wybranego zamówienia.
Gdy użytkownik wybierze węzeł „Order_1_1”, chcesz, aby szczegóły zamówienia (suma, data itp.) Były wyświetlane użytkownikowi.
Możesz w tym czasie pobrać wymagane dane z bazy danych, ALE musisz znać unikalny identyfikator (powiedzmy wartość całkowitą) wybranego zamówienia, aby pobrać prawidłowe dane.
Potrzebujemy sposobu na przechowywanie tego identyfikatora zamówienia wraz z węzłem, ale nie możemy użyć właściwości Text. Niestandardową wartością, którą musimy przechowywać w każdym węźle, jest liczba całkowita (tylko przykład).
Kiedy taka sytuacja się zdarza, możesz mieć ochotę poszukać właściwości Tag (wiele komponentów Delphi ma), ale właściwość Tag nie jest ujawniona przez klasę TTreeNode.
Dodaj niestandardowe dane do węzłów drzewa: The TreeNode. Właściwość danych
Właściwość Data węzła drzewa umożliwia powiązanie niestandardowych danych z węzłem drzewa. Dane to wskaźnik i może wskazywać na obiekty i zapisy. Wyświetlanie danych XML (kanał RSS) w TreeView pokazuje, jak przechowywać typ rekordu zmienna do właściwości Data węzła drzewa.
Wiele klas typów elementów ujawnia właściwość Data - można użyć do przechowywania dowolnego obiektu wraz z elementem. Przykładem jest TListItem składnika TListView. Oto jak dodawać obiekty do właściwości Data.
Dodaj niestandardowe dane do węzłów drzewa: TreeView. CreateNodeClass
Jeśli nie chcesz korzystać z właściwości Data TTreeNode, ale wolisz rozszerzyć swój własny TreeNode o kilka właściwości, Delphi również ma rozwiązanie.
Powiedz, że chcesz to zrobić
Oto jak rozszerzyć standardowe TTreeNode o kilka własnych właściwości:
- Utwórz swój TMyTreeNode, rozszerzając TTreeNode.
- Dodaj właściwość ciągu MyProperty.
- Obsługuj OnCreateNodeClass dla widoku drzewa, aby określić klasę węzła.
- Ujawnij coś takiego jak TreeView1_SelectedNode na poziomie formularza. Byłby to typ TMyTreeNode.
- Obsługuj OnChange widoku drzewa, aby zapisać w SelectedNode wartość wybranego węzła.
- Użyj TreeView1_Selected.myProperty, aby odczytać lub zapisać nową wartość niestandardową.
Oto pełny kod źródłowy (TButton: „Button1” i TTreeView: „TreeView1” w formularzu):
Tym razem właściwość Data klasy TTreeNode nie jest używana. Zamiast tego rozszerzasz klasę TTreeNode o własną wersję węzła drzewa: TMyTreeNode.
Używając zdarzenia OnCreateNodeClass w widoku drzewa, tworzysz węzeł swojej klasy niestandardowej zamiast standardowej klasy TTreenode.