DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: snarv
今日帖子: 14
在线用户: 15
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 acism (caism) ★☆☆☆☆ -
普通会员
2004/2/25 10:24:59
标题:
再帮我看看吧,我实在做不出来了。(关于Edit的WM_KEYUP消息) 浏览:1599
加入我的收藏
楼主: 我用api写的一个程序(全api不用form控件)无法捕获到主窗口下的一个Edit子窗口的WM_KEYUP消息。昨天好多热心的大哥们与我讨论很多,可还是不能解决问题,有没有哪位大侠知道呀,请一定帮帮忙。
我的做法是:在主窗口中做如下消息回调处理:
Function WinProc(Hwnd,Msg,Wparam,lParam:longint):longint;stdcall;
begin
  Result:=DefWindowProc(Hwnd,Msg,wparam,lparam);  
  Case Msg of
    //WM_DESTROY:Close;
    WM_CLOSE:
    begin
      UnRegisterClass(wClass.lpszClassName,hInst);
    end;
    WM_COMMAND:
      if lparam=hMoreBtn then ExpandWindow;
    WM_KEYUP:messagebox(0,'dd','dd',mb_ok);
    
  End;
end;
可是没有响应。
----------------------------------------------
-
作者:
男 bios (阿贡) ★☆☆☆☆ -
盒子中级会员
2004/2/25 11:26:13
1楼: 这样怎么看的出来,把你完整的代码传上来,如果不方面公开就自己解决吧!
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 acism (caism) ★☆☆☆☆ -
普通会员
2004/2/25 11:39:55
2楼: 对不起,没有这不方便公开的意思,只是没想到,现贴出如下,请帮忙看一下下,先谢了。
==============================
library PassDll;
uses
  Windows,messages;
Const
  Caption='密码窗口';
var
  theParentWnd,hInst,Handle:integer;
  hFont,hLabel1,hLabel2,hLabel3,hLabel4,hPassEdit,hMoreBtn,hOKBtn,hCancelBtn:integer;
  hModPassEdit,hModPass1Edit,hModPass2Edit,hModPassBtn:integer;
  EditClass,wClass:WndClass;
  Expand:Boolean;
//末展开之控件的状态设置
procedure DisableModPass;
begin
  EnableWindow(hModPassEdit,Expand);
  EnableWindow(hModPass1Edit,Expand);
  EnableWindow(hModPass2Edit,Expand);
  EnableWindow(hModPassBtn,Expand);
end;
//窗口缩展过程
procedure ExpandWindow;
var
  lR:TRECT;
begin
  GetWindowRect(Handle,lR);
  if Expand then
  begin
    MoveWindow(Handle,lr.Left,lr.Top,300,255,True);
    SetWindowText(hMoreBtn,'<<收缩窗口');
    DisableModPass;
  end else begin
    MoveWindow(Handle,lr.Left,lr.Top,300,110,True);
    SetWindowText(hMoreBtn,'修改密码>>>');
    DisableModPass;
  end;
  Expand:=Not Expand;
end;

Function WinProc(Hwnd,Msg,Wparam,lParam:longint):longint;stdcall;
begin
  Result:=DefWindowProc(Hwnd,Msg,wparam,lparam);  
  Case Msg of
    //WM_DESTROY:Close;
    WM_CLOSE:
    begin
      UnRegisterClass(wClass.lpszClassName,hInst);
    end;
    WM_COMMAND:
      if lparam=hMoreBtn then ExpandWindow;
  End;
end;
Function EditProc(Hwnd,theMsg,Wparam,lParam:longint):longint;stdcall;
begin
  Result:=DefWindowProc(Hwnd,theMsg,Wparam,lParam);
  Case theMsg of
    WM_KEYUP:MessageBox(0,'aa','dd',mb_ok);
    //WM_COMMAND:MessageBox(0,'aa','dd',mb_ok);
  end;
  ///MessageBox(0,'aa','dd',mb_ok);
end;
Function CreateMain(Name:PChar;x,y:integer):HWND;
var
  Wwid,WHig:longint;
begin
  hInst:=GetModuleHandle(nil);
  wClass.style:=CS_PARENTDC;
  wClass.lpfnWndProc:=@WinProc;
  wClass.hInstance:=hInst;
  wClass.hCursor:=LoadCursor(hInst,IDC_ARROW);
  wClass.hbrBackground:=COLOR_BTNFACE+1;
  wClass.lpszClassName:='PassWordDlg-class';
  if RegisterClass(wClass)=0 then Exit;
  //RegEditClass;
  Wwid:=GetSystemMetrics(SM_CXSCREEN);
  WHig:=GetSystemMetrics(SM_CYSCREEN);
  Result:=CreateWindow(wClass.lpszClassName,Name,WS_TABSTOP OR WS_VISIBLE OR WS_SYSMENU,
    (Wwid-x)div 2,(WHig-y) div 2,x,y,theParentWnd,0,hInst,nil);

end;
Function CreateButton(Name:PChar;x1,y1,x2,y2:integer):Hwnd;
begin
  Result:=CreateWindow('Button',Name,WS_CHILD OR WS_VISIBLE OR BS_PUSHLIKE OR BS_TEXT,
    x1,y1,x2,y2,Handle,0,hInst,nil);
end;
Function CreateLabel(Name:PChar;x1,y1,x2,y2:integer):HWnd;
begin
  Result:=CreateWindow('Static',Name,WS_CHILD OR WS_VISIBLE OR SS_LEFT,
    x1,y1,x2,y2,Handle,0,hInst,nil);
end;
Function CreatePassEdit(Name:PChar;x1,y1,x2,y2:integer):HWnd;
begin
  Result:=CreateWindowEx(WS_EX_CLIENTEDGE,'Edit',Name,WS_CHILD OR WS_TABSTOP OR WS_VISIBLE OR ES_LEFT
     OR ES_AUTOHSCROLL OR ES_PASSWORD,x1,y1,x2,y2,Handle,0,hInst,nil);
end;

procedure ShowPassDlg;stdcall;
begin
  //创建主窗口
  Handle:=CreateMain(Caption,300,110);
  //创建其他控件
  hLabel1:=CreateLabel('请输入密码',10,15,80,24);
  hPassEdit:=CreatePassEdit(',100,10,180,24);
  hOKBtn:=CreateButton('确定',45,10+40,50,24);
  hCancelBtn:=CreateButton('取消',45+55,10+40,50,24);
  hMoreBtn:=CreateButton('修改密码>>>',45+55*2,10+40,100,24);
  //SetClassLong(hPassEdit,GCL_WNDPROC,longint(@EditProc));
  //创建字体对象
  hFont:=CreateFont(14,0,0,0,0,0,0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH or FF_DONTCARE,'MS Sans Serif');
  //改变字体
  SendMessage(hLabel1,WM_SETFONT,hFont,0);
  SendMessage(hPassEdit,WM_SETFONT,hFont,0);
  SendMessage(hOKBtn,WM_SETFONT,hFont,0);
  SendMessage(hCancelBtn,WM_SETFONT,hFont,0);
  SendMessage(hCancelBtn,WM_SETFONT,hFont,0);
  SendMessage(hMoreBtn,WM_SETFONT,hFont,0);
  //初始化展开布尔值
  Expand:=True;
  //创建窗口展开后的控件并设初始状态为Disable
  hLabel2:=CreateLabel('请输入旧密码',10,100,90,24);
  hModPassEdit:=CreatePassEdit(',105,95,175,24);
  hLabel3:=CreateLabel('请输入新密码',10,100+35*1,90,24);
  hModPass1Edit:=CreatePassEdit(',105,95+35*1,175,24);
  hLabel4:=CreateLabel('请确认新密码',10,100+35*2,90,24);
  hModPass2Edit:=CreatePassEdit(',105,95+35*2,175,24);
  hModPassBtn:=CreateButton('确定修改',100,95+35*3,100,24);
  DisableModPass;
  //改变字体
  SendMessage(hLabel2,WM_SETFONT,hFont,0);
  SendMessage(hLabel3,WM_SETFONT,hFont,0);
  SendMessage(hLabel4,WM_SETFONT,hFont,0);
  SendMessage(hModPassEdit,WM_SETFONT,hFont,0);
  SendMessage(hModPass1Edit,WM_SETFONT,hFont,0);
  SendMessage(hModPass2Edit,WM_SETFONT,hFont,0);
  SendMessage(HModPassBtn,WM_SETFONT,hFont,0);
END;
//以下过程设置父窗口句柄
procedure SetParentWnd(ParentWnd:HWnd);stdcall;
begin
  theParentWnd:=ParentWnd;
end;
Exports
  ShowPassDlg,SetParentWnd;
begin
end.
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行62.5毫秒 RSS