Q&A

  • [급질문]Unit Form에서 생성된 Class Method override방식은 뭐죠?
안녕하세요...

초보자라 엉뚱한 부분에서 막혀서 고수님들께 조심스레 조언을 구하고져합니다..



클래스(TToppanel)에서 procedure의 형태만 만들어주고,

form에서 TToppanel위에 speedButton을 click시에 다른 Event를

발생시켜려 합니다.

조상클래스엔 형체만 잡아주고, 각Form에서 구체적으로

각각의 Form에서 Procedure를 재설정하여야 하는데 form에서

아래의 procedure를 어떻게 접근해야 하는지 모르겠습니다.



델파이는 다중 상속이 안되니,

Form1 = class(Tform,TTop)은 안될꺼고.....



어떤 방식으로 이 난국을 헤쳐갈까 고수님들께 여쭤봅니다.





unit TopPanel;



interface



uses

windows,Messages, SysUtils, Classes, Controls, ExtCtrls, Buttons, WinTypes, Forms, Graphics

,stdCtrls,Dialogs;

type

TSPBEvent = procedure(sender:TObject) of Object;

TTopPanel = class(TPanel)



private

{ Privated declarations }

FSPB1 : TSpeedButton;

FTopRight : TPanel;

FSPBOnClick : TSPBEvent;

public

{ Public declarations }

constructor Create(AOwn:TComponent);override;

procedure SPBOnClick(Sender:TObject);virtual;

procedure SPB1;virtual;

published

{ published declarations }

property OnClick:TSPBEvent read FSPBOnClick write FSPBOnClick;

end;





implementation



constructor TPanelTest.Create(AOwn:TComponent);

begin

inherited Create(AOwn);

FSPB1 := TSpeedButton.Create(Self);

FTopRight := TPanel.Create(Self);



procedure TPanelTest.SPBOnClick(sender:TObject);

begin

{ Button Inner Procedure }

if Sender = FSPB1 then SPB1;

end;





//-------------< 그 문제의 procedure >---------------------------------

procedure TPanelTest.SPB1;

begin

{ SPB1_OnClick procedure }

end;

//-----------------------------------



end.



(* ++++++++++++++++++++++++++++++++++++++++++++ *)



unit Unit1;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, ExtCtrls, Grids, AdvGrid,TopPanel;





type

TForm1 = class(TForm)

PanelA : TTopPanel;

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

procedure SPB1;override; <<<-----Error: Method 'SPB1' not found base class.--------

end;



var

Form1: TForm1;



implementation



{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

begin

PanelA := TPanelTest.Create(self);

with PanelA do

begin

parent := self;

caption := 'panelA';

Font.Name := '굴림체';

Font.Style := [];

Font.Size := 10;

Height := 50;

color := clYellow;

align := altop;

Top := 100;

left := 100;

width := 200;

height := 100;

show;

end;

end;



//-------------- < TTopPanel SpeedButton Onclick Event.. >-----------

procedure TForm1.PanelA.SPB1;

begin

{ SPB1_OnClick procedure}

showmessage('SPB1 is select...');

end;

//-------------------------------------------------------------------



end.





1  COMMENTS
  • Profile
    김재현 1999.11.29 21:45
    김재현 wrote:

    > 안녕하세요...

    > 초보자라 엉뚱한 부분에서 막혀서 고수님들께 조심스레 조언을 구하고져합니다..

    >

    > 클래스(TToppanel)에서 procedure의 형태만 만들어주고,

    > form에서 TToppanel위에 speedButton을 click시에 다른 Event를

    > 발생시켜려 합니다.

    > 조상클래스엔 형체만 잡아주고, 각Form에서 구체적으로

    > 각각의 Form에서 Procedure를 재설정하여야 하는데 form에서

    > 아래의 procedure를 어떻게 접근해야 하는지 모르겠습니다.

    >

    > 델파이는 다중 상속이 안되니,

    > Form1 = class(Tform,TTop)은 안될꺼고.....

    >

    > 어떤 방식으로 이 난국을 헤쳐갈까 고수님들께 여쭤봅니다.

    >

    >

    > unit TopPanel;

    >

    > interface

    >

    > uses

    > windows,Messages, SysUtils, Classes, Controls, ExtCtrls, Buttons, WinTypes, Forms, Graphics

    > ,stdCtrls,Dialogs;

    > type

    > TSPBEvent = procedure(sender:TObject) of Object;

    > TTopPanel = class(TPanel)

    >

    > private

    > { Privated declarations }

    > FSPB1 : TSpeedButton;

    > FTopRight : TPanel;

    > FSPBOnClick : TSPBEvent;

    > public

    > { Public declarations }

    > constructor Create(AOwn:TComponent);override;

    > procedure SPBOnClick(Sender:TObject);virtual;

    > procedure SPB1;virtual;

    > published

    > { published declarations }

    > property OnClick:TSPBEvent read FSPBOnClick write FSPBOnClick;

    > end;

    >

    >

    > implementation

    >

    > constructor TPanelTest.Create(AOwn:TComponent);

    > begin

    > inherited Create(AOwn);

    > FSPB1 := TSpeedButton.Create(Self);

    > FTopRight := TPanel.Create(Self);

    >

    > procedure TPanelTest.SPBOnClick(sender:TObject);

    > begin

    > { Button Inner Procedure }

    > if Sender = FSPB1 then SPB1;

    > end;

    >

    >

    > //-------------< 그 문제의 procedure >---------------------------------

    > procedure TPanelTest.SPB1;

    > begin

    > { SPB1_OnClick procedure }

    > end;

    > //-----------------------------------

    >

    > end.

    >

    > (* ++++++++++++++++++++++++++++++++++++++++++++ *)

    >

    > unit Unit1;

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > StdCtrls, ExtCtrls, Grids, AdvGrid,TopPanel;

    >

    >

    > type

    > TForm1 = class(TForm)

    > PanelA : TTopPanel;

    > Button1: TButton;

    > procedure Button1Click(Sender: TObject);

    > private

    > { Private declarations }

    > public

    > { Public declarations }

    > procedure SPB1;override; <<<-----Error: Method 'SPB1' not found base class.--------

    > end;

    >

    > var

    > Form1: TForm1;

    >

    > implementation

    >

    > {$R *.DFM}

    > procedure TForm1.Button1Click(Sender: TObject);

    > begin

    > PanelA := TPanelTest.Create(self);

    > with PanelA do

    > begin

    > parent := self;

    > caption := 'panelA';

    > Font.Name := '굴림체';

    > Font.Style := [];

    > Font.Size := 10;

    > Height := 50;

    > color := clYellow;

    > align := altop;

    > Top := 100;

    > left := 100;

    > width := 200;

    > height := 100;

    > show;

    > end;

    > end;

    >

    > //-------------- < TTopPanel SpeedButton Onclick Event.. >-----------

    > procedure TForm1.PanelA.SPB1;

    > begin

    > { SPB1_OnClick procedure}

    > showmessage('SPB1 is select...');

    > end;

    > //-------------------------------------------------------------------

    >

    > end.

    >

    >

    죄송해요...

    Panel Class를 다른 클래스(TPanelB)로 상속 받고..

    상속받은 클래스에 대해서 멤버 변수를 선언하니깐...

    조상 클래스의 Method를 접근하여 override할 수 있었습니다..

    너무 엉뚱한 것 가지고 물의를 일으켜 죄송합니다..