2012-05-20 5 views
0

두 VCL 구성 요소를 병합하여 두 속성에 모두 액세스 할 수 있습니까?두 개의 기존 구성 요소를 함께 병합하는 방법은 무엇입니까?

예를 들어, 나는 내가 TImageTPanel에 아이가 될 것입니다 때문에 TPanel는 기본 구성 요소입니다 것을 요구하는 TImage 한으로 TPanel을 병합 할.

가능합니까?

저는 Delphi 2010에서 Component> New VCL Component를 통해이 작업을 수행하려했지만 시각적 구성 요소가 필요할 때 비 시각적 구성 요소를 만듭니다.

변경하려면 어떻게해야합니까?

+1

코드를 먼저 작성해야하며 모든 것이 정상적으로 실행되면 IDE 내에 구성 요소를 등록해야하기 때문입니다. 두 속성에 모두 액세스하려면 두 구성 요소, 즉 세터와 getter에 대해 "프록시"속성을 정의해야합니다. – ComputerSaysNo

+1

TComponent에서 파생되는 클래스로이 작업을 수행하려고합니까? 왜냐하면 그것이 비 시각적 인 이유 일 것입니다. TComponent는 비 시각적 구성 요소의 기본 클래스입니다. –

답변

5

정확하게 이해한다면 두 구성 요소를 병합하고 둘 다에 대한 속성을 공개하겠습니까?

Component Creation - Joining Components Together?

SetSubComponent이 월이 달성의 열쇠였다

이 당신이 찾고있는 경우

, 나는 여기에서 찾을 수 있습니다 함께 TImage의 및 TScrollBox 가입에 대한 비슷한 질문을 위의 링크에서 의견과 답변을 읽으면 더 많은 것을 이해할 가치가 있습니다.

3

Delphi 언어는 다중 상속 구현을 지원하지 않으며 인터페이스의 다중 상속 만 지원합니다. 따라서 당신은 단지 당신이 바라는 방식으로 두 클래스를 병합 할 수 없습니다.

어쨌든 당신이 제안하는 것은 조금 이상합니다. TPanelTImage은 모두 고유 한 시각적 표면을 가지고 있습니다. 내가 상상할 수있는 유일한 가능성은 TImageTPanel의 하위 항목으로 만들 수 있다는 것입니다. TPanel에서 새 구성 요소를 파생시킵니다. 이 구성 요소는 TImage을 만들고 소유합니다. TImage 하위 컨트롤의 부모를 패널로 만듭니다. 컨트롤에 나타낼 TImage 컨트롤의 모든 속성과 이벤트는 수동으로 수행해야합니다. 이것은 상속이 아니라 구성입니다.

+1

즉, TPanel에서 상속받을 수 있으며 TPanel에 TImage가 포함될 수 있습니다. 그러나 그것은 "합병되지 않았습니다", 그것은 "결합 된"것입니다. 복합 컨트롤은 그리 어렵지 않습니다. TImage가 포함 된 TPanel이 designtime 패키지로 설치되면 양식에 단일 항목으로 포함될 수 있습니다. 그러나 얼마나 유용한가? 하지 매우. –

+0

그 이유는 그다지 유용하지 않다고 말하는 이유를 이해할 수 있습니다.하지만 내가하려는 것은 코딩을 줄이는 것입니다.OnMouseEnter에 의존하는 시각적 기능을 추가하고 있습니다. 사용자가 'TPanel'위로 마우스를 가져 가면 사면이 변경되지만 마우스 커서가 'TPanel'의 자식 인 'TImage'로 이동하면 사면이 제거됩니다. 이는 "시각적 기능"을 작동시키기 위해'TPanel'과'TImage' 둘 다에 코드를 추가해야한다는 것을 의미합니다. – ple103

+1

@petersmileyface : 이는 "마우스 충전"을 취하지 않음으로써 패널 경계를 "엉망으로 만들지"않는 특정 TImage 자손 만 필요하다는 것을 암시합니다. 마우스 동작에 대해 이미지를 투명하게 만들고 이미지가 패널에 있으면 모든 것이 패널에서 처리되도록 정렬하십시오. 이 작업을 수행하는 방법을 모르겠지만 Warren, LU RD 또는 다른 VCL 전문가 중 한 명이 여기에 도움이 될 것이라고 확신합니다. –

1

디자인 타임에 다른 시각적 구성 요소로 존재하는 구성 요소를 만들 때 TFrame을 사용할 수 있습니다. TImage이 표시된 TPanel입니다. 이것은 아마도 당신이 원하는 것과 다를 수 있습니다. 속성이 함께 병합되지 않으면, 새로 생성 된 구성 요소가 원하는대로 동작하도록 고유 한 속성과 메서드를 디자인해야합니다. 원하는 기능 (마우스의 위치에 따라 변경되는 시각적 기능)은 프레임에 한 번만 빌드해야합니다.

관련 문제