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

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

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

____________________________________________________________________

Рис. 6.26. Окно приложения

Если нажать на надпись English, приветствие выведется на английском языке, а надпись изменится на Русский, рис. 6.27.

Рис. 6.27. Окно приложения после нажатия на надпись "English"

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

ведется на русском языке, а текст надписи изменится на English.

Вам, наверное, приходилось видеть программы, в которых реализован мно-

гоязычный интерфейс. Переключение с одного языка на другой в них реализо-

ван примерно по такому же методу, который мы с вами только что реализовали.

По уже установившейся нашей с вами традиции посмотрим еще раз код программы и попробуем найти недостатки. Это код настолько прост, что, ка-

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

ние, которое можно сделать относится, скорее, к стилю программирования. Я

имею в виду способы именования объектов в программе. Есть довольно много различных рекомендаций при выборе имен объектов. В частности, для имено-

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

491

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

____________________________________________________________________

фиксы, например во многих наших программах для обозначения указателей мы использовали префикс " р "( pHead, pCurrent и т.д.). Исходя из этого, для переменных целого типа можно применять префикс " i ", для переменных ло-

гического типа префикс " b " и т.д.

Для компонентов тоже можно использовать префиксы, например для

TLabel уместно использовать префикс "lb".

Существуют и другие способы именования, тем более что есть немало и ярых противников венгерской нотации. Не стану их описывать. При желании вы можете найти все это в Интернете.

В принципе, каких-то жестких требований на этот счет нет. Главное, вы должны найти, выработать свой, собственный стиль, понятный не только вам,

но и другим. Будете вы использовать префиксы, не будете использовать, это ваше дело. Основной принцип здесь – понятность, то есть все обозначения должны быть понятны и не только вам, но и другим.

Представьте себе, что вы написали какую-то достаточно большую про-

грамму. Через несколько месяцев, а, может быть лет, вам или кому-то другому

(конечно, с вашего разрешения!) понадобилось ее модернизировать. Если в ва-

шей программе будут обозначения, типа "ааа" или "х123", то в вашей про-

грамме будет трудно разобраться не только тому другому, но и вам самому!

Кхорошему стилю также относится наличие в программе комментариев.

Издесь не должно быть крайностей. Сухие односложные комментарии типа

"х – это переменная" одна крайность. Многочисленные, многословные ком-

ментарии чуть ли не после каждого оператора другая крайность. Важно найти золотую середину!

Не забывайте также об использовании отступов при записи кода програм-

мы. Во всех наших программах этой книги мы использовали отступы и ком-

ментарии.

Вернемся к нашей программе. Здесь используются три компонента

TLabel. Lazarus присвоил им по умолчанию имена Label1, Label2 и

492

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

____________________________________________________________________

Label3. Понятно, что это надписи. Поэтому применение слова Label вполне логично и оправдано. Но дальше идет простая нумерация! А если в программе

10, 20, 100 надписей? Очень скоро вы запутаетесь, что означает, например

Label5 и, например, Label12.

Поэтому при небольшом числе одинаковых компонентов вполне допусти-

мо использовать имена по умолчанию, но все же лучше, особенно если количе-

ство одинаковых компонентов больше трех, выбирать информативные имена,

которые отражают суть того или иного объекта. При этом не бойтесь придумы-

вать имена в русском контексте, хотя записывать их приходится английскими буквами. Например, имя Stroka будет понятна любому русскоязычному про-

граммисту. Хотя, если вы будете работать, ну скажем, в Microsoft, то за этот идентификатор вас слегка пожурят и попросят изменить на другое, более по-

нятное им имя!

Исходя из этих рассуждений, перепишем нашу программу в виде:

unit Unit1;

{$mode objfpc}{$H+} interface

uses

Classes, SysUtils, LResources, Forms, Controls,

Graphics, Dialogs, StdCtrls, Windows;

type

{ TForm1 }

TForm1 = class(TForm)

L_Hello: TLabel; // здесь будет выводиться само приветствие

L_English: TLabel; // для переключения на английский язык

L_Russian: TLabel; // для переключения на русский язык procedure FormShow(Sender: TObject);

procedure L_EnglishClick(Sender: TObject);

493

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

____________________________________________________________________

procedure L_RussianClick(Sender: TObject); private

{private declarations } public

{public declarations } end;

var

Form1: TForm1; implementation { TForm1 }

procedure TForm1.FormShow(Sender: TObject); begin

L_Hello.Caption:= 'Привет, Мир!'; end;

procedure TForm1.L_EnglishClick(Sender: TObject); begin

L_English.Visible:= false;

L_Russian.Visible:= true;

L_Hello.Caption:= 'Hello, World!';

end;

procedure TForm1.L_RussianClick(Sender: TObject); begin

L_English.Visible:= true;

L_Russian.Visible:= false;

L_Hello.Caption:= 'Привет, Мир!';

end; initialization

494

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

____________________________________________________________________

{$I unit1.lrs}

end.

Повторяю, вы вольны выбирать любые имена для своих объектов в про-

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

тов, более логичные, информативные и понятные с вашей точки зрения. Этот пример лишь иллюстрация к тому, что было сказано выше.

Имеются ли различия при создании собственных классов в программах с графическим интерфейсом по сравнению с консольными приложениями?

Давайте реализуем последний пример из главы V с конструкторами и вир-

туальными функциями в виде GUI-приложения. Для этого создайте новый про-

ект и поместите на форму четыре компонента TLabel. Код программы:

unit Unit1;

{$mode objfpc}{$H+} interface

uses

Classes, SysUtils, FileUtil, LResources, Forms,

Controls, Graphics, Dialogs, StdCtrls, Unit2;

type

{ TForm1 }

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

procedure FormShow(Sender: TObject); private

{ private declarations }

495

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

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