2016-03-27 8 views
4

Ich möchte den "besten Weg" zum Vergrößern/Verkleinern eines TVirtualStringTree finden.
"Zoom-in" bedeutet eine Lupe nachahmen.
Der "beste Weg" muss verstanden werden, indem vorrangig Eigenschaften/Methoden verwendet werden, die im TVirtualStringTree-Steuerelement verwendet werden. Wenn keine Methoden existieren, dann schlagen Sie den einfachsten Weg vor und vermeiden Low-Level-APIs.
zoom-in TVirtualStringTree

Wie besser diese Frage zu erklären, ist
Hier ein Screenshot des TVirtualStringTree in seinem Ausgangszustand: initial state http://didier.cabale.free.fr/temp/VST1.jpg.
.. und hier ist ein Screenshot des TVirtualStringTree in seinem gewünschten Zustand: wanted state http://didier.cabale.free.fr/temp/VST2.jpg

+0

Wegthema hier, aber wenn ich fragen darf den Moderator, warum meine Frage Downvoted wurde. Wie auch immer, es könnte helfen, das Interesse meiner zukünftigen Anfragen zu verbessern. Vielen Dank –

Antwort

4

Lieber Didier (mein idem Ego),

hier ist das, was ich getan habe:
Wichtiger Hinweis: das ist, was ich tat, aber ich bin mir nicht sicher, dass dies die optimale Lösung ist, daher sind neue Ideen mehr als willkommen !!

A. In einem Ereignis Handler (zB Edit OnChange).

  1. setzte die Font.Size der TVirtualStringTree Header:

    VirtualStringTree1.Header.Font.Size := UpDown1.Position; 
    
  2. die Font.Size des TVirtualStringTree Knoten gesetzt:

    VirtualStringTree1.Font.Size := UpDown1.Position; 
    
  3. eingestellt die Height der TVirtualStringTree Header:

    VirtualStringTree1.Header.Height := Round(VirtualStringTree1.Header.Height * Delta); 
    
  4. setzen die Spalte Width des TVirtualStringTree Header:

    for i := 0 to VirtualStringTree1.Header.Columns.Count -1 do 
        VirtualStringTree1.Header.Columns.Items[i].Width := Round(VirtualStringTree1.Header.Columns.Items[i].Width * Delta); 
    

B. Auf TVirtualStringTree des OnMeasureTextHeight Event Handler, setzen Sie seine NodeHeight[Node] Eigenschaft:

Sender.NodeHeight[Node] := Round(Extent * 1.1); 

C eingestellt TVirtualStringTree des toAutoChangeScale auf falsch im Objekt Inspektor.

Alle zusammen, es gibt:

procedure TForm1.Edit3Change(Sender: TObject); 
var 
    Delta: Double; 
    i: byte; 
begin 
    Delta := UpDown1.Position/VirtualStringTree1.Font.Size; 
    VirtualStringTree1.BeginUpdate(); 
    try 
    VirtualStringTree1.Font.Size  := UpDown1.Position; 
    VirtualStringTree1.Header.Font.Size := UpDown1.Position; 
    VirtualStringTree1.Header.Height := Round(VirtualStringTree1.Header.Height * Delta); 
    for i := 0 to VirtualStringTree1.Header.Columns.Count -1 do 
    VirtualStringTree1.Header.Columns.Items[i].Width := Round(VirtualStringTree1.Header.Columns.Items[i].Width * Delta); 
    finally 
    VirtualStringTree1.EndUpdate(); 
    end; 
end; 

procedure TForm1.VirtualStringTree1MeasureTextHeight(Sender: TBaseVirtualTree; 
    TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; 
    const Text: string; var Extent: Integer); 
begin 
    Sender.NodeHeight[Node] := Round(Extent * 1.1); 
end;