2011-01-27 25 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