ActiveForm 에서 데이터 입력을 붇는 부분에서 작은 창 하나를
열려고 합니다
그런데 그냥 폼하고는 다른것이 있더군여
form1 은 ActiveForm 이고
form2 은 TForm 보통폼이죠..
근데..
form1 에서 소스의 예
if form2 = nil then Tform2.Create(self);
form2.edit1.text := 'aaa';
form2.showmodal;
이럴경우 문제가 없이 작동합니다.
그런데.. 정작 form2에서는 form1을 우째 할방법이 없음더..
uses 에서도 다 둘다 이상없이 했는데 잘 안됨더..
혹시 두 폼다 activeForm 으로 해야 하나여 ?
그렇게 하니까 html 파일에 두개가 뚝 하고 나타 나니 우쩔수가 없더라구여..
그리고 팀모아 이던가 강의실에 두 ActiveForm 에서 데이터 전송 이란걸 봤는데..
그런것은 뭐 알겠는데.. form2 가 Close 될때 form1에서는 어떻게 처리해야 하나요..
즉, form2가 Close 되었다는 이벤트는 form1에서 알아야 하는 그런 사태가 발생함더..
쩝..
고수님... 핼프미.. 쩝...
띄운 창을 죄다 죽일려고 하는것 아닌지..
아래 글은 제가 다른 질문에도 올렸던 글인데요. 혹시 참고가 되지 않을까 해서요...
먼저 ActiveX에서는 Tform을 Auto Create하지 못하기 때문에 수동으로 Create 하는데요
ActiveX form 에서 일단 Create 를 해주면 ( ex-> frmMain := TfrmMain.Create(nil); )
종료시에 생성되었던 frmMain을 풀어줘야 한다는 것입니다.
즉 frmMain.Free(); 이렇게요....
그런데 여기서 문제는 끝나지 않더라고요 ActiveX form에서 어떤 이벤트에 의해서
생성된 frmMain 같은 form같은 것이 떠 있는 상태에서 브라우져를 죽이게 되면
에러가 생길 겁니다.
정말 미치는 경우죠.
하지만 저도 1년여 정도를 헤메다가 방법을 찾았습니다.
혹시 IE에서 OCX에 파라메타를 전송하는 방법을 아시는지요.
하여간 html에는 onload 와 onunload가 있는데 이놈들을 이용하는 거죠.
onload에서 값을 ocx에 넘겨서 어떤 처리를 할 수도 있고(인증같은거) onunload는 IE를 죽일때
OCX에 값을 넘기거나 어떤 이벤트를 발생시킬수 있습니다.
즉 이 onunload란놈을 이용하여 ocx이벤트에서 frmMain.free(); frmMain.close(); 를 처리하시면
브라우져를 죽일때 에러가 안납니다.
예제는 아래와 같습니다.
//// HTML부분
classid="clsid:C76BD1C3-6EB9-11D5-AE20-1111177D5086"
codebase="http://URL을 적고/TestOcx.cab"
width=120
height=30
align=center
hspace=0
vspace=0
>
OCX 부분
1 . TypeLibrary를 열어서 Property를 추가하세요..(sessionid, logout )
2. 추가후 Refresh를 누르면 아래와 같이 두개가 생깁니다.
function TfrmActiveXMain.Get_sessionid: OleVariant;
begin
여기는 값을 HTML로 넘기는 곳입니다.(ActiveX Form 생성될때)
end;
procedure TfrmActiveXMain.Set_sessionid(Value: OleVariant);
Var
sID : String;
begin
sID := Value;
ActiveX Form이 생성될때 HTML에서 값을 받아서 어떤 작업을 원하시면 여기서 코딩처리 하시고요..
end;
function TfrmActiveXMain.Get_logout: OleVariant;
begin
여기는 값을 HTML로 넘기는 곳입니다.
end;
procedure TfrmActiveXMain.Set_logout(Value: OleVariant);
var
Logout : String;
begin
Logout := Value; // 여기서는 종료하는 마당이니 뭐 꼭 써야 할 필요는 없습니다.
frmMain.free();
frmMain.close();
end;
# 위의 예에서 frmMain는 ActiveX Form에서 수동으로 Create된 창입니다.
봉스 wrote:
> ActiveForm 에서 데이터 입력을 붇는 부분에서 작은 창 하나를
> 열려고 합니다
>
> 그런데 그냥 폼하고는 다른것이 있더군여
>
> form1 은 ActiveForm 이고
> form2 은 TForm 보통폼이죠..
>
> 근데..
>
> form1 에서 소스의 예
>
> if form2 = nil then Tform2.Create(self);
> form2.edit1.text := 'aaa';
> form2.showmodal;
>
> 이럴경우 문제가 없이 작동합니다.
>
> 그런데.. 정작 form2에서는 form1을 우째 할방법이 없음더..
>
> uses 에서도 다 둘다 이상없이 했는데 잘 안됨더..
>
> 혹시 두 폼다 activeForm 으로 해야 하나여 ?
>
> 그렇게 하니까 html 파일에 두개가 뚝 하고 나타 나니 우쩔수가 없더라구여..
>
> 그리고 팀모아 이던가 강의실에 두 ActiveForm 에서 데이터 전송 이란걸 봤는데..
>
> 그런것은 뭐 알겠는데.. form2 가 Close 될때 form1에서는 어떻게 처리해야 하나요..
>
> 즉, form2가 Close 되었다는 이벤트는 form1에서 알아야 하는 그런 사태가 발생함더..
>
> 쩝..
>
> 고수님... 핼프미.. 쩝...
>