2011-01-27 5 views
2

숫자가있는 사용자 지정 숫자판을 만들었습니다. 프레임과 단추입니다. 이 구성 요소를 폼에 놓습니다. 이제 폼에서 활성 컨트롤을 캡처 한 다음이 컨트롤에 해당하는 특정 번호를 단추에 보내는 방법을 알지 못합니다.사용자 지정 숫자 패드 및 활성 텍스트 상자에 특정 숫자 보내기

누군가 나를 도와 줄 수 있습니까?

+0

그래서 내가 그 결과에 관심이 2개월 시간에 같은 문제가 있습니다. 완료되면 코드를 보낼 수 있습니까? – Jlouro

+3

숫자 패드 숫자가 단추이면 활성 컨트롤 중 하나 일 가능성이 큽니다. –

답변

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 여부에 대해 걱정하지 않아도 참고; 이벤트 처리기를 구성 요소의 단추 하나 하나에 할당하면됩니다. 이벤트가 트리거되면 활성 컨트롤이 사용자의 구성 요소이고 단추 중 어느 단추를 클릭했는지 알 수 있습니다.

편집 : 아래의 설명에 따르면, 나타나는 것보다 조금 더 질문이 있습니다.

숫자를 TEdit ("텍스트 상자")로 보내려는 경우 몇 가지 작업을 수행해야합니다. 먼저 TButtons 또는 TBitBtns를 사용하지 마십시오. 포커스를 받으면 편집 컨트롤에서 멀리 떨어져 있습니다. 대신 TSpeedButton을 사용하십시오. 원하는 각 캡션을 TEdit에 넣을 번호로 설정하십시오.

둘째, TEdit에 내용을 넣으 려하므로 태그를 신경 쓰지 않아도됩니다.

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

이는 SpeedButton의 캡션과은 TEdit EDIT1에서 선택한 텍스트를 대체, 또는 현재의 caret에 추가합니다 :이 하나에 모든 TSpeedButtons에 대한 이벤트 핸들러를 설정 (당신은 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

ActiveControl 양식의 편리 성을 고려하십시오. 또는 ActiveControl 속성 및 OnActiveControlChange 이벤트는 입니다. TScreen 클래스입니다.

1

당신은 당신이 사용하고있는 델파이의 버전을 언급하지 않지만, 그것은 델파이 2010 또는 큰 경우, 당신은 팔레트에서 사용할 수있는 TTouchKeyboard 구성 요소를 사용하고 숫자 패드에 레이아웃 속성을 설정할 수 있습니다.

모든 세부 정보를 처리하기 때문에 매우 편리합니다.

NumPad

+0

skinning library를 사용하고 있으며이 구성 요소는 skinnable이 아닙니다. – evilone

+0

@evilone : 질문에서 누락 한 귀중한 정보. 어쨌든 나머지 사람들에게는 내 대답이 정확합니다. – jachguate

+0

나는 동의하지 않는다, 나는이 질문에 대한 사용자의 질문을 썼다. 우리는 이것을 이전 버전에서 사용하고 있었지만 skinnable이 아니기 때문에 변경해야했습니다. 하지만 답장을 보내 주셔서 감사합니다. – evilone

관련 문제