AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Suchergbenisse farblich hinterlegen (TSynMemo)
Thema durchsuchen
Ansicht
Themen-Optionen

Suchergbenisse farblich hinterlegen (TSynMemo)

Ein Thema von RWarnecke · begonnen am 29. Aug 2009 · letzter Beitrag vom 14. Sep 2009
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Suchergbenisse farblich hinterlegen (TSynMemo)

  Alt 29. Aug 2009, 12:32
Hallo zusammen,

ich suche schon längere Zeit nach einer Möglichkeit ein Suchergebnis in der Komponente TSynMemo farblich zu hinterlegen. In einem RichEdit mache ich das ganze mit PosEx und setze dann entsprechend die Attribute. Nur wie mache ich das in einem TSynMemo ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#2

Re: Suchergbenisse farblich hinterlegen (TSynMemo)

  Alt 30. Aug 2009, 13:28
Hallo,

ich bin leider immer noch nicht weitergekommen. Hat denn wirklich keiner eine Idee, wie ich es machen kann ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Suchergbenisse farblich hinterlegen (TSynMemo)

  Alt 30. Aug 2009, 16:09
Hallo Rolf,

eine Möglichkeit wäre es, die Fundstellen in der Behandlungsroutine für das Ereignis OnPaintTransient einzufärben:

Delphi-Quellcode:
procedure TForm1.EditorPaintTransient (Sender: TObject; Canvas: TCanvas; TransientType: TTransientType);
const
  KEY = 'Suchbegriff';
var
  i, k: Integer;
  s: string;
  DP: TDisplayCoord;
  P: TPoint;
begin
  for i := Editor.TopLine to Editor.TopLine + Editor.LinesInWindow do
    begin
      s := Editor.Lines[i - 1];

      k := Pos(KEY, s);
      while (k > 0) do
        begin
          DP := Editor.BufferToDisplayPos({SynEditTypes.}BufferCoord(k, i));
          P := Editor.RowColumnToPixels(DP);

          Canvas.Brush.Color := clYellow;
          Canvas.Font.Color := clRed;
          Canvas.TextOut (P.X, P.Y, KEY);

          k := PosEx(KEY, s, k + Length(KEY));
        end;
    end;
end;
Der Code zeigt nur die ungefähre Vorgehensweise. Beim Suchen wird auf exakte Groß-/Kleinschreibung geachtet, und ein Suchbegriff darf sich nicht über mehrere Zeilen erstrecken.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#4

Re: Suchergbenisse farblich hinterlegen (TSynMemo)

  Alt 30. Aug 2009, 19:38
Hallo Hawkeye,

danke für das Code-Beispiel, ich habe jetzt dank Deinem Code eine für mich passende Lösung gefunden, die zu funktionieren scheint. Ich werde das ganze noch ein wenig austesten.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Suchergbenisse farblich hinterlegen (TSynMemo)

  Alt 30. Aug 2009, 20:31
Gibt es bei TSynEdit/Memo nicht die abstakte Such-Klasse? Zudem schon fertige Suchkomponenten, die man einem SynMemo einfach zuweisen kann bzw. als Vorlage verwenden kann für eigene Suchmethoden.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#6

Re: Suchergbenisse farblich hinterlegen (TSynMemo)

  Alt 30. Aug 2009, 21:38
Meinst Du TSynEditRegexSearch zum Beispiel ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Suchergbenisse farblich hinterlegen (TSynMemo)

  Alt 30. Aug 2009, 21:47
Also die fertige Komponente, die ich verwendet hab' (aus der Distribution von TSynEdit), liegt in der Unit SynEditSearch und ist von TSynEditSearchCustom abgeleitet.

TSynEditRegexSearch könnte eine weitere abgeleitete Klasse von TSynEditSearchCustom sein (grad' zu faul in den Sourcen zu schauen ).
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#8

Re: Suchergbenisse farblich hinterlegen (TSynMemo)

  Alt 31. Aug 2009, 05:33
Ok, ich verstehe nur noch nicht ganz wie mir das weiterhelfen soll. Ich möchte ja eine farbliche Hinterlegung von bestimmten Wörtern, die ich vorgebe. Das können ja Zeichenketten sein oder auch einzelne Wörter die im genutzen Highlighter hinterlegt sind oder nicht.

Deshalb ist der Sourcecode, so wie Ihn Hawkeye gepostet hat, genau der richtige Ansatz für mein Vorhaben. Wenn Du einen anderen Vorschlag noch hast, nur her damit.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Suchergbenisse farblich hinterlegen (TSynMemo)

  Alt 31. Aug 2009, 09:08
Hmm, dachte es geht einfach darum eine Suche zu implementieren, wie man es halt von Texteditoren so kennt. Also Implementierung einer Suche und Markierung des gefundenen Textes mit den vorhandenen Methoden. Da wäre das dann so gegangen:
Delphi-Quellcode:
uses
  SynEdit, SynMemo, SynEditSearch oder SynEditRegexSearch;

  // Deklaration im Formular
  SearchEngine : TSynEditSearch;
  oder
  SearchEngine : TSynEditRegexSearch


procedure TForm1.FormCreate(Sender: TObject);
begin
  SearchEngine := TSynEditSearch.Create(self);
  SynMemo1.SearchEngine := SearchEngine;


  // Aufruf erfolgt so
  SynMemo1.SearchReplace('Suchbegriff oder Expr', '', []);
TSynEditSearch und TSynEditRegexSearch sind bereits voll funktionsfähig. Da aber als Source vorhanden, leicht anpassbar bzw. von der Basis-Customklasse eigene Engines ableitbar.

Völlig freies farbliches hinterlegen beliebiger Begriffe ist das dann natürlich nicht.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Suchergbenisse farblich hinterlegen (TSynMemo)

  Alt 31. Aug 2009, 09:30
Hallo,

vielleicht kann man die beiden Ansätze kombinieren. Wenn ich das richtig sehe, erlaubt TSynEditSearch das Suchen aller Vorkommen eines Suchbegriffs mittels FindAll. Die Anzahl der Fundstellen wird als Funktionsergebnis geliefert, die Positionen sind über TSynEditSearch.GetResult abrufbar. Mit diesen Informationen kann anschließend das Highlighting wie oben beschrieben durchgeführt werden. So könnte man auch ohne Berücksichtigung der Groß-/Kleinschreibung und mit Hilfe von regulären Ausdrücken nach Begriffen im Text suchen.

Wohlgemerkt - getestet habe ich das nicht. Es handelt sich hier nur um Folgerungen aus dem Studieren des Quelltextes von TSynEditSearch.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz