두 구성 요소의 상태 (예 : Comp1: TSomeComponent
및 Comp2: TSomeComponent
)를 비교하고 싶습니다. 즉, 두 구성 요소의 모든 게시 된 속성 값을 비교하고 싶습니다. 일부 속성은 TListBox.Items 속성처럼 인덱싱됩니다. 이 작업을 수행하는 쉬운 방법이 있습니까? 반복되는 RTTI 코드를 호출해야합니까?델파이 : 두 구성 요소 간의 속성 비교
답변
쉬운 방법은 모두 WriteComponent
으로 직렬화하고 결과 문자열을 비교하는 것입니다. 그러나이 경우 이 아닌 public
속성 만 비교됩니다. 그러나 당신이 필요하다고, 그래서 무엇을 ... 이것은 위해 중요한 인덱싱 된 속성의, 말, 할 것이라고
참고. 그것은 당신이 원하는 것일 수도 아닐 수도 있습니다.
감사합니다. Craig, 저는 실제로 그것을 고려하고있었습니다. 원래 질문에서 쓰지 않은 것은 WriteComponent를 사용하여 (차이의 경우) 속성을 작성하기 전에 속성을 비교하기 위해서였습니다. AFAIU를 사용하면 WriteComponent를 사용하여 작성된 특정 속성을 선택할 수 없습니다. 사실입니까? (잠시 동안, 내가 관심을 갖는 것은 게시 된 소품입니다 ...) – conciliator
나는 당신이 옳다고 믿습니다. –
사실, 속성을 작성하는 방법을 알아볼 수 있습니다. 'TComponent.DefineProperties' 및 관련 메소드/구성 요소를 살펴보십시오. 이것은 수년 전이지만 속성을 모두 표시하지 않고 게시 된 것으로 선언되지 않은 속성을 추가했습니다. –
아쉽게도 델파이에는 간단한 비교 기능이 없습니다. (나는 D2007에서 멈췄다.) 메소드를 기본 클래스에 "비교"하고이 메소드 내부의 모든 필드를 비교할 수있다. D2007에서는 이것을 헬퍼 클래스로 만들 수 있지만 여전히 필드를 지정해야합니다. 다른 클래스를이 기본 클래스에서 상속 받아 기본 비교 메서드를 재정의 할 수 있습니다.
RTTI를 사용하면 여러 유형의 클래스 필드를 비교하는 것이 쉬워 지지만 복잡하고 오류가 발생하기 쉽습니다. 그것은 모든 종류의 다른 클래스들로 많은 테스트를 요구할 것입니다.
내가 사용하는 트릭 (IDE에서 통합 된 것과 같은 것을 갖고 싶습니다.)은 dfm에 액세스하기 위해 두 구성 요소 (ALT + F12 사용)와 관련된 dfm 부분을 복사 한 다음 두 구성 요소 NotePad++에서 비교 플러그인을 사용하여 2를 비교합니다. 좋은 시각적 출력을 제공하지만 IDE에서 다른 구성 요소를 선택하는 것보다 더 많은 시간이 소요됩니다. 그리고 비교 도구와 비교해보십시오. IDE.
- 1. HTML 요소 속성 간의 개행?
- 2. Android 맞춤 구성 요소 속성
- 3. 델파이 예외 처리기 비교
- 4. 웹 구성의 캐싱 구성 요소 간의 차이점
- 5. 델파이 : 다중 토큰 편집 구성 요소
- 6. 델파이 비 시각적 구성 요소 이미지
- 7. .NET에서 두 메서드 구현 간의 성능 비교
- 8. C++ 부울 문제 (두 배열 간의 비교)
- 9. Java EE 구성 요소 간의 알림
- 10. 두 Items 간의 마우스 이벤트 내용 요소
- 11. JSF 2 - 페이지로드시 구성 요소 속성 지우기?
- 12. 사용자 지정 단추 구성 요소 보호 속성
- 13. 델파이 - 설치된 구성 요소가 손실되었습니다.
- 14. 속성 목록과 iPhone의 XML 비교
- 15. 사용자 정의 구성 요소 - 구성 요소 팔레트에서 툴팁을 설정하는 방법?
- 16. 목록 비교/세트 요소
- 17. 값을위한 NSMutableArray 요소 비교
- 18. 델파이 경고가 나에게 내 구성 요소 세트 중 하나에서
- 19. 델파이 : 유니 코드 RAR- 구성 요소 2.0 만들기
- 20. 두 모델 엔티티 비교
- 21. 구성 요소 기반 구성
- 22. flex4의 두 구성 요소 사이를 연결하는 선
- 23. GXT - 두 구성 요소 높이 연결
- 24. 두 테이블을 사용하여 joomla 구성 요소 만들기
- 25. ActiveRecord/MySQL 조건 선택 문자열 구성 요소 비교
- 26. 일반 목록의 요소 비교
- 27. .NET 통신 구성 요소
- 28. TNTUnicode 구성 요소 문제
- 29. 웹 페이지 및 C++ 백엔드 구성 요소 간의 데이터 교환
- 30. 액션 스크립트 3 - 스파크와 맞춤 구성 요소 간의 이벤트
Delphi 2010은 이전보다 훨씬 새롭고 향상된 RTTI를 도입했습니다. 따라서 현재 정답에 대답하기 위해 현재 사용중인 델파이 버전을 아는 것이 중요합니다. –
아아아, 저는 D2009를 사용하고 있습니다. 하지만 : 어쨌든 언젠가는 언젠가 D2010으로 옮길 것입니다. 그래서 이것은 전환해야 할 움직임이 될 수 있습니다. 이것이 D2010에서 가능합니까? – conciliator
'게시'에만 관심이 있으므로 모든 버전의 Delphi에서 RTTI로이 작업을 수행 할 수 있습니다. –