Allow wxAutomationObject::GetInstance() create new instance if needed.

When getting an instance of an OLE automation object, it is often useful to
connect to the existing instance if any or start a new one otherwise. Make
GetInstance() behave like this by default while still allowing to use the
wxAutomationInstance_UseExistingOnly flag to reestablish the old behaviour.

Also improve the error reporting in wxAutomationObject.

See #12489.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66262 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2010-11-26 13:30:37 +00:00
parent 27d7687903
commit 6eefca4fb7
5 changed files with 152 additions and 82 deletions

View File

@@ -196,28 +196,26 @@ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
*/
void MyFrame::OnTest(wxCommandEvent& WXUNUSED(event))
{
wxMessageBox(wxT("Please ensure Excel is running, then press OK.\nThe active cell should then say 'wxWidgets automation test!' in bold."));
wxMessageBox(wxT("Excel will be started if it is not running after you have pressed OK button.")
wxT("\nThe active cell should then say 'wxWidgets automation test!' in bold."),
wxT("Excel start"));
wxAutomationObject excelObject, rangeObject;
if (!excelObject.GetInstance(wxT("Excel.Application")))
wxAutomationObject excelObject;
if ( !excelObject.GetInstance(wxT("Excel.Application")) )
{
// Start Excel if it is not running
if (!excelObject.CreateInstance(wxT("Excel.Application")))
{
wxMessageBox(wxT("Could not create Excel object."));
return;
}
wxLogError(wxT("Could not create Excel object."));
return;
}
// Ensure that Excel is visible
if (!excelObject.PutProperty(wxT("Visible"), true))
{
wxMessageBox(wxT("Could not make Excel object visible"));
wxLogError(wxT("Could not make Excel object visible"));
}
const wxVariant workbooksCountVariant = excelObject.GetProperty(wxT("Workbooks.Count"));
if (workbooksCountVariant.IsNull())
{
wxMessageBox(wxT("Could not get workbooks count"));
wxLogError(wxT("Could not get workbooks count"));
return;
}
const long workbooksCount = workbooksCountVariant;
@@ -226,19 +224,19 @@ void MyFrame::OnTest(wxCommandEvent& WXUNUSED(event))
const wxVariant workbook = excelObject.CallMethod(wxT("Workbooks.Add"));
if (workbook.IsNull())
{
wxMessageBox(wxT("Could not create new Workbook"));
wxLogError(wxT("Could not create new Workbook"));
return;
}
}
if (!excelObject.PutProperty(wxT("ActiveCell.Value"), wxT("wxWidgets automation test!")))
{
wxMessageBox(wxT("Could not set active cell value."));
wxLogError(wxT("Could not set active cell value."));
return;
}
if (!excelObject.PutProperty(wxT("ActiveCell.Font.Bold"), wxVariant(true)) )
{
wxMessageBox(wxT("Could not put Bold property to active cell."));
wxLogError(wxT("Could not put Bold property to active cell."));
return;
}
}