VR
Virtual Reality On-line   Журнал
Новости   |     Журнал    |    Хаkер    |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]

[ Download  ]
[  Конкурс  ]
[ Анекдоты  ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






TopList
Язык программирования Delphi
Нестандартные окна
:
Logo

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

Почему я очень часто использую именно этот язык? Ответ прост. С помощью Delphi можно очень быстро создавать любые приложения и в то же время это очень мощная среда разработки. Программист, пишущий на Delphi, ни чем не ограничен, он может создавать приложения любой сложности.

Для обучения по моим статьям тебе лучше всего прикупить Delphi 5.0. Если такой нет, то может подойти и 4-я и даже 3-я версии. Я не буду писать всякую чушь, типа обзоров возможностей, обзоров компонент. Мы сразу перейдём к разработке работающих приложений, и во время работы познакомимся с мелочами. С первого же занятия ты убедишься в мощности Delphi. Каждый мой урок будет полезен как начинающему, так и программисту со стажем.

Наше первое приложение

Для начала запусти Delphi. Если ты не знаешь, как это делать, то иди копать траншеи. После запуска перед тобой откроется новый проект. Вот именно с ним мы и начнём работать.
Logo
Рис 1. Object Inspector

Теперь выполняй следующие действия:

  1. Поставь на форму кнопку.
  2. Создай для неё событие "OnClick".
  3. Напиши в этой процедуре "Close;" - закрытие окна.
Для создания события тебе надо выделить объект, событие которого тебя интересует, потом перейти в окно "Object Inspector" (рис 1). Выбрать закладку "Events" и дважды щёлкнуть там по событию.

У тебя должны получиться вот такая процедура:

procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;

По нажатию кнопки форма закроется. Никаких "Halt" в твоей программе не должно быть. Все окна закрываются только через "Close()".

Кстати, кнопку расположи так, как показано на рисунке 2. Зачем? Узнаешь позже, просто сделай, как я говорю.
Logo
Рис 2. Расположение кнопки "Выход"

Теперь снова выдели кнопку и в "Object Inspector" у свойства "Caption" напиши "Выход". Маленькое приложение готово. Ты можешь запустить его с помощью меню "Run" и посмотреть, что у нас получилось. А у нас пока ещё ничего не получилось. Потерпи ещё пять минут, и у нас будет на что смотреть.

Теперь переходи в окно текста программы и ищи объявления public:. Объявления бывают трёх типов: private, public и protected. Во время уроков мы будем пользоваться первыми двумя. Теперь в private напиши следующее:

  private
    { Private declarations }
    FormRgn,EllipseRgn:HRGN;

Во второй строке идёт комментарий. Комментарий - это любой текст (хоть матершина), он не влияет на работу программы, ты их пишешь для себя, а я для тебя, обращай на них внимание. Комментарии оформляются в фигурные кавычки {}. Всё, что находится между ними - это комментарий. Тут может быть хоть несколько строк. Второй способ оформления - это двойной слеш "//". Всё, что находиться в этой строке после двойного слеша - комментарий. В этом случае следующая строка уже не будет комментарием.

Теперь для главной формы создай событие "OnCreate". Для этого достаточно дважды щёлкнуть по главной форме и Delphi создаст процедуру FormCreate . В ней напиши следующее:

procedure TForm1.FormCreate(Sender: TObject);
begin
 FormRgn:= CreateEllipticRgn(0,0,Width,Height);
 SetWindowRgn(Handle,FormRgn,True);
end;

У тебя должен получиться вот такой текст:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    FormRgn,EllipseRgn:HRGN;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
 FormRgn:=CreateEllipticRgn(0,0,Width,Height);
 SetWindowRgn(Handle,FormRgn,True);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Close;
end;

end.
Logo
Рис 3. Пример выполнения программы

Вот теперь запусти то, что у нас получилось. У тебя должно получиться окно похожее на моё (см Рис 3). Я надеюсь, теперь понятно, почему мы именно так расположили кнопку закрытия окна.

Теперь рассмотрим подробнее, что мы тут натворили.

CreateEllipticRgn(
 NLeftRect:Integer, //Левая позиция
 nTopRect:Integer, // Верхняя 
 nRightRect:Integer, // Правая
 nBottomRect:Integer // Нижняя
   ): HRGN;

Эта процедура создаёт регион в виде эллипса.

SetWindowRgn(
 HWnd: HWND,	//Указатель на нашу форму
 HRgn: HRGN,	// Предварительно созданный регион
 BRedraw:Boolean	// Флаг перерисовки окна
):Integer;	
 

Эта процедура привязывает созданный нами регион с нашей формой. Со всеми параметрами вроде понятно, я только обращу внимание на bRedraw , этот флаг должен быть true. Если ты этого не сделаешь, то твой регион ну будет прорисован.

Теперь я приведу ещё две функции, а пример мы посмотрим чуть позже.

CreateRectRgn (
 nLeftRect:Integer, //Левая позиция
 nTopRect:Integer, // Верхняя 
 nRightRect:Integer, // Правая
 nBottomRect:Integer // Нижняя
   ): HRGN;

Эта функция похожа на CreateEllipticRgn . Она также создаёт регион, но уже квадратный.

CombineRgn(
 HrgnDest: HRGN,	// Указатель на результирующий регион
 hrgnSrc1: HRGN,	// Указатель на регион 1
 hrgnSrc2: HRGN,	//Указатель на регион 2
 fnCombineMode:Integer 	// Метод объединения 
   ) :Integer;

Эта функция комбинирует два региона из hrgnSrc1 и hrgnSrc2 и помещает результат в HrgnDest . fnCombineMode - метод комбинирования, который может быть: RGN_AND, RGN_COPY, RGN_DIFF, RGN_OR или RGN_XOR.

Теперь подправим нашу программу с учётом новых функций. Для этого, нужно изменить процедуру FormCreate .

procedure TForm1.FormCreate(Sender: TObject);
begin
 FormRgn:=CreateEllipticRgn(0,0,Width,Height);
 EllipseRgn:=CreateRectRgn(round(Width/4),round(Height/4),
    round(3*Width/4),round(3*Height/4));
 CombineRgn(FormRgn,FormRgn,EllipseRgn,RGN_DIFF);
 SetWindowRgn(Handle,FormRgn,True);
end;
Logo
Рис 4. Пример выполнения программы

После запуска ты сможешь увидеть прозрачное окно (Рис 4.).

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

И напоследок немного теории. Мы использовали в наших функциях Width и Height - это ширина и высота нашего окна. Откуда они взялись? Для этого нужно понимать объёктность. Delphi - это объектно-ориентированный язык. Вот именно об объёктах мы сейчас немного поговорим.

В самом начале текста программы есть строка TForm1 = class(TForm) . Она означает, что класс TForm1 происходит от TForm. Такой класс унаследует себе все свойства предка (TForm), и может добавлять свои. Вот именно у предка и есть такие свойства как Width и Height . Мы просто пользовались ими.

И напоследок магическая точка с запятой (;). Она ставиться в конце каждого оператора, как разделитель. Например, ты хочешь присвоить переменной F значение 5, а переменной W значение 4. Ты должен записать это так F:=5; W:=4;. Как видишь, точка с запятой ставиться в конце каждого выражения и служит их разделителем. Единственное, когда не надо ставить ;, так это перед словом else. Есть такая конструкция:

if условие then
 Операция 1 //Здесь точка с запятой не нужна, потому что следом идёт else
else
 оператор 2;

Происходящее здесь звучит очень просто:

Если условие выполнено то
 выполнить Операция 1 
иначе
 выполнить оператор 2;

Например:
if i>0 then
 i:=5
else
 i:=10

На первый раз тебе будет достаточно этих знаний. В будущем мы будем постоянно сталкиваться с объектами, поэтому со временем ты пополнишь свой багаж знаний.

Если ты что-то не понял, не огорчайся. Со временем всё станет ясно. Попробуй просто поиграть с текстом программы. Москва тоже не сразу строилась.

 Исходники примера забирай здесь


Design by FMk group ©
Copyright©: Horrific aka Флёнов Михаил ©