Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zeile bis zum Ende markieren in einem Text (https://www.delphipraxis.net/101121-zeile-bis-zum-ende-markieren-einem-text.html)

TonyR 8. Okt 2007 18:44


Zeile bis zum Ende markieren in einem Text
 
Hallo an Alle,

Folgendes Problem:

Ich möchte in einem sehr langen Text einen String suchen, im Anschluss daran möchte ich in meinem RichEdit vom ENDE des gesuchten Strings an bis zum ZEILENENDE alles markieren.

So hier (gesucht wurde "Das ist "; das Fette blaue ist markiert):
Das ist jetz mal der Text.

Suchen kann ich mit der TRichEdit-Funktion "FindText", damit bekomme ich auch den Wert zurück, den ich für den Anfang des Strings nehmen kann:
Delphi-Quellcode:
SelStart:=ErgebnisDerSuchfunktion+Length(Suchstring);
Wie bekomme ich es jetzt aber hin, dass das Ende der Markierung (SelLength) am Zeilenende liegt, also wo bekomme ich den Wert her (ich weis ja schließlich nicht, wie lang die Zeile hinter meinem Suchstring noch ist).

Helfen würde es mir ja schon, wenn ich irgendwie herausbekommen würde in welcher Zeile mein gesuchter String ist!

Danke schonmal im Vorraus!

quendolineDD 8. Okt 2007 19:14

Re: Zeile bis zum Ende markieren in einem Text
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
begriff: string;
i: integer;
begin
begriff:= 'Das ist';
for i:= 0 to RichEdit1.Lines.Count -1 do
 SelString(begriff, RichEdit1.Lines[i], RichEdit1); //Procedure, welche die Zeile markiert
end;

procedure TForm1.SelString(subs, s: string; aRichEdit: TRichEdit);
var start, laenge: integer;
begin
aRichEdit.SetFocus;
start:= pos(subs, s)+ length(subs);
aRichEdit.SelStart:= start;
laenge:= length(s)- start;
aRichEdit.SelLength:= laenge;
end;
Selectiert aber nur, wenn nicht mehr als eine Zeile vorhanden ist.

Hab nun aber keine Lust, das noch weiter zu probieren, kommen gleich paar Leute :)
Kansnt ja selber das verbessern.

Btw. wenn du mal in der Hilfe nachschaust (F1):

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);

begin
  FindDialog1.Position := Point(RichEdit1.Left + RichEdit1.Width, RichEdit1.Top);
  FindDialog1.Execute;
end;

procedure TForm1.FindDialog1Find(Sender: TObject);
var
  FoundAt: LongInt;
  StartPos, ToEnd: Integer;
begin
  with RichEdit1 do
  begin
    { Suche hinter aktueller Markierung beginnen (falls vorhanden), }
    { andernfalls am Textanfang starten. }
    if SelLength <> 0 then

      StartPos := SelStart + SelLength
    else

      StartPos := 0;

    { ToEnd ist die Länge von StartPos bis zum Textende im RTF-Eingabefeld }

    ToEnd := Length(Text) - StartPos;

    FoundAt := FindText(FindDialog1.FindText, StartPos, ToEnd, [stMatchCase]);
    if FoundAt <> -1 then
    begin
      SetFocus;
      SelStart := FoundAt;
      SelLength := Length(FindDialog1.FindText);
    end;
  end;
end;
Ist das Delphi-Beispiel dazu

marabu 8. Okt 2007 19:21

Re: Zeile bis zum Ende markieren in einem Text
 
Und noch etwas Code:

Delphi-Quellcode:
begin
  with RichEdit do
  begin
    SelStart := FindText(searchText, 0, MaxInt, []);
    if SelStart >= 0 then
    begin
      SelStart := SelStart + Length(searchText);
      SelLength := Length(Lines[CaretPos.Y]) - CaretPos.X;
    end;
  end;
end;
Grüße vom marabu

TonyR 8. Okt 2007 19:55

Re: Zeile bis zum Ende markieren in einem Text
 
Vielen Dank euch beiden!!!
Super Ideen, hilft mir sehr.
:thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz