tdispvar1.pp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. { %TARGET=win32,win64 }
  2. { %NOTE=This test requires an installed OpenOffice }
  3. program ttt;
  4. {$ifdef fpc}
  5. {$mode delphi}
  6. {$endif fpc}
  7. uses
  8. Windows, SysUtils, Classes, ComObj, ActiveX, Variants;
  9. var StarOffice : Variant;
  10. Document : Variant;
  11. function TSampleCode_Connect() : boolean;
  12. begin
  13. if VarIsEmpty(StarOffice) then
  14. StarOffice := CreateOleObject('com.sun.star.ServiceManager');
  15. Result := not (VarIsEmpty(StarOffice) or VarIsNull(StarOffice));
  16. end;
  17. function TSampleCode_CreateDocument(bReadOnly : boolean) : boolean;
  18. var
  19. StarDesktop : Variant;
  20. LoadParams : Variant;
  21. CoreReflection : Variant;
  22. PropertyValue : Variant;
  23. AutoObject : Variant;
  24. TextObject : Variant;
  25. Cursor : Variant;
  26. begin
  27. StarDesktop := StarOffice.createInstance('com.sun.star.frame.Desktop');
  28. if (bReadOnly) then begin
  29. LoadParams := VarArrayCreate([0, 0], varVariant);
  30. CoreReflection := StarOffice.createInstance('com.sun.star.reflection.CoreReflection');
  31. CoreReflection.forName('com.sun.star.beans.PropertyValue').
  32. createObject(PropertyValue); // CoreReflection().forName().createObject() bring to "Illegal qualifier"
  33. AutoObject := CoreReflection.forName('com.sun.star.beans.PropertyValue');
  34. AutoObject.createObject(PropertyValue);
  35. PropertyValue.Name := 'ReadOnly'; // "Arg cant be assigned" and
  36. PropertyValue.Value := true; // "Incompatimle types: const string, untyped expected"
  37. LoadParams[0] := PropertyValue;
  38. end
  39. else
  40. LoadParams := VarArrayCreate([0, -1], varVariant);
  41. Document := StarDesktop.LoadComponentFromURL( 'private:factory/swriter', '_blank', 0, LoadParams);
  42. if not bReadOnly then begin
  43. TextObject := Document.Text;
  44. Cursor := TextObject.createTextCursor;
  45. TextObject.insertString(Cursor,'Output of FPC Test tdispvar1.pp',False);
  46. // works with D7, but not FPC
  47. end;
  48. Result := not (VarIsEmpty(Document) or VarIsNull(Document));
  49. end;
  50. begin
  51. CoInitialize(nil);
  52. TSampleCode_Connect();
  53. TSampleCode_CreateDocument(false);
  54. end.