Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Ракитин Р.Ю. ООП в Turbo Delphi

.PDF
Скачиваний:
55
Добавлен:
18.03.2015
Размер:
3.59 Mб
Скачать

41

цвета основного кода. Ниже представлен перечень всех зарезервированных слов Object Pascal:

and

function

property

array

goto

raiseas

if

record

asm

implementation

repeat

begin

in

resourcestring

case

inherited

set

class

initialization

shl

const

inline

shr

constructor

interface

string

destructor

is

then

dispinterface

label

threadvar

div

library

to

do

mod

try

downto

nil

type

else

not

unit

end

object

until

except

of

uses

exports

or

var

file

out

while

finalization

packed

with

finally

procedure

xor

for

program

Также не рекомендуется использовать в качестве идентификаторов стандартные директивы:

absolute

implements

published

abstract

index

read

assembler

message

readonly

automated

name

register

cdecl

near

reintroduce

contains

nodefault

requires

default

overload

resident

dispid

override

safecall

dynamic

package

stdcoll

export

pascal

stored

external

private

virtual

far

protected

write

forward

public

writeonly

 

4.Оформление исходных текстов на Delphi

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

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

Опираясь на стандарты де-факто, установленные компанией Borland/Inprise, можно сформулировать несколько требований к оформлению исходных текстов программы.

Самым главным требованием необходимо считать четкое отражение вложенности операторов в отступах начала строки от левой границы.

Стандартным считается отступ на два символа для каждого следующего вложения:

42

первый уровень второй уровень

третий уровень

Это требование должно выполняться одинаково как для составных (с begin и end), так и для простых операторов:

while Condition do begin

Operator1;

Operator2; end;

for i:=StartValue to EndValue do Action;

В тех случаях, когда длина простого оператора невелика, он может записываться на одной строке с оператором более высокого уровня:

for i:=StartValue to EndValue do Action;

Операторные «скобки» begin и end записываются на уровне порождающего их оператора и не влияют на отступы вложенных операторов. Необходимо четко следить, чтобы парные begin-end находились на одном уровне. Самый простой способ избежать ошибок, связанных с их установкой: устанавливать их одновременно.

При переносе частей длинного простого оператора производится сдвиг переносимых частей на следующий уровень:

begin

SomeVeryVeryVeryVeryLongNameProcedureCall(

FirstVeryVeryVeryVeryLongParameter,

SecondVeryVeryVeryVeryLongParameter,

ThirdVeryVeryVeryVeryLongParameter); end;

begin

SomeString:=String1+String2+String3+String4+String5+

String6+String7+String8+String8+String9+String10; end;

Правила вложенности распространяются также на объявления типов переменных, констант, и вложенных функций, и процедур:

procedure FirstLevel; const

XSize = SomeValue; type

XType = array [-XSize..XSize] of SomeType; var

X: XType;

43

procedure SecondLevel(Value: XType); var

i, j: Integer; begin

SecondLevelRealization; end;

begin

FirstLevelRealization;

SecondLevel(X); end;

Названия разделов объявления классов записываются на том же уровне, что и само объявление:

type

TSomeObject=class

// published - объявления

...

private

// private - объявления

...

protected

// protected - объявления

...

public

// public - объявления

...

end;

Комментарии записываются перед оператором на его уровне:

// комментарий оператора 1 Operator1;

for i:=StartValue to EndValue do

{ комментарий оператора Action } Action;

Короткие комментарии могут записываться в конце строки с операторами:

Inc(X, 2); // увеличиваем значение на 2

Зарезервированные слова пишутся только строчными буквами:

IF ... THEN ... ELSE // неправильно If ... Then ... Else // неправильно if ... then ... else // правильно

Идентификаторы должны начинаться с прописных букв (исключая идентификаторы, начинающиеся с префиксов в таких идентификаторах префиксы пишутся строчными буквами, а прописной буквой выделяется собственно идентификатор). В том случае, если название идентификатора составлено из нескольких слов, каждое слово выделяется прописной буквой:

44

var

Variable: Integer;

PenColor: TColor; procedure UpdatePageCount;

type

// исключение - использование префиксов

TPageState = (psUnknown,psOpen,psClose);

Не рекомендуется использование бессмысленных идентификаторов:

var

A1, AAA, VAR1: Integer; // не рекомендуется

Частым исключением являются традиционные идентификаторы цикловых переменных: i, j, k и так далее. Но и их использование должно быть сокращено до минимума. Вместо них, где это возможно, должны использоваться осмысленно названные переменные.

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

При выборе идентификаторов необходимо придерживаться основных правил наименования, которые гласят, что к идентификатору типа должна добавляться буква T, имена private-полей должны иметь впереди F, а имена методов доступа должны начинаться на Set и Get:

type

TExample = class private

FField: TFieldType;

function GetField: TFieldType;

procedure SetFieldType(Value: TFieldType); published

property Field: TFieldType read GetField write SetField;

end;

var

Example: TExample;

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

type

TSomeNameType = (snFirst,snSecond,snThird);

Константы WinAPI пишутся прописными буквами, что, во-первых, выделяет их в тексте, и, во-вторых, соответствует их написанию в справочной системе и экспортирующих модулях:

ShowWindow(Handle,SW_MAXIMIZE);

45

В начале каждого файла рекомендуется помещать информационный комментарий. Нужно составить шаблон этого комментария, сохранить в PAS- файле и пользоваться операцией загрузки блока в Delphi IDE для его установки в начало каждого файла. Такие комментарии обычно содержат информацию о модуле и авторских правах:

{

Модуль SomeModule

}

{

Библиотека SomeLibrary

}

{

Copyright (C) 2009 SomeCompany

}

{

www.somecompany.com

}

{

support@somecompany.com

}

При создании проектов в визуальной среде Delphi программисту приходится работать со множеством объектов: Форм, Кнопок, Переключателей и др. При создании нового объекта Delphi автоматически присваивает ему имя, идентифицирующее его в программе. При этом имя компонента образовано из типа компонента и его порядкового номера, например Edit12. Такой

идентификатор является не наглядным и усложняет разработку больших проектов. Поэтому рекомендуется изменять стандартные имена на более понятные. При этом следуют следовать правилу имя объекта составляется из двух частей: первая сокращение от типа объекта (Form – F, Edit – Ed, Label – Lb, Button – But и другие), вторая краткая характеристика объекта (например «Кнопка отмены» – ButCancel, «Информационная Панель»

PanInfo и т.д.).

+Применение таких простых правил делает программу понятной и более читаемой.

5.Приложение (класс TApplication)

На основе данного класса можно обрабатывать системные сообщения Windows, предназначенные для приложения, организовать оперативные подсказки и выполнять специфические действия, зависящие от операционной системы.

Каждая программа, создаваемая в Delphi, имеет доступ к глобальной переменной Application класса TApplication. К ней следует обращаться, когда необходимо воспользоваться возможностями этого класса.

Основные свойства:

Active имеет значение true, если приложение активно (имеет фокус); ExeName полное имя файла программы вместе с путем поиска; Handle внутренний идентификатор программы в системе Windows; Hint текст всплывающей подсказки, принятый по умолчанию; HintColor цвет окна всплывающей подсказки;

HintHidePause временной интервал в миллисекундах, по истечении которого всплывающая подсказка будет убрана;

46

HintPause, HintShortPause временной интервал в миллисекундах, по истечении которого всплывающая подсказка появляется на экране. Свойство HintShortPause определяет этот интервал в случаи, когда уже отображается другая подсказка;

HintShortCuts если значение True, то в всплывающей подсказке будет отображаться информация о «горячей клавише»;

Icon значок, который будет использоваться системой Windows для идентификации данного приложения;

MainForm данное свойство имеет тип TForm и определяет главную форму программы;

Terminated имеет значение true, если приложение получило сообщение WM_QUIT, означающее, что приложение должно закончить работу;

Title заголовок приложения, строка, которая отображается на кнопке

Панели задач.

Основные методы:

procedure ActivateHint(CursorPos: TPoint); отображает всплывающую подсказку в заданной точке экрана;

procedure BringToFront; перемещает последнее из активных окон на передний план экрана;

procedure CancelHint; убирает всплывающую подсказку;

procedure CreateForm(InstanceClass: TComponentClass;

var Reference); запрашивает память у операционной системы и создает там объект Reference, являющийся экземпляром класса InstanceClass;

procedure HandleMessage; прерывает работу программы для обработки очередного системного сообщения Windows, которое хранится в очереди сообщений. Данный метод полезен, когда приложение выполняет длительные вычисления и требует периодической проверки: не поступила ли от ОС какая-либо команда;

function MessageBox (const Text, Caption: Pchar;

Flags: longint): integer; показывает стандартное диалоговое окно, содержащее кнопки, определяемые параметром Flags;

procedure Minimize; свертывает все окна приложения;

procedure ProcessMessages; работает как и метод HandleMessage, но обрабатывает не одно, а все системные сообщения из очереди Windows;

procedure Restore; восстанавливает все свернутые окна программы до нормального размера;

procedure Run; запускает приложение;

47

procedure ShowException(E: Exception); выводит диалоговое окно с сообщением, описывающим исключительную ситуацию (параметр E);

procedure Terminate; завершает работу приложения.

Рассмотрим пример использования класса TApplication. Пусть выполняется длинный цикл с большим объемом вычислений.

for i:= 1 to 100000 do begin

...

//счёт

...

end;

Прямой подсчет не совсем корректен, потому что цикл монопольно захватывает ресурсы процессора. Чтобы позволить пользователю переключиться на другую программу, а системе Windows оптимально распределить нагрузку, в цикл надо добавить команду обработки очереди системных сообщений.

for i:= 1 to 100000 do begin

...

//счёт

Application.ProcessMessage; end;

Если в процессе работы программы необходимо создать новую форму с идентификатором FormNew, некоторого объявленного класса TFormNew, то

нужно вызвать метод

Application.CreateForm(TFormNew, FormNew);

6.Форма и её свойства

Форма это заготовка для будущего окна приложения и, в то же время, контейнер для всех видов компонентов (визуальных, невизуальных и диалоговых), добавляемых в программу во время визуального построения.

Любое приложение, созданное в среде Delphi, имеет одну основную форму. Рассмотрим основные свойства объекта TForm. Большинство из рассмотренных свойств характерны для любого визуального объекта в Delphi.

ActiveControl указывает на компонент, который должен быть активным по умолчанию;

Align выравнивание компонента. Любой компонент может быть выровнен по одной из сторон родительского компонента. Этому свойству можно присвоить следующие значения: alNone, alBottom, alLeft, alRight, alTop.

Компоненты выравниваются относительно формы, а форма выравнивается относительно окна;

48

AlphaBlend тип свойства логический, который означает, имеет ли форма прозрачность;

AutoScroll тип свойства логический, который означает, будет ли форма автоматически производить прокрутка (скроллинг) или нет;

AutoSize тип свойства логический, который означает, должны ли компоненты на форме автоматически корректировать размеры;

BorderIcons свойство, определяющее какие кнопки должны присутствовать у окна. Это свойство раскрывающееся. Если щелкнуть по квадрату слева от имени свойства, то раскроется список из четырёх свойств: biSystemMenu – показать меню (иконка слева в строке заголовка окна) и другие кнопки заголовка окна;

biMinimize – кнопка минимизации окна; biMaximize кнопка максимизации окна.; biHelp – кнопка помощи;

BorderStyle свойство формы. Отвечает за вид оборки окна; Caption это строковое свойство, которое отвечает за заголовок окна;

Constraints в этом свойстве содержатся максимальные значения размеров окна;

Cursor это свойство отвечает за курсор, который будет отображаться при наведении мышкой на форму/компонент;

Enabled тип свойства логический. Означает доступность компонента. Если это свойство равно True, то пользователь может работать с этим компонентом, иначе компонент недоступен и окрашен серым цветом;

Font шрифт используемый при выводе текста на форме. Если ты дважды щёлкнешь по этой строке, то появится стандартное окно Windows выбора шрифта;

FormStyle стиль формы. Здесь тебе доступны для выбора следующие

варианты

fsNormal нормальное окно;

fsMDIForm окно является родительским для MDI окон. MDI означает мультидокументные окна, которые могут находится и перемещаться только внутри основного окна. fsMDIForm – создаёт главное окно; fsMDIChild окно является дочерним MDI окном. fsMDIChild создаёт дочернее, то есть то окно, которое будет внутри главного. Главное окно не может быть данного типа;

fsStayOnTop окно с этим параметром будет находиться всегда поверх остальных;

Height тип свойства целое число, высота окна;

Icon иконка отображающаяся в заголовке окна. Если дважды щёлкнуть по этому свойству, то появится окно загрузки иконки;

Menu меню, которое используется в главном окне;

Position Позиция окна при старте приложения. Доступны следующие варианты:

49

poDefault – Windows сам будет решать, где расположить окно и какие будут его размеры;

poDefaultPosOnly – Windows сам будет решать, где расположить окно, а размеры его будут такими, какие установит программист в свойствах; poDefaultSizeOnly – Windows будет решать только какими будут размеры окна, а позиция будет такая, какую программист укажет в свойствах; poDesigned – и размер, и позиция будут такими, какими программист укажешь в свойствах;

poDesktopCenter – окно будет располагаться по центру рабочего стола; poMainFormCenter – окно будет располагаться по центру основной формы; poOwnerFormCenter – окно будет располагаться по центру основного окна, которое вызвало данное;

poScreenCenter – окно будет располагаться по центру экрана;

Visible тип свойства логический. Если оно равно True, то форма/компонент видимая, иначе форма/компонент не видима;

Width тип свойства целое число. Ширина окна;

WindowState состояние окна после запуска. Доступны следующие параметры:

wsNormal окно показывается в нормальном состоянии; wsMaximized окно показывается максимизированным; wsMinimized окно показывается минимизированным.

Практическое задание.

1.Создание проекта Delphi.

Запустим Delphi, откроется новый проект, состоящий из Формы (Form), на которую будем наносить объекты (в Проектировщике форм) и окно Программного кода (Unit), куда будем записывать программный код. Если заготовка проекта не создалась автоматически, то сделаем это, выбрав File New VCL Forms Application – Delphi for Win32 (Файл → Создать → Приложение).

В окне программного кода автоматически будет создан следующий код: unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;

type

TForm1 = class(TForm) private

{Private declarations } public

{Public declarations }

end;

50

var

Form1: TForm1;

implementation

{$R *.dfm} end.

В интерфейсной части Interface выполняется подключение базовых модулей (раздел uses), затем объявляется тип TForm1, содержащий описание формы, и декларируется одна переменная этого типа (раздел var). В разделе type создан новый класс TForm1, наследующий характеристики своего родителя TForm. Таким образом, созданная форма Form1 представлена в программе классом TForm1, который не имеет новых полей и методов, так как форма пуста. В дальнейшем члены класса TForm1 будут добавляться по мере необходимости как автоматически (при размещении их на форме в Проектировщике форм), так и вручную. Более подробно о структуре модулей смотрите в Главе 8.

Директива {$R *.dfm}, описанная в разделе реализации связывает модуль с описанием соответствующей ему формы. В файле DFM, как говорилось ранее, содержится информация о свойствах формы и всех её объектов. В случае пустой формы в файле может содержаться следующий код:

object Form1: TForm1 Left = 0

Top = 0

Caption = 'Form1'

ClientHeight = 292

ClientWidth = 554 Color = clBtnFace

Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11

Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13

end

Как вы видите, в коде описан объект и перечислены его свойства и значения. Информация в файле автоматически обновляется, по мере

добавления новых объектов и изменении их свойств в Инспекторе объектов

(Object Inspector).

2.Сохранение приложения.

Созданное таким образом приложение является вполне работоспособным. Теперь можем его откомпилировать и запустить, нажав F9. Перед нами