2013-07-24 2 views
6

입력 빈 : 그들은 을 누르면 그들이 그것을 입력 키를 누르면은 Ctrl 키와 잇는 TMemo가 + 내가 달성하기 위해 노력하고있어

  • 사용자가 잇는 TMemo 상자
  • 에 텍스트를 입력을 새로운 라인
  • 를 생성 Ctrl 키 + 을 입력 또 다른 상자에 텍스트를 이동하고 잇는 TMemo이 코드를 사용하고

을 비 웁니다 [KeyPreview은 True입니다]

procedure TFMsg.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); 
begin 
    if (Shift = [ssCtrl]) and (Key = $0D) then 
    begin 
    Key := 0; 
    btnSendClick(Sender); //this moves the text and empties the TMemo box 
    end; 
end; 

실제로 무슨 일 :

  • Ctrl 키 + 을 입력은 다른 박스에 텍스트를 보내는 잇는 TMemo는 비워하지만 커서가 깜박 앉아 Enter 키를 받아 들일 것으로 보인다
  • 두 번째 줄

도움을 주신 모든 도움. 고맙습니다! 다음과 같이

답변

7

이 처리하는 가장 좋은 방법은 다음과 같습니다

  1. 는 작업 목록을 만들거나 작업 관리자, 또는 기존의 것을 다시 사용.
  2. 메모를 지우고 다음 메모로 이동하는 작업을 추가하십시오. 활성 컨트롤이 실제로 메모인지 확인해야합니다.
  3. 원하는 단축키를 지정하십시오. CTRL + 입니다.

조치를 취할 필요가 없습니다. 단순한 존재만으로도 바로 가기가 처리 될 수 있습니다.

변경자 키를 사용하는 복합 키보드 작업의 경우 작업 바로 가기를 사용하고 하위 수준 키보드 처리 코드에서 팔 길이를 유지하는 것이 가장 간단합니다.

액션 핸들러는 다음과 같습니다

if ActiveControl is TMemo then 
begin 
    Memo := TMemo(ActiveControl); 
    Text := Memo.Text; 
    Memo.Clear; 
    SelectNext(Memo, True, True); 
    if ActiveControl is TMemo then 
    begin 
    Memo := TMemo(ActiveControl); 
    Memo.Text := Text; 
    end; 
end; 

을 내가 거기에 여러 메모하고 텍스트가 탭 순서에서 다음 단계로 한 메모에서 이동 있으리라 믿고있어이 코드에서. 그러나 당신의 필요는 다를 수 있습니다. 어떤 경우에 당신이 당신의 시나리오를 위해 무엇을해야하는지 분명해질 것이라고 확신합니다.

+0

멋지다. 고마워. 유사한 시도를하는 사람은 제외하고 Ctrl + Enter는 Object Inspector의 기본 옵션 중 하나가 아닙니다. FormCreate의이 줄은 수동으로 추가했습니다 :'Action1.ShortCut : = ShortCut ($ 0D, [ssCtrl])'. –

-1
property WantReturns: Boolean; 
+2

코드 전용 게시물은 답변으로 간주되지 않습니다. 특히 한 줄이 포함되어있어 실제로 어떤 값도 추가하지 않는 경우에는 특히 그렇습니다. 당신은 당신의 대답에 대한 설명을하기 위해 [편집] 할 수 있습니까? 그렇지 않은 경우 "대답이 아닙니다"로 삭제됩니다. 감사. –

+1

"코드 응답 만"이 왜 적절하지 않은지에 대한 설명은 [이 메타 게시물] (http://meta.stackexchange.com/q/148272/172661)을 참조하십시오. –

0

그것에 대해 메모의 때 onKeyPress 이벤트를 사용

procedure TFMsg.Memo1KeyPress(Sender: TObject; var Key: Char); 
begin 
    if (key=#10) and (GetKeyState(VK_CONTROL)<0) then 
    begin 
     key:=#0; 
     btnSendClick(Sender); 
    end; 
end; 

당신이 (# 10) 피드 라인을 확인 할 필요가 있습니다하지 캐리지 리턴 (# 13)에 대한.