Структура на Delphi-приложение



страница6/6
Дата18.09.2016
Размер401.28 Kb.
#10237
1   2   3   4   5   6

Съобщителни прозорци


В Delphi съществуват няколко основни процедури и функции, които се използват за показване на прости диалогови прозорци:

  • MessageDlg

Функцията 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

Функцията MessageDlgPos извежда съобщение на екрана с точно указана позиция X и Y:

function MessageDlgPos(const Msg: string; AType: TMsgDlgType;

AButtons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer): Word;



  • ShowMessage

Процедурата ShowMessage визуализира диалогов прозорец със заглавие името на проложението и бутон OK:

procedure ShowMessage(const Msg: string);

Пр.:


procedure TForm1.Button1Click(Sender: TObject);

begin

ShowMessage('Push this button');



end;

  • InputBox

function InputBox(const ACaption, APrompt, ADefault: string): string;

Функцията InputBox визуализира диалогов прозорец със заглавие, определено от параметъра ACaption, и текст, указан от параметъра APrompt. Диалоговият прозорец има два бутона OK и Cancel, и Edit поле. Ако потребителят избере бутона OK, функцията връща стринга, въведен в Edit полето. В противен случай връща зададения по подразбиране стринг, определен от параметъра ADefault.



  • InputQuery

function InputQuery(const ACaption, APrompt: string; var Value: string): Boolean;

Функцията InputQuery също изисква от потребителя да въведе символен низ. Единствената разлика между нея и функцията InputBox е в синтаксиса.



Обработка на изключения

Идеята на изключенията е да направят програмите по-здрави чрез добавяне възможността за обработка на софтуерни и хардуерни грешки по унифициран начин. Програмата може да продължи работата си при грешки или неочаквано прекъсане, позволявайки на потребителя да запише данните, преди да излезе от нея.

Механизмът на изключенията се базира на следните ключови думи:


  • try

Try указа началото на защитения блок в кода.

  • except

Except задава края на защитения блок в кода и началото на конструкциите за обработка на изключения, чийто синтаксис е:

on тип_на_изключение do блок

  • finally

Finally задава блокове от кода, които ще се изпълняват винаги, без значение дали е възникнало изключение.

Пр.:


Reset(F);

try

... // process file F



finally

CloseFile(F);



end;

  • raise

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 са:



  • fsNormal

Формата е нормален SDI прозорец или диалогов прозорец.

  • fsMDIChild

Формата е дъщерен прозорец в MDI приложение.

  • fsMDIForm

Формата е родителски прозорец в MDI приложение.

  • fsStayOnTop

Формата е 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 са:

  • ActiveMDIChild

Това е свойство на MDI рамката и съдържа активния дъщерен прозорец.

  • Next

Процедурата Next активира следващия дъщерен прозорец във вътрешния списък на програмата.

  • Previous

Процедурата Previous активира предишния дъщерен прозорец във вътрешния списък на програмата.

  • MDIChildCount

Това свойство съхранява броя на дъщерните прозорци.

  • MDIChildren

Свойството MDIChildren представлява масив, съдържащ дъщерните прозорци. То може да се използва в коминация със свойството MDIChildCount, за да се обходят всички дъщерни прозорци.

Пр.:


var

I: Integer;



begin

with Form1 do

for I := MDIChildCount-1 downto 0 do

MDIChildren[I].Close;



end;
Каталог: project -> staf
project -> Г бнр безработицата в Ловешко бележи спад за пореден месец
project -> И радиационна защита
project -> Програма на С, която генерира и извежда на екрана редица от числа на Фибоначи: от 1 до зададено от потребителя число оценка: 4
project -> Нсорб до есента ще има единен регистър за хора с психични заболявания
staf -> Бази данни
staf -> Най-популярният език за създаване на интерактивни и динамични web сайтове е php
staf -> Управление на съобщенията за грешка


Сподели с приятели:
1   2   3   4   5   6




©obuch.info 2024
отнасят до администрацията

    Начална страница