function UpCase(ch: char): char;
begin
if (ch in ['a'..'z', 'а'..'я']) then
result := chr(ord(ch) - 32)
else
result := ch;
end;
function LoCase(ch: char): char;
begin
if (ch in ['A'..'Z', 'А'..'Я']) then
result := chr(ord(ch) + 32)
else
result := ch;
end;
function UpperCase(s: string): string;
var
i: integer;
begin
result := s;
for i := 1 to length(result) do
if (result in ['a'..'z', 'а'..'я']) then
result := chr(ord(result) - 32);
end;
function LowerCase(s: string): string;
var
i: integer;
begin
result := s;
for i := 1 to length(result) do
if (result in ['A'..'Z', 'А'..'Я']) then
result := chr(ord(result) + 32);
end;
procedure TForm1.Button1Click(Sender: TObject);
const
s = 'zZцЦ. ';
var
i: integer;
begin
Form1.Caption := 'DownCase: ';
for i := 1 to Length(s) do
Form1.Caption := Form1.Caption + LoCase(s);
Form1.Caption := Form1.Caption + ' UpCase: ';
for i := 1 to Length(s) do
Form1.Caption := Form1.Caption + UpCase(s);
Form1.Caption := Form1.Caption + ' UpperCase: ' + UpperCase(s);
Form1.Caption := Form1.Caption + ' LowerCase: ' + LowerCase(s);
end;
var
Find,s :string; // искомая строка
FSelPos, StartPos, i:integer; // счетчик для цикла
begin
find:=Edit1.Text; // записывает в find текст из Edit
For i:=0 to Memo1.Lines.Count-1 do // запускает цикл поиска строки
If Pos(FIND, Memo1.Lines.Text)<>0
Then
Begin
Memo1.SetFocus();
Memo1.SelStart:=Pos(FIND,Memo1.Lines.Text)-1;
Memo1.SelLength:=Length(FIND);
end;
end;
Нужно, чтобы поиск запоминал место остановки, т. е.
Memo1.SetFocus();
Memo1.SelStart:=Pos(FIND,Memo1.Lines.Text)-1;
Memo1.SelLength:=Length(FIND);
N:=i+1;
Причём N - глобальная переменная. И чтобы цикл запускался от N а не от нуля. А регистр букв - можно в функции Pos и FIND и Memo1.Lines.Text (здесь, по-моему, индекс строки пропущен - ) привести к одному регистру, например нижнему функцией AnsiLowerCase.
Предусмотрите возможность обнуления N,