Q&A

  • Excel을 MDI의 Child로 설정한 후 Excel Control이 왜 안돼나요?
엑셀 어플리케이션을 CreateOLEObject로 생성후 DBGrid의 내용을 Excel로 옮겼습니다

문제는 생성된 엑셀 어플리케이션을 SetParent로 현재 MDI의 Child로 설정하면

Excel의 Close Box, Open, ...의 Excel Fucntion이 수행되지 않는다는 것입니다



Event 처리의 문제라도 생각되는데 어떻게 해야 정상적으로 처리할 수 있는 건가요?

여러 고수님들의 한수 지도 부탁합니다



아래는 Soruce입니다

바쁘시겠지만 한번 봐주세요





try

ExcelApp := CreateOLEObject('Excel.Application') ;

except

Showmessage('Can''t run Excel' + chr(13) + 'please check first');

Exit;

end;

ExcelApp.WorkBooks.Add;

ADOQuery_CustList.First;

for i := 1 to ADOQuery_CustList.RecordCount do

for j := 1 to DBGrid_CustList.FieldCount do

ExcelApp.Cells[i+1,j].Value := ADOQuery_CustList.Fields[j-1].AsString;



wnd := FindWindow( 'XLMAIN', nil );



Windows.SetParent( wnd, FindWindow('TMainForm', nil));

SetWindowPos( wnd, 0, 0, 0, clientwidth, clientheight, SWP_NOZORDER or

SWP_SHOWWINDOW );

ExcelApp.Visible := True ;

end;



1  COMMENTS
  • Profile
    김경헌 2001.06.11 12:22
    jbpark wrote:

    > 엑셀 어플리케이션을 CreateOLEObject로 생성후 DBGrid의 내용을 Excel로 옮겼습니다

    > 문제는 생성된 엑셀 어플리케이션을 SetParent로 현재 MDI의 Child로 설정하면

    > Excel의 Close Box, Open, ...의 Excel Fucntion이 수행되지 않는다는 것입니다

    >

    > Event 처리의 문제라도 생각되는데 어떻게 해야 정상적으로 처리할 수 있는 건가요?

    > 여러 고수님들의 한수 지도 부탁합니다

    >

    > 아래는 Soruce입니다

    > 바쁘시겠지만 한번 봐주세요

    >

    >

    > try

    > ExcelApp := CreateOLEObject('Excel.Application') ;

    > except

    > Showmessage('Can''t run Excel' + chr(13) + 'please check first');

    > Exit;

    > end;

    > ExcelApp.WorkBooks.Add;

    > ADOQuery_CustList.First;

    > for i := 1 to ADOQuery_CustList.RecordCount do

    > for j := 1 to DBGrid_CustList.FieldCount do

    > ExcelApp.Cells[i+1,j].Value := ADOQuery_CustList.Fields[j-1].AsString;

    >

    > wnd := FindWindow( 'XLMAIN', nil );

    >

    > Windows.SetParent( wnd, FindWindow('TMainForm', nil));



    엑셀을 맨 앞으로 보내는 일만 하니 되더군요....반나절 공들여서

    SetForegroundWindow(wnd);



    > SetWindowPos( wnd, 0, 0, 0, clientwidth, clientheight, SWP_NOZORDER or

    > SWP_SHOWWINDOW );

    > ExcelApp.Visible := True ;

    > end;

    >