자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi [Delphi XE7] 컴포넌트 내부개체 버그문제 다시 질문드립니다.
2014.11.27 19:15
먼저 아래 질문 답글 감사드립니다.
허나 조언주신 글은 TLayout이 Client로 되어서 두개의 개체가 복제되어 있는데도 밑에 깔려서 하나로 보일 뿐이지 결국 두개가 존재합니다.(디자인모드에서 컴포넌트를 Cut & Paste해보시고 좌측 Structure 트리를 봐도 알 수 있습니다)
결국 버그상태라는 겁니다.(오버라이드시킨 resize와도 전혀 상관 없습니다. 아래에 resize뺀 최소화 시킨 소스로 다시 올려봅니다)
문제의 요지를 다시 설명 T_T:
1. 아래컴포넌트를 설치하여 컴포넌트(TNHSchedule)를 폼에 올려봅니다.
2. TLayout과 TSpeedButton이 각각 하나씩만 보여야하는데, 최초 디자인모드에서는 정상적으로 보임.
3. 실행파일로 만들어 실행해보면, TLayout과 TSpeedButton이 각각 2개로 보인다는 겁니다.
(디자인모드에서 컴포넌트를 Cut하고 Paste해보아도 TLayout과 TSpeedButton이 두개로 복제됩니다)
* 델파이 XE7(라이센스판)에서 나타나는 버그일 가능성이 많아 보이지만, 행여나 실수겠지라는 기대감에 조언을 구합니다.
버그라면 하루 속히 리포팅될 수 있었으면 좋겠습니다.
전 델파이로 실시간 객체생성을 주로 사용하여 컴포넌트를 만드는 편인데, 프로젝트를 진행할 수 없는 상황에 놓였습니다.
-- 아래 -- [컴포넌트 소스]
unit NHSchedule;
interface
uses
System.SysUtils, System.Classes, FMX.Types, FMX.Controls, FMX.Objects
, FMX.Layouts, FMX.StdCtrls;
type
TNHSchedule = class(TRectangle)
private
fTopLayout: TLayout;
fBtnYear: TSpeedButton;
protected
public
constructor Create(AOwner: TComponent); override;
published
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('N&H4FMX', [TNHSchedule]);
end;
constructor TNHSchedule.Create(AOwner: TComponent);
begin
inherited;
fTopLayout := TLayout.Create(self);
fTopLayout.Parent := self;
fTopLayout.Align := TAlignLayout.Top;
fBtnYear := TSpeedButton.Create(self);
fBtnYear.Parent := fTopLayout;
fBtnYear.Align := TAlignLayout.top;
fBtnYear.Text := '2016';
end;
end.
댓글 2
Delphi [Delphi XE7] 컴포넌트 내부개체 버그문제 다시 질문드립니다.
2014.11.27 19:15
먼저 아래 질문 답글 감사드립니다.
허나 조언주신 글은 TLayout이 Client로 되어서 두개의 개체가 복제되어 있는데도 밑에 깔려서 하나로 보일 뿐이지 결국 두개가 존재합니다.(디자인모드에서 컴포넌트를 Cut & Paste해보시고 좌측 Structure 트리를 봐도 알 수 있습니다)
결국 버그상태라는 겁니다.(오버라이드시킨 resize와도 전혀 상관 없습니다. 아래에 resize뺀 최소화 시킨 소스로 다시 올려봅니다)
문제의 요지를 다시 설명 T_T:
1. 아래컴포넌트를 설치하여 컴포넌트(TNHSchedule)를 폼에 올려봅니다.
2. TLayout과 TSpeedButton이 각각 하나씩만 보여야하는데, 최초 디자인모드에서는 정상적으로 보임.
3. 실행파일로 만들어 실행해보면, TLayout과 TSpeedButton이 각각 2개로 보인다는 겁니다.
(디자인모드에서 컴포넌트를 Cut하고 Paste해보아도 TLayout과 TSpeedButton이 두개로 복제됩니다)
* 델파이 XE7(라이센스판)에서 나타나는 버그일 가능성이 많아 보이지만, 행여나 실수겠지라는 기대감에 조언을 구합니다.
버그라면 하루 속히 리포팅될 수 있었으면 좋겠습니다.
전 델파이로 실시간 객체생성을 주로 사용하여 컴포넌트를 만드는 편인데, 프로젝트를 진행할 수 없는 상황에 놓였습니다.
-- 아래 -- [컴포넌트 소스]
unit NHSchedule;
interface
uses
System.SysUtils, System.Classes, FMX.Types, FMX.Controls, FMX.Objects
, FMX.Layouts, FMX.StdCtrls;
type
TNHSchedule = class(TRectangle)
private
fTopLayout: TLayout;
fBtnYear: TSpeedButton;
protected
public
constructor Create(AOwner: TComponent); override;
published
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('N&H4FMX', [TNHSchedule]);
end;
constructor TNHSchedule.Create(AOwner: TComponent);
begin
inherited;
fTopLayout := TLayout.Create(self);
fTopLayout.Parent := self;
fTopLayout.Align := TAlignLayout.Top;
fBtnYear := TSpeedButton.Create(self);
fBtnYear.Parent := fTopLayout;
fBtnYear.Align := TAlignLayout.top;
fBtnYear.Text := '2016';
end;
end.
파이어몽키의 컴포넌트의 경우 VCL과 다르게 접근해야 합니다.
아래 글을 참고해서 스타일을 활용해 컴포넌트 제작해보시기 바랍니다.
http://docwiki.embarcadero.com/RADStudio/XE7/en/Creating_a_FireMonkey_Component_(Delphi)