Tipy a triky v Delphi, díl 49.

TreeView, to je téma dnešního dílu. Ukážeme si dva jednoduché příklady. V prvním si předvedeme, jak blikat ikonkou u libovolného prvku stromu, druhá funkce bude testovat, zda je celý strom kompletně rozbalen.

Blikání ikony u prvků v TreeView

TreeView je velmi oblíbeným prvkem aplikací, protože celkem přehledně dokáže zobrazit v podstatě libovolnou hierarchickou strukturu dat. Jednotlivé prvky mohou mít vlastní ikonku a právě této ikonky využijeme v našem příkladu. Často se totiž vyskytne případ, kdy je nutné na určitou položku stromu uživatele nějakým způsobem upozornit, upoutat jeho pozornost a vynutit si tak jeho odezvu. A toho docílíme například tím, že necháme ikonku u příslušného prvku blikat.

Pro někoho to bude možná neohrabané řešení, nicméně pro tuto jednoduchou "animaci" použijeme Timer. Pochopitelně musíte mít rovněž na formuláři TreeView naplněný daty a definované příslušné ikonky pro jednotlivé prvky. Pak již stačí jen doplnit událost OnTimer:

procedure TForm1.Timer1Timer(Sender: TObject);
var
r: TRect;
bNode: TTreeNode;
ImageWidth: Integer;
begin
with Form1.TreeView1 do bNode := Items[Items.count - 1 ];
with bNode do
begin
  ImageIndex := ImageIndex xor MaxInt;
  SelectedIndex := SelectedIndex xor MaxInt;
  if IsVisible then
  begin
    ImageWidth := TTreeView(Treeview).Images.Width;
    r := DisplayRect(True);
    r.Right := r.Left + ImageWidth;
    OffsetRect(r, -ImageWidth - 4 , 0);
    InvalidateRect(GetHandle, @r, True);
  end;
  end;
end;

Blikající prvek, označený jako bNode, je v našem případě ten úplně poslední z celého stromu. Rychlost blikání je pochopitelně ovlivněna nastavením Timeru, takže zvolte vhodný interval.

Test rozbaleni Treeview

I druhý dnešní tip se bude týkat Treeview, konkrétně stavu jeho rozbalení. Občas se totiž může hodit informace, zda je či není celý strom kompletně rozbalen, a podle toho příslušně reagovat. Postup je tedy poměrně logický. Projdeme postupně celý strom a testujeme rozbalenost jednotlivých podvětví. K tomu nám poslouží následující jednoduchá funkce, jejímž jediným parametrem je Treeview, jehož stav nás zajímá:

function IsExpanded(TView: TTreeview) : boolean;
var
Node: TTreenode;
begin
Assert(Assigned(TView));
if TView.Items.Count > 0 then
  begin
  Node := TView.Items[0];
  Result := True;
  while Result and Assigned(Node) do
    begin
    Result := Node.Expanded or not Node.HasChildren;
    Node := Node.GetNext;
    end;
  end
  else
    Result := False;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if IsExpanded(TreeView1) then ShowMessage(`Strom je rozbalen`)
else ShowMessage(`Strom není rozbalen`);
end;

Zajímavá může být též funkce, která testuje, zda je celý strom kompletně zabalen. Funkce pak vypadá naprosto totožně, liší se pouze v podmínce testování, která může vypadat například takto:

Result := not (Node.Expanded and Node.HasChildren);

O metodách FullExpand a FullCollapse, které slouží k rozbalení a opětovnému zabalení celého stromu (a souvisejí tak s našim příkladem), snad mluvit nemusím, protože je jistě dobře znáte a běžně používáte.

Diskuze (2) Další článek: Problém s DirectX 8.1 a procesory od AMD

Témata článku: Software, Programování, Díl, Jednotlivé prvky, Timer, Blikání, Strom, Trik, TRI, Nota, DEL


Určitě si přečtěte

Google není jen vyhledávač: 15 užitečných funkcí, o kterých možná ani nevíte

Google není jen vyhledávač: 15 užitečných funkcí, o kterých možná ani nevíte

** Google umí kromě vyhledávání i spoustu dalších věcí ** Vybrali jsme více než 15 užitečných funkcí a schopností ** Stačí zadat do vyhledávače ta správná klíčová slova

Karel Kilián | 22

Karel Kilián
TipyVyhledávačeGoogle
Avast Omni: Krabička, která vám hackne síť a promění se v unikátní antivirus

Avast Omni: Krabička, která vám hackne síť a promění se v unikátní antivirus

** Počítač dnes ochrání kdejaký antivirus ** Drobná krabička Omni se postará rovnou o celou domácí síť ** Bude ji odposlouchávat, analyzovat a blokovat útoky

Jakub Čížek | 120

Jakub Čížek
AntivirusIoT
Dalším gigabitovým hráčem bude ČEZ. Internet již poskytuje prvním zákazníkům
Lukáš Václavík
Poskytovatelé internetuPřipojení k internetu
Lidl buduje chytrou domácnost, propojí všechno se vším
Lukáš Václavík
LidlChytrá domácnostIoT
Nešťastný vývojář ukazuje, proč není dobré být závislý na Googlu
Lukáš Václavík
InternetGoogle
Apple Macbook Air M1: testujeme výkon, výdrž, a hlavně kompatibilitu aplikací [průběžně aktualizováno]

Apple Macbook Air M1: testujeme výkon, výdrž, a hlavně kompatibilitu aplikací [průběžně aktualizováno]

** Testujeme Apple Macbook Air s procesorem M1 ** Zajímá nás nejen výkon, ale zejména kompatibilita aplikací ** Článek je průběžně doplňován na základě vašich dotazů

Jiří Kuruc | 209

Jiří Kuruc
Apple

Aktuální číslo časopisu Computer

Megatest rychlých Wi-Fi 6 routerů

Jak ztišit počítač

Velký test mATX skříní