PDA

Visualizza la versione completa : TreeView [Delphi 5]


alanf1981
14-05-2002, 16:02
Ciao a tutti! Vorrei che quando l'utente seleziona un nodo nel TreeView e schiaccia lo spazio apparisse un PopUpMenu. Il problema che mi servono le coordinate del nodo corrente selezionato in modo da far apparire il PopUp in quella posizione! Ecco il mio codice:

procedure TForm1.TreeView1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);

begin
case Key of
VK_SPACE : PopupMenu7.popup(...........)
end
end;

Grazie!! :)))))))))))))

p.s.Sto usando Delphi 5 e Windows XP

alka
15-05-2002, 10:07
Ti scrivo la soluzione che ho implementato con qualche riga di commento per spiegare...poi mi dirai se di tuo gradimento.


procedure TForm1.TreeView1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
rNode: TRect;
pTree, pNode: TPoint;
begin
case Key of
VK_SPACE:
// Verifica se stato selezionato un nodo
if TreeView1.Selected <> nil then
begin
// Individua la posizione del controllo TreeView
pTree := Point(TreeView1.Left, TreeView1.Top);
// Individua l'area occupata dal testo del nodo selezionato
rNode := TreeView1.Selected.DisplayRect(True);
// Converte la posizione del nodo in coordinate dello schermo
pNode := ClientToScreen(Point(rNode.Left, rNode.Top));
// Somma la posizione del nodo a quella del controllo TreeView
// con un lieve spostamento verso il basso
Inc(pNode.x, pTree.x);
Inc(pNode.y, pTree.y + 18);
// Visualizza il menu Popup alla posizione specificata
PopupMenu1.Popup(pNode.x, pNode.y);
end;
end;
end;


Unica cosa: generalmente lo spazio viene utilizzato nei controlli ListView e TreeView per effettuare selezioni (quando queste sono multiple)...fai attenzione che la tua scelta di visualizzare il menu Popup sulla pressione dello spazio non interferisca con le azioni standard dei tasti.

Loading