이곳과 델코에 질문을 동시에 올렸더니.. 델코에서는 답변이 왔는데 이해가 안가는 부분이 있어서 다시 올립니다(지난번에 올린건 지웠습니다.. 중복 될까봐)(델코가 현재 닫혀 있어서 여기에 올립니다.)
권오현님 답변내용
WordApp는 Variant인데...
WordApp.visible 같은 프로퍼티가 있을리 없져...
게다가 초기화도 안되어있군요...
뒤에가서
WordApp := CreateOLEObject('Word.Application') ;
라고 초기화를 했는데...
아마도 CreateOLEObject는 OLE인터페이스를 생성해 줄겁니다.
그러므로 WordApp를 그 인터페이타입으로 타입케스팅해서 써야 합니다.
물론 쓰기전에 초기화를 먼저해야겠구요...
그럼
평안하시길
그리고 제 질문
버튼을 눌렀을때 워드가 실행중이면 워드를 그냥 화면위로 띄우고, 그렇지 않으면
워드를 실행후 화면으로 띄우는 거져.. 아주 간단하져..
그런데... 밑에 표시한 에러때문에 고생입니다.. 왜 그런지 이해가 안됩니다...
(여기서 왜 이해가 안가는지는 엑셀로 했을때 이미 했었던 부분인데, 같은 부분인데
에러가 나기때문이다.)
위에 인터페이타입으로 타입케스팅을 해야 한다는 부분과 답변 내용에 초기화를 해줘야 한다는 부분이 이해가 안갑니다.. 초기화라고 쓰인부분은 워드랑 연결시켜주는 부분인데, 그것을 아래 표시된 부분에 써주면 실행된 곳에 또 실행이 되어서 워드가 두번 뜨게 되거든요... 두번뜨면 안되거든요... 한번 떠 있으면 계속 그것을 작업을 해야 합니다... 그리고 인터페이타입이 뭔지 모르겠습니다.. 답변 부탁합니다.. 아래는 제가 올렸던 소스 입니다...(버튼을 클릭하기전에는 워드가 실행되기 전이라는 전제가 있습니다)
procedure TForm1.Button4Click(Sender: TObject);
var
wordApp,Range : oleVariant ; // <---- 이부분은 public이나 private에 선언 해줍니다.
WinHandle : hwnd ; // <---- 이부분은 public이나 private에 선언 해줍니다.
Result : HResult; //<---- 이부분은 public이나 private에 선언 해줍니다.
Unknown: IUnknown; //<---- 이부분은 public이나 private에 선언 해줍니다.
begin
Result := GetActiveObject(CLASS_wordApplication, nil, Unknown);
if (Result = 0) then begin // 이미 워드가 실행중인지를 체크
WinHandle := findwindow('opusapp', nil);
try
WordApp.visible := true; <---- 여기서 에러..
except
Application.MessageBox('이미 실행중인 워드를 보일 수 없습니다.', '오류',MB_Ok);
end;
end //if문의 끝
else begin
try
WordApp := CreateOLEObject('Word.Application') ;
WordApp.Documents.Add ; //새문서 추가
Range := WordApp.Documents.Item(1).Range;
Range.Text := memo1.text;// 메모의 내용을 워드로..
except
Application.MessageBox ( 'MS Word를 열 수 없습니다' + chr(13) +
'MS Word가 설치되어있는지 확인하십시요' , '알림' , MB_OK ) ;
end; //try 문의 끝
WordApp.Visible := True ; <--- 여기는 실행 아주 잘됨
end; //esle문의 끝
end;