Hallo,
Zitat von
RWarnecke:
Hallo zusammen, die Funktion von Hawkeye funktioniert jetzt bestens. Ich habe Sie für mein Programm angepasst. Um mit den normalen SearchEngines für SynMemo zu arbeiten, habe ich noch keine Möglichkeit gefunden. Aber ich habe das Problem mit der Groß- und Kleinschreibung so gelöst, dass ich im Vergleich alles auf UpperCase stelle. Jetzt bleibt lediglich nur noch die Frage, wie ich die Schriftart des Wortes erkennen kann um diese dann mit Canvas entsprechend zeichnen zu können. Denn jetzt ist es so, dass bei Kommentaren das hinterlegte Word von kursiv in normal gestellt wird.
GetHighlighterAttriAtRowCol(BufferCoord(SearchEngi ne.Results[j], i + 1),Token,Attri); liefert uns die gewünschten Informationen.
Delphi-Quellcode:
procedure TFrameEditor.SynEditPaint(Sender: TObject; ACanvas: TCanvas);
var
i : Integer;
j : Integer;
P : TPoint;
Token :
String;
Attri : TSynHighlighterAttributes;
begin
with SynEdit
do begin
// Ist keine Suchmaschine zugewiesen, raus, dann können wir uns das sparen.
If Not Assigned(SearchEngine)
then Exit;
If SearchEngine.Pattern = '
'
then Exit;
ACanvas.Brush.Color := clYellow;
ACanvas.Brush.Style := bsSolid;
// Die Suchbegriffe werden nur im sichtbaren Bereich hervorgehoben,
// spart bei großen Dateien viel Zeit.
for i := TopLine - 1
to TopLine + LinesInWindow
do begin
SearchEngine.FindAll(Lines[i]);
for j := 0
to SearchEngine.ResultCount - 1
do begin
P := RowColumnToPixels(BufferToDisplayPos(BufferCoord(SearchEngine.Results[j], i + 1)));
GetHighlighterAttriAtRowCol(BufferCoord(SearchEngine.Results[j], i + 1),Token,Attri);
Try
ACanvas.Font.Style := Attri.Style;
except
on e :
Exception do ACanvas.Font := Font;
end;
ACanvas.TextOut(P.X, P.Y, SearchEngine.Pattern);
end;
end;
end;
end;