Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - memo feld durchsuchen!


xus - So 07.01.07 14:33
Titel: memo feld durchsuchen!
hi!

wie kann ich ein memo feld in delphi durchsuchen lassen zb. nach hello und dies dann im memofeld hervorheben zb druch makieren oder fett gedruckt...


mfg XuS

Moderiert von user profile iconChristian S.: Titel geändert.
Moderiert von user profile iconChristian S.: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am So 07.01.2007 um 14:35


Jakob Schöttl - So 07.01.07 14:45

Also, das suchen geht indem du

Delphi-Quelltext
1:
2:
for i := 0 to Memo1.Lines.Count -1 do 
  if Pos('hello',Memo1.Lines[i]) > 0 then ShowMessage('Gefunden in Zeile ' + IntToStr(i));

, wobei Pos(...) den Index des ersten Zeichen von 'hello' in der entsprechenden Zeile zurückgibt.

Ach ja, und hervorheben kannst du es im MemoFeld nicht! Memo ist Nur-Text, also keine Formatierungen. Dazu müsstest du TRichEdit verwenden.


jaenicke - So 07.01.07 14:47

http://www.delphi-forum.de/viewtopic.php?t=55838&highlight=suchen+richedit
Da findest du eine Funktion, die ein Memo durchsucht. Zurückgegeben wird der Index des ersten Zeichens des gesuchten Texts im Memo.
Benutzen mit:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  FirstChar: Integer;
  SearchedText: String;
begin
  SearchedText := 'Gesuchter Text';
  FirstChar := MemoFindText(Memo1, SearchedText, True, False);
  if FirstChar >= 0 then
  begin
    Memo1.SelStart // setzen
    Memo1.SelLength // setzen
  end;

Ungetestet, aber so ungefähr müsste es stimmen.


jaenicke - So 07.01.07 14:50

user profile iconJakob Schöttl hat folgendes geschrieben:
Ach ja, und hervorheben kannst du es im MemoFeld nicht! Memo ist Nur-Text, also keine Formatierungen. Dazu müsstest du TRichEdit verwenden.

Wirklich? :lol: Er hat doch selbst von Markierung als Hervorhebung gesprochen und das geht ja auch beim Memo... ;-)


xus - So 07.01.07 14:55

danke für die schnellen antworten werde gleich das alles mal testen...

mfg XuS

edit:
bekomme immer folgenden error:

unlear identifier "Count"


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Button6Click(Sender: TObject);
var a:string; i:integer;

begin
a:=edit10.text;

for i := 0 to Memo1.Count -1 do
if Pos(a ,Memo1.Lines[i]) > 0 then ShowMessage('Gefunden in Zeile ' + IntToStr(i));

end;


Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt


Gausi - So 07.01.07 15:28

Es muss heißen Memo1.Lines.Count - 1.


jaenicke - So 07.01.07 15:30

Wenn du den im ganzen Text auf einmal suchen willst, dann kannst du statt alle Zeilen durchzugehen auch in Memo1.Text mit Pos suchen...


Jakob Schöttl - So 07.01.07 15:32

user profile iconjaenicke hat folgendes geschrieben:
user profile iconJakob Schöttl hat folgendes geschrieben:
Ach ja, und hervorheben kannst du es im MemoFeld nicht! Memo ist Nur-Text, also keine Formatierungen. Dazu müsstest du TRichEdit verwenden.

Wirklich? :lol: Er hat doch selbst von Markierung als Hervorhebung gesprochen und das geht ja auch beim Memo... ;-)


Ich hab das "Markieren" überlesen, dafür nur das "Fett" gesehen


jaenicke - So 07.01.07 15:34

Ach und jetzt weiß ich auch woher er das Memo1.Count hatte... von dir... (hab gerade nochmal oben deinen Beitrag gesehen) :lol:
user profile iconJakob Schöttl hat folgendes geschrieben:
Also, das suchen geht indem du

Delphi-Quelltext
1:
2:
for i := 0 to Memo1.Count -1 do 
  if Pos('hello',Memo1.Lines[i]) > 0 then ShowMessage('Gefunden in Zeile ' + IntToStr(i));

, wobei Pos(...) den Index des ersten Zeichen von 'hello' in der entsprechenden Zeile zurückgibt.


xus - So 07.01.07 16:23

danke hab es jetzt!

mfg XuS