Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[12345] Re:Re:Re:컴포넌트의 함수를 오버라이딩해서 쓸 수 있나요?
DrK [whitekid] 1570 읽음    2008-12-24 17:33
이건 참 설명하기 어려운데... 그냥 소스 보면 이해될겁니다.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TButton = class(StdCtrls.TButton)
  public
    procedure Click; override;
  end;


  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TButton }

procedure TButton.Click;
begin
  inherited;

  Form1.Label1.Caption := 'Button clicked';
end;

end.


일종의 트릭인데... 런타임에 DFM 리소스를 읽어서 해당 폼을 구성하는 콤포넌트를 생성하겠지요.. 이때 내가 원하는 콤포넌트로 바꿔 버리는 겁니다. Naming scope(맞나?..)를 이용해서 StdCtrls에 있는 TButton을 찾기 전에 이 유닛의 TButton을 찾게하고 여기서 원하는 기능을 추가하면 됩니다.

하여간 StdCtrl.TButton이 아니라 Unit1.TButton을 생성하게 하는 트릭.. 하지만 이런 기능의 문제는
1. 해당 유닛의 모든 컴포넌트에 같이 적용되어 버린다.
   모든 버튼이 Unit1.TButton으로 생성되기에 모든 버튼을 클릭하면 레이블의 캡션을 변경해버리는 문제가 있죠. 이런 경우 TButton.Name이나 Tag를 이용하여 해당 기능을 수행하는 또다른 꽁수를 쓰게됩니다. 꽁수는 결국 계속된 꽁수를 낳게되죠..

2. 재사용성이 어렵다.
  이 유닛에서 구현한 기능을 또 다른 곳에도 필요하다면.. 그럴 경우 그냥 TMyButton 컴포넌트를 만드는 것이 상책이지만 이 역시도 꽁수가 있습니다.
  다른 유닛(Unit2.pas)에 TMyButton 이렇게 만들고... Unit1에는 class alias 또는 상속으로 해놓으면 되지요..
Unit2.pas
TMyButton = class(TButton)
public
   procedure Click; override;
end;


Unit1.pas
type
  TButton = class(TMyButton)
  end;

  TForm1 = class(TForm)
   blabla....

+ -

관련 글 리스트
12338 컴포넌트의 함수를 오버라이딩해서 쓸 수 있나요? 김정엽 1724 2008/12/23
12342     Re:컴포넌트의 함수를 오버라이딩해서 쓸 수 있나요? civilian 1960 2008/12/23
12344         Re:Re:컴포넌트의 함수를 오버라이딩해서 쓸 수 있나요? 김정엽 1789 2008/12/24
12345             Re:Re:Re:컴포넌트의 함수를 오버라이딩해서 쓸 수 있나요? DrK 1570 2008/12/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.