Урок 1 - Базовые знания о KOL - Наше первое окно
Ведущий раздела KOL и MCK: Анатолий aka XVeL
Автор: Борис Моренко
WEB-сайт: http://kol.mastak.ru
Полную версию библиотеки KOL и MCK можно скачать здесь.
Базовые знания о KOL
Базовый объект TObj - аналог класса TObject из VCL.
TObj мало похож на своего старшего брата, разве что методом удаления Free.
Я никогда не применял TObj для дела, поэтому плавно перейду ко второму
(самому главному для работы) объекту TControl. TControl может
выполнять роль любого визуального обьекта и фактически выполняет
обязанности для которых в Delphi отведены десяток классов. Для создания
определенного контрола вам надо воспользоваться соответствующим
"конструктором" . Под конструктором подразумевается функция, в параметрах
у которой указывается родительский объект ( на нем будет находится ваш
контрол, если дело касается визуальных объектов). В KOL есть и другие
объекты, но про них я расскажу в соответствующих уроках так как они более
узкоспециализированны.
Подробнее о теории в статье KOL - кодоэкономичная
объектная библиотека для Delphi.
Наше первое окно
Фактически, это не только ваше первое окно написанное с помощью
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.
|