Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

richedit.findtext

1 view
Skip to first unread message

Gunar Scholz

unread,
Jun 23, 1997, 3:00:00 AM6/23/97
to

Patrick von der Hagen wrote:
>
> ich habe da (mal wieder) ein kleines Problem. Es geht mir darum, einen
> kleinen Texteditor zu schreiben. Natuerlich braucht ein Texteditor
> auch eine suchfunktion und da ich ohnehin schon eine
> Richedit-Komponente verwende, waere es wohl das einfachste, deren
> Methode "findtext" zu verwenden.
> Allerdings habe ich da ein kleineres Problem: ich bekomme kein
> Ergebnis.
> Laut Onlinehilfe sieht der Aufruf ja folgendermassen aus:
>
> procedure FindText(const SearchStr: string; StartPos, Length: Integer;
> Options: TSearchTypes); Integer;
>
> Dabei irritiert mich dann doch der letzte "Integer;"
> Also, ich uebergebe den String, der gesucht werden soll, als
> "searchstr" und gebe "options" an.

Ein Blick in den Quelltext von TRichEdit bestaetigt die Vermutung, dass
in diesem Fall die Online-Hilfe fehlerhaft ist.

TCustomRichEdit = class(TCustomMemo)
...
public
...
function FindText(const SearchStr: string;
StartPos, Length: Integer; Options: TSearchTypes): Integer;
...
end;

Es ist also keine Procedure sondern eine Function, die als Ergebnis

Result := SendMessage(Handle, EM_FINDTEXT, Flags, LongInt(@Find));

zurueckliefert.

Stichwort EM_FINDTEXT:

Return Value

Returns the zero-based character position of the next match, or - 1 if
there are no more matches.

> Bei "Startpos" und "Length" weiss
> ich nicht genau, was da von mir erwartet wird, also gebe ich da
> jeweils den Wert 0 an.
> Ich vermute mal, dass ich in diesen Variablen die Position erhalte, an
> der der String gefunden wurde?

Nein, denn dann haette in der Proc.definition ein "var" dringestanden.
Du kannst ja auch nur in einem vom Anwender markierten Bereich des
Textes suchen lassen, dieser wird durch StartPos und Length festgelegt.
Um also den gesamten Text zu durchsuchen musst Du StartPos auf 0 und
Length auf die Gesamtlaenge des Textes setzen.

> Wenn ja, wie werte ich das Ergebnis so
> aus, dass der gefundene String markiert wird?

Du bekommst einen Zeiger auf die Position des gefundenen Textes. Diesen
weist Du SelStart zu und die Laenge des Suchbegriffes weist Du SelLength
zu. Noch ein kleines
SendMessage(RichEdit.Handle, EM_SCROLLCARET, 0, 0);
hinterher, und der gefundene Text wird angezeigt.

P.S. Alles obige hab ich nicht getestet sondern nur aus der Hilfe und
den Sourcen zusammengetragen.

Felix

Detlef Meister

unread,
Jun 24, 1997, 3:00:00 AM6/24/97
to

Hi, Patrick von der Hagen,

> Allerdings habe ich da ein kleineres Problem: ich bekomme kein
> Ergebnis.
> Laut Onlinehilfe sieht der Aufruf ja folgendermassen aus:
>
> procedure FindText(const SearchStr: string; StartPos, Length: Integer;
> Options: TSearchTypes); Integer;

In den mitgelieferten Demos findest Du Beispiele, wie die
Suchen/Ersetzen-Funktionen eingesetzt werden müssen...

Bye,
Detlef.


Detlef Meister

unread,
Jun 25, 1997, 3:00:00 AM6/25/97
to

Hi,

Patrick von der Hagen <patrick...@cww.de> schrieb im Beitrag
<33b01946...@news.cww.de>...
> On 24 Jun 1997 07:35:05 GMT, "Detlef Meister"


> <Mei...@rz.fhtw-berlin.de> wrote:
>
> >In den mitgelieferten Demos findest Du Beispiele, wie die
> >Suchen/Ersetzen-Funktionen eingesetzt werden müssen...

> Tut mir ja leid, aber da habe ich beim besten willen nichts gefunden,
> was mir weiterhelfen wuerde. Da hatte zwar ein Datenbank-Bespiel auch
> eine Such-Funktion, aber das laesst sich nicht auf mein Problem mit
> der trichedit-komponente anwenden.
> Oder habe ich da doch noch etwas uebersehen?

Ich habe meine Demos inzwischen alle gelöscht, daher kann ich Dir den Pfad
nicht sagen. Aber ich weiß genau, daß in irgendeinem Beispiel ein
TRichEdit-Editor dabei war. Mann, suche doch einfach mal alle '*.pas'
Dateien mit der Explorer-Funktion Suchen durch. Als Suchtext gibst Du ein:
"TRichEdit" oder auch Search, Find, Replace
usw.........................................................................
...........................

Bye,
Detlef.


Patrick von der Hagen

unread,
Jun 27, 1997, 3:00:00 AM6/27/97
to

On 26 Jun 1997 16:02:01 GMT, sven_k...@t-online.de (Sven Kuenzler)
wrote:

Hi erstmal, ich bin ja auch noch da.
>Hallo Detlef,


>
>>Ich habe meine Demos inzwischen alle gelöscht, daher kann ich Dir den Pfad
>>nicht sagen. Aber ich weiß genau, daß in irgendeinem Beispiel ein
>>TRichEdit-Editor dabei war. Mann, suche doch einfach mal alle '*.pas'
>>Dateien mit der Explorer-Funktion Suchen durch. Als Suchtext gibst Du ein:
>>"TRichEdit" oder auch Search, Find, Replace
>

>Die Editor-Demo von Delphi 2.0 bietet keine Suchfunktion. In der Demo
>von Delphi 1.0 ist sie schon zu finden, dabei gab es da noch nicht
>einmal die entsprechende Methode :-)
Also, ich freue mich erstmal, auch von unabhaengiger Seite bestaetigt
zu bekommen, dass ich nicht zu bloed bin, das richtige Demo zu finden,
sondern dass bei Delphi 2 ein Demo mit entsprechender Suchfunktion
fehlt. Das war Punkt 1.

Jetzt zu Punkt 2: Ich habe mir gerade die Delphi 2 CD genauer
angesehen und dort die Demos von Delphi 1 gefunden, unter anderem das
Demo "Textdemo", bei dem es sich um einen kleinen editor mit
Suchfunktion handelt. Das werde ich mir in aller Ruhe ansehen und ich
gehe mal davon aus, das sich meine Probleme damit loesen lassen
werden.

Punkt 3: offensichtlich habe ich nicht alles Mails zu diesem Thread
bekommen, denn Sven antwortet hier auf eine Mail von Detlef, die ich
leider nie bekommen habe.
Ich werde also mal meinem Provider aufs Dach steigen und moechte mich
entschuldigen, falls ich auf ein wichtiges Posting in diesem Thread
nicht geantwortet haben sollte. Tut mir leid, aber die Mails klemmen
halt mal wieder.

OK, das waere dann auch schon alles.

CU,
Patrick.

Mario Fischer

unread,
Jul 1, 1997, 3:00:00 AM7/1/97
to

Die Gesamtlänge des RichEdit-Textes gibt's mit: Length(RichEdit1.Text)

Auch wenn Du nicht vom Anfang an suchst, macht es nix, daß die Länge dann
eigentlich zu groß ist.


Gunar Scholz <gsc...@imedia.de> schrieb im Beitrag
<33B02B...@imedia.de>...


> Patrick von der Hagen wrote:
> >
> > On Mon, 23 Jun 1997 21:32:16 +0200, Gunar Scholz <gsc...@imedia.de>
> > wrote:
> >
> > >Du kannst ja auch nur in einem vom Anwender markierten Bereich des
> > >Textes suchen lassen, dieser wird durch StartPos und Length
festgelegt.
> > >Um also den gesamten Text zu durchsuchen musst Du StartPos auf 0 und
> > >Length auf die Gesamtlaenge des Textes setzen.
>

> > Ich wusste ja gar nicht, dass man den zu durchsuchenden Bereich
> > beschraenken kann. IMHO eine recht interessante Moeglichkeit. Aber ein
> > Problem haette ich da noch: um den gesamten Text zu durchsuchen, muss
> > ich die Gesamtlaenge des Textes kennen, aber ich kenne leider keine
> > Moeglichkeit, die Gesamtlaenge zu ermitteln. Wie kann ich das machen?
>
> Tut mir leid, dazu hatte ich in der Schnelle nichts gefunden. Ich kann
> diese Frage nur mal so hier im Raum stehen lassen, in der Hoffnung, das
> einer dazu was passendes weiss.
>
> Felix
>

--
mario....@usa.net
http://ourworld.compuserve.com/homepages/MarioFischer


-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3i

mQCNAzOMNjkAAAEEAJ34143zGloqOXLvWxe5lWdUFHTaE0dsb7qXoZmHHQ73XesZ
tQdtE/E6/8h6hfMgscclqvuRAf+kOZBDMg6deMrkT8oZvbm2/iJusFQa6yWSXeEi
5tC6kY+JPo1w47p2OYgRU8j4IeZRgSJfD6AY5q8Xz98IS+EK500w7W6cgm29AAUR
tCVNYXJpbyBGaXNjaGVyIDxtYXJpby5maXNjaGVyQHVzYS5uZXQ+iQCVAwUQM4w2
OU0w7W6cgm29AQEJZwP+Pjgh9ZtcByn5dlItIoj3q75RM4Q9P4PdiDKNUgcYQOTV
UQT6gWZ1gnwEsUnddh4L/chtcPIm8ySlYCB+zdr60k1xxQQtp61ul6YiuIIi2vU3
X7/c0qs4gWPqAt0kzs+EufC8/xRcl2LxXjM0LRYMwLeNp0p6qV6Mid280EDu8oM=
=HbzG
-----END PGP PUBLIC KEY BLOCK-----


0 new messages