2013-10-06 4 views
4

표준이 아닌 컨트롤에서는 작동하지 않는다는 점을 제외하고는 일반적으로 TEditCut, TEditCopy, TEditPasteTEditSelectAll의 기능으로 만족합니다.표준 작업 (예 : TEditCopy)이 TEmbeddedWB와 같은 추가 컨트롤을 인식하도록하려면 어떻게합니까?

예를 들어, 그들은 TEdit 또는 TMemo 컨트롤에서 잘 작동 할 수 있지만하지 TEmbeddedWB에 - 그것으로는, 표준 행동은 항상 TEmbeddedWBCopyToClipboardSelectAll 등의 방법이있다하더라도 관계없이 텍스트의 선택 여부 비활성화됩니다.

TEmbeddedWB과 함께 표준 작업을 수행하려면 어떻게해야합니까? 표준 액션이 활성화 또는 비활성화되어야하는지 여부를 결정하는 방법 (그리고 어떤 이벤트에서 수행할지 - OnUpdate 이벤트에 있습니까?) 인식 할 수없는 구성 요소에 대한 지원을 추가하기 위해 표준 작업을 확장 할 수 있습니까? 아니면 교체 작업을 작성해야합니까?

답변

6

TEmbeddedWB 컨트롤에서 기본 편집 작업이 작동하지 않습니다. 해당 구성 요소는 TCustomEdit에서 나옵니다. TEditAction, TEditSelectAll은에서 내려오고 TCustomEdits을 처리하는 방법 만 알고 있습니다.

이 동작을 무시하는 동작의 이벤트는 OnUpdateOnExecute 이벤트를 사용하십시오. 기본 동작은 무시되므로 수동으로 구현하십시오. 다음은 TEditSelectAll 작업의 예입니다.

procedure TForm1.EditSelectAll1Update(Sender: TObject); 
begin 
    EditSelectAll1.Enabled := (Screen.ActiveControl is TEmbeddedWB) or 
    EditSelectAll1.HandlesTarget(ActiveControl) 
end; 

procedure TForm1.EditSelectAll1Execute(Sender: TObject); 
begin 
    if ActiveControl is TEmbeddedWB then 
    TEmbeddedWB(Screen.ActiveControl).SelectAll 
    else 
    EditSelectAll1.ExecuteTarget(Screen.ActiveControl); 
end; 

또는이 사용자 정의 동작을 중앙 집중화하기 위해 동일 ACTIONLIST의 이벤트 (또는 ApplicationEvents 구성 요소의 OnActionUpdateOnActionExecute)를 사용 : 그냥이 처리하는 데 필요한 것처럼

procedure TForm1.ActionList1Update(Action: TBasicAction; var Handled: Boolean); 
begin 
    if Action is TEditAction then 
    begin 
    TCustomAction(Action).Enabled := (Screen.ActiveControl is TEmbeddedWB) or 
     Action.HandlesTarget(Screen.ActiveControl); 
    Handled := True; 
    end; 
end; 

procedure TForm1.ActionList1Execute(Action: TBasicAction; var Handled: Boolean); 
begin 
    if (Action is TEditSelectAll) and (Screen.ActiveControl is TEmbeddedWB) then 
    begin 
    TEmbeddedWB(Screen.ActiveControl).SelectAll; 
    Handled := True; 
    end; 
end; 
+0

덕분에,이 모습을. – Coder12345