特殊字符不能用模拟键盘吗?
像这些

φ

解决方案 »

  1.   

    可以,第1个不知道你从哪找来的字符,第二个确定是中文来的。
    用下面的函数可以发送
    //hFocus--接收窗口句柄
    //Text--要发的内容
    procedure SendDBCSString(hFocus: HWND; const Text: string);
    var
      i: integer;
      ch: byte;
    begin
      if hFocus = 0 then hFocus := GetFocus;
      if hFocus = 0 then Exit;
      i := 1;
      while i <= Length(Text) do begin
        ch := byte(Text[i]);
        if Windows.IsDBCSLeadByte(ch) then begin
          //SendMessage(hFocus, WM_IME_CHAR, MakeWord(byte(Text[i]), ch), 0);
          Inc(i);
          SendMessage(hFocus, WM_IME_CHAR, MakeWord(byte(Text[i]), ch), 0);
        end
        else SendMessage(hFocus, WM_IME_CHAR, word(ch), 0);
        Inc(i);
      end;
    end;
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      ch:pchar;
    begin
      ch:='φ';
      edit1.Clear;
      edit1.Focused;
      SendMessage(edit1.Handle, WM_settext, 0, integer(ch));end;我实验过了,没问题
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject); 
    var 
      ch:pchar; 
    begin 
      ch:='φA'; 
      edit1.Clear; 
      edit1.Focused; 
      SendMessage(edit1.Handle, WM_settext, 0, integer(ch)); end; 这样也没问题
    接分...
      

  4.   

    直接SETTEXT方便多了... 你写啥只要INTEGER()再发过去就可以了...
      

  5.   

    EN
    这个方法好!嘿嘿!
    怎么能向WORD,TXT里同时发送消息呢!不知道怎么获取句柄
      

  6.   

    还有个问题,楼上的哦
    就是当输入特殊字符时,总是把以前的都删除了,最后只剩下最后输入的字符!而输入adfg654这些就没事,它会一个个往后走,不会把以前的都删除了
      

  7.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      ch:pchar;
    begin
      ch:='φa';
      //edit1.Focused;
      SendMessage(edit1.Handle, WM_settext, 0, integer(edit1.Text+ch));//这个就是在原有的字符基础上加你的字符end;
      

  8.   

    procedure TForm1.Button1Click(Sender: TObject); 
    var 
      ch:pchar; 
    begin 
      ch:='φa'; 
      //edit1.Focused; 
      SendMessage(edit1.Handle, WM_settext, 0, integer(edit1.Text+ch));//这个就是在原有的字符基础上加你的字符 end;
      

  9.   

    我是想写到WORD里,所有可以输入东西的地方