[Lazarus] TTreeView.OnItemClicked

Mattias Gaertner nc-gaertnma at netcologne.de
Sun Apr 24 11:28:12 CEST 2011

On Sun, 24 Apr 2011 10:59:07 +0300
"Juha (gmail)" <juha.manninen62 at gmail.com> wrote:

> Mattias Gaertner kirjoitti sunnuntai, 24. huhtikuuta 2011 02:19:03:
> > > Is it OK to implement a new event OnItemClick or OnNodeClick for
> > > TTreeView? It would be triggered only a node is clicked, not the '+' or
> > > background.
> > 
> > Often the background should be included in the trigger area.
> > And sometimes - as for example in the find in files dialog - you need
> > to distinguish between single and multi click.
> > All this can be easily done with OnMouseDown/Up.
> Ok, it is _relatively_ easy but still not very intuitive.
> I guess 99% of code is only interested in clicked Nodes.

I think your 99% is highly exaggerated.
There is only one place in the whole IDE and here it is not clear if
with or without background (I would prefer with).

> Looking at your fix to TSearchResultsView, most of TreeViewMouseUp code is only 
> for checking if a Node is left-clicked:
>  var
>    TV: TCustomTreeView;
>    Node: TTreeNode;
>  begin
>    if Button<>mbLeft then exit;
>    TV:=Sender as TCustomTreeView;
>    Node:=TV.GetNodeAt(X,Y);
>    if Node=nil then exit;
>    if x<Node.DisplayTextLeft then exit;
> ...and then dealing with single/double click:
>    if ([ssDouble,ssTriple,ssQuad]*Shift=[])
>      and EnvironmentOptions.MsgViewDblClickJumps then exit;

There was a small mistake. The 'and' must be a '='.

> In this case both single and double clicks need to be handled but typically 
> only one of them.
> So, I still think it is a good idea to have events
> OnNodeClicked and OnNodeDoubleClicked
> with "Node: TTreeNode" parameter.

I still think they are hardly used.
If OnNodeClicked would support clicking via keyboard then it has a gain.


More information about the Lazarus mailing list