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 0000000000..cb66c15059 Binary files /dev/null and b/harbour/contrib/win32/test/sample.odt differ diff --git a/harbour/contrib/win32/test/testole.prg b/harbour/contrib/win32/test/testole.prg new file mode 100644 index 0000000000..306e279af7 --- /dev/null +++ b/harbour/contrib/win32/test/testole.prg @@ -0,0 +1,260 @@ +/* + * $Id$ + */ + +/* + * Harbour Project source code: + * demonstration code for FOR EACH used for OLE objects + * this code needs HBWIN32 library + * + * Copyright 2007 Enrico Maria Giordano e.m.giordano at emagsoftware.it + * www - http://www.harbour-project.org + * + */ + +/* Explicit usage of OLE DEFAULT Method when syntax implies it. */ +#xtranslate :( ) := => :( ):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