2012-07-02 2 views
2

4 개의 편집 상자와 메모가있는 양식이 있으며 여러 실행 취소의 다시 실행을 구현하는 방법을 알아 내려고합니다. 예를 들어여러 실행 취소/다시 실행을 구현하는 방법?

사용자가 편집 3,1,2에서 메모를 입력하면 메모 편집 4 회문 순서에서 실행 취소하고 원래 순서대로 다시 실행하고 싶습니다.

그러나 주문을 추적하는 방법에 대해서는 잘 모르겠습니다. 이것에 어떤 도움을 내가 델파이 7

+0

[명령 디자인 패턴]을 참조하십시오. (http://www.tabdee.ltd.uk/papers/MoreDesignPatterns.html#_Toc12157331) 및 [Memento 디자인 패턴] (http://www.tabdee.ltd.uk/papers/MoreDesignPatterns.html#_Toc12157332)을 참조하십시오. – NGLN

답변

4

가장 쉬운 방법은 포함 된 컨트롤의 모든 변경 사항을 캡처하고 4 컨트롤의 상태 (내용, 선택, 캐럿 위치) 아래로 작성하는 것입니다을 사용하고

을 감상 할 수있다 함께. 모든 변경 작업을 수행하고 실행 취소 스택이 있어야합니다. 이제 작업을 실행 취소해야 할 때 모든 컨트롤이 저장된 상태로 복원됩니다.

이 체계는 리소스를 많이 소비 할 수 있으며 구현되면 특정 컨트롤에서 수행 된 마지막 작업이나 차이 만 저장하여 최적화하려는 경우가 있습니다. 문제는

(a) 표준 편집/메모가 정확히 무엇이 변경되었는지에 대한 정보를 제공하지 않으므로 어떻게 든 변경 사항을 계산해야합니다 (예 : 이전에 기록 된 상태와 비교하여). 초기 상태에서 모든 변경 사항을 통해 내용을 "다시 작성"하고 현재 상태와 현재 상태를 비교하여 변경 사항을 알아야합니다.

(b) 표준 컨트롤은 실행 취소 작업을 스스로 처리하고 사용자가 하나의 컨트롤을 되돌릴 수 있으므로 실행 취소 스택의 순서가 깨질 수 있습니다.

아마도 타사의 편집/메모 컨트롤을 사용하여 필요에보다 관대 할 수 있으며 실행 취소/다시 실행 작업. 예를 들어, 일단 ElPack 용 TElEdit 컨트롤 (현재는 LMD Innovative이 소유 한 LMD ElPack)을 만들었고 다른 기능들 사이의 컨트롤에는 실행 취소/다시 실행 스택이 있었으며 TElEdit이 소스 코드를 약간 수정하면 어떻게 도움이되는지 알았습니다. 그들이 제공 할 수있는 것을보기 위해 TElEdit 또는 다른 유사한 구성 요소를 점검 할 수 있습니다.

+0

"역 델타"기술은 마지막 버전부터 시작하여 텍스트 변경을 실행 취소하는 속도를 줄입니다. – mjn

+0

@mjn 예. 이것은 영구 속도 대 크기 딜레마입니다. –

0

은 TClientDataSet 컨트롤을 mem 저장소 및 4 개의 tdbedit 컨트롤로 사용합니다. TClientDataSet 복귀, 취소 취소 메소드를 참조하십시오.

0

Command pattern을 사용하십시오. 이미 많은 것들이 있기 때문에 전체 개념을 설명하지는 않겠지 만 좋은 예가 here이며 "명령 패턴 실행 취소 다시하기"를 검색하면 많은 것들이 있습니다

관련 문제