Q&A

  • 콤포넌트동적생성시EAbstractError 아래와 같은 내용 -제목생략실수^^;;
저는 지금 쿼리툴을 만들고 있습니다.

다른 사람 소스를 참고 하며 만들면서 소스와 똑같은 구조로 해봤는데 저한테만 에러가

자꾸 나는 것같아 도움을 청합니다.



폼에 스크롤 박스를 동적생성하고 버튼클릭이벤트때 닫기버튼 올라와 있는 판넬을 동적생성하고 닫기 버튼을 다시 누르면 판넬이 없어지는 것인데

닫기버튼 클릭할때마다 EAccess나 EAbstractError가 발생합니다.



그 부분만 떼서 올렸는데 어디가 잘못됐는지 조언 좀 부탁드립니다.





unit Unit1;



interface



uses

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

StdCtrls, ExtCtrls;



type

TAPanel = class(TPanel)

Btn : TButton;

procedure btnClick(Sender: TObject);

public

constructor Create(AOwner: TComponent); override;

Destructor destroy; override;

end;

TForm1 = class(TForm)

Panel1: TPanel;

Button1: TButton;

Button2: TButton;

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;



var

Form1: TForm1;

APanel : TAPanel;

AScroll : TScrollBox;

implementation



{$R *.DFM}



procedure TForm1.Button1Click(Sender: TObject);

var

x, y : Integer;

begin



APanel := TAPanel.Create(Self);

APanel.Parent := AScroll;

APanel.Top := RanDom(AScroll.Height);

APanel.Left := RanDom(AScroll.Width);

APanel.Btn.OnClick := APanel.btnClick;

end;



procedure TForm1.FormCreate(Sender: TObject);

begin

Ascroll := TSCrollBox.Create(Self);

AScroll.Parent := Self;

AScroll.Align := alClient;

end;



{ TAPanel }



procedure TAPanel.btnClick(Sender: TObject);

begin

Self.free; //여기서 EAbstractError발생

end;



constructor TAPanel.Create(AOwner: TComponent);

begin

inherited;

Btn := TButton.Create(Self);

Btn.parent := Self;

Btn.Caption := 'x';



end;



destructor TAPanel.destroy;

begin

inherited;

end;



end.



/////////////여기는 폼소스

object Form1: TForm1

Left = 192

Top = 107

Width = 696

Height = 480

Caption = 'Form1'

Color = clBtnFace

Font.Charset = DEFAULT_CHARSET

Font.Color = clWindowText

Font.Height = -11

Font.Name = 'MS Sans Serif'

Font.Style = []

OldCreateOrder = False

OnCreate = FormCreate

PixelsPerInch = 96

TextHeight = 13

object Panel1: TPanel

Left = 0

Top = 392

Width = 688

Height = 61

Align = alBottom

Caption = 'Panel1'

TabOrder = 0

object Button1: TButton

Left = 72

Top = 24

Width = 75

Height = 25

Caption = 'Button1'

TabOrder = 0

OnClick = Button1Click

end

object Button2: TButton

Left = 192

Top = 16

Width = 75

Height = 25

Caption = 'Button2'

TabOrder = 1

end

end

end



1  COMMENTS
  • Profile
    김영대 2000.10.14 21:29
    안녕하세여...



    아래에 소스는 문제가 없는것 같습니다.

    지금 제컴에서는 아주 잘되거든여..

    문제가 다른곳에 있지 않는지 확인해 보세여..

    그럼 이만



    jinnon wrote:

    > 저는 지금 쿼리툴을 만들고 있습니다.

    > 다른 사람 소스를 참고 하며 만들면서 소스와 똑같은 구조로 해봤는데 저한테만 에러가

    > 자꾸 나는 것같아 도움을 청합니다.

    >

    > 폼에 스크롤 박스를 동적생성하고 버튼클릭이벤트때 닫기버튼 올라와 있는 판넬을 동적생성하고 닫기 버튼을 다시 누르면 판넬이 없어지는 것인데

    > 닫기버튼 클릭할때마다 EAccess나 EAbstractError가 발생합니다.

    >

    > 그 부분만 떼서 올렸는데 어디가 잘못됐는지 조언 좀 부탁드립니다.

    >

    >

    > unit Unit1;

    >

    > interface

    >

    > uses

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

    > StdCtrls, ExtCtrls;

    >

    > type

    > TAPanel = class(TPanel)

    > Btn : TButton;

    > procedure btnClick(Sender: TObject);

    > public

    > constructor Create(AOwner: TComponent); override;

    > Destructor destroy; override;

    > end;

    > TForm1 = class(TForm)

    > Panel1: TPanel;

    > Button1: TButton;

    > Button2: TButton;

    > procedure Button1Click(Sender: TObject);

    > procedure FormCreate(Sender: TObject);

    > private

    > { Private declarations }

    > public

    > { Public declarations }

    > end;

    >

    > var

    > Form1: TForm1;

    > APanel : TAPanel;

    > AScroll : TScrollBox;

    > implementation

    >

    > {$R *.DFM}

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > x, y : Integer;

    > begin

    >

    > APanel := TAPanel.Create(Self);

    > APanel.Parent := AScroll;

    > APanel.Top := RanDom(AScroll.Height);

    > APanel.Left := RanDom(AScroll.Width);

    > APanel.Btn.OnClick := APanel.btnClick;

    > end;

    >

    > procedure TForm1.FormCreate(Sender: TObject);

    > begin

    > Ascroll := TSCrollBox.Create(Self);

    > AScroll.Parent := Self;

    > AScroll.Align := alClient;

    > end;

    >

    > { TAPanel }

    >

    > procedure TAPanel.btnClick(Sender: TObject);

    > begin

    > Self.free; //여기서 EAbstractError발생

    > end;

    >

    > constructor TAPanel.Create(AOwner: TComponent);

    > begin

    > inherited;

    > Btn := TButton.Create(Self);

    > Btn.parent := Self;

    > Btn.Caption := 'x';

    >

    > end;

    >

    > destructor TAPanel.destroy;

    > begin

    > inherited;

    > end;

    >

    > end.

    >

    > /////////////여기는 폼소스

    > object Form1: TForm1

    > Left = 192

    > Top = 107

    > Width = 696

    > Height = 480

    > Caption = 'Form1'

    > Color = clBtnFace

    > Font.Charset = DEFAULT_CHARSET

    > Font.Color = clWindowText

    > Font.Height = -11

    > Font.Name = 'MS Sans Serif'

    > Font.Style = []

    > OldCreateOrder = False

    > OnCreate = FormCreate

    > PixelsPerInch = 96

    > TextHeight = 13

    > object Panel1: TPanel

    > Left = 0

    > Top = 392

    > Width = 688

    > Height = 61

    > Align = alBottom

    > Caption = 'Panel1'

    > TabOrder = 0

    > object Button1: TButton

    > Left = 72

    > Top = 24

    > Width = 75

    > Height = 25

    > Caption = 'Button1'

    > TabOrder = 0

    > OnClick = Button1Click

    > end

    > object Button2: TButton

    > Left = 192

    > Top = 16

    > Width = 75

    > Height = 25

    > Caption = 'Button2'

    > TabOrder = 1

    > end

    > end

    > end

    >