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.
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.
Labels: delphi
<< Home