Базовый объект TObj - аналог класса TObject из VCL. TObj
мало похож на своего старшего брата, разве что методом удаления Free. Я никогда
не применял TObj для дела, поэтому плавно перейду ко второму (самому главному
для работы) объекту TControl.
TControl может выполнять роль любого визуального обьекта и фактически
выполняет обязанности для которых в Delphi отведены десяток классов. Для
создания определенного контрола вам надо воспользоваться соответствующим
"конструктором" . Под конструктором подразумевается функция, в параметрах у
которой указывается родительский объект ( на нем будет находится ваш контрол,
если дело касается визуальных объектов).
В KOL есть и другие объекты, но про них я расскажу в соответствующих уроках так
как они более узкоспециализированны.
Фактически, это не только ваше первое окно написанное с помощью KOL, но и
первая программа с использованием этой библиотеки :)
Для начало удалим все лишнее. Лишним я называю все, что относится к
визуальному программированию и VCL. В меню "Project" выберите "Remove from
Project" и удалите форму. Теперь подредактируем и файл проекта. Нажмите F12 и
выберите соответствующий файл.
То, что вы увидите, будет выглядеть примерно так:
program Project1;
uses
Forms;
{$R *.RES}
begin
Application.Initialize;
Application.Run;
end.
Подредактируем текст :
program Project1;
uses
Windows,
messages,
KOL;
{$R *.RES}
begin
end.
Можно конечно удалить и строчку {$R *.RES} (тем самым уменьшив приложение на
пару кб), но я предпочитаю оставлять эту строку, чтобы приложение было более
красивым (красивые иконки - это моя слабость;)
Ну, а теперь можно сохранить наш проект (например под именем L1). Конечно, как
вы понимаете, это еще не программа, но запустить ее можете уже и сейчас.
Вернемся к KOL.
function
NewForm( AParent: PControl; const Caption:
String ): PControl; |
Для создания формы надо воспользоваться конструктором NewForm. В
параметрах у этого конструктора указывается специальный объект Applet (AParent)
и заголовок окна (Caption). Вы наверное сразу зададитесь вопросом: что такое
Applet ? Для ответа на этот вопрос надо вспомнить то, о чем я говорил об обьекте
TControl (ну, насчет того, что в параметрах конструктора визуальных контролов
обычно указывается объект, на котором находится контрол). Так Applet - это
объект, "на котором" создается окно. Если у вас одно окно, то этот объект
создается автоматически и не надо пользоваться его конструктором.
function
NewApplet( const Caption: String ): PControl;
|
Вот пример создания окна:
program L1;
uses
Windows,
messages,
KOL;
{$R *.RES}
var
form:PControl;
begin
form:=NewForm(Applet,'Первое окно');
run(form);
end.
Функция Run, "запускает" программу, т.е. запускает цикл, в котором
обрабатываются сообщения программы.
Теперь рассмотрим некоторые свойства окна, из которых многие аналогичны
стандартным свойствам форм Delphi.
Свойство
|
Описание
|
Width |
Длина окна |
Height |
Высота окна |
Саption |
Заголовок |
Handle |
Хендл |
Style |
Стиль окна |
ExStyle |
Расширенный стиль окна |
Top |
Положение окна от
верхнего края монитора |
Left |
Положение окна от
левого края монитора |
Это конечно не все свойства, но они обычно самые нужные.
Style и ExStyle отвечают за то, что у обычной формы в VCL отвечает свойство
FormStyle. Для тех, кто никогда не имел дело с API, привожу список тех значений,
которые они могут принимать. Для Style (основные):
- WS_OVERLAPPED
- создается окно с рамкой заголовком, но без системного меню и
кнопок "Свернуть", "Развернуть" и т.д.
-
- WS_OVERLAPPEDWINDOW
- создается окно имеющее заголовок, изменяемый размер,
системное меню, и кнопки управлением окна, короче говоря,
обычное окно. Данный флаг является комбинацией нескольких
других.
-
- WS_POPUP
- флаг, обратный к WS_OVERLAPPED. Создается окно, не
имеющее ничего, кроме поверхности. Для добавления строки
заголовка нужно добавить флаг WS_CAPTION.
-
- WS_BORDER
- создается окно с простой тонкой рамкой, причем пользователь
не может поменять размер окна.
-
- WS_THICKFRAME
- создается окно с толстой рамкой, позволяющее пользователю
менять размер окна.
-
- WS_HSCROLL
- создается окно с горизонтальной полосой прокрутки
-
- WS_VSCROLL
- создается окно с вертикальной полосой прокрутки
-
- WS_SYSMENU
- создается окно имеющее системное меню. Для того, чтобы
данный флаг заработал, окно должно иметь установленным один из
флагов рамки - WS_THICKFRAME или WS_BORDER
-
- WS_MAXIMIZEBOX
- создается окно с кнопкой максимизации
-
- WS_MINIMIZEBOX
- создается окно с кнопкой минимизации
-
- WS_DISABLED
- создается окно, с первоначально запрещенным доступом к нему
-
- WS_MAXIMIZE
- создаваемое окно, сразу после создания максимизируется
-
- WS_MINIMIZE
- то же самое, только окно минимизируется
-
- WS_VISIBLE
- окно создается первоначально видимым. Это очень важный
флаг! Если вы не укажете его, то вам придется самостоятельно
делать окно видимым при помощи функции ShowWindow. Обычно
этот флаг устанавливается вместе с флагом WS_CHILD
Для расширенного стиля окна ExStyle значения следующие:
- WS_EX_ACCEPTFILES
- определяет окно, способное принимать перетаскиваемые на него
файлы из "Проводника" Windows
-
- WS_EX_CONTEXTHELP
- определяет окно, с кнопкой контекстного поиска в заголовке
окна (кнопка со знаком вопроса внутри). Как использовать эту
кнопку - это уже другой вопрос.
-
- WS_EX_TOPMOST
- создается окно, располагающееся всегда поверх остальных
окон, даже в неактивном состоянии.
-
- WS_EX_TOOLWINDOW
- создается окно с тонкой строкой заголовка, обычно
используется для панелей инструментов.
-
-
- WS_EX_CLIENTEDGE
- создается окно с "утопленной" клиентской областью
Общий стиль окна получается соединением флагов при помощи операции OR.
Если вы используете флаги стиля, то один из них должен быть WS_VISIBLE.
В следующей таблице я покажу какими должны быть флаги, для того чтобы
создавать окна аналогичные окнам, создаваемым в Delphi.
Delphi
|
KOL
|
bsSizeable |
Form.Style := WS_THICKFRAME or
WS_SYSMENU or WS_MAXIMIZEBOX or WS_MINIMIZEBOX
or WS_VISIBLE;
Эти параметры устанавливаются
автоматически
|
bsSingle |
Form.Style :=
WS_BORDER or WS_SYSMENU or WS_MAXIMIZEBOX or
WS_MINIMIZEBOX or WS_VISIBLE; |
bsNone |
Form.Style :=
WS_POPUP or WS_VISIBLE; |
bsDialog |
Form.Style :=
WS_BORDER or WS_SYSMENU or WS_VISIBLE;
|
bsSizeToolWin |
Form.ExStyle := WS_EX_TOOLWINDOW; |
bsToolWindow |
Form.Style :=
WS_BORDER or WS_SYSMENU or WS_VISIBLE;
Form.ExStyle := WS_EX_TOOLWINDOW; |
Но кроме этих типов окон, вы сможете создавать и любые другие, просто по
разному комбинируя с флагами стилей.
У окна в KOL есть несколько свойств, позволяющие упрощенное изменение вида
окна. Например:
- HasBorder - отвечает за то будет ли у окна бордюр и
заголовок
- HasCaption - будет ли у окна заголовок
- CanResize - можно ли изменять размер окна
- StayOnTop - будет ли окно всегда на верху
Также в KOL-окно уже "встроен" StatusBar. Чтобы у вас появилась надпись внизу
экрана вам достаточно обратится к свойству
StatusText[idx:integer]:PChar;
idx отвечает в какой "ячейке" у вас будет надпись. Например если у вас окно
Form, то строка
Form.StatusText[1]:='Пример';
Этой информации достаточно, чтобы создать окно на KOL.
|