Lehký úvod do Virtual TreeView - pokračování

vložil Radek Červinka 22. ledna 2010 22:27

Minule jsem nastínil základy práce s Virtual TreeView, ale uvědomil jsem si, že jsem pořádně nezdůraznil virtuální aspekt práce této komponenty. Zkusím to dnes ještě napravit.

výsledek

Do minulého příkladu přidám dvě tlačítka pro práci s cenou zakázky (první přičte 50, druhý 50 odečte). Navíc pokud bude cena pod hodnotou 0 bude vykreslena červeně.

Na rozdíl od klasického stromu se nemusíme vůbec starat o aktualizaci popisek ve stromě, jen změníme data v pozadí a necháme strom překreslit - o zbytek se postará kód napsaný minule.

Takže přihodíme na formulář dvě tlačítka (btnPlus, btnMinus) a napíšeme metodu, která bude dělat špinavou práci:

    1procedure TfrmVTtest.mAddSubSelected(iDiff: Integer);
    2var
    3  pNode: PVirtualNode; // uzel ve stromě
    4  MyData:PMyNodeData; // naše struktura
    5begin
    6  pNode := vt.GetFirstSelected; // první vybraný
    7  while assigned(pNode) do   // přes vybrané uzly
    8  begin
    9    MyData :=  vt.GetNodeData(pNode);  // získej naše data
   10    MyData^.crPrice := MyData^.crPrice + iDiff;  // proveď vlastní akci
   11    pNode := vt.GetNextSelected(pNode);  // další vybraný uzel
   12  end;
   13  vt.Invalidate; // zaaktualizuj zobrazení (vt je náš Virtual TreeView)
   14end;

A nyní jen obsluha našich tlačidel.

    1procedure TfrmVTtest.btnMinusClick(Sender: TObject);
    2begin
    3  mAddSubSelected(-50);
    4end;
    5
    6procedure TfrmVTtest.btnPlusClick(Sender: TObject);
    7begin
    8  mAddSubSelected(+50);
    9end;

Tak nyní nám funguje práce s cenou - tak už jen tu barvičku. Obsloužíme OnPaintText - zde se dá dělat hodně věcí, ale nám pro dnešek bude stačit jen změna barvy.

    1procedure TfrmVTtest.vtPaintText(Sender: TBaseVirtualTree;
    2  const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
    3  TextType: TVSTTextType);
    4var
    5  MyData:PMyNodeData; // opět naše data
    6begin
    7  if Column <> 1 then // jen první sloupec
    8    Exit;
    9  MyData := vt.GetNodeData(Node); // získáme naše data
   10  if not assigned(MyData) then // jen pro jistotu
   11    Exit;
   12  if (MyData^.crPrice < 0) then
   13    TargetCanvas.Font.Color := clRed; // červená se …
   14end;

A to je vše. Podle mne je hlavní výhodou právě ta virtualizace. Člověk si hraje na svém písečku (své data) a vůbec se nemusí starat o nějaké aktualizace textu, vše jde pak přes jednu metodu až budeme chtít.

Snažím se psát ukázkové kódy na jednoduchých příkladech, ale pokud jsou nějaké nejasnosti nebo nápady, popř. máte nějaký nápad, neváhejte a napište do komentářů nebo přes kontaktní formulář.


Nabízíme Delphi školení na různá témata, primárně ve Vaší firmě.

Tagy: , , ,

Praxe

Komentování ukončeno

Naše nabídka

Partial English version.

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy nebo burzy práce).

Pokud chcete podpořit tento server libovolnou částkou, můžete použít PayPal. Moc děkuji.

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64 , Mac OSX a na iPhone a Android (s výhledem na další platformy díky FireMonkey) na současném trhu (včetně Windows 8.1).

V současnosti je světová komunita přes dva miliónů vývojářů.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Anketa

Poslední komentáře

Comment RSS