2016-10-19 2 views
0

TPageControl의 자손이 tsTabs을 제외한 Style 속성을 갖지 못하도록하고 싶습니다.TPageControl : 스타일 속성 변경을 방지하는 방법

처음에는 SetStyle을 덮어 쓰려고했으나 기본 클래스에서는 private로 선언되었습니다. 누구든지 아이디어가 있습니까?

+0

일부 자제력을 사용하십시오. –

+0

'TCustomPageControl'을 사용할 수있을 것으로 기대했을 것입니다. 하지만 그렇지는 않습니다. 관련된 Q를 참조하십시오 : [하위 구성 요소에서 속성을 제거하는 방법] (http://stackoverflow.com/questions/15961579/how-do-you-remove-a-property-from-a-descendent- 구성 요소) – kobik

+0

@kobik :'TPageControl'는'TCustomTabControl'에서 파생됩니다. 그러나 어쨌든이 링크에 설명 된 대부분의 기술은 디자인 타임에 속성을 숨기 만하지만 런타임에는 속성에 여전히 액세스 할 수 있습니다. –

답변

3

TPageControl은 사용자가 원하는 내용을 기본적으로 지원하지 않습니다.

  1. 이 구성 요소는 새 게터/세터 메소드와 Style 속성을 다시 선언해야하고 아무것도하지 않고 세터 출구를 가지고 : 당신이 요구하는 무엇을 달성하기 위해, 당신도 할 것입니다. 그러나 구성 요소의 사용자가 실제로 액세스하려는 경우 상속 된 Style 속성은 런타임에 기술적으로 액세스 할 수 있습니다.
  2. TCustomTabControl 대신 TPageControl, 그리고에서 구성 요소를 도출하지만, 보호 Style 속성을 추진하지 않고 TPageControl가하는 모든 것을 다시 구현. 그러나 구성 요소의 사용자가 실제로 액세스하려는 경우 상속 된 Style 속성은 런타임에 기술적으로 액세스 할 수 있습니다.

  3. 구성 요소가 가상 CreateParams() 메서드를 무시하고 TCreateParams.Style 필드에 TCS_TABS 창 스타일을 적용하십시오. Style 속성에는 여전히 사용자가 할당 한 값 (TabPosition 속성의 동작에도 영향을 미칩니다)이 있지만 적어도 기본 윈도우는 항상 tsTabs 스타일이 사용 된 것처럼 동작합니다.

  4. 런타임시 직접 TCustomTabControl.SetStyle()을 걸 고 아무 것도하지 않고 돌아 오도록 우회 라이브러리를 사용하십시오.

+0

@kobik : 모든 프로 시저/함수/메소드는 런타임에 연결될 수 있습니다. 까다로운 부분은 그 메모리 주소를 얻는 데 있으며, 개인적인 방법으로도이를 수행 할 수있는 방법이 있습니다. –

관련 문제