В Delphi съществуват няколко основни процедури и функции, които се използват за показване на прости диалогови прозорци:
Функцията MessageDlg извежда зададено съобщение на екрана, съпроводено от няколко бутона и изображение:
function MessageDlg(const Msg: string; AType: TMsgDlgType;
AButtons: TMsgDlgButtons; HelpCtx: Longint): Word;
Диалоговият прозорец се появява в центъра на екрана. Неговият тип се определя от параметъра AType:
Value
|
Meaning
|
mtWarning
|
A message box containing a yellow exclamation point symbol.
|
mtError
|
A message box containing a red stop sign.
|
mtInformation
|
A message box containing a blue "i".
|
mtConfirmation
|
A message box containing a green question mark.
|
mtCustom
|
A message box with no bitmap. The caption of the message box
is the name of the application's executable file.
|
Параметърът AButtons определя бутонът, който ще се появи в диалоговия прозорец:
Value
|
Meaning
|
mbYes
|
A button with the text 'Yes' on its face
|
mbNo
|
A button with the text 'No' on its face
|
mbOK
|
A button with the text 'OK' on its face
|
mbCancel
|
A button with the text 'Cancel' on its face
|
mbHelp
|
A button with the text 'Help' on its face
|
mbAbort
|
A button with the text 'Abort' on its face
|
mbRetry
|
A button with the text 'Retry' on its face
|
mbIgnore
|
A button with the text 'Ignore' on its face
|
mbAll
|
A button with the text 'All' on its face
|
Функцията връща стойността на бутона, който потребителят е избрал:
Return values
|
|
|
mrNone
|
mrAbort
|
mrYes
|
mrOk
|
mrRetry
|
mrNo
|
mrCancel
|
mrIgnore
|
mrAll
|
Пр.:
procedure TForm1.Button1Click(Sender: TObject);
begin
if MessageDlg('Welcome to my Object Pascal application. Exit now?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
MessageDlg('Exiting the Object Pascal application.', mtInformation,
[mbOk], 0);
Close;
end;
end;
Функцията MessageDlgPos извежда съобщение на екрана с точно указана позиция X и Y:
function MessageDlgPos(const Msg: string; AType: TMsgDlgType;
AButtons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer): Word;
Процедурата ShowMessage визуализира диалогов прозорец със заглавие името на проложението и бутон OK:
procedure ShowMessage(const Msg: string);
Пр.:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('Push this button');
end;
function InputBox(const ACaption, APrompt, ADefault: string): string;
Функцията InputBox визуализира диалогов прозорец със заглавие, определено от параметъра ACaption, и текст, указан от параметъра APrompt. Диалоговият прозорец има два бутона OK и Cancel, и Edit поле. Ако потребителят избере бутона OK, функцията връща стринга, въведен в Edit полето. В противен случай връща зададения по подразбиране стринг, определен от параметъра ADefault.
function InputQuery(const ACaption, APrompt: string; var Value: string): Boolean;
Функцията InputQuery също изисква от потребителя да въведе символен низ. Единствената разлика между нея и функцията InputBox е в синтаксиса.
Обработка на изключения
Идеята на изключенията е да направят програмите по-здрави чрез добавяне възможността за обработка на софтуерни и хардуерни грешки по унифициран начин. Програмата може да продължи работата си при грешки или неочаквано прекъсане, позволявайки на потребителя да запише данните, преди да излезе от нея.
Механизмът на изключенията се базира на следните ключови думи:
Try указа началото на защитения блок в кода.
Except задава края на защитения блок в кода и началото на конструкциите за обработка на изключения, чийто синтаксис е:
on тип_на_изключение do блок
Finally задава блокове от кода, които ще се изпълняват винаги, без значение дали е възникнало изключение.
Пр.:
Reset(F);
try
... // process file F
finally
CloseFile(F);
end;
Raie се използва за генериране на изключение. Възможно е да генерирате такива изключения при получаване на невалидни или противоречиви данни по време на изпълнение на програмата.
Пр.:
function Divide(A, B: Integer):Integer;
begin
try
// грешка, ако B е равмо на 0
Result:= A div B;
except
on EDivByZero do //EDivByZero е изключение, дефинирано в Delphi
Result:= 0;
end;
end;
За да дефинирате собствено изключение, създайте нов клас, наследяващ класа на изключенията:
Пр.:
type
EArrayFull = class(Exception);
Когато добавите елемент към масив, който вече е пълен, можете да генерирате изключение, като създадете обект от този клас:
Пр.:
if MyArray.Full then
raise EarrayFull.Create(‘Array full’);
Методът Create е наследник на класа Exception и изисква като параметър символен низ, описващ на потребителя същността на възникналото изключение.
Съществуват и други ключови думи, свързани с обработката на изключения, но най-често използваната е at. Тя може да е в комбинация с raise, за да покаже на коя машинна инструкция да се предаде възникналото изключение.Синтаксисът е:
raise object at address
Форми и прозорци
В Windows повечето елементи на потрбителския интерфейс са прозорци. Поради тази причина повечето компоненти в Delphi също са базирани на прозорци. От потрбителска гледна точка, прозорецът е част от екрана, ограден с рамка, която има заглавие и може да бъде местена по екрана, затваряна и понякога минимизирана. Прозорците могат да се местят по екрана или в рамките на други прозорци. Технически прозорецът е елемент в област от вътрешната памет на системата Windows, често отговарящ на видим на екрана елемент, който има асоцииран код. Съществува системна библиотека на Windows, която съдържа списък на всички прозорци, създадени от приложенията. За всеки прозорец се задава уникален номер, наричан манипулатор /handle/. Когато нещо се случи, системата изпраща съобщение към съответния прозорец, който в резултат изпълнява някакво действие. За целта прозорците си имат асоциирани функции /window procedure/, обработващи различните съобщения.
От потребителска гледна точка формите представляват прозорци и могат да се изплзват за създаването на главни, MDI и диалогови прозорци. Ако създадете приложение с една форма и един бутон на нея, то това приложение ще разполага със следните прозорци:
-
Главен прозорец /main window/- формата със заглавие Form1. Това е т.нар. застъпващ се /overlapped/ прозорец от клас TForm1.
Overlapped прозорците са главните прозорци на приложенията.
-
Дъщерен прозорец /child window/- бутонът във формата, със заглавие Button1. Това е дъщерен прозорец от клас TButton.
Child прозорците не могат да се преместват извън клиентската област на родителския си прозорец. Такива са контролите в диалоговите прозорци. Само дъщерните прозорци могат да имат родителски прозорец. Всеки друг прозорец може да има притежател /owner/. Притежателят е прозорец, който обменя съобщения с прозорците, които притежава. Обикновено родителят е и притежател. Дъщерните прозорци не използват екранни координати, а клиентските кординати на родителския си прозорец.
Пр.: Когато поставите радио бутон в група, групата е негов родител, а формата- негов притежател.
-
Скрит главен прозорец- прозорецът на приложението, наречен Project1. Това е т.нар. изскачащ /pop-up/ прозорец от клас TАpplication.
Pop-up прозорците чсто се използват за диалогови прозорци. В Windows 1.0 това са единствените прозорци, които могат да препокриват други прозорци.
Рамката на формата и нейният потребителски интерфейс определят дали тя ще е диалогов прозорец. За да покажете вторична форма на екрана е необходимо да използвате функциите Show или ShowModal, при което създавате съответно немодална или модална форма, или просто да зададете стойност True на нейното свойство Visible. Всъщност методите Show и ShowModal задават стойност True на свойството Visible и поставят формата над всички отворени прозорци.
За да създадете вторична форма в режим на изпълнение на програмата, е необходимо да извикате метода Create:
constructor Create(AOwner: TComponent); override;
Диалоговите прозорци също можете да показвате като модални или немодални. Модалните диалогови прозорци са по-често срещани от немодалните.
Съществуват две основни свойства на формата, определящи нейното поведение: FormStyle и BorderStyle. FormStyle ви позволява да изберете между норнална SDI форма / Single Document Interface/ и прозорец, систавляващ MDI приложение /Multi Document Interface/.
Възможни стойностина свойството FormStyle са:
Формата е нормален SDI прозорец или диалогов прозорец.
Формата е дъщерен прозорец в MDI приложение.
Формата е родителски прозорец в MDI приложение.
Формата е SDI прозорец, но винаги е върху всички други прозорци, с изключение на прозорци със същия стил.
Свойството BorderStyle има стойност по подразбиране bsSizable. Потребителят може да променя размера на такъв прозорец чрез влачене на рамката му. В случай, че зададете стойност bsDialog, рамката на формата се държи като рамка на диалогов прозорец, т.е. не може да се разтегля. Стилът bsSingle се използва за създаване на главен прозорец на приложението, който не може да променя размера си. Стойността fsNone се използва в много специални случаи.
Свойството Position задава началната позиция на формата върху екрана. Стойността по подразбиране poDesigned показва, че формата ще се появи на мястото, на което е била проектирана. Стойността poScreenCenter задава, че формата ще се показва в центъра на екрана. Възможно е първоначално да покажете прозореца минимизиран или максимизиран, като зададете подходяща стойност на свойството WindowState.
Съществуват два начина за промяна размера на формата в дизаин режим: чрез задаване стойности на свойствата Width и Height или чрез разтягане на нейната рамка. По време на изпълнение на програмата, ако формата има рамка, позволяваща промяна на размера, потребителят може да променя размера на формата /генерира се събитието OnResize/. Свойствата Width и Height се отнасят за размера на формата, включително и за нейните граници. Съществуват свойства ClientWidth и ClientHeight, които се отнасят за вътрешната област на формата без рамката, заглавието и главното меню. Клиентската област на формата е повърхността, вурху която можете да поставяте компоненти на формата, да извеждате или получавате данни.
При създаването на формата се генерират следните събития:
-
OnCreate: показва, че формата се създава;
-
OnShow: показва, че формата се визуализира;
Това събитие се генерира и когато зададете стойност True на свойството Visible или като извикате методите Show или ShowModal.
-
OnActivate: показва, че формата става активна форма на проложението;
-
OnResize и OnPaint: генерират се винаги при създаване на формата, но и много пъти през нейния жизнен цикъл.
Формата се затваря с помощта на метода Close или чрез еквивалентите му- Alt+F4, системно меню или бутон за затваряне. В резултат се генерира събитието OnCloseQuery, при което можете да изисквате от потребителя да потвърди действието.
Пр,:
procedure TForm1.FormCloseQuery(Sender: TObject; var
CanClose: Boolean);
begin
if MessageDlg('Close the form?', mtConfirmation,
[mbOk, mbCancel], 0) = mrCancel then
CanClose := False;
end;
Ако резултатът от обработката на събитието OnCloseQuery покаже, че формата може да бъде затворена, се генерира събитието OnClose. Третата стъпка е генерирането на събитието OnDestroy, което е противоположно на събитието OnCreate и обикновено се използва за унищожаване на обекти, свързани с формата.
SDI и MDI приложения
Едно MDI приложение се състои от няколко форми, оито се появяват във вътрешността на една главна форма. То има следната структура:
-
Главният прозорец на приложението действа като рамка на контейнер. Този прозорец изисква специална структурана менюто и специфичен код.
-
Специален прозорец, познат под името MDI клиент, покрива цялата клиентска област на рамката, подържайки някои специални възможности. Например MDI клиентът управлява списъка с дъщерните прозорци.
-
Дъщерните прозорци можр да са от един и същ или от различен тип. Те не са поставени директно в прозореца рамка, но всеки от тях има за родител MDI клиента, който от своя страна има за родител рамката.
За да разработите MDI приложение можете да използвате шаблона MDI Application или просто да създадете две форми, едната със стойност fsMDIChild, а другата със стойност fsMDIForm на свойството FormStyle. Формите, имащи стойност fsMDIForm за свойството си FormStyle имат някои специфични методи:
-
Методът Cascade подрежда каскадно всички отворени MDI дъщерни прозорци. Дъщерните форми се подреждат, започвайки от горния ляв ъгъл на клиентската област на рамката, придвижвайки се към долния десен ъгъл. Прозорците се припокриват.
-
Методът Tile подрежда отворените дъщерни прозорци така, че да не се препокриват. Клиентската област на рамката се разделя на еднакви части за различните прозорци, така че всички те да могат да се покажат на екрана. Методът подрежда и минимизираните прозорци. По подразбиране те се подреждат хоризонтално. Това действие може да се промени чрез свойството TileMode.
-
Свойството TileMode определя как ще действа метода Tile. Възможни са два избора: tbHorizontal, при който прозорците се подреждат хоризонтално, и tbVertical, при който прозорците се подреждат вертикално.
-
Процедурата ArrangeIcons подрежда всички минимизирани дъщерни прозорци, започвайки от долния ляв ъгъл на клиентската област на рамката и продължавайки към горния десен ъгъл. Отворените форми не се местят.
Интересни методи и свойства, свързани с MDI са:
Това е свойство на MDI рамката и съдържа активния дъщерен прозорец.
Процедурата Next активира следващия дъщерен прозорец във вътрешния списък на програмата.
Процедурата Previous активира предишния дъщерен прозорец във вътрешния списък на програмата.
Това свойство съхранява броя на дъщерните прозорци.
Свойството MDIChildren представлява масив, съдържащ дъщерните прозорци. То може да се използва в коминация със свойството MDIChildCount, за да се обходят всички дъщерни прозорци.
Пр.:
var
I: Integer;
begin
with Form1 do
for I := MDIChildCount-1 downto 0 do
MDIChildren[I].Close;
end;
Сподели с приятели: |