Q&A

  • 분류먼저 해주시길 부탁드립니다.
TreeView1.Selected.SelectedItem은 TreeView의 항목을 클릭했을때 클릭한

항목을 지정하는 것인데 이때 case 문으로 각 항목의 인덱스를 적어놓고

각 항목을 지정할때 마다

begin

packet :='';

case TreeView1.Selected.SelectedItems of

8: packet := Chr($2B) + Chr(06) + Chr($01) + Chr($02) + Chr($01) + Chr($01)

+ Chr($01) + Chr($00);

이런식으로 여러개의 항목들을 정의를 했습니다.



그런데 트리뷰에서 항목을 한 4번째 정도 지정하면 다음과 같은

에러가 납니다.



"메모리에 쓸수가 없다"



packet은 글로발 변수로 지정되어 있고 처음 시작할때 초기화 시켜

주었죠(변수에 할당되는 메모리 공간을 비웠다는 뜻)



이 packet는 Get,Getnext 버튼이 있는데 이 버튼이 눌러질때 마다 Getpdu,

Getnextpdu가 보내지는데 거기에 잇는 pdu에 아래와 같이 추가 됩니다.



pdu := Chr($06) + Chr (Length (packet)) + packet + pdu ;



내 생각에는 아까와 같은 에러가 나는 이유가 트리뷰의 항목들을

클릭할때마다 packet에 들어간 값들이 다시 초기화 되지 않아서 그런것이

아닌가 생각하는데 packet은 Button1Click, Button2Click 프로시져의 2군데에

쓰입니다.

TreeViewClick프로시져에서 packet:=''; 을 한번 써 주면 버튼 1, 2

프로시져에서는 packet을 초기화 시켜 주지 않아도 되지요?

만약 packet을 button1click, button2click 프로시져에서도 초기화 시켜 줘야

된다면 어떻게 해야 할까요..

실제로 TreeViewClick에서 정의한 packet의 값이 버튼1과 버튼2에도

들어가기 때문에 그들 프로시져의 처음부분에서 packet을 초기화

시켜줄수 없어요..

왜냐하면 packet :='';를 그들 프로시져의 처음에 적으면

pdu := Chr($06) + Chr (Length (packet)) + packet + pdu ;

의 packet에는 아무 데이타도 들어가지 않죠

질문이 이해가 가시나요/

저는 그런에러가 나는게 이 packet의 값이 초기화 되지 않아서라고

짐작햇어요..

답을 ... --;





1  COMMENTS
  • Profile
    송창규 2000.01.18 00:38
    제가 생각하기엔 packet의 초기화 문제로 인해 생기는것 같지 않군요

    우선

    1.항목을 지정할때마다 "packet = '';"에 의해 초기화가 되고

    2.프로그램 시작시에 초기화를 하셨다고 하셨고

    3.packet이 전역변수라 하셨으니 사실 시작시에 초기화를 하지 않았어도

    초기화가 되었을 것입니다.



    질문을 이해하기가 많이 힘들더군요 - -;. 차라리 관련 프로시저를

    그냥 보여주시면 나을 거라 생각되네요. 제가 나름대로 이해한 바로는..

    Get, GetNext버튼이 Button1, Button2 이고 이 둘 중 하나를 클릭하면

    pdu를 처리하는 함수에 의해 packet이 쓰인다는 말씀이죠?

    여기서 의문나는것 또 하나가 항목을 4개 정도 지정하면 바로 에러가

    뜬다고 하셨는데, 그러면 Button1Click, Button2Click 까지 가기 전에

    에러 원인이 있다는 뜻 아닐까요?

    의심나는 부분(TreeViewClick)의 처음에 BreakPoint를 걸어놓고

    4번째 클릭할때 F8을 누르면서 어디서 에러가 나는지를 트레이싱해보세요.

    그럼..



    P.S

    8: packet := Chr($2B) + Chr(06) + Chr($01) + Chr($02) + Chr($01) + Chr($01)

    + Chr($01) + Chr($00);

    이 부분은

    8: packet := #$2b#$06#$01#$02#$01#$01#$01#$00;

    으로 간략하게 표현할 수 있습니다. 참고하세요.



    최 소 영 wrote:

    > TreeView1.Selected.SelectedItem은 TreeView의 항목을 클릭했을때 클릭한

    > 항목을 지정하는 것인데 이때 case 문으로 각 항목의 인덱스를 적어놓고

    > 각 항목을 지정할때 마다

    > begin

    > packet :='';

    > case TreeView1.Selected.SelectedItems of

    > 8: packet := Chr($2B) + Chr(06) + Chr($01) + Chr($02) + Chr($01) + Chr($01)

    > + Chr($01) + Chr($00);

    > 이런식으로 여러개의 항목들을 정의를 했습니다.

    >

    > 그런데 트리뷰에서 항목을 한 4번째 정도 지정하면 다음과 같은

    > 에러가 납니다.

    >

    > "메모리에 쓸수가 없다"

    >

    > packet은 글로발 변수로 지정되어 있고 처음 시작할때 초기화 시켜

    > 주었죠(변수에 할당되는 메모리 공간을 비웠다는 뜻)

    >

    > 이 packet는 Get,Getnext 버튼이 있는데 이 버튼이 눌러질때 마다 Getpdu,

    > Getnextpdu가 보내지는데 거기에 잇는 pdu에 아래와 같이 추가 됩니다.

    >

    > pdu := Chr($06) + Chr (Length (packet)) + packet + pdu ;

    >

    > 내 생각에는 아까와 같은 에러가 나는 이유가 트리뷰의 항목들을

    > 클릭할때마다 packet에 들어간 값들이 다시 초기화 되지 않아서 그런것이

    > 아닌가 생각하는데 packet은 Button1Click, Button2Click 프로시져의 2군데에

    > 쓰입니다.

    > TreeViewClick프로시져에서 packet:=''; 을 한번 써 주면 버튼 1, 2

    > 프로시져에서는 packet을 초기화 시켜 주지 않아도 되지요?

    > 만약 packet을 button1click, button2click 프로시져에서도 초기화 시켜 줘야

    > 된다면 어떻게 해야 할까요..

    > 실제로 TreeViewClick에서 정의한 packet의 값이 버튼1과 버튼2에도

    > 들어가기 때문에 그들 프로시져의 처음부분에서 packet을 초기화

    > 시켜줄수 없어요..

    > 왜냐하면 packet :='';를 그들 프로시져의 처음에 적으면

    > pdu := Chr($06) + Chr (Length (packet)) + packet + pdu ;

    > 의 packet에는 아무 데이타도 들어가지 않죠

    > 질문이 이해가 가시나요/

    > 저는 그런에러가 나는게 이 packet의 값이 초기화 되지 않아서라고

    > 짐작햇어요..

    > 답을 ... --;

    >

    >