Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#21

Re: Suchergbenisse farblich hinterlegen (TSynMemo)

  Alt 14. Sep 2009, 10:22
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;
  Mit Zitat antworten Zitat