안녕하세요...
초보자라 엉뚱한 부분에서 막혀서 고수님들께 조심스레 조언을 구하고져합니다..
클래스(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.
> 안녕하세요...
> 초보자라 엉뚱한 부분에서 막혀서 고수님들께 조심스레 조언을 구하고져합니다..
>
> 클래스(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할 수 있었습니다..
너무 엉뚱한 것 가지고 물의를 일으켜 죄송합니다..