2011-07-14 4 views
0

私は点滅しているノードが好きです。どうしたらいいですか?TTreeNodeが点滅しています。それはどうしたらいいですか?

+1

あなたの個人的な用途のためのアプリケーションでない限り、してください、何も点滅しないでください。気が散って迷惑だ。ちょうどアニメーションや他の "私を見てください" UIの "フィーチャー"のように。 –

答えて

1

これを達成するための共通のコントロールには何も組み込まれていないので、自分で行う必要があります。

TTimerを使用し、起動するたびに、点滅効果を達成するために必要なノードのプロパティを変更します。

+0

+1これを達成するのに十分なシンプル –

4

以下、決して完全なソリューションですが、デビッドの答えの簡単な例:

type 
    TForm1 = class(TForm) 
    TreeView1: TTreeView; 
    Timer1: TTimer; 
    Button1: TButton; 
    Button2: TButton; 
    procedure TreeView1CustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; 
     State: TCustomDrawState; var DefaultDraw: Boolean); 
    procedure Timer1Timer(Sender: TObject); 
    procedure Button1Click(Sender: TObject); 
    procedure Button2Click(Sender: TObject); 
    private 
    FHighTime: Boolean; 
    FHighNode: TTreeNode; 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 

procedure TForm1.Timer1Timer(Sender: TObject); 
var 
    R: TRect; 
begin 
    if Assigned(FHighNode) then begin 
    FHighTime := not FHighTime; 
    FHighNode.MakeVisible; 
    R := FHighNode.DisplayRect(True); 
    InvalidateRect(TreeView1.Handle, @R, True); 
    end else begin 
    if FHighTime then 
     TreeView1.Invalidate; 
    FHighTime := False; 
    Timer1.Enabled := False; 
    end; 
end; 

procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView; 
    Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean); 
const 
    Colors: array [Boolean] of TColor = (clWindowText, clWindow); 
    HiColors: array [Boolean] of TColor = (clHighlightText, clHighlight); 
begin 
    if Node = FHighNode then begin 
    if cdsSelected in State then 
     TreeView1.Canvas.Font.Color := HiColors[FHighTime] 
    else 
     TreeView1.Canvas.Font.Color := Colors[FHighTime]; 
    end; 
end; 


procedure TForm1.Button1Click(Sender: TObject); 
begin 
    // test 
    FHighNode := TreeView1.Items[2]; 
    Timer1.Enabled := True; 
end; 

procedure TForm1.Button2Click(Sender: TObject); 
begin 
    FHighNode := nil; 
end; 

あなたはハイライトのノードを設定するとセッターを呼び出すようなものであるようにデザインを変更したいかもしれない、などしかし、とにかく、あなたは考えを得る。

関連する問題