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