na dann...
mit pos:
Delphi-Quellcode:
function SuchenInMemo( Memo : TMemo; NichtFindenStr : string; LastFindLine : integer = -1 ) : integer;
var
LineIdx : integer;
str: string;
p: integer;
begin
LineIdx := LastFindLine + 1;
Result := 0;
while
( LineIdx < Memo.Lines.Count ) and
( Result = 0 )
do
begin
str:= Memo.Lines[LineIdx];
p:= Pos( '*', str);// '*' finden;
if
(p > 0 ) and // '*' gefunden?
(Pos( NichtFindenStr, str ) = 0 ) and // NichtFindStr nicht gefunden?
(str[p+1] <> '*') and//'*' steht alleine?
(pos(' ', str) > 1)// kein leerzeichen nach dem ersten zeichen
then
begin
Result := LineIdx;
SelectLine( Memo, LineIdx );
end
else
Inc( LineIdx );
end;
end;
mit delimitedtext (find ich schöner^^)
Delphi-Quellcode:
function SuchenInMemo( Memo : TMemo; NichtFindenStr : string; LastFindLine : integer = -1 ) : integer;
var
LineIdx : integer;
i: integer;
strlst: TStringList;
p: integer;
begin
strlst:= TStringList.Create;
strlst.delimiter:= '*';
strlst.strictdelimiter:= true;
LineIdx := LastFindLine + 1;
Result := 0;
while
( LineIdx < Memo.Lines.Count ) and
( Result = 0 )
do begin
if pos('*', Memo.Lines[LineIdx]) = 0 then
inc(LineIdx);
continue; //wenn kein '*' gefunden: nächster schleifendurchlauf;
end;
strlst.delimitedtext:= Memo.Lines[LineIdx]; // alle '*' finden;
//jede zeile der strlst ist das was im memo vor einem '*' steht;
case strlst.count of
1: begin //ein '*' gefunden
if pos(NichtFindenStr, strlst[0]) = 0 then begin //nichtfindstr suchen
if pos(' ',strlst[0]) > 1 then begin //kein leerzeichen nach dem ersten zeichen
Result := LineIdx;
SelectLine( Memo, LineIdx );
end;
end;
end;
else begin
if strlst[1] <> '' then begin // abragen ob '*' alleine stand
// mehrere '**' sollte leerzeilen erzeugen *hoff*^^
Result := LineIdx;
SelectLine( Memo, LineIdx );
end;
end;
Inc( LineIdx );
end;
end;
Das sollte erstmal alles finden.
Für ausnahmen musst du dir wohl einen array von strings machen die nicht vor '*' stehen dürfen.