Урок 4 - Hello World или Обработка событий в KOL
Ведущий раздела KOL и MCK: Анатолий aka XVeL
Автор: Борис Моренко
WEB-сайт: http://kol.mastak.ru
Полную версию библиотеки KOL и MCK можно скачать здесь.
Конечно кнопки и панели на форме - это хорошо, но они должны
реагировать на действия совершаемые пользователем. Этим мы и
займемся. Смысл "обработки" действий такой же как и в VCL. К
определенному действию над объектом, "привязывают" процедуры, которые и
совершают полезную работу. Привязка идет через свойства, названия которых
начинаются на OnXXXXXX: OnClick,OnResize,OnMouseDblClk,OnClose...
Это довольно привычно.
Через эти свойства вы и должны сделать указатель с помощью функции
MakeMethod на процедуру (или функцию если дело касается Message),
которая будет обрабатывать событие. В параметрах у процедур должны быть
определенные данные. В таблице показаны, какие должны быть заголовки
процедур при определенных типах событий (конечно здесь описаны не все
события)
Тип события |
Пример заголовка процедуры,
обрабатывающего это событие |
TOnEvent |
Procedure NameProc ( Dummy : Pointer; Sender :
PControl ); |
TOnEventAccept |
Procedure NameProc ( Sender: PObj; var Accept:
Boolean ); |
TOnMouse |
Procedure NameProc( Sender: PControl; var Mouse:
TMouseEventData ); |
TOnKey |
Procedure NameProc( Sender: PControl; var Key:
Longint; Shift: DWORD ); |
TOnChar |
Procedure NameProc( Sender: PControl; var Key: Char;
Shift: DWORD ); |
TOnMenuItem |
Procedure NameProc( Sender : PMenu; Item : Integer
); |
TOnMessage |
Function NameFunc( var Msg: TMsg; var Rslt: Integer
): Boolean; |
Например:
procedure ButtonDn( Sender: PControl; var Mouse: TMouseEventData );
begin
// обработка
end;
...
Button := NewButton(Form, 'Кнопка');
// указываем на процедуру ButtonDn обрабатывающую событие OnMouseDown
// имеющее тип TOnMouse:
Button.OnMouseDown := TOnMouse( MakeMethod( nil, @ButtonDn ) );
Исходя из полученных знаний, давайте
напишем программу, выводящую сообщение ( например: Hello World !!! ) при
каком нибудь действии.
procedure ClikButton( Dummy : Pointer; Sender: PControl );
begin
MsgOK( 'Hello World!!!' );
end;
var
form, button: PControl;
begin
form := NewForm( Applet, 'Пример' );
button := NewButton( form, 'Hello !!!' ).Size(150, 50);
button.OnClick := TOnEvent(MakeMethod( nil, @ClikButton ));
run(form);
end.
Процедура MsgOk - это аналог VCL процедуры ShowMessage.
|