2013-06-30 13 views
0

두 개의 목록 상자가 있으며 둘 다 Multiselect : = True입니다. 선택한 항목에 대해 클립 보드에서 복사/붙여 넣기를 할 수있는 팝업 메뉴가 있습니다. 모든 것은 의도 한대로 작동합니다.ListBox multiselect에서 OnKeyUp으로 포커스 손실

키보드 CtrlC (복사)와 Ctrl + V (붙여 넣기)를 추가하고 싶지만 Ctrl + C를 사용하여 선택한 항목이 모두 선택을 잃고 목록의 첫 번째 항목이 선택되고 복사됩니다 클립 보드에.

은 내가 KeyPreview와 팝업처럼 내가에서 Ctrl + C 등의 작업을 할 수있는 방법

if (ssCtrl in Shift) then 
begin 
    case Char(Key) of 
    'c','C' : puCopyClick(Sender); 
    'v','V' : puPasteClick(Sender); 
    end; 
    Exit; 
end; 
case Key of 
    VK_Delete : puDeleteClick(Self); 
end; 
Exit; 

OnKeyUp을 기본 폼을 사용하고?

감사합니다.

+0

이전 질문에 따르면 키보드와 마우스 만 없으므로이 질문은 의미가 없습니다. 그 외에도 OnKeyUp을 선택하게 된 이유는 무엇입니까? 그건 잘못된 사건입니다. 다른 앱의 작동 방식을 살펴보십시오. 바로 가기 키는 키가 내려 오면 실행됩니다. 이 모든 일을 올바르게 수행하는 방법을 배우도록 도와 주시겠습니까? 이전 질문에서 판단 해 보니 당신이 옳은 일을하고 싶지 않은 것처럼 보입니다. –

+1

@DavidHeffernan 당신은 결론을 도출하는 것처럼 보입니다 ** 많이. ** 나는 키보드가 없다고 말하지 않았고, 나는 그들이 마우스를 사용하도록 강요한다고 말했다. 그 이유는 친구의 실패한 비즈니스를 반 자동화하는 데 도움이되는 이유입니다. ** ** ** ** ** ** ** ** ** ** ** ** ** ** 할 일을하는 올바른 방법이 무엇인지 지시 할 것입니다. 나는 오랫동안, 아마도 당신이 태어나 기 전에 (명백한 오만함에 근거한 가정) 프로그래밍을 해왔으므로 상황의 5 % 만 이해하면 "제대로"가르쳐 주겠다고 제안하지 마십시오. – user2373289

+0

강제로 마우스를 사용할 때 Ctrl + C를 어떻게 누르습니까? 마우스의 사용으로 만 포커스가 변경된다고 가정하려면, 그것은 당신에게 달려 있습니다. 하지만 잘못된 가정입니다. 나는 네가 올바른 방법으로 그렇게하도록 강요 할 수 없다. 'OnMouseUp'가 포커스 변경을 감지하는 올바른 방법이라고 믿는다면 그것은 당신에게 달려 있습니다. 그러나 나는 네가 틀렸다는 가능성에 마음을 열면 이익을 얻을 것이라고 믿는다. 물론, 나도 잘못 될 수 있습니다. 나는 모든 정보가 없다. –

답변

2

단축키를 처리하는 가장 좋은 방법은 메뉴 항목을 처리하는 것입니다. 이 작업을 수행하는 팝업 메뉴가 있다고합니다. 해당 메뉴 항목을 바로 가기 키와 연결하려면 메뉴 항목의 Shortcut 속성을 사용하십시오.

이렇게하면 수동 키보드 이벤트 처리를 모두 제거하고 프레임 워크에서 처리하도록 할 수 있습니다. 그것은 많은 이점을 가지고 있습니다. 그 중 가장 중요한 것은 이벤트가 진행될 때 키가 내려갈 때 이벤트가 발생한다는 것입니다.

더 좋은 여러 개의 독립적 인 UI 요소와을 클립 보드에 예를 복사 나는 다음은 단일 행동를 연결할 수 있습니다 델파이 5에 존재 올바르게 기억 작업을 사용하는 것입니다. 예를 들어, 그 동작은 주 메뉴, 팝업 메뉴 및 바로 가기 키와 관련 될 수 있습니다.

+0

데이비드에게, 나는 열쇠 - 바로 가기를 간과했다. "더 나은"제안은이 프로젝트에 투자하는 것보다 더 많은 노력이 필요합니다. 이유를 보려면 위의 설명을 참조하십시오. :) – user2373289

+0

일반적으로 작업을 사용하면 대안보다 작업이 줄어 듭니다. –