DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: liy187
今日帖子: 13
在线用户: 15
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 abcjingtong (jingtong) ★☆☆☆☆ -
普通会员
2017/7/25 0:53:24
标题:
回调函数编译出错求助 浏览:1082
加入我的收藏
楼主: 由于程序的特殊需要,使用api创建窗体,使用了消息实现其他进程和此窗体通讯,发现如下问题

var
  CM_REQUESTDATA: Cardinal;  // 消息值

CM_REQUESTDATA := RegisterWindowMessage(STR_UNIQUE);  // 注册一个全局消息

function SpiritWndProc(hMainWnd: HWND; uMsg: UInt; wParam: WParam; lParam: LParam): LResult; stdcall;
begin
    CM_REQUESTDATA:  // 此行编译不过
      DoRequestData;
    Result := DefWindowProc(hMainWnd, uMsg, wParam, lParam);
end;

编译不过提示
[DCC Error] frm_Spirit.pas(448): E2026 Constant expression expected

请问,哪位朋友知道怎么解决这个问题,让其可编译通过?
----------------------------------------------
18114532@qq.com
作者:
男 abcjingtong (jingtong) ★☆☆☆☆ -
普通会员
2017/7/25 0:56:38
1楼: 现在只能使用了CopyData的消息实现了功能,但是还是想请教这个问题出现的原因,以便更深入的理解delphi的消息机制,谢谢。
----------------------------------------------
18114532@qq.com
作者:
男 msfm (清洁工) ★☆☆☆☆ -
盒子活跃会员
2017/7/25 7:53:19
2楼: 给他一个固定值
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2017/7/25 8:41:17
3楼: 楼主的代码,我们无法理解,编译器更加无法理解。
楼主是啥语法啊?
----------------------------------------------
(C)(P)Flying Wang
作者:
男 abcjingtong (jingtong) ★☆☆☆☆ -
普通会员
2017/7/25 9:06:09
4楼: 感谢大家的关注,昨太晚可能逻辑没梳理好
我做了一个程序有一个主窗体,这个程序不是用的vcl方式实现,而是使用纯api创建了类和实例,
注册窗体类时赋值了回调函数vWndClass.lpfnWndProc := @SpiritWndProc;
回调函数如下
function SpiritWndProc(hMainWnd: HWND; uMsg: UInt; wParam: WParam; lParam: LParam): LResult; stdcall;
begin
  case uMsg of    // 擦除背景消息
    WM_CREATE:
      begin
        ......
      end;

    WM_SHOWWINDOW:
      begin
        ......
      end;

    CM_REQUESTDATA:  // 引处编译不通过
      begin
        ......
      end;
  else
    Result := DefWindowProc(hMainWnd, uMsg, wParam, lParam);
  end;
end;

其中CM_REQUESTDATA是一个变量,不是常量,但我发现,如果用vcl的机制重载WndProc的过程中,对消息类型的判断是可以使用变量,想知道我怎么处理可以在窗体的回调中使用变量判断消息类型,谢谢。
----------------------------------------------
18114532@qq.com
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2017/7/25 9:17:15
5楼: 这还不简单CM_REQUESTDATA 不要放 case 里头

else
  begin
    if uMsg = CM_REQUESTDATA then
    begin
    end
    else
      Result := DefWindowProc(hMainWnd, uMsg, wParam, lParam);
  end;

好了,这代码 价格 500万人民币,免费送你了。

以后要好好学习基础,连类型和基础语法,都不懂,搞个屁的开发。
以后,你再有这样的问题,就不送了,先给 500万再说。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 abcjingtong (jingtong) ★☆☆☆☆ -
普通会员
2017/7/25 9:22:01
6楼: 不好意思,刚才也反应过来了,谢谢您的批评。
----------------------------------------------
18114532@qq.com
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行62.5毫秒 RSS