××××触摸屏摸拟键盘输入,看看错在哪里××××

dugucan 2007-05-28 03:00:21
speendbutton的caption就是字母,点一下,通过caption向edit1里加一个字母,请问这段程序,错在哪里呀

unit Unit1;

interface

uses
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.
...全文
620 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
dugucan 2007-05-28
  • 打赏
  • 举报
回复
linzi(林子):
謝謝你一直的回答,問題已經解決了,謝謝你了,分全給你
linzi 2007-05-28
  • 打赏
  • 举报
回复
你要用speedbutton按钮的话,因为speedbutton不会获得焦点,edit控件不会失去焦点的
dugucan 2007-05-28
  • 打赏
  • 举报
回复
不對,我知道原因了,你不一定操作的是一個edit的值啊,如果有十多個edit呢?如果直接發送消息控制最方便

所以按鈕里最好不要寫edit相關的東西,這樣
procedure TForm1.delClick(Sender: TObject);
begin
postmessage(ActiveControl.handle,wm_keydown,VK_BACK,0);
end;

我這個程序應該怎么樣寫?
linzi 2007-05-28
  • 打赏
  • 举报
回复
触摸屏的程序一点也不特殊,和普通的一样,没那么神秘,只不过把控件搞大点让人能点上就行了
linzi 2007-05-28
  • 打赏
  • 举报
回复
你退格和清空既然都是对edt1操作的,那操作完成后再让edt1获得焦点不就行了
dugucan 2007-05-28
  • 打赏
  • 举报
回复
其實我也曉得沒什麼用,可以直接操作text,但是別人做觸摸屏的,把這個搞搞的這么复雜,肯定有原因的吧
dugucan 2007-05-28
  • 打赏
  • 举报
回复
我也不曉得啊,我看別人都用了postmessage的
linzi 2007-05-28
  • 打赏
  • 举报
回复
没弄明白你要用PostMessage干什么
dugucan 2007-05-28
  • 打赏
  • 举报
回复
基本上解決了,還有一個小問題:
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;

退格和清空,這兩個按鈕點了後,焦點失去了,怎么動態的判断是在哪個控件上失去的,再返回回去,一解決就結了算了
linzi 2007-05-28
  • 打赏
  • 举报
回复
触摸屏的也没问题的,一样,我原来也做过触摸屏的,根本什么特殊的操作都不用,和写普通程序一样
dugucan 2007-05-28
  • 打赏
  • 举报
回复
//edt1.text:=edt1.Text+(sender as tspeedbutton).Caption;
//edt1.SelStart:=Length(edt1.Text);
我把這個注釋掉了,可以了
dugucan 2007-05-28
  • 打赏
  • 举报
回复
觸摸屏的,有問題嗎,可以這樣嗎
linzi 2007-05-28
  • 打赏
  • 举报
回复
to fjwyq():为什么直接对edt1.Text的字符串编辑不行?没问题呀
dugucan 2007-05-28
  • 打赏
  • 举报
回复
我都糊涂了,我仔細看看,你們也講清楚點啊,或者直接把代碼貼上來
fjwyq 2007-05-28
  • 打赏
  • 举报
回复
直接对edt1.Text 的字符串编辑不行啊
linzi 2007-05-28
  • 打赏
  • 举报
回复
你把Speedbutton的OnClick事件设置成btnClick了吗?
linzi 2007-05-28
  • 打赏
  • 举报
回复
delClick中如果你要删除最后一个字母就这样:
edt1.Text := LeftStr(edt1.Text,Length(edt1.Text) -1);
如果要全删除就这样:
edt1.Text := ''
dugucan 2007-05-28
  • 打赏
  • 举报
回复
你寫一個W的給我,就一個按鈕,我看看,可以不
dugucan 2007-05-28
  • 打赏
  • 举报
回复
我的上面,一個字母都沒有添加啊,我點了後,框里沒有反應
linzi 2007-05-28
  • 打赏
  • 举报
回复
你在btnClick中加了PostMessage没看到点击一次添加了两个字母?
不用PostMessage,和普通的程序一样写
加载更多回复(2)

5,939

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧