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