Материал: Мансуров. Основы программирования в среде Lazarus. 2010

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

procedure TForm1.CyrillicSearch; var

k: integer;

text_UTF8, str_UTF8: string; begin

Edit1.SetFocus;

if Edit1.Text= '' then begin

ShowMessage('Введите строку для поиска'); exit;

end;

text_UTF8:= UTF8Copy(UTF8Decode(Memo1.Text),

Memo1.SelStart + 1 + Memo1.SelLength,

UTF8Length(UTF8Decode(Memo1.Text)) -

Memo1.SelStart - Memo1.SelLength);

str_UTF8:= UTF8Decode(Edit1.Text); k:= UTF8Pos(str_UTF8, text_UTF8); if k > 0 then

begin Memo1.SetFocus;

Memo1.SelStart:= Memo1.SelStart +

Memo1.SelLength + k - 1;

Memo1.SelLength:= UTF8Length(str_UTF8); end

else begin

ShowMessage('Строка не найдена');

Memo1.SelStart:= 0;

Memo1.SelLength:= 0;

586

Глава 6 Программирование приложений с графическим интерфейсом

____________________________________________________________________

end;

end;

procedure TForm1.FormShow(Sender: TObject); var

tfile: TStringList; str: string;

begin

tfile:= TStringList.Create; tfile.LoadFromFile('File in Russian.txt'); str:= tfile.Text;

{$IFDEF WINDOWS}

str:= SysToUTF8(str); // преобразование в кодировку UTF-8

{$ENDIF} Memo1.Lines.Add(str); Memo1.SelStart:= 0; Memo1.SelLength:= 0; tfile.Free; Edit1.SetFocus;

end;

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: char);

begin

if Key = #13 then Edit1.SetFocus; CyrillicSearch;

end;

587

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

procedure TForm1.Button1Click(Sender: TObject); begin

CyrillicSearch;

end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);

begin

if Key = #13 then begin

Key:= #0;

CyrillicSearch;

end;

end; initialization

{$I unit1.lrs} end.

Практически во всех текстовых редакторах функцию поиска можно запус-

тить, используя сочетание клавиш Ctrl+F. А продолжение поиска нажатием клавиши F3. Возьмите, например, Word, "Блокнот" или "Редактор исходного кода" Lazarus.

Давайте и мы реализуем такой же вызов поиска в TMemo. Заодно научимся использовать в программе несколько форм. Создайте новый проект. Поместите на форму компонент TMemo, рис. 6.53.

588

Глава 6 Программирование приложений с графическим интерфейсом

____________________________________________________________________

Рис. 6.53. Главная форма приложения

В меню "Файл" выберите пункт "Создать форму". В окне редактора исход-

ного кода появится новая пустая форма и соответствующий ей модуль с именем

Unit2. Поместите на вторую форму надпись, TEdit и кнопку, рис. 6.54.

Рис. 6.54. Вторая форма приложения

Если у вас в приложении несколько форм, то для открытия нужной нажми-

те Shift+F12 и в появившемся окне выберите нужную вам форму, рис. 6.55.

Рис. 6.55. Окно выбора формы

589

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

В Unit1 после ключевого слова implementation поместите

uses Unit2;

А в Unit2 после ключевого слова implementation поместите

uses Unit1;

Ранее, для распознавания нажатого символа мы использовали обработчик события OnKeyPress, однако при этом событии нельзя распознать нажатие функциональных и служебных клавиш. Для их распознавания подходит собы-

тие OnKeyDown.

Заголовок обработчика события OnKeyDown имеет следующий вид:

procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

Параметр Key определяет нажатую в момент события клавишу. Так же как и для события OnKeyPress он определен как var, т.е. может изменяться в об-

работчике события. Но, обратите внимание, что это целое число, а не символ.

Коды клавиш можно указывать в десятичном или шестнадцатеричном виде.

Для некоторых клавиш введены также именованные константы, которые облег-

чают написание программы, поскольку не требуют помнить численные коды клавиш. Например, вместо

if (Key = 13) then ... ;

можно записать

if (Key = VK_RETURN) then ... ;

590

Смотрите также:

11 Горм +
113
14
1433
1511
1632
199
204
2N4264RE
3773