홍성락님 다시 한번 부탁드립니다.
왜전에 .. 엑셀을 패널의 올리는것은 많은 도움을 받았어요
그런데요..
문제는 셋업파일을 만들서 배포할려고 하는데...
처음에... 프로그램 실행하고 엑셀을 패넬을 올리면요..
엑셀의 전체.. 메뉴하고 툴바가 하나도 없이 올라옵니다.
그러다가..
컴퓨터에잇는 엑셀을 한번 실행한다음 종료하고.나서..
프로그램을 실행하면 엑셀이 정상적으로 보입니다.
제가 셋업만들때 빠트린것이 있나요..
아님ㄴ.. 셋업만들때 엑셀도 라이브러리 추가 하는것이 있나요..
알려주세요...
정확히 파악이 안되네요....
몇가지 질문식 답변을 하겠습니다.
1.엑셀의 메뉴가 안보인다는것은 엑셀ole에 간소화하는것으로 해당 시트만 나오는 아주약식이란게 있긴 있어요, 주로 뷰만할때...
ShellExecute로 할때 SW_HIDE으로부르면 메뉴,툴바 아무것도 안나옵니다.
ShellExecute(0, 'open', PChar('Excel'), nil, nil, SW_HIDE);
그런데 예전게 이런식으로 창모양이 나오나요?
그리고 꼭 ole를 쓸 필요는 없어요.
전번에 처럼 sleep로 잠시 기다렸다가 핸들을 찾으면 되는데....
var
wnd : HWND;
begin
ShellExecute(0, 'open', PChar('Excel.exe'), nil, nil, SW_SHOWNORMAL);
sleep(1000);
wnd := FindWindow( 'XLMAIN', nil );
Windows.SetParent( wnd, Panel1.Handle );
setWindowPos( wnd, Panel1.Handle , 0, 0, Panel1.clientwidth, Panel1.clientheight , SWP_NOZORDER or sWP_SHOWWINDOW);
end;
2.setWindowPos에 -26을 했나요 위 표시줄을 안보이게하려고하셨나요?
그럼 Panel1.clientheight+26하면 꽉차보이는데요...
하여간, 파일은 열지 않고 또 새 워크시트도 만들지 않았네요
XLApp.WorkBooks.Open(OpenDialog1.FileName);
나
XLApp.WorkBooks.add;
procedure TFrmMain.FormShow(Sender: TObject);
Var wnd: HWND;
begin
try
XLApp:= CreateOleObject('Excel.Application');
except
ShowMessage('엑셀이 설치되어있지 않습니다.');
exit;
end;
XLApp.WorkBooks.add; <<<<< 추가해보세요
XLApp.Visible := True; //엑셀실행
wnd := findwindow('XLMAIN', nil );
Windows.SetParent(wnd, Panel1.Handle); //Panel1.Handle
SetWindowPos( wnd, Panel1.Handle , 0, -26, Panel1.clientwidth, Panel1.clientheight , SWP_NOZORDER or sWP_SHOWWINDOW ); //엑세을 실행하여.. panel1올려보여줌
end;