Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
конспект лекций_2 семестр.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.4 Mб
Скачать

Создание форм разного вида

Существует возможность создавать непрямоугольные окна. За внешний вид формы отвечает регион. Чтобы воспользоваться регионом, необходимо в обработчике события OnFormCreate выполнить действия:

    1. • объявить переменную типа HRgn;

    2. • создать регион функцией CreateRectRgn (для прямоугольного региона) или CreateEllipticRgn (для эллиптического региона);

    3. • установить этот регион для окна функцией SetWindowRgn.

  1. Например, создадим форму в виде окружности.

procedure TfmCircle.FormCreate(Sender: TObject);

Var Region:HRgn;

begin

Region:=CreateEllipticRgn(30,30,400,400);

SetWindowRgn(fmCircle.Handle,Region,true)

end;

Для создания более сложных форм используется объединение нескольких регионов с помощью функции CombineRgn:

CombineRgn (Rez, A, B: HRgn, fmCombineMode: integer): integer;

где Rez – регион, получаемый после объединения,

A, B – исходные регионы,

fmCombineMode – режим объединения.

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

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

Rgn_COPY создаёт копию региона A;

Rgn_DIFF – вычитает из A B;

Rgn_OR – объединяет А и B;

Rgn_XOR – исключает из объединения А и B зону перекрытия.

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

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

unit Unit1;

interface

uses

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

type

TfmComby = class(TForm)

Button1: TButton;

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

var

fmComby: TfmComby;

implementation

{$R *.dfm}

procedure TfmComby.FormCreate(Sender: TObject);

Var A,B:HRgn;

begin

A:=CreateRectRgn(20,20,400,400);

B:=CreateEllipticRgn(125,125,285,285);

CombineRgn(A,A,B,Rgn_DIFF);

SetWindowRgn(fmComby.Handle,A,true)

end;

procedure TfmComby.Button1Click(Sender: TObject);

begin

Сlose;

end;

end.

Конструирование меню

Слово меню происходит от латинского тiпute, что оз­начает нечто очень маленькое или подробное. Как известно каждому пользователю Windows, раскры­вающееся меню представляет собой подробный список та­ких команд, как Ореп или Exit. В большинстве приложе­ний в главном меню перечислены имена одного или не­скольких раскрывающихся подменю. Вы также можете создавать всплывающие меню, щелкнув при этом правой кнопкой мыши.

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