Нарисуйте линию в позиции перетаскивания узла в древовидной структуре в Delphi

введите описание изображения здесь

Как показано выше, когда кто-то перетаскивает узел дерева, как я могу показать позицию отбрасывания в виде линии в виде дерева?

2

Решение

Вы можете нарисовать свою линию тогда CustomDrawItem Событие для узлов, которые являются мишенями.

procedure TMyForm.TreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
y:Integer;
begin
if Node.DropTarget then
begin
y := Node.DisplayRect(true).Bottom;
Sender.Canvas.MoveTo(0,y-1);
Sender.Canvas.LineTo(Sender.Width,y-1);
Sender.Canvas.Font.Size :=  10;
end;
end;

Если вы, кроме того, как взяли, от комментариев, хотите скрыть выделение, вам нужно будет установить DefaultDraw в false и нарисовать текст узла самостоятельно.

procedure TMyForm.TreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
Const
C_WishedAdditional = 10; // addtional lenght to the Node.DisplayRect - width
var
r: TRect;
begin
if Node.DropTarget then
begin
r := Node.DisplayRect(true);
Sender.Canvas.MoveTo(r.Left, r.bottom - 2); // start of the line
Sender.Canvas.Pen.Width := 3; // adjust line width
Sender.Canvas.Pen.Color := clMaroon; // adjust line color
Sender.Canvas.LineTo(r.Right + C_WishedAdditional, r.bottom - 2); // end of the line
Sender.Canvas.Font.Color := clBlack;
SetBkMode(Sender.Canvas.Handle,TRANSPARENT); // prevent text background from overpainting
Sender.Canvas.TextOut(r.Left + 2, r.top + 1 , Node.Text);
DefaultDraw := false;
end;
end;
3

Другие решения


По вопросам рекламы [email protected]