내 응용 프로그램에 Delphi와 LibreOffice의 인스턴스를 포함하려고합니다. 필자의 주요 목표는 LibreOffice 문서를 MS Office에 임베드 할 때와 같은 결과를 얻는 것입니다. 가능하다면 TOLEConatiner를 사용하여 이것을 수행하고 싶습니다.응용 프로그램에 LibreOffice 인스턴스 포함 (TOLEContainer 포함)
는 테스트를 위해 나는 TOleContainer 구성 요소와 프로그램을 작성 :
(A .DOCX 파일을 여는) MS 오피스를 들어procedure TForm1.btn1Click(Sender: TObject);
begin
if OpenDialog.Execute then
if FileExists(OpenDialog.FileName) then
OleContainer.CreateObjectFromFile(OpenDialog.FileName, false)
end;
, 이것은 이미 문제없이 작동합니다. .odt 파일을 연 다음 OLEContainer를 활성화하면 빈 프레임이 나타나며 더 많거나 적은 아무것도 표시하지 않으므로 볼 수 없거나 편집 할 수 없습니다.
그래서 LibreOffice, OLE 및 COM에 대해 자세히 알아 보았습니다.
Server := CreateOleObject('com.sun.star.ServiceManager');
Desktop := Server.CreateInstance('com.sun.star.frame.Desktop')
LoadParams := VarArrayCreate([0, 0], varVariant);
Param := Server.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
Param.Name := 'Hidden';
Param.Value := True;
LoadParams[0] := Param;
Document := Desktop.LoadComponentFromURL('private:factory/swriter', '_default', 0, LoadParams);
내 문제 : 나는 내가, 내가 먼저 문서를 작성 한 후 바탕 화면 서비스를 창조하는 OO ServiceManager에의 OLEObject입니다을 만들려면이 같은 뭔가가 필요 그 기능에 액세스 할 OO API를 사용할 수 있다는 것을 발견했다 OLEContainer와 결합하여 내 예상 결과를 얻는 방법을 모르겠다. 예 (예 : this one)가 LibreOffice의 별도 인스턴스를 열어도 실제로 도움이되지 못했습니다. 또한 솔루션을 찾기 위해 LibreOffice의 일부 서비스에 대해 알았지 만 문서를 읽는 것이 매우 어렵습니다.
OLE, COM 및 LibreOffice API는 나를위한 새로운 주제이고 나는 거기에서 아주 잃어버린 느낌입니다. 그래서 다음 질문을 생각해냅니다 :
OleContainer에 포함 된 LibreOffice 인스턴스에서 문서를 표시하고 편집 할 수 있습니까? 그렇다면 어떻게 달성 할 수 있습니까? 아니요, 내 애플리케이션에 LibreOffice 인스턴스를 표시 할 수있는 다른 방법이 있습니까?
이것이 가능하다는 증거가 있습니까? –
언급 한 바와 같이 MSOffice는 이미이 기능을 사용하며 거기에서 작동합니다. MSOffice도 TOleContainer를 사용할 것으로 기대합니다. 그러나 나는 그것이 어떻게 이루어 졌는지에 관해서는 아무것도 찾을 수 없었다. –
나는 사무실이 어디로 들어오는 지 알지 못합니다. libre office를 사용 중입니다. 임베디드 될 수 있습니까? –