2015-04-29 11 views
6

ricerca Vorrei evidenziare il testo da un nodo di VirtualStringTree secondo i criteri di ricerca, come ad esempio da muggito:TVirtualStringTree clou del risultato

enter image description here

Qualsiasi suggerimento per favore?

+3

Non sono a conoscenza di alcuna funzione incorporata per evidenziare alcun testo. Probabilmente dovrai utilizzare i metodi di disegno proprietario: OnBeforeCellPaint, OnPaintText, ecc. – smooty86

+0

Hai bisogno di supporto per nodi multilinea con testo avvolto? – TLama

+0

Da quando hai menzionato il testo avvolto, cercherò aiuto. In questo momento non ho idea di come gestirlo, almeno da dove cominciare a cercare ... Comunque se hai qualche link o informazioni che possono aiutarmi è il benvenuto. Grazie in anticipo! – REALSOFO

risposta

1

Grazie alla risposta TLama (How to underline or highlight a part of node caption), aggiusto un po 'il codice per evidenziare il testo anche nel mezzo.

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's 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; 

I migliori auguri a TLama!

Problemi correlati