Q&A

  • Panel를 배열선언하여 사용시 문제...해결을 부탁합니다..
private

{ Private declarations }

Panel1 : array of array of TPanel;

Panel2 : array of array of TPanel;

Panel3 : array of array of TPanel;

Panel4 : array of TPanel;

------------------------------------------



조건에 따라서 주려고 합니다....

Panel1[I,J].Height := Height;

Panel1[I,J].Width := Width;

Panel1[I,J].Top := Top + ((Height+RowSpace) * I);

Panel1[I,J].Left := Left + ((Width+ColSpace) * J);

Panel1[I,J].BevelInner := bvRaised;

Panel1[I,J].BevelOuter := bvRaised;

Panel1[I,J].Name := 'AU';

Panel1[I,J].OnClick := 1Click;

Panel1[I,J].Parent := PanelArg;



문제는 이것이 생성이 되어 있는 지 안되었는지를 체크 하려구 합니다..



IF (Panel1[I,J].Visible = FALSE) and (Panel2[I,J].Visible = FALSE) and

(Panel3[I,J].Visible = FALSE) and (Panel4[I].Visible = FALSE) then

begin

Application.MessageBox('확인하시기 바랍니다!',

'주의',MB_ICONEXCLAMATION);



Exit;

end;



Panel이 없기 때문에 에러가 나는데 해결 방법을 모르겠습니다..

에러:"Access violation at address 0041FA1B in module"

해결을 부탁 합니다...꼭...



3  COMMENTS
  • Profile
    kylix 2001.04.26 23:40
    먼저 Panel1[I, J]가 nil인가를 판단을 하세요.



    if Panel1[I, J] <> nil then // 판넬이 생성되었으면...

    begin



    end;



    sho2505 wrote:

    > private

    > { Private declarations }

    > Panel1 : array of array of TPanel;

    > Panel2 : array of array of TPanel;

    > Panel3 : array of array of TPanel;

    > Panel4 : array of TPanel;

    > ------------------------------------------

    >

    > 조건에 따라서 주려고 합니다....

    > Panel1[I,J].Height := Height;

    > Panel1[I,J].Width := Width;

    > Panel1[I,J].Top := Top + ((Height+RowSpace) * I);

    > Panel1[I,J].Left := Left + ((Width+ColSpace) * J);

    > Panel1[I,J].BevelInner := bvRaised;

    > Panel1[I,J].BevelOuter := bvRaised;

    > Panel1[I,J].Name := 'AU';

    > Panel1[I,J].OnClick := 1Click;

    > Panel1[I,J].Parent := PanelArg;

    >

    > 문제는 이것이 생성이 되어 있는 지 안되었는지를 체크 하려구 합니다..

    >

    > IF (Panel1[I,J].Visible = FALSE) and (Panel2[I,J].Visible = FALSE) and

    > (Panel3[I,J].Visible = FALSE) and (Panel4[I].Visible = FALSE) then

    > begin

    > Application.MessageBox('확인하시기 바랍니다!',

    > '주의',MB_ICONEXCLAMATION);

    >

    > Exit;

    > end;

    >

    > Panel이 없기 때문에 에러가 나는데 해결 방법을 모르겠습니다..

    > 에러:"Access violation at address 0041FA1B in module"

    > 해결을 부탁 합니다...꼭...

    >

  • Profile
    sho2505 2001.04.27 03:19
    kylix wrote:

    > 먼저 Panel1[I, J]가 nil인가를 판단을 하세요.

    >

    > if Panel1[I, J] <> nil then // 판넬이 생성되었으면...

    > begin

    >

    > end;

    >



    답변 감사하구여....



    Panel이 있는지 없는지를 검사하려구 하는데요...

    있으면 되는거구여...

    없으면 생성을 시키려구 하는건데...

    문제는 있는지 없는지를 검사는 방법입니다...

    에러두 없어서 에러가 나는 건데...

    답변을...



  • Profile
    kylix 2001.04.27 06:40
    제 말이 그말인데요. 판넬을 생성해서 넣어주잖아요? 그러니까 판넬이 이미 생성되어 있다면 그 배열에 nil이 아닌값이 들어가 있을겁니다. 그래서 nil로 판단을 하는 겁니다.



    참고로 생성된 판넬을 Free할땐 FreeAndNil함수를 써서 그 배열에 nil이 들어가시도록 하시면 나중에 그 배열에 또 다시 넣을때도 이상없이 들어갈겁니다.



    판넬을

    sho2505 wrote:

    > kylix wrote:

    > > 먼저 Panel1[I, J]가 nil인가를 판단을 하세요.

    > >

    > > if Panel1[I, J] <> nil then // 판넬이 생성되었으면...

    > > begin

    > >

    > > end;

    > >

    >

    > 답변 감사하구여....

    >

    > Panel이 있는지 없는지를 검사하려구 하는데요...

    > 있으면 되는거구여...

    > 없으면 생성을 시키려구 하는건데...

    > 문제는 있는지 없는지를 검사는 방법입니다...

    > 에러두 없어서 에러가 나는 건데...

    > 답변을...

    >