2016-08-06 24 views
1

Ich zeichne derzeit einige Bilder innerhalb Tvirtualdrawtree mit auf vor Farbe. Hier ist mein ZeichencodeWie zeichne Knoten Inline in 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; 

Die Bilder gezeichnet wird vertikal kommt. Ich möchte, dass sie zum Beispiel horizontal zeigen, wie in diesem Bild folgende

enter image description here

Hier die Datenstruktur

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

In diese Steuerung ist nichts eingebaut, um dies zu ermöglichen. Früher gab es eine Bibliothek von Jim Küneman, Virtual Shell Tools, die einen virtuellen Explorer-Baum basierend auf der virtuellen Baumansicht bot und alle bekannten Icon-Layouts implementierte, die von herkömmlichen Listenansicht-Steuerelementen unterstützt wurden. Vielleicht finden Sie es hilfreich, wenn Sie es nicht mehr finden können. –

+0

ich weiß, dass es nicht mit Tree View-Eigenschaft getan werden kann, deshalb habe ich 8 Spalten erstellt, um sie nebeneinander zu zeichnen, aber das Problem jeder Spalte ist mit dem gleichen Bild verdoppelt, bis es den zweiten Knoten –

Antwort

1

Sie sagte:

die gezeichneten Bilder kommt vertikal

Das liegt daran, dass Sie nur ziehen, wenn die Spalte 0 ist:

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

Sie nicht die Struktur Data zeigte, aber ich vermute, dass Sie in jedem Data mehrere Bilder haben. Es kann nicht aus Ihrem Code ermittelt werden, wie Sie die verschiedenen Bilder ansprechen können, deshalb zeige ich diesen Teil nur als Pseudocode in einem Paar < und >.

Wenn Sie unterschiedliche Bilder in unterschiedlichen Spalten zeichnen wollen, schlage ich so etwas wie:

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; 

anstelle des Codes oben gezeigt.

+0

zeichne ich die Datenstruktur der Frage hinzugefügt Ich habe nicht acht Bilder, ich wollte nur jeden Knoten nebeneinander zeichnen –

+0

@ Vlark.Lopin Vielleicht sollten Sie Ihre Bilder neu anordnen, 8 pro Knoten. Es gibt keinen offensichtlichen Weg, 8 Knoten nebeneinander in Spalten zu zeichnen. –

+0

also sollte ich Fahrt von Spalten bekommen? und wie man das Bild pro Knoten anordnet –