TTreeNode мигает.Как мне это сделать? - PullRequest
0 голосов
/ 14 июля 2011

Мне нравится иметь мигающий узел. Как я могу это сделать?

Ответы [ 2 ]

4 голосов
/ 14 июля 2011

Ниже ни в коем случае не полное решение, но простой пример ответа Дэвида:

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;

Возможно, вы захотите изменить дизайн так, чтобы установка узла подсветки походила на вызов сеттера и т. Д... Но в любом случае, вы поняли идею ..

1 голос
/ 14 июля 2011

Нет ничего встроенного в общий элемент управления для достижения этой цели, поэтому вам нужно будет сделать это самостоятельно.

Используйте TTimer и каждый раз, когда он срабатывает, меняйте любое свойство узла, которое вам нужнодостичь эффекта моргания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...