Comment le contrôle virtuel Treeview être pour faire défiler toujours par des lignes?

StackOverflow https://stackoverflow.com/questions/929600

  •  06-09-2019
  •  | 
  •  

Question

Les rouleaux virtuels TreeView verticalement par pixels, contrairement à la façon dont les grilles standards Delphi, TListView et TTreeView (ou la plupart des autres tels contrôles que je suis au courant), faites défiler par ligne et garder une ligne pleine et visible en haut de la le contrôle à tout moment. Lorsque j'utilise les touches de curseur pour naviguer, puis en fonction de direction, soit la première ou la dernière ligne est complètement visible. Lorsque vous faites défiler avec la souris il n'y a pas d'alignement que ce soit.

Ce comportement peut être observé par exemple avec la fenêtre Structure en Delphi 2007 et 2009.

Est-il possible de définir les nombreuses propriétés d'avoir le comportement des commandes standard de Windows? Ou est-il un ensemble de correctifs quelque part pour y parvenir?

Était-ce utile?

La solution

Vous pouvez intercepter l'événement TBaseVirtualTree.OnScroll et utiliser la valeur virtuelle de retour de toile de TreeView pour textheight ( « M ») que le montant de changer TBaseVirtualTree.offsety afin d'augmenter (défilement vers le haut) ou décrémenter (défilement vers le bas). Pourrait tester également faire en sorte que le module de position pré-défilement textheight ( « M ») est égal à zéro (pour éviter de faire défiler par la bonne quantité de la mauvaise position).

Vous pouvez également ce poste sur le virtuel Treeview forum suggère une autre approche: cacher le défilement de treeview virtuel natif barres avec des barres de défilement VCL puis effectuez vous-même les faire défiler (piégeage des événements de défilement VCL et le défilement par programmation virtuelle) l'arborescence.

Autres conseils

est ce que je suis venu avec l'aide de Argalatyr, ressemble comme il le fait ce que je veux à:

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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top