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.
Теги:
Обработка событий
Добавлено: 24 Июня 2018 06:57:17 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...