Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.017 c
2-1147364078
appendix
2006-05-11 20:14
2006.05.28
иероглифы


4-1141194528
antonn
2006-03-01 09:28
2006.05.28
Блокировать сворачивание окна


2-1147184917
Mr tray
2006-05-09 18:28
2006.05.28
как узнать хендл активного окна активного приложения


4-1141976764
V-A-V
2006-03-10 10:46
2006.05.28
Работа с реестром без админских прав


4-1141399908
Handle
2006-03-03 18:31
2006.05.28
Как завершить системныЙ процесс?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский