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

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

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

____________________________________________________________________

begin

str_Search:= UTF8Decode(Edit1.Text); end;

Form2.Close; // закрытие формы

Form1.CyrillicSearch;

end;

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

begin

if Key = #13 then begin

Key:= #0;

GetSearchString;

end;

end;

procedure TForm2.Button1Click(Sender: TObject); begin

GetSearchString;

end; initialization

{$I unit2.lrs} end.

В нашем приложении предполагается, что пользователь обязательно вос-

пользуется функцией поиска. Но ведь это происходит не всегда! Вспомните,

часто ли вы пользуетесь поиском? А по умолчанию все формы создаются в мо-

мент запуска приложения. Значит, если пользователь не воспользовался поис-

ком, форма Form2 будет создана "зря"! Она будет занимать лишнюю память. В

596

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

____________________________________________________________________

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

ходимо. Для этого в свойствах проекта (меню Проект-> Параметры проекта->

Формы) уберите Form2 из списка автосоздаваемых форм в список доступных,

рис. 6.56.

Рис. 6.56. Окно списка автосоздаваемых форм

Будем создавать Form2 только тогда, когда пользователь нажмет комби-

нацию клавиш Ctrl+F. В обработчике события Memo1KeyDown перед опера-

тором

Form2.ShowModal;

запишите оператор

Application.CreateForm(TForm2, Form2);

597

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

____________________________________________________________________

После того, как нам форма уже не нужна, мы ее закрываем оператором

Form2.Close;

Но закрытие формы еще не означает, что она удалена из памяти. Она еще

"жива зараза" и мы можем в любой момент ее снова показать методом

ShowModal, на случай, если пользователь повторно запустит функцию поиска.

Форма будет "окончательно" уничтожена после закрытия главного окна приложения. Следовательно, перед созданием формы мы должны проверить,

может быть, она уже была создана. Теперь уже перед оператором

Application.CreateForm(TForm2, Form2);

вставьте оператор

if not Assigned(Form2) then

Приведу окончательную редакцию обработчика Memo1KeyDown:

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;

if not Assigned(Form2) then Application.CreateForm(TForm2, Form2);

598

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

____________________________________________________________________

Form2.ShowModal;

end

else

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

CyrillicSearch;

end;

В заключение, напишем программу решения системы линейных алгебраи-

ческих уравнений методом Гаусса с использованием TMemo. Консольный ва-

риант программы мы рассматривали в 1.3.4. и 3.4.2.

Вначале приведу программу, написанную одним из моих студентов. Затем мы с вами вместе разберем недостатки программы, а потом попробуем улуч-

шить эту программу. Форма программы имеет вид, рис. 6.57.

Рис. 6.57. Форма приложения

Код программы следующий:

unit Unit1;

{$mode objfpc}{$H+} interface

599

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

____________________________________________________________________

uses

Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, Buttons;

type

{ TForm1 }

TForm1 = class(TForm) BitBtn1: TBitBtn; Button1: TButton; Button2: TButton; Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Memo1: TMemo;

procedure BitBtn1Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Edit1Change(Sender: TObject); procedure Edit1KeyPress(Sender: TObject;

var Key: char); procedure Edit2Change(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Calculate;

private

{private declarations } public

A, b, x: TStrings; v, v2: integer;

{public declarations } end;

var

Form1: TForm1;

implementation

{ TForm1 }

procedure Tform1.Calculate; var i,j,n,k,p,h,r:integer;

t,m,s:extended;

600

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

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