2012-03-13 4 views
0

BDS 2006에서 수행하고있는 내 응용 프로그램의 편집 상자에서 마우스 오른쪽 버튼을 누르지 않으려합니다. 나는 그것에 대해 봤는데 나는 다음과 같은 코드를 발견했습니다.편집 상자에서 마우스 오른쪽 버튼 클릭을 피하십시오.

이 양식은 활성화됩니다.

for i := 0 to Self.ControlCount-1 do 
    begin 
    if Self.Controls[i].ClassName = 'TEdit' then 
    begin 
     noPopUp := TPopupMenu.create(Self.Controls[i]); 
     TEdit(Self.Controls[i]).PopupMenu := noPopup; 
    end; 
end; 

이 누구의 부모 양식입니다 편집 상자에 잘 작동, 그것은 EDIT1에 대한 잘 작동하지만이 많은 편집 상자는 양식에있는 그래서 난 루프에 대한 썼다. 그러나 그룹 상자 또는 패널에 편집 상자가있는 경우이 패널과 그룹 상자는 차례로 양식의 하위 항목입니다.

내 질문은 부모가 양식이 아닐 때 편집 상자에서 마우스 오른쪽 버튼을 클릭하지 않도록 설정하는 방법입니다.

+2

편집 당 팝업을 만들 필요가 없으며 동일한 팝업을 여러 편집 컨트롤에 지정할 수 있습니다. 어떤 경우 든 빈 팝업을 사용하는 대신 OnContextPopup에 대한 이벤트 핸들러를 설정하고 'Handled'매개 변수를 'True'로 설정하는 것이 좋습니다. –

답변

0

하지 멀리에있는 솔루션이

for i := 0 to Self.ComponentCount-1 do 
    begin 
    if Self.Components[i].ClassName = 'TEdit' then 
    begin 
     noPopUp := TPopupMenu.create(Self.Components[i]); 
     TEdit(Self.Components[i]).PopupMenu := noPopup; 
    end; 
end; 
1

이 허용 대답과 같은 구성 요소로 대체 ​​제어, 불필요한 메모리를 할당합니다. 생성 된 TPopupMenu가 절대로 릴리즈되지 않기 때문에 메모리 누수가 발생한다고 생각할 수도 있습니다. 그러나 각 TPopupMenu의 Create (AOwner)는 이것을 막아 TEdit의 Free에서이 메모리를 해제합니다. 루프에

procedure TForm1.MyContextPopup(Sender: TObject; MousePos: TPoint; 
    var Handled: Boolean); 
begin 
    Handled := True; 
end; 

을하고 : 불필요한 메모리 ALLOC을 방지하기 위해

이 시도

for i := 0 to Self.ComponentCount-1 do 
    if Self.Components[i] is TEdit then 
     TEdit(Self.Components[i]).OnContextPopUp := MyContextPopup; 

이 당신이 원하는 것을 할 한 정도로입니다!

감사합니다.

관련 문제