"Hello World" или Обработка событий в KOL.

"Hello World" или Обработка событий в KOL.

 Конечно кнопки и панели на форме - это хорошо, но они должны реагировать на действия совершаемые пользователем. Этим мы и займемся.
Смысл "обработки" действий такой же как и в 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. <!-- SpyLOG f:0211 -->


Опубликовал admin
5 Май, Понедельник 2003г.



Программирование для чайников.