5

仮想ツリービューは、標準の Delphi グリッドの方法とは異なり、ピクセル単位で垂直方向にスクロールし、TListView(TTreeViewまたは私が認識している他のほとんどのコントロールは) 行単位でスクロールし、常にコントロールの上部に完全な行が表示されるようにします。カーソルキーを使用してナビゲートすると、方向に応じて最初または最後の行が完全に表示されます。マウスでスクロールすると、位置合わせがまったくありません。

この動作は、たとえば、Delphi 2007 および 2009 の構造ウィンドウで確認できます。

多くのプロパティを標準の Windows コントロールの動作に設定する方法はありますか? または、これを達成するためのパッチのセットはどこかにありますか?

4

2 に答える 2

6

これは私がArgalatyrの助けを借りて思いついたもので、私がやりたいことをしているように見えます:

procedure TForm1.FormCreate(Sender: TObject);
begin
  VirtualStringTree1.ScrollBarOptions.VerticalIncrement :=
    VirtualStringTree1.DefaultNodeHeight;
end;

procedure TForm1.VirtualStringTree1Resize(Sender: TObject);
var
  DY: integer;
begin
  with VirtualStringTree1 do begin
    DY := VirtualStringTree1.DefaultNodeHeight;
    BottomSpace := ClientHeight mod DY;
    VirtualStringTree1.OffsetY := Round(VirtualStringTree1.OffsetY / DY) * DY;
  end;
end;

procedure TForm1.VirtualStringTree1Scroll(Sender: TBaseVirtualTree; DeltaX,
  DeltaY: Integer);
var
  DY: integer;
begin
  if DeltaY <> 0 then begin
    DY := VirtualStringTree1.DefaultNodeHeight;
    VirtualStringTree1.OffsetY := Round(VirtualStringTree1.OffsetY / DY) * DY;
  end;
end;
于 2009-06-01T14:03:20.210 に答える