Форум: "KOL";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];
ВнизTOnMessage в новом KOL Найти похожие ветки
← →
Stargazer (2005-09-12 21:39) [0]Всем привет!
Я так понимаю, в новом KOL сменился тип TOnMessage?
Раньше было всё нормально, а теперь компилятор выдаёт ошибку:
Error: Incompatible types: got "TMyObj.Form_OnMsg(var MSG,var LongInt):Boolean" expected "<procedure variable type of function(var tagMSG,var LongInt):Boolean of object;Register>"
Я чего-то не понимаю.
С уважением.
← →
Stargazer (2005-09-12 22:30) [1]Сам себе отвечаю.
Раньше делал так: Applet.OnMessage = O.Form_OnMsg;
А теперь только через MakeMethod.
Компилятор вроде пропустил - посмотрим, что из этого выйдет в рантайме.
← →
Stargazer (2005-09-17 12:28) [2]А вышло плохо - падает при попытке вызвать Form.Show.
← →
Stargazer (2005-09-17 22:27) [3]Вот простейший код, который падает.
program myform;
{$APPTYPE GUI}
uses
Windows, Messages, Kol;
var
Form :pControl;
function DoMessage(var Msg:TMsg;var Rslt:integer):Boolean;
begin
Result:=false;
if Msg.message = WM_KEYDOWN then begin
end;
end;
begin
Form:= NewForm(Applet,"Demo").SetSize(420,350);
Applet:=Form;
Form.OnMessage := TOnMessage(MakeMethod(nil,@DoMessage));
Run(Applet);
end.
← →
Thaddy (2005-09-18 10:02) [4]
Function DoMessage(Dummy:pointer;var Msg:TMsg;var Rslt:integer):Boolean;
begin
Result:=.false;
If Msg.message = WM_.KEYDOWN then begin
end;
end;
Because MakeMethod needs a function layout compatible with an object method, you need to include the (hidden) self parameter. So, include a dummy pointer as the first parameter if you use makemethod! This is documented in kol.pas
← →
Stargazer (2005-09-18 11:13) [5]Бесполезно.
Может, я чего-то не так делаю?
Вот новый код, который всё равно падает.
program myform;
{$APPTYPE GUI}
uses Windows, Messages, Kol;
var Form : pControl;
dummy : PControl;
function DoMessage(var Msg:TMsg;var Rslt:integer):Boolean;
begin
Result:=false;
if Msg.message = WM_KEYDOWN then begin
end;
end;
begin
Form:= NewForm(Applet,"Demo").SetSize(420,350);
Applet:=Form;
Form.OnMessage := TOnMessage(MakeMethod(dummy,@DoMessage));
Run(Applet);
end.
← →
Thaddy (2005-09-18 14:53) [6]Again,
Read my response properly: The DoMessage needs an EXTRA parameter, which is the normally hidden self pointer of a class or object method:
Function DoMessage(Dummy:pointer;var Msg:TMsg;var Rslt:integer):Boolean;
^^^^^^^^^^
begin
Result:=.false;
If Msg.message = WM_.KEYDOWN then begin
end;
end;
← →
Stargazer (2005-09-18 17:23) [7]Да, что-то я протупил.
Неверно понял текст в KOL.PAS: "..it must have first dummy parameter to replace @Self", решил, что это относится к другому.
Большое спасибо Вам, Thaddy, за консультацию! Всё прекрасно заработало.
Приезжайте к нам в Ярославль, угощу Вас пивом :)))
← →
Thaddy (2005-09-18 23:16) [8];) see ICQ answer also ;)
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c