Q&A

  • MDI에서 Child종료후 재실행시 에러...
안녕하세요...델파이 초보자 입니다.

MDI에 관해 막히는 부분이있어 질문글을 작성합니다.

MDI에 메뉴에서 메뉴 클리시에

procedure TmainMDIform.M1_01Click(Sender: TObject);
var
     i : Integer;
begin
     If ActiveMDIChild <> Nil then
     begin
          For i := MdiChildCount - 1 downto 0 do
          begin
               if MDIChildren[i].Name = 'frm_Delivery' then
               begin
                    frm_Delivery.Show;
                    Exit;
               end;
          end;
end else begin
     frm_Delivery:=Tfrm_Delivery.Create(Self);
     frm_Delivery.Show;
end;
end;

실행시켜 Child폼이 하나 생성이 됩니다.

그후 Child폼에서 종료(onClose)하면

procedure Tfrm_Delivery.FormClose(Sender: TObject;
     var Action: TCloseAction);
begin
     Action := caFree;
end;

이걸로 종료를 시킵니다.

그런데 다시 메뉴를 클릭하여 frm_Delivery를 실행하려고 하면

메모리에 없는곳에 접근 하려는 에러 메세지(access vio....)가 뜨네요

CaFree를 하면 메모리 자체에서도 없어지나여?

CaFree대신 다른걸 사용할수 있나요?

Close하면 다른 에러가 나던데....

답변 부탁점 드리겠습니다...
3  COMMENTS
  • Profile
    고락춘 2004.09.08 22:28
    제목처럼 소나기님, 닐리리님 답변감사합니다.

    두분께서 알려주신 방법대로 하니 처리가 되네요

    원인은 Child프로세서에 이상이 있는것 같군요...

    일단 원인을 찾아봐야겠네요...

    수고하세요..^^
  • Profile
    석주현 2004.09.08 08:00
    복잡하게 하지 마시고

      if FindComponent('frm_Delivery') = nil then
        begin
         frm_Delivery := Tfrm_Delivery.Create(Self);
         frm_Delivery.Show;
        end;

    이렇게 해주세요.
    물론 child 폼에
    close 이벤트에는 Action := caFree; 넣어야 하겠죠.

    그럼 이만.
  • Profile
    nilriri™ 2004.09.08 04:53
    Action := caFree;  를 써주신다고 해서 메모리에서 해제가 안됩니다.

    해서

    If ActiveMDIChild <> Nil then

    이게 결과가

    True가 되는거죠..

    FormDestroy 이벤트에서

    frm_Delivery := nil;

    이라는 코드를 추가해 줘보십시오.

    이런식으로 하셔도 됩니다..^^;



       if Not Assigned(frmBrowser) then
       begin
          frmBrowser := TfrmBrowser.Create(Self);
       end;

       frmBrowser.Show;






    procedure TfrmBrowser.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
       Action := caFree;
    end;

    procedure TfrmBrowser.FormDestroy(Sender: TObject);
    begin
       frmBrowser := nil;
    end;



    • 박준철
      2004.09.11 01:53
      function FilterNumber(sNum:string):string; var   i : integer; begin   Resu...
    • 오병주
      2004.09.10 03:36
      폼 Create 설정하는 방법입니다..^^ procedure TForm1.FormCreate(Sender TObject); begin  &n...
    • 석주현
      2004.09.10 07:35
      내용 없어요..
    • 이승민
      2004.09.10 03:10
      procedure Tfrom1.Edit1KeyPress(Sender: TObject; var Key: Char); begin   If Not (Key In [...
    • 김형균
    • 2004.09.09 22:36
    • 7 COMMENTS
    • /
    • 0 LIKES
    • 김형균
      2004.09.10 00:59
    • 김형균
      2004.09.09 23:48
      저가 잘못 써서 의미 전달이 잘 되지 않은것 같습니다..소스를 올려 보겠습니다. 저의 의도는 루프를 돌면...
    • 김춘경
      2004.09.09 23:40
      쿼리문으로 조건에 해당하는 레코드를 추출해서 하면 됩니다. _SQL := 'select * from T1, T2 where T...
    • 이중철
      2004.09.09 23:44
      'select * from T1, T2 where    (T1.field1 <> T2.field1    OR T1.field...
    • 김춘경
      2004.09.09 23:52
      ^^ 온라인상에서 쓰다 보니... 제 의도는 여러 필드중 어느 하나라도 틀리면 셀렉트 하도록 했습니다. ...
    • 파멸의슬픔
      2004.09.09 23:25
      소스만 보고 판단했습니다... 이렇게 한번 바꿔 보세요...   q1.sql.add('select * from test...
    • 이중철
      2004.09.09 23:23
      소스를 봐서는 목적하는것이 무엇인지 잘 모르겠네요 ^^ 먼저 SQL로 해결이 가능하다면 SQL로 하는것이 합...
    • 문의득
    • 2004.09.09 20:58
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 문의득
    • 2004.09.09 20:52
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 일그니
      2004.09.09 22:02
      dbnmpntw.dll와 ntwdblib.dll을 path가 걸린 폴더 system같은 곳에 복사해 넣어주십시요. 중복되있을...
    • 달님
    • 2004.09.09 19:40
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 이중철
      2004.09.09 21:07
      소나기 님이 답변하신 내용이 맞습니다. 그러나 좀 보완해서 Edit1KeyPress 이벤트에서 아래와 같이 처...
    • 석주현
      2004.09.09 20:07
      Edit1KeyPress 이벤트에서 아래와 같이 처리 하는 방법이 있고요.   if not (Key in ['0'..'9...
    • 모영철
      2004.09.09 19:43
    • 김형균
    • 2004.09.09 19:39
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김춘경
      2004.09.10 03:26
      아마도 DB가 작업하는 임시파일이 아닐까요? 님이 의도적으로 만든 파일이 아니라면 지우셔도 무방할 겁...
    • 김용렬
    • 2004.09.09 19:03
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 일그니
      2004.09.09 22:34
      StartTransaction은. 현재 작업중인 테이블을 딴넘들이 쓰지 못하게 하는의미로 알고 잇습니다. 작업이...
    • 석주현
      2004.09.09 14:50
      "MSComm"으로 검색 해 보시면 아래와 같이 나옵니다. 검색을 해보시고 질문을 해주시는게 좋을 것 같네요....
    • 온진욱
      2004.09.09 20:16
      님께서 알려주신 방법을 한번 찾아서 해본적이 있었는데 그때 안되길래 잘못 안건가 하고 지워버렸었는데 ...
    • Galaxy
      2004.09.09 18:50
      안녕하세요 수고 많습니다. 다른 방법은 없을까요? 답변 주신 대로 하니까 . 별 문제는 없는데... 그...
    • 오재열
      2004.09.09 04:47
      짧은 생각인데.. 해당 KeyPress가 끝나면 Key값이 반영 되지 않나요? Apple이 먼저 적용되고 Key값 'A'가 ...
    • Galaxy
      2004.09.09 05:12
    • 메니아
    • 2004.09.08 23:23
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2004.09.09 00:15
      "Process32First" 로 검색해 보세요. Process32First 와 Process32Next 가 같이 쓰이고요. 용...
    • 김형균
    • 2004.09.08 23:00
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 김형균
      2004.09.09 19:58
    • 착한천사
      2004.09.09 03:22
      착한천사 김경록입니다.. 저도 크고 작은 프로젝트를 해 본 적이 있어서.. recordcount의 부정확함을 ...
    • 누렁이
      2004.09.09 01:21
      아래 요부분을   for j := 0 to qry.RecordCount -1 do   begin 요렇게 한번 바...
    • nilriri™
      2004.09.09 00:36
      레코드 카운터에 대한 답변은 아니구요.. 잠깐 소스를
    • 구창민
      2004.09.08 23:15
      안녕하세요.. Query.FetchAll ;  한번 해보시구요.. 그래도 안된다면   COUN...
    • 우용우
    • 2004.09.08 19:19
    • 1 COMMENTS
    • /
    • 0 LIKES
    • ㉳㉥ㅗ㉣ㅐ㉧ㅛ
      2004.09.08 21:05
      근디요 왜 그렇게 쓰실려구... 혹시 아나요 그 이유를 알면 다른 방법이 생각날지
    • 석주현
      2004.09.08 05:52
      onMouseMove 에서 Shift 값을 읽어 보면 알 수 있습니다.   if ssLeft in Shift then &n...
    • 허상무
      2004.09.08 20:51
      답변 감사합니다. 사실 제가 원하는 것은 마우스 상태를 알 수 있는 명령어(System 명령어 포함)를 ...
    • 석주현
      2004.09.08 21:24
      음 보통 드래그엔 드롭을 할때 오토메틱으로 하지 않는것으로 알고 있습니다. 왜냐면 제가 말씀드린 ...
    • 고락춘
    • 2004.09.08 03:30
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 고락춘
      2004.09.08 22:28
      제목처럼 소나기님, 닐리리님 답변감사합니다. 두분께서 알려주신 방법대로 하니 처리가 되네요 원인...
    • 석주현
      2004.09.08 08:00
      복잡하게 하지 마시고   if FindComponent('frm_Delivery') = nil then    &...
    • nilriri™
      2004.09.08 04:53
      Action := caFree;  를 써주신다고 해서 메모리에서 해제가 안됩니다. 해서 If ActiveMDI...
    • 고진중
    • 2004.09.08 03:14
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 바부팅
    • 2004.09.08 00:24
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이중철
      2004.09.08 03:09
      음 제가보기에는 윈속스레드가 계속 생성되었거나 S/W내의 유사 스레드가 계속 생성되어 결국 L4계층이나 ...
    • 파멸의슬픔
      2004.09.08 01:28
      우선 하신 말씀중에 10중 8,9번은 정상적인 재부팅조차 제대로 되지 않는다고 하셨습니다... 정상적으로 ...
    • 김현철
    • 2004.09.08 00:14
    • 1 COMMENTS
    • /
    • 0 LIKES
    • nilriri™
      2004.09.08 01:57
      http://www.qusoft.com/delphilegacy.html http://www.qusoft.com/ordering.html 참고하세요... ...
    • 꿈의대화
      2004.09.08 02:36
      .
    • ㉳㉥ㅗ㉣ㅐ㉧ㅛ
      2004.09.08 18:19
      그럼 ODBC 말구 BDE의 정보는요... 오라클로 alias를 잡은 DB의 IP를 알수는 없을까요?
    • 정찬희
      2004.09.08 00:32
      직접 만드셔야 할듯... function getHostFilePath: string; var   buf: array[1..1024] of ...
    • 이상국
      2004.11.04 16:44
      wind98 에서는 c:\windows 에 위치하므로.. 약간의 추가 라인이 필요할 듯 합니다.
    • 최동석
      2004.09.08 00:50
      답변 감사드립니다. 그런데 아래의 function을 사용하면 windows98에서는 안될것 같습니다. 보통 OS에 ...
    • 정찬희
      2004.09.08 06:38
      답글쓰면서도 좀 찜찜하긴 했어요...^^