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

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

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

____________________________________________________________________

Для остальных клавиш удобнее использовать функцию ord, которая воз-

вращает код символа.

Параметр Shift это множество элементов, отражающих нажатые в это время служебные клавиши. Элементы этого множества ssShift – нажата кла-

виша Shift, ssAlt – нажата клавиша Alt и ssCtrl – нажата клавиша

Ctrl. Поскольку Shift является множеством, проверять наличие в нем тех или иных элементов надо операцией in. Таким образом, для определения на-

жатия клавиш Ctrl+F можно написать следующий код:

if((Key = ord('F')) and (ssCtrl in Shift)) then...;

При нажатии Ctrl+F будем открывать окно диалога поиска. Окно будем открывать как модальное методом ShowModal. Модальным окном называется такое окно, в котором пользователь не может переключаться на другие окна,

пока не закроет текущее окно. Код программы поиска в TMemo будет состоять из двух модулей.

Модуль Unit1:

unit Unit1;

{$mode objfpc}{$H+} interface

uses

Classes, SysUtils, FileUtil, LResources, Forms,

Controls, Graphics, Dialogs, StdCtrls, LconvEncoding,

LCLProc;

type

{ TForm1 }

591

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

____________________________________________________________________

TForm1 = class(TForm)

Memo1: TMemo;

procedure FormCreate(Sender: TObject); procedure Memo1KeyDown(Sender: TObject;

var Key: Word; Shift: TShiftState);

procedure CyrillicSearch;

private

{private declarations } public

{public declarations } end;

var

Form1: TForm1; implementation uses Unit2;

{ TForm1 }

procedure TForm1.CyrillicSearch; var

k: integer; text_Area: string;

begin

text_Area:= UTF8Copy(UTF8Decode(Memo1.Text), Memo1.SelStart + 1 + Memo1.SelLength, UTF8Length(UTF8Decode(Memo1.Text)) - Memo1.SelStart - Memo1.SelLength);

k:= UTF8Pos(str_Search, text_Area);

592

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

____________________________________________________________________

if k > 0 then begin

Memo1.SetFocus;

Memo1.SelStart:= Memo1.SelStart +

Memo1.SelLength + k - 1;

Memo1.SelLength:= UTF8Length(str_Search); end

else begin

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

Memo1.SelStart:= 0;

Memo1.SelLength:= 0;

end;

end;

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

begin

if((Key = ord('F')) and (ssCtrl in Shift)) then begin

Memo1.SelStart:= 0;

Memo1.SelLength:= 0; Form2.ShowModal; end

else

if Key = 114 then // десятичный код клавиши F3

CyrillicSearch;

end;

procedure TForm1.FormCreate(Sender: TObject);

593

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

____________________________________________________________________

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); tfile.Free;

end; initialization

{$I unit1.lrs} end.

Модуль Unit2:

unit Unit2;

{$mode objfpc}{$H+} interface

uses

Classes, SysUtils, FileUtil, LResources, Forms,

Controls, Graphics, Dialogs, StdCtrls;

type

{ TForm2 }

594

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

____________________________________________________________________

TForm2 = class(TForm)

Button1: TButton;

Edit1: TEdit;

Label1: TLabel;

procedure Button1Click(Sender: TObject); procedure Edit1KeyPress(Sender: TObject; var Key: char);

procedure GetSearchString; private

{private declarations } public

{public declarations } end;

var

Form2: TForm2; str_Search: string;

implementation uses Unit1;

{ TForm2 }

procedure TForm2.GetSearchString; begin

if Edit1.Text='' then begin

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

exit;

end;

Edit1.AutoSelect:= true;

if str_Search <> UTF8Decode(Edit1.Text) then

595

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

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