我想用sendmessage模拟键盘,
可是发现发送英文字符是可以,可是汉字就是无法显示。
看了网上能找到的解决方案,试过了,都是一样的结果,不行!!!!
下面是一个完整的测试程序示例
//模拟发送
procedure TForm1.Button1Click(Sender: TObject);
begin
  sendmessage(edit1.Handle,WM_CHAR,49,0);
  sendmessage(edit1.Handle,WM_CHAR,50,0);
  sendmessage(edit1.Handle,WM_CHAR,209,0);
  sendmessage(edit1.Handle,WM_CHAR,203,0);
end;//接收监控测试
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  str := str + key;
end;//显示测试
procedure TForm1.Button2Click(Sender: TObject);
begin
  edit1.Text := str;
end;按了按钮button1之后,模拟发送数字1、2,和汉字"阉"
发送之后,edit1中只显示有数字1、2,没有汉字阉
可是我点击按钮button2,之后,eidt1中却可以正常的显示出数字1、2和汉字阉。
那就是说我的字符都是正常发送过去,而且被正常接收了的。
请问哪位大侠,能帮助小弟解决这个汉字为什么不能显示的问题

解决方案 »

  1.   

    用上面的例子确实是可以的,但是我如果要实现这样的输入
    在memo1中能正常显示汉字,应该怎么做?
    //模拟发送
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      postmessage(form1.Handle,WM_CHAR,49,0);
      postmessage(form1.Handle,WM_CHAR,50,0);
      postmessage(form1.Handle,WM_CHAR,209,0);
      postmessage(form1.Handle,WM_CHAR,203,0);
    end;procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
    begin
      memo1.Text := memo1.Text + key;
    end;
      

  2.   

    memo的text不能当作正常的string去操作procedure TForm1.Button1Click(Sender: TObject); 
    begin 
    str:=';postmessage(edit1.Handle,WM_CHAR,49,0); 
    postmessage(edit1.Handle,WM_CHAR,50,0); 
    postmessage(edit1.Handle,WM_CHAR,209,0); 
    postmessage(edit1.Handle,WM_CHAR,203,0); application.ProcessMessages;
    memo1.Text:=str;
    end; //接收监控测试 
    procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); 
    begin 
      str := str + key; 
    end; 
      

  3.   

    判断一下是不是汉字,如果是汉字特殊处理一下。
      sTemp:string;
      bHZ:boolean;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
        SetLength(sTemp,2);
        bHZ:=false;
        postmessage(form1.Handle,WM_CHAR,49,0);
        postmessage(form1.Handle,WM_CHAR,50,0);
        postmessage(form1.Handle,WM_CHAR,209,0);
        postmessage(form1.Handle,WM_CHAR,203,0);
    end;procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
    begin
        if byte(Key)>160 then
        begin
            if bHZ then
            begin
                sTemp[2]:=Key;
                bHZ:=false;
                Memo1.Text:=Memo1.Text+sTemp;
            end else
                sTemp[1]:=Key;
            bHZ:=true;
        end else
            memo1.Text := memo1.Text + key;
    end;
      

  4.   


    var
      Form1: TForm1;
      str:string;
    implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      str:='';
      sendmessage(Memo1.Handle,WM_CHAR,49,0);
      sendmessage(Memo1.Handle,WM_CHAR,50,0);
      sendmessage(Memo1.Handle,WM_CHAR,209,0);
      sendmessage(Memo1.Handle,WM_CHAR,203,0);
      //Edit1.Text :=str;
      Memo1.Text :=str;
    end;procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
    begin
    str := str + key;
    end;