완존 쌩초보입니다.
모달폼을 열구 닫을때...
Modalresult:=mrok;
글구 엄마폼에서 모달폼을 여는 버튼 클릭이벤트
procedure TfrmRegMater.SpeedButton5Click(Sender: TObject);
begin
if not(assigned(FrmRegMaterm)) then //아직 생성안되있으면 생성
FrmRegMaterm := TFrmRegMaterm.Create(nil);
frmregmaterm.showmodal;
if frmregmaterm.ModalResult = mrok then
begin
frmregmaterm.Close;
frmregmaterm.Free;
end;
end;
end.
이렇게 했습니다..
근데..실행시켜서..
모달폼 한번 열구 닫을때는 상관이 없는데..
다시 두번째 열라구 버튼을 클릭하면 에라가 발생합니다..
이유가 먼지 몰겠슴다...
모달폼이 닫히면서 free가 실행되서 그런것 같은데..
(그부분을 없애면 에러 없음..)
책에보니 free라는것이 메모리를 모달폼에 할당된 메모리를 해제해 준다고 하더군요..
그럼.. 다시 모달폼 부르는 버튼 누를때..
뭔가가 다시 메모리를 할당해 주어야 하는것 같은데..
그게 안되는 모냥입니다..
그것좀 알려주심 고맙겠습니다..
구럼.. 항상 즐플, 즐델 하시궁..
행복한 하루 보내세욥~~!!!!
우선 문제의 원인은 이부분입니다.
쩝 뭐라고 설명해야 쉬울까여...쩝 지두 욜라 아는게 움써서리..움헤헤...^^;;
걍 무식하게 지가 아는데로 적겠습니다....
물론 처음 한번은 잘 될것입니다.
FrmRegMaterm <- 이넘이 생성이 안돼어있고 메모리 할당이 안돼어 있으니까여
그래서 처음에는 FrmRegMaterm := TFrmRegMaterm.Create(nil);
이넘을 잘 실행 하져....바뚜....그러나
frmregmaterm.Free; 이넘을 만나고 난뒤 분명히 free를 시켰음에도
불구 하고 frmregmaterm 이넘은 완전한 메모리 해제를 하지 못합니다.
한마디로 nil 이 아니라는 얘기죠 도움말에도 보면(지가 욜라 영어 몬해서 정확한지는 알수 움쑴 ^^) 어떤 개체는 소유주가 메모리 해제 될때가지 완전히 메모리 헤제를 하지 못한다고 나와있습니다.
쩝 비유가 될런지 모르지만 밥그릇 안에 밥만 제거시키고 밥 그릇만 남은 상태죠.. 원래는 밥그릇 까지 치워야 하는데.....밥상이 없어질때까지는 밥 그릇도 남아있다는 거죠.... 쩝 이거 말이 되는겨? 캬캬캬...^^;;
고로 다음번
이넘을 만나면 밥 그릇은 아직 남아 있으니 걍 넘어가서
다음 코드를 실행 안하는거죠...
그러면 다음 코드에서는
아뛰 밥두 없는데 뭘 먹으라는겨 하면서 밥 내놓으라고 땡강을 부리는 거져...
캬캬캬..
그럼 어케 하느냐....
걍 쉽게 하자면 frmregmaterm :=nil ; 요렇게 하면 됩니다만...
전 어디에서도 요렇게 쓰는걸 못봤습니다..... 왜그러쥐?
지두 이렇게는 안쓰걸라여........^^
고수님둘...왜그러죠? 쩝 갑자기 궁금하당....에궁 생각하는거 정말 구찮어...
여하튼 정리해서 써보면 요렇게 쓰시면 됩니다.
if not(assigned(FrmRegMaterm)) then //아직 생성안되있으면 생성
FrmRegMaterm := TFrmRegMaterm.Create(Application);
if frmregmaterm.showmodal = mrok then
begin
frmregmaterm:=nil;
end;
이상 정리 안돼는 허접 답변이었습니다.