Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi In Memo suchen und zur zeile springen (https://www.delphipraxis.net/90194-memo-suchen-und-zur-zeile-springen.html)

BBoy 13. Apr 2007 08:57


In Memo suchen und zur zeile springen
 
Ich nutze folgenden Code um das Memo zu durchsuchen:
Delphi-Quellcode:
   for i := 0 to memo4.lines.Count-1 do begin
      if pos('test', memo4.lines[i]) <> 0 then begin
      // hier soll die routine hin wo mir die zeile anzeigt...
         break;
      end;
   end;
Er findet auch das gesuchte, aber nun möchte ich das die Zeile angeziegt und markiert wird in der das gesuchte gefunden wurde.
Kann mir bitte jemand sagen wie das geht? Danke.

Klaus01 13. Apr 2007 09:10

Re: In Memo suchen und zur zeile springen
 
Um diese Problem zu lösen kannst Du mit SelStart und SelLength arbeiten.

Dies wirft aber wieder ein kleines Problem auf, das SelStart auf Zeichenbasis arbeitet
und nichts von der Zeilenanordnung des Memos weiß.
Du müßtest also hergehen und die Anzahl der Zeichen der Zeilen die vor der gefundenen Zeile liegen ermitteln.
Pro Zeile mußt Du dann wahrscheinlich noch 2 Zeichen für #13#10 hinzufügen, hängt aber davon ab wie Du zählst.

Grüße
Klaus

ste_ett 13. Apr 2007 09:12

Re: In Memo suchen und zur zeile springen
 
Mit

Delphi-Quellcode:
TMemo.SelStart
und

Delphi-Quellcode:
TMemo.SelLength
kannst du ein Textstück in einem Memo markieren.

Kleines Beispiel. :)
QnD!

Delphi-Quellcode:
var
  i, iLen, iPos: Integer;
  s: String;
begin
  iLen := 0;
  s := Edit1.Text;
  for i := 0 to Memo1.Lines.Count-1 do
  begin
    iPos := Pos(s, Memo1.Lines[i]);
    if (iPos <> 0) then
    begin
      Memo1.SelStart := iLen + iPos -1;
      Memo1.SelLength := Length(s);
      Memo1.SetFocus;

      Break;
    end
    else
      Inc(iLen, Length(Memo1.Lines[i]));
  end;
end;

BBoy 13. Apr 2007 09:33

Re: In Memo suchen und zur zeile springen
 
Hey klasse, danke euch beiden.
Beim Code von ste_ett gab es erst probleme, da er nicht die richtige Position gefunden hatte. Aber danke dem Hinweis vom Klaus01, dass man noch 2 zeichen hinzufügen muss, klappt es jetzt prima.

Hier die verbesserte Zeile: also grade +2 angehängt.

Delphi-Quellcode:
Inc(iLen, Length(Memo4.Lines[i])+2);


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:26 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