2016-03-27 5 views
4

TVirtualStringTreeをズームイン/ズームアウトするための「最良の方法」を見つけたいと思います。
「ズームイン」とは、拡大鏡を模倣することを意味します。
「最善の方法」は、優先的に、TVirtualStringTreeコントロールでこれに専念するプロパティ/メソッドを使用することによって理解する必要があります。メソッドが存在しない場合は、低レベルのAPIを避けて、最も単純な方法を提案してください。
ズームインTVirtualStringTree

ここ
、より良いこの質問を説明するように、初期状態ではTVirtualStringTreeのスクリーンショットです: initial state http://didier.cabale.free.fr/temp/VST1.jpg
...と、ここではその指名手配の状態でTVirtualStringTreeのスクリーンショットです: wanted state http://didier.cabale.free.fr/temp/VST2.jpg

+0

が、私は私の質問は、downvotedされた理由をモデレーターを依頼することがあります。

はすべて一緒に入れ、それを提供します。とにかく、それは私の将来の要求の関心を高めるのに役立つかもしれません。ありがとう –

答えて

4

親愛なるディディエ(私の同上のエゴ)は、ここに

は私がやったことです:
重要な注意:これはどのような私ですしかし、私はこれが最適な解決策であるとは確信していないので、新しいアイデアは歓迎すべきものです!

A.同じイベントハンドラ(たとえば、編集のOnChange)で。 TVirtualStringTreeノードのFont.Size設定

VirtualStringTree1.Header.Font.Size := UpDown1.Position; 
  • VirtualStringTree1.Font.Size := UpDown1.Position; 
    
  • はTVirtualStringTree HeaderHeight設定

    1. はTVirtualStringTree HeaderFont.Sizeを設定します

      VirtualStringTree1.Header.Height := Round(VirtualStringTree1.Header.Height * Delta); 
      
    2. は、列のWidth TVirtualStringTree Headerの設定:B.は、TVirtualStringTreeのOnMeasureTextHeightイベントハンドラで

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

    そのNodeHeight[Node]プロパティを設定します。

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

    C.はTVirtualStringTreeのセットオブジェクトのtoAutoChangeScaleをfalseにするインスペクタ。ここでは、オフトピック

    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; 
    
  • 関連する問題