TVirtualStringTree search result highlighting

I would like to select text from node VirtualStringTree according to search criteria, for example, an example below:

enter image description here

Any suggestion please?

+6
source share
1 answer

Thanks to the TLama answer ( How to underline or highlight part of the node header ) I will slightly adjust the code to select the text also in the middle.

procedure Tform_main.vt_mainDrawText(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const Text: string; const CellRect: TRect; var DefaultDraw: Boolean); var BackMode, position: Integer; begin // if the just rendered node Text contain the text written in a TEdit control // called Edit, then... position:= Pos(AnsiLowerCase(edit_search.Text), AnsiLowerCase(text)); if position > 0 then begin // store the current background mode; we need to use Windows API here because the // VT internally uses it (so the TCanvas object gets out of sync with the DC) BackMode := GetBkMode(TargetCanvas.Handle); // setup the color and draw the rectangle in a width of the matching text TargetCanvas.Brush.Color := clYellow; TargetCanvas.FillRect(Rect( CellRect.Left + TargetCanvas.TextWidth(Copy(Text, 1, position-1)), CellRect.Top + 3, CellRect.Left + TargetCanvas.TextWidth(Copy(Text, 1, position-1)) + TargetCanvas.TextWidth(Copy(Text, position, Length(edit_search.Text))), CellRect.Bottom - 3) ); // restore the original background mode (as it likely was modified by setting the // brush color) SetBkMode(TargetCanvas.Handle, BackMode); end; end; 

Best wishes to TLama!

+1
source

Source: https://habr.com/ru/post/986226/


All Articles