2011-01-27 11 views
2

私は番号が付いているカスタムの数字パッドを作った。それはフレームとその中のボタンです。私はフォームにこのコンポーネントを配置します。今私は、フォーム上のアクティブなコントロールをキャプチャし、ボタンに固有の番号をこのコントロールに送信する方法を知らない。カスタム番号とアクティブなテキストボックスに特定の番号を送信

誰かが私を助けてくれますか?

+0

私は結果に興味がありますので、私は2ヶ月の時間に同じ問題を抱えているだろう。完了したら、私にコードを送ることができますか? – Jlouro

+3

数字の数字がボタンの場合、アクティブコントロールはおそらくその1つです。 –

答えて

2

最も簡単な方法は、ボタンのキャプションである番号をボタンの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であるかどうかを気にする必要はありません。コンポーネントのボタンのすべてにイベントハンドラを割り当て、それ以外は何もしないで、イベントがトリガされた場合は、アクティブなコントロールがコンポーネントであり、ボタンのどれがクリックされたのかが分かります。

EDIT:以下のコメントに基づいて、表示されるより少し質問があります。

数字をTEdit(あなたの「テキストボックス」)に送信しようとするなら、あなたはいくつかのことをする必要があります。まず、TButtonsまたはTBitBtnsを使用しないでください。フォーカスが取得され、Editコントロールからフォーカスが離れます。代わりにTSpeedButtonを使用してください。それぞれのキャプションを、TEditに入れたい番号に設定します。

第2に、コンテンツをTEditに入れたいので、タグを気にする必要はありません。 (あなたのTEDITはEDIT1であると仮定している)、このいずれかにすべてのTSpeedButtonsのイベントハンドラを設定します。

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

これはSpeedButtonのキャプションとTEDIT EDIT1のいずれかの選択したテキストを置き換える、または現在のキャレットでそれを追加します(カーソルの編集)位置をTEdit内に表示します。

あなたがTEditsの数のいずれかにそれを置くために探している場合は、わずかな変化も同様のことを処理します:

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

を、これはあなたが達成するために探しているものはまだない場合には、あなたの元の質問を編集し、それに情報を追加してください。あなたの答えを得る手助けをする機会があります。

+0

私はこれをまだ試していませんでしたが、フォームにテキストボックスがあり、数字ボタンをクリックすると、ボタン固有の番号がそのテキストボックスに表示されると言っていますか?これは私が達成したいものです。また、それらの5つがあります(私が意味するテキストボックス)。 – evilone

+0

@evil - どのテキストボックスが*そのテキストボックス*であるかをどのように知っていますか?ユーザーはボックスを選択してから番号を押すと予想されますか? –

+0

@evilone:いいえ、それは私が言っていることではありません(それはあなたが尋ねた質問ではありません)。私の編集を参照してください。 –

0

使用するアクティブコントロールフォームのpropety。またはActiveControlプロパティとOnActiveControlChangeイベントのTScreenクラスです。

1

あなたが使用しているDelphiのバージョンに言及していないが、それは、Delphi 2010またはそれ以上である場合は、パレット上で利用可能TTouchKeyboardコンポーネントを使用し、テンキーにレイアウトプロパティを設定することもできます。

すべての詳細を処理するので、非常に便利です。

NumPad

+0

私はskinningライブラリを使用していますが、このコンポーネントはskinnableではありません。 – evilone

+0

@evilone:あなたの質問で省略した貴重な情報。とにかく、残りの人にとって、私の答えは正確です。 – jachguate

+0

私は同意していない、私はカスタムCUSTOM numpadに関する質問を書いた。以前はこれを使用していましたが、これはスキン可能ではないため変更する必要がありました。しかし、返信いただきありがとうございます。 – evilone

関連する問題