2016-08-06 5 views
1

В настоящее время я рисую некоторые изображения внутри Tvirtualdrawtree используя на перед краской. Вот мой код рисункаКак нарисовать узлы inline в TvirualTree?

procedure TForm2.VDTAniBeforeCellPaint(Sender: TBaseVirtualTree; 
    TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; 
    CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect); 
var 
    Data: PAnimeData; 
    NewRect: TRect; 
    R: TRect; 
begin 
// 
    if not Assigned(Node) then 
    begin 
    exit; 
    end; 

    Data := VDTAni.GetNodeData(Node); 

    case Column of 
    0, 1 ,2, 3, 4, 5, 6, 7: 
    begin 
    TargetCanvas.Brush.Style := bsClear; 
    TargetCanvas.FillRect(CellRect); 
    NewRect := ContentRect; 
    NewRect.Left := NewRect.Left; 
    NewRect.Width := 55; 
    NewRect.Height := 55; 
    NewRect.Top := NewRect.Top + 2; 
    NewRect.Bottom := NewRect.Bottom; 

    if Column = 0 then 
    begin 

    with NewRect do 
    begin 
     TargetCanvas.StretchDraw(NewRect, Data.FObject.anmigraphic); 
    end; 

    end; 
end; 

Образцы рисуются вертикально. Я хочу, чтобы показать их по горизонтали, например, как в этом следующем изображении

enter image description here

Здесь Структура данных

type 
    TAnmiClass = class 
    private 
    Fanmigraphic : TGifImage; 

    public 
    property anmigraphic: TGifImage read Fanmigraphic write Fanmigraphic; 

    public 
    constructor Create; 
    destructor Destroy; override; 
    end; 

type 
    PAnimeData = ^TAnimeData; 

    TAnimeData = record 
    FObject: TAnmiClass; 
    end; 
+0

Для этого элемента ничего не создано. Раньше была библиотека от Jim Kueneman, Virtual Shell Tools, предоставляющая виртуальное дерево-проводник на основе виртуального древовидного представления и реализовала все привычные макеты значков, поддерживаемые традиционными элементами управления списком. Вам может показаться полезным, если вы сможете это найти. –

+0

Я знаю, что это невозможно сделать с древовидным представлением, поэтому я создал 8 столбцов, чтобы нарисовать их рядом друг с другом, но проблема в том, что каждый столбец дублируется с тем же изображением, пока не нарисует второй узел –

ответ

1

Вы сказали:

изображения нарисованные идет вертикально

Это потому, что вы рисуете только если столбец 0:

if Column = 0 then 
begin 
    with NewRect do 
    begin 
    TargetCanvas.StretchDraw(NewRect, Data.FObject.anmigraphic); 
    end; 
end; 

Вы не показываете структуру Data, но я подозреваю, что у вас есть несколько изображений в каждом Data. Он не может быть определен из вашего кода, как вы можете адресовать разные изображения, поэтому я показываю эту часть только как псевдокод в паре < и >.

Если вы хотите использовать различные изображения в разных колонках, я предлагаю что-то вроде:

case Column of 
    0: TargetCanvas.StretchDraw(NewRect, Data.FObject.anmigraphic); 
    1: TargetCanvas.StretchDraw(NewRect, Data.FObject.<reference to second image>); 

    7: TargetCanvas.StretchDraw(NewRect, Data.FObject.<reference to eight image>); 
end; 

вместо кода, показанного выше.

+0

. Я добавил структуру данных к вопросу У меня нет восьми изображений, которые я просто хотел нарисовать каждый узел бок о бок. –

+0

@ Vlark.Lopin Возможно, вы должны перестроить свои изображения, 8 на узел. Нет очевидного способа нарисовать 8 узлов бок о бок в столбцах. –

+0

, так что мне нужно кататься по колоннам? и как переустановить это изображение на узел –