speendbutton的caption就是字母,点一下,通过caption向edit1里加一个字母,请问这段程序,错在哪里呀unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, StdCtrls;type
  TForm1 = class(TForm)
    edt1: TEdit;
    btn1q: TSpeedButton;
    btn1w: TSpeedButton;
    btn1e: TSpeedButton;
    procedure btnClick(Sender: TObject);
    procedure enterClick(Sender: TObject);
    procedure delClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation
uses StrUtils;
{$R *.dfm}
procedure TForm1.btnClick(Sender: TObject);
begin
  PostMessage(ActiveControl.Handle,WM_CHAR,ord((sender as tspeedbutton).Caption[1]),0);
  edt1.text:=edt1.Text+(sender as tspeedbutton).Caption;
  edt1.SelStart:=Length(edt1.Text);
end;procedure TForm1.enterClick(Sender: TObject);
begin
  postmessage(ActiveControl.Handle,wm_keydown,vk_return,0);
end;procedure TForm1.delClick(Sender: TObject);
begin
  postmessage(ActiveControl.handle,wm_keydown,VK_BACK,0);
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
self.edt1.Focused;
end;end.

解决方案 »

  1.   

    你在btnClick中加了PostMessage没看到点击一次添加了两个字母?
    不用PostMessage,和普通的程序一样写
      

  2.   

    delClick中如果你要删除最后一个字母就这样:
    edt1.Text := LeftStr(edt1.Text,Length(edt1.Text) -1);
    如果要全删除就这样:
    edt1.Text := ''
      

  3.   

    你把Speedbutton的OnClick事件设置成btnClick了吗?
      

  4.   

    直接对edt1.Text 的字符串编辑不行啊
      

  5.   

    to fjwyq():为什么直接对edt1.Text的字符串编辑不行?没问题呀
      

  6.   

    //edt1.text:=edt1.Text+(sender as tspeedbutton).Caption;
      //edt1.SelStart:=Length(edt1.Text);
    我把這個注釋掉了,可以了
      

  7.   

    基本上解決了,還有一個小問題:
    procedure TForm1.spaceClick(Sender: TObject);
    begin
      postmessage(ActiveControl.handle,wm_keydown,VK_BACK,0);
      edt1.Text := '';
    end;procedure TForm1.delClick(Sender: TObject);
    begin
      postmessage(ActiveControl.handle,wm_keydown,VK_BACK,0);
      edt1.Text := LeftStr(edt1.Text,Length(edt1.Text) -1);
    end;退格和清空,這兩個按鈕點了後,焦點失去了,怎么動態的判断是在哪個控件上失去的,再返回回去,一解決就結了算了
      

  8.   

    没弄明白你要用PostMessage干什么
      

  9.   

    我也不曉得啊,我看別人都用了postmessage的
      

  10.   

    其實我也曉得沒什麼用,可以直接操作text,但是別人做觸摸屏的,把這個搞搞的這么复雜,肯定有原因的吧
      

  11.   

    你退格和清空既然都是对edt1操作的,那操作完成后再让edt1获得焦点不就行了
      

  12.   

    不對,我知道原因了,你不一定操作的是一個edit的值啊,如果有十多個edit呢?如果直接發送消息控制最方便 所以按鈕里最好不要寫edit相關的東西,這樣
    procedure TForm1.delClick(Sender: TObject);
    begin
      postmessage(ActiveControl.handle,wm_keydown,VK_BACK,0);
    end;我這個程序應該怎么樣寫?
      

  13.   

    你要用speedbutton按钮的话,因为speedbutton不会获得焦点,edit控件不会失去焦点的
      

  14.   

    linzi(林子):
              謝謝你一直的回答,問題已經解決了,謝謝你了,分全給你