2011-01-27 26 views
2

我做了一个自定义数字小键盘。它是一个框架和按钮。我把这个组件放到表单上。现在我不知道如何捕捉窗体上的主动控件,然后将特定于该按钮的数字发送到此控件。自定义数字小键盘和发送特定号码到活动文本框

有人可以帮我吗?

+0

我会在2个月的时间有同样的问题,所以我对结果感兴趣。完成后可以向我发送代码吗? – Jlouro 2011-01-27 13:38:29

+3

如果数字键盘的数字是按钮,那么主动控制器可能就是其中之一。 – 2011-01-27 14:04:40

回答

2

IMO最简单的方法就是在按钮的Tag属性中存储按钮标题的编号。然后,您可以使用相同的事件处理程序,所有的按钮:

procedure TForm1.NumButtonClick(Sender: TObject); 
var 
    NumTyped: Integer; 
begin 
    NumTyped := TButton(Sender).Tag; 
end; 

另一种方法是看事件的标题,但你必须做的从字符串到整数,转换这将如果你不小心打破分配一个按钮没有数字字幕给事件处理程序:

procedure TForm1.NumButtonClick(Sender: TObject); 
var 
    NumTyped: Integer; 
begin 
    NumTyped := StrToInt(TButton(Sender).Caption); 
end; 

注意,这样你不必在意你的组件是否是ACTIVECONTROL与否;您只需将事件处理程序分配给组件的每个按钮,而不是其他任何事件,然后如果事件被触发,则知道活动控件是您的组件,并且它的哪个按钮被点击。

编辑:根据下面的评论,这个问题比看起来更多一点。

如果您尝试将号码发送至TEdit(您的“文本框”),则必须执行其他一些操作。首先,不要使用TButton或TBitBtns,因为它们会使你的焦点远离你的编辑控件。改用TSpeedButton。设置你想要的每个人的标题,你想把它放在TEdit。

其次,既然你想把内容放在TEdit中,你不需要打扰标签。设置事件处理程序,所有的TSpeedButtons这一个(假定你TEDIT是EDIT1):

procedure TForm1.NumButtonClick(Sender: TObject); 
begin 
    Edit1.SelText := TSpeedButton(Sender).Caption; 
end; 

这将替换在TEDIT EDIT1与SpeedButton的的标题任何选定的文本,或在当前插入符号将其添加(编辑光标)在TEdit中的位置。

如果你希望把它放在一个数量TEdits中的任何一个,稍有变化就会处理该还有:

procedure TForm1.NumButtonClick(Sender: TObject); 
begin 
    if ActiveControl is TEdit then 
    TEdit(ActiveControl).SelText := TSpeedButton(Sender).Caption; 
end; 

如果这仍然不是你希望完成什么,请编辑您的原始问题并添加更多信息,以便我们有机会帮助您获得答案。

+0

我还没有尝试过,但你是说如果我在窗体中有文本框,并且我点击了数字小键盘按钮,那么特定于该按钮的数字会转到该文本框?这是我想要实现的。还有五个(我的意思是文本框)。 – evilone 2011-01-27 16:28:10

0

尝试使用ActiveControl表单的形式。或ActiveControl属性和OnActiveControlChange事件TScreen类。

1

你没有提到你正在使用Delphi版,但如果是德尔福2010或更高版本,您可能要使用的调色板中的TTouchKeyboard组件和布局属性设置为数字小键盘。

非常方便,因为它为您处理所有细节。

NumPad