2017-08-10 2 views
3

J'ai un fichier VST avec toFullRowSelect (avec quelques colonnes). Je voudrais activer glisser & déposer sur les nœuds.TVirtualStringTree - Comment activer glisser lorsque vous cliquez sur une zone de la ligne sélectionnée?

Le problème est que vous pouvez commencer à draguer le ou les nœuds uniquement si vous cliquez directement sur le nœud sous la légende. Si le clic a été effectué sur la sélection de ligne mais pas sur la légende du noeud, l'opération de glissement ne démarrera pas et OnDragAllowed ne se déclenchera pas.

Le MCVE est simple. déposer un TVirtualStringTree (nommez VST) sur la forme et ajouter OnCreate et OnDragAllowed pour le VST:

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    VST.TreeOptions.SelectionOptions := VST.TreeOptions.SelectionOptions + [toFullRowSelect]; 
    VST.RootNodeCount := 5; 
end; 

procedure TForm1.VSTDragAllowed(Sender: TBaseVirtualTree; 
    Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean); 
begin 
    Allowed := True; 
end; 

Maintenant, si vous cliquez sur une légende de nœud, l'opération de déplacement commence, mais pas si vous essayez de faire glisser autre zone du noeud sélectionné.

Comment cela peut-il être résolu? Merci.

Répondre

3

Inclure l'option toFullRowDrag dans l'ensemble MiscOptions option:

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    VST.TreeOptions.SelectionOptions := VST.TreeOptions.SelectionOptions + [toFullRowSelect]; 
    VST.TreeOptions.MiscOptions := VST.TreeOptions.MiscOptions + [toFullRowDrag]; 
    VST.RootNodeCount := 5; 
end; 

L'toFullRowDrag l'option est dans le code source décrit comme:

nœud Commencer à faire glisser en cliquant n'importe où dans à la place seulement sur la légende ou image . Doit être utilisé avec toDisableDrawSelection.

+1

Merci! Je ne peux pas croire que j'ai manqué cette option. – zig

+1

Merci! Je viens de modifier la mise en forme (pour s'adapter au style que j'utilise :) – Victoria