Q&A

  • 다시한번 올립니다..동적 생성시킨 paintbox에서..
제목 그대로입니다.



paintbox를 동적생성시킨 후

onpaint 이벤트를 호출한후 //여기까지는 됐는데..



canvas를 이용해 그래프를 그리려고 하는데..

access violation 메세지가 뜨는데..

어떻게 된거죠?

동적생성시킨 paintbox는 canvas를 인식못하나요?



1  COMMENTS
  • Profile
    김영대 1999.10.08 20:12
    최영란 wrote:

    > 제목 그대로입니다.

    >

    > paintbox를 동적생성시킨 후

    > onpaint 이벤트를 호출한후 //여기까지는 됐는데..

    >

    > canvas를 이용해 그래프를 그리려고 하는데..

    > access violation 메세지가 뜨는데..

    > 어떻게 된거죠?

    > 동적생성시킨 paintbox는 canvas를 인식못하나요?



    확실치는 않지만 PaintBox가 생성하기 전에

    PaintBox를 참조하는 루틴이 먼저 실행되서 그러지 않을까요?

    동적으로 생성된 Object를 참조할때는 Assigned() 를 사용해서

    정확히 생성이 되었는지 확인하고 사용하면 에러를 막을 수 있습니다

    PaintBox.Canvas 를 사용하는 예제는 아래와 같습니다



    unit Unit1;



    interface



    uses

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

    StdCtrls, extctrls;



    type

    TForm1 = class(TForm)

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure FormDestroy(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;

    pbox: TPaintBox;



    implementation

    {$R *.DFM}



    procedure TForm1.FormCreate(Sender: TObject);

    begin

    pBox := TPaintBox.Create(self) ;

    pBox.Parent := Form1 ;

    pBox.Align := alClient;

    end;



    procedure TForm1.FormDestroy(Sender: TObject);

    begin

    if Assigned(pBox) then

    pBox.Free;

    end;



    procedure TForm1.Button1Click(Sender: TObject);

    var

    bitMap: TBitmap;

    begin

    bitMap := TBitmap.Create ;

    bitMap.LoadFromFile('Factory.bmp');

    try

    if Assigned(pBox) then

    begin

    pBox.Repaint;

    pBox.Canvas.StretchDraw(Rect(0,0,pBox.Width,pBox.Height), bitMap);

    // 아래는 스트래치를 안한 원본 그림을 그릴때 사용

    // pBox.Canvas.Draw(0,0, bitmap);

    pBox.Canvas.MoveTo(0,0);

    pBox.Canvas.LineTo(50, 50);

    end;

    finally

    bitMap.Free;

    end;

    end;



    end.