From 7aadfc7ec7a5b964c4685b4ef7111c82941c2557 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Thu, 18 Oct 2007 17:10:25 +0000 Subject: [PATCH] 2007-10-18 18:46 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) + contrib/win32/test/testole.prg - contrib/win32/test/oleenum.prg + contrib/win32/test/sample.odt + Added new OLE examples for OpenOffice, CDO. + Added new OLE examples from xhb. --- harbour/ChangeLog | 7 + harbour/contrib/win32/test/oleenum.prg | 24 --- harbour/contrib/win32/test/sample.odt | Bin 0 -> 7977 bytes harbour/contrib/win32/test/testole.prg | 260 +++++++++++++++++++++++++ 4 files changed, 267 insertions(+), 24 deletions(-) delete mode 100644 harbour/contrib/win32/test/oleenum.prg create mode 100644 harbour/contrib/win32/test/sample.odt create mode 100644 harbour/contrib/win32/test/testole.prg diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 97911a6e8b..9ab65d504e 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,13 @@ 2002-12-01 13:30 UTC+0100 Foo Bar */ +2007-10-18 18:46 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) + + contrib/win32/test/testole.prg + - contrib/win32/test/oleenum.prg + + contrib/win32/test/sample.odt + + Added new OLE examples for OpenOffice, CDO. + + Added new OLE examples from xhb. + 2007-10-18 12:26 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) - contrib/win32prn - contrib/ole2 diff --git a/harbour/contrib/win32/test/oleenum.prg b/harbour/contrib/win32/test/oleenum.prg deleted file mode 100644 index 3fe8776f8a..0000000000 --- a/harbour/contrib/win32/test/oleenum.prg +++ /dev/null @@ -1,24 +0,0 @@ -/* - * $Id$ - */ - -/* - * Harbour Project source code: - * demonstration code for FOR EACH used for OLE objects - * this code needs HBOLE library - * - * Copyright 2007 Enrico Maria Giordano e.m.giordano at emagsoftware.it - * www - http://www.harbour-project.org - * - */ - -FUNCTION MAIN() - LOCAL oExcel := CREATEOBJECT( "Excel.Application" ) - LOCAL oWorkBook := oExcel:WorkBooks:Add() - LOCAL oWorkSheet - - FOR EACH oWorkSheet IN oWorkBook:WorkSheets - ? oWorkSheet:Name - NEXT - oExcel:Quit() -RETURN NIL diff --git a/harbour/contrib/win32/test/sample.odt b/harbour/contrib/win32/test/sample.odt new file mode 100644 index 0000000000000000000000000000000000000000..cb66c15059ac39f2e7c664e2a34c9cbd41f5ef78 GIT binary patch literal 7977 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 x@ArT|EcWiL{CP+CEAr>p_&!_yuw24F( ) := => :( ):OleValue := + +PROCEDURE Main() + + Exm_IExplorer() + Exm_CDO() + Exm_MSExcel() + Exm_MSWord() + Exm_MSOutlook() + Exm_OpenOffice() + + RETURN + +// ; Requires Windows XP + +STATIC PROCEDURE Exm_CDO() + + LOCAL oCDOMsg + LOCAL oCDOConf + + BEGIN SEQUENCE WITH {|oErr| Break( oErr )} + oCDOMsg := CreateObject( "CDO.Message" ) + BEGIN SEQUENCE WITH {|oErr| Break( oErr )} + + oCDOConf := CreateObject( "CDO.Configuration" ) + + oCDOConf:Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") := 2 // ; cdoSendUsingPort + oCDOConf:Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") := "localhost" + oCDOConf:Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") := 25 + oCDOConf:Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") := 120 + oCDOConf:Fields:Update() + + oCDOMsg:Configuration := oCDOConf + oCDOMsg:BodyPart:Charset := "iso-8859-2" // "iso-8859-1" "utf-8" + oCDOMsg:To := "test@localhost" + oCDOMsg:From := "sender@localhost" + oCDOMsg:Subject := "Test message" + oCDOMsg:TextBody := "Test message body" + + BEGIN SEQUENCE WITH {|oErr| Break( oErr )} + oCDOMsg:Send() + RECOVER + Alert( "Error: CDO send error. [" + Ole2TxtError()+ "]" ) + END SEQUENCE + + oCDOConf := NIL + + END SEQUENCE + + oCDOMsg := NIL + + RECOVER + Alert( "Error: CDO subsystem not available. [" + Ole2TxtError()+ "]" ) + END SEQUENCE + + RETURN + +STATIC PROCEDURE Exm_IExplorer() + + LOCAL oIE + + BEGIN SEQUENCE WITH {|oErr| Break( oErr )} + oIE := CreateObject( "InternetExplorer.Application" ) + BEGIN SEQUENCE WITH {|oErr| Break( oErr )} + oIE:Visible := .T. + oIE:Navigate( "http://www.harbour-project.org" ) + END SEQUENCE + RECOVER + Alert( "Error: IExplorer not available. [" + Ole2TxtError()+ "]" ) + END SEQUENCE + + RETURN + +STATIC PROCEDURE Exm_MSExcel() + + LOCAL oExcel + LOCAL oWorkBook + LOCAL oWorkSheet + LOCAL oAS + + BEGIN SEQUENCE WITH {|oErr| Break( oErr )} + oExcel := CreateObject( "Excel.Application" ) + BEGIN SEQUENCE WITH {|oErr| Break( oErr )} + + oWorkBook := oExcel:WorkBooks:Add() + + FOR EACH oWorkSheet IN oWorkBook:WorkSheets + ? oWorkSheet:Name + NEXT + + oAS := oExcel:ActiveSheet() + + oAS:Cells:Font:Name := "Arial" + oAS:Cells:Font:Size := 12 + + // Explicit use of DEFAULT method by means of #xtranslate above!!! + oAS:Cells( 3, 1 ) := "Explict DEFAULT Method Text:" + + // Array notation seem to have REVERSED indexs for the Cells Collections!!! + // Implicitly using DEFAULT Method + oAS:Cells[ 2, 3 ] := "Implicit DEFAULT Method using *reversed* array index notation" + + // Operator overloading will attempt explict resolutin using :OleValue + oAS:Cells[ 2, 3 ] += "!" + + oAS:Cells( 4, 1 ):Value := "Numeric:" + oAS:Cells( 4, 2 ):NumberFormat := "#.##0,00" + + oAS:Cells[ 2, 4 ] := 1234.50 + oAS:Cells[ 2, 4 ] *= 4 + ? oAS:Cells[ 2, 4 ], oAS:Cells[ 2, 4 ]:Value + oAS:Cells[ 2, 4 ] /= 2 + ? oAS:Cells[ 2, 4 ], oAS:Cells[ 2, 4 ]:Value + + oAS:Cells[ 2, 4 ]++ + ? oAS:Cells[ 2, 4 ], oAS:Cells[ 2, 4 ]:Value + oAS:Cells[ 2, 4 ]-- + ? oAS:Cells[ 2, 4 ], oAS:Cells[ 2, 4 ]:Value + + oAS:Cells( 5, 1 ):Value := "Logical:" + oAS:Cells( 5, 2 ):Value := .T. + oAS:Cells( 6, 1 ):Value := "Date:" + oAS:Cells( 6, 2 ):Value := DATE() + + oAS:Columns( 1 ):Font:Bold := .T. + oAS:Columns( 2 ):HorizontalAlignment := -4152 // xlRight + + oAS:Columns( 1 ):AutoFit() + oAS:Columns( 2 ):AutoFit() + + oAS:Cells( 1, 1 ):Value := "OLE from Harbour" + oAS:Cells( 1, 1 ):Font:Size := 16 + oAS:Range( "A1:B1" ):HorizontalAlignment := 7 + + oAS:Cells( 1, 1 ):Select() + + oExcel:Visible := .T. + + oExcel:Quit() + + END SEQUENCE + RECOVER + Alert( "Error: MS Excel not available. [" + Ole2TxtError()+ "]" ) + END SEQUENCE + + RETURN + +STATIC PROCEDURE Exm_MSWord() + + LOCAL oWord + LOCAL oText + + BEGIN SEQUENCE WITH {|oErr| Break( oErr )} + oWord := CreateObject( "Word.Application" ) + BEGIN SEQUENCE WITH {|oErr| Break( oErr )} + + oWord:Documents:Add() + + oText := oWord:Selection() + + oText:Text := "OLE from Harbour" + hb_OSNewLine() + oText:Font:Name := "Arial" + oText:Font:Size := 48 + oText:Font:Bold := .T. + + oWord:Visible := .T. + oWord:WindowState := 1 // ; Maximize + + END SEQUENCE + RECOVER + Alert( "Error: MS Word not available. [" + Ole2TxtError()+ "]" ) + END SEQUENCE + + RETURN + +STATIC PROCEDURE Exm_MSOutlook() + + LOCAL oOL + LOCAL oList + + BEGIN SEQUENCE WITH {|oErr| Break( oErr )} + oOL := CreateObject( "Outlook.Application" ) + BEGIN SEQUENCE WITH {|oErr| Break( oErr )} + oList := oOL:CreateItem( 7 ) // ; olDistributionListItem + oList:DLName := "Distribution List" + oList:Display( .F. ) + END SEQUENCE + RECOVER + Alert( "Error: MS Outlook not available. [" + Ole2TxtError()+ "]" ) + END SEQUENCE + + RETURN + +STATIC PROCEDURE Exm_OpenOffice() + + LOCAL oOO_ServiceManager + LOCAL oOO_Desktop + LOCAL oOO_PropVal01 + LOCAL oOO_Doc + + LOCAL cDir + + BEGIN SEQUENCE WITH {|oErr| Break( oErr )} + + oOO_ServiceManager := CreateObject( "com.sun.star.ServiceManager" ) + + BEGIN SEQUENCE WITH {|oErr| Break( oErr )} + + hb_FNameSplit( hb_ArgV( 0 ), @cDir ) + + oOO_Desktop := oOO_ServiceManager:createInstance( "com.sun.star.frame.Desktop" ) + oOO_PropVal01 := oOO_ServiceManager:Bridge_GetStruct( "com.sun.star.beans.PropertyValue" ) + oOO_Doc := oOO_Desktop:loadComponentFromURL( OO_ConvertToURL( hb_FNameMerge( cDir, "sample.odt" ) ), "_blank", 0, { oOO_PropVal01 } ) + + // ... + + oOO_Doc:Close( .T. ) + oOO_Doc := NIL + + oOO_Desktop:Terminate() + oOO_Desktop := NIL + oOO_PropVal01 := NIL + + END SEQUENCE + + oOO_ServiceManager := NIL + + RECOVER + Alert( "Error: OpenOffice not available. [" + Ole2TxtError()+ "]" ) + END SEQUENCE + + RETURN + +STATIC FUNCTION OO_ConvertToURL( cString ) + + // ; Handle UNC paths + IF !( Left( cString, 2 ) == "\\" ) + cString := StrTran( cString, ":", "|" ) + cString := "///" + cString + ENDIF + + cString := StrTran( cString, "\", "/" ) + cString := StrTran( cString, " ", "%20" ) + + RETURN "file:" + cString