Forum > Lazarus Extra Components
Virtual Tree View selections. How to?
(1/1)
slivitin:
Hi.
I want to show two Virtual Tree Views - one for "models", and one for "locations". I want to show highlited selection without any user actions. My program does find location and model in these trees and I want to highlitу founded strings.
But founded string in the trees hasn't any selections...
How to change such behaviour?
I want to automatically highlite founded as olive (for example)...
First picture - default behaviour of the tree.
Second picture - after my selection (first location, then model, then select another some component of the form), so trees not in the focus.
zeljko:
Selected[Node] := True/False ?
GetMem:
@slivitin
A small demo application would be nice, it's much easier to modify that. Anyways let's say you have the following data structure:
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---type PData = ^TData; TData = record FID: Integer; FName: String; //... FHighlight: Boolean; //add this one end;
After you find the node:
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---var Node: PVirtualNode; Data: PData;begin //find the node here Data := VST.GetNodeData(Node); Data^.FHighlight := True; VST.RepaintNode(Node); VST.InvalidateNode(Node)end;
Finally add OnBeforeCellPaint event to the tree:
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---procedure TForm1.VSTBeforeCellPaint( Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);var Data: PData;begin Data := VST.GetNodeData(Node); if Data^.FHighlight then begin TargetCanvas.Brush.Color := clOlive; TargetCanvas.FillRect(ContentRect); end;end;
slivitin:
--- Quote from: zeljko on January 26, 2023, 03:12:28 pm ---Selected[Node] := True/False ?
--- End quote ---
Thank's! I forgot := True :-[
GetMem, thank you too!
Navigation
[0] Message Index