2017-11-10 16 views
0

"TcxEditButtons"유형의 "Buttons"컬렉션을 확장하려고합니다. 목적은 레거시 TcxButtonEdit 구성 요소의 모든 단추에 "OnClick"이벤트와 "Shortcut"속성을 추가하는 것입니다.Delphi VCL "TcxButtonEdit"의 "Buttons"컬렉션에서 항목 확장하기

type 
     TMycxDBButtonEdit = class(TcxCustomButtonEdit) 
    FProperties: TMycxDBButtonEditProperties; 
    published 
    property Properties: TMycxDBButtonEditProperties read FProperties write SetProperties; 

문제는 다소 분명하다 ... 내 구성 요소의

type 
    TMycxDBButtonEditProperties = class(TcxCustomButtonEditProperties) 
    private 
    FButtons: TMycxEditButtons; 
    procedure SetButtons(const Value: TMycxEditButtons); 
    function GetButtons: TMycxEditButtons; 
    public 
     constructor Create(AOwner: TPersistent); override; 
     procedure AfterConstruction; override; 
    published 
     property Buttons: TMycxEditButtons read GetButtons write SetButtons; 
    end; 
... 내가이 수행하십시오 : 나는 아래의 코드를 사용하여 "속성"속성을 덮어 쓰기 시작 컬렉션을 편집이 가능하지만 실제 조상 속성 인 "버튼"은 반영되지 않습니다. 질문 : 컬렉션이 구성 요소의 버튼에 영향을 미치게하려면 어떻게해야합니까?

내가 이해하고 데브 익스프레스의 지원 아래 링크에 설명 된 내용을 적용하려고했으나 성공하지 (무능력)

https://www.devexpress.com/Support/Center/Question/Details/Q136143/creating-custom-tcxbuttonedit

https://www.devexpress.com/Support/Center/Question/Details/Q35461/do-you-have-information-on-creating-own-tcxcustomedit-descendant

https://www.devexpress.com/Support/Center/Question/Details/A483/how-to-hide-default-button-s-in-a-dropdown-editor-or-add-extra-buttons

+0

내 검색어에 대한 링크를 추가했습니다. 편집기에서 동일한 컬렉션 편집기를 사용하고 싶습니다. 각 항목은 새 속성으로 확장 된 "TcxEditButton"입니다. – AnselmoMS

+0

DevEx 버전에는'class function GetButtonsClass : TcxEditButtonsClass; 클래스'TcxCustomEditProperties'에 대한 단위 cxEdit? – nil

+0

네, 제 버전은 15.2.2이고이 클래스 기능을 가지고 있습니다 – AnselmoMS

답변

1

기반 @nil 코멘트에, 나는 예상 된 결과를 얻었다. 다음은 동일한 유형의 필요를 가진 사람들을위한 코드 스 니펫입니다.

type 
     TZcxEditButton = class (TcxEditButton) 
    ... 
    published 
    property Shortcut: TShortCut read FShortcut write SetShortcut; 
    property OnClick: TNotifyEvent read FOnClick write SetOnClick; 
    end; 

    type 
     TZcxEditButtons = class(TcxEditButtons) 
    public  
    class function GetButtonClass: TcxEditButtonClass; override; 
    end; 

    type 
     TZcxButtonEditProperties = class(TcxButtonEditProperties) 
     public 
     class function GetButtonsClass: TcxEditButtonsClass; override; 
    end; 

    type 
     TZcxButtonEdit = class(TcxButtonEdit) 
     public 
     class function GetPropertiesClass: TcxCustomEditPropertiesClass; override; 
     end; 

implementation 

    class function TZcxEditButtons.GetButtonClass: TcxEditButtonClass; 
    begin 
     Result := TZcxEditButton; 
    end; 

    class function TZcxButtonEditProperties.GetButtonsClass: TcxEditButtonsClass; 
    begin 
     Result := TZcxEditButtons; 
    end; 

class function TZcxButtonEdit.GetPropertiesClass: TcxCustomEditPropertiesClass; 
begin 
    Result := TZcxButtonEditProperties; 
end; 

참고 : 나는 개선을위한 제안을 받아 들일

+1

향후 독자의 이익을 위해 게시 한 것이 유익합니다. +1 – MartynA

-1

당신은 메인 클래스 TcxEditButton에서 새 클래스를 확장해야합니다. 속성 클래스 TcxCustomButtonEditProperties을 확장하는 것은 좋지 않습니다. TcxEditButton에서 확장 한 새 클래스를 만들고 새 Methodsproperty을 추가하십시오.

+1

이것은 다른 답변에 어떤 영향을 줍니까? – MartynA

+0

_ "TcxCustomButtonEditProperties 속성 클래스를 확장하는 것은 좋지 않습니다."_ @ aqil, 구성 요소 제조업체가이를 수행 할 수있는 방법을 만든 경우 왜 그렇게하지 않겠습니까? 내가 게시 한 Dev Express 지원 페이지의 링크를 읽었습니까? – AnselmoMS

+0

네 말이 맞아, 나는 그 노트를 읽었다. 그 메모와 보호 된 재산 때문에 우리는이 해결책을 사용해야합니다. 하지만 일반적인 해결책과 델파이 컴포넌트 개발을 위해이 답변을 썼다. – Aqil