Overview
Examples
Screenshots
Comparisons
Applications
Download
Documentation
Tutorials
Bazaar
Status & Roadmap
FAQ
Authors & License
Forums
Funding Ultimate++
Search on this site
Search in forums












SourceForge.net Logo
Home » Developing U++ » UppHub » Ole Automation [FEATURE REQUEST?]
Re: Ole Automation [FEATURE REQUEST?] [message #21523 is a reply to message #17864] Sun, 24 May 2009 18:36 Go to previous messageGo to next message
koldo is currently offline  koldo
Messages: 3268
Registered: August 2008
Senior Veteran
Change done. Now Automation package is called OfficeAutomation.

I have also included ES/ES translation and I have began with the documentation.

Best regards
Koldo


Best regards
Iñaki
Re: Ole Automation [FEATURE REQUEST?] [message #21532 is a reply to message #21523] Mon, 25 May 2009 10:24 Go to previous messageGo to next message
Mindtraveller is currently offline  Mindtraveller
Messages: 917
Registered: August 2007
Location: Russia, Moscow rgn.
Experienced Contributor

Thank you!
Re: Ole Automation [FEATURE REQUEST?] [message #21885 is a reply to message #21399] Tue, 09 June 2009 11:17 Go to previous messageGo to next message
tojocky is currently offline  tojocky
Messages: 607
Registered: April 2008
Location: UK
Contributor

Hello Koldo!

I found here interesting library for direct manage .xls file.

What is your opinion?

Ion Lupascu (tojocky)

[Updated on: Tue, 09 June 2009 11:17]

Report message to a moderator

Re: Ole Automation [FEATURE REQUEST?] [message #21895 is a reply to message #21885] Tue, 09 June 2009 16:11 Go to previous messageGo to next message
koldo is currently offline  koldo
Messages: 3268
Registered: August 2008
Senior Veteran
Answered here: http://www.ultimatepp.org/forum/index.php?t=msg&goto=218 94&#msg_21894

Best regards
Iñaki
Re: Ole Automation [FEATURE REQUEST?] [message #40796 is a reply to message #21895] Thu, 19 September 2013 16:18 Go to previous messageGo to next message
iST1 is currently offline  iST1
Messages: 107
Registered: August 2013
Experienced Member
In 5485 U++ on 64bit Win7 and Office 2003 after this simple code WINWORD is staying in process list:
	
OfficeDoc word;	
if (word.IsAvailable("Open"))
    word.Init("Open");
else if (word.IsAvailable("Microsoft"))
    word.Init("Microsoft");
	
word.Quit();
Re: Ole Automation [FEATURE REQUEST?] [message #40802 is a reply to message #40796] Fri, 20 September 2013 10:07 Go to previous messageGo to next message
koldo is currently offline  koldo
Messages: 3268
Registered: August 2008
Senior Veteran
Hello iST1

You are right Smile. Problem found and solved. Please update your source tomorrow.


Best regards
Iñaki

[Updated on: Fri, 20 September 2013 10:07]

Report message to a moderator

Re: Ole Automation [FEATURE REQUEST?] [message #40803 is a reply to message #40802] Fri, 20 September 2013 10:13 Go to previous messageGo to next message
iST1 is currently offline  iST1
Messages: 107
Registered: August 2013
Experienced Member
Fine, from here http://www.ultimatepp.org/www$uppweb$nightly$en-us.html?
Is there a list of changes in nightly builds?

[Updated on: Fri, 20 September 2013 10:18]

Report message to a moderator

Re: Ole Automation [FEATURE REQUEST?] [message #40811 is a reply to message #40803] Fri, 20 September 2013 16:41 Go to previous messageGo to next message
Klugier is currently offline  Klugier
Messages: 882
Registered: September 2012
Location: Poland, Kraków
Experienced Contributor
Hello iST1,

The list of changes in upp you can find on following website: code.google.com/p/upp-mirror/source/list.

Sincerely,
Klugier


Ultimate++ - one framework to rule them all.

[Updated on: Fri, 20 September 2013 16:42]

Report message to a moderator

Re: Ole Automation [FEATURE REQUEST?] [message #40817 is a reply to message #40811] Sat, 21 September 2013 10:16 Go to previous messageGo to next message
koldo is currently offline  koldo
Messages: 3268
Registered: August 2008
Senior Veteran
Changes uploaded to svn just now.

Best regards
Iñaki
Re: Ole Automation [FEATURE REQUEST?] [message #40841 is a reply to message #40817] Mon, 23 September 2013 06:49 Go to previous messageGo to next message
iST1 is currently offline  iST1
Messages: 107
Registered: August 2013
Experienced Member
I struggle with the problem of embedding Word. This is howto (::SetParent way is the same as in correctly worked http://www.codeproject.com/Articles/3582/Word-Control-for-NE T):
class MainFrm : public TopWindow {
public:
	OfficeSheet sheet;
	OfficeDoc doc;

	MainFrm() {}
	
	void TestExcel() {	
		if (sheet.IsAvailable("Open"))  {
			sheet.Init("Open");
		} else if (sheet.IsAvailable("Microsoft")) {
			sheet.Init("Microsoft");
		}
		
		sheet.AddSheet(true);	
		EmbedAsFrame("XLMAIN");
	}
	
	void TestWord() {	
		if (doc.IsAvailable("Open"))  {
			doc.Init("Open");
		} else if (doc.IsAvailable("Microsoft")) {
			doc.Init("Microsoft");
		}
		
		doc.AddDoc(true);
		EmbedAsFrame("Opusapp");
	}
	
	void EmbedAsFrame(const String &className) {
		HWND embeded = FindWindow(className, NULL);
		::SetParent(embeded, GetHWND());
		 			 	
		Rect r = GetScreenView();
    	        Rect pr = GetScreenClient(GetHWND());
    	
		MoveWindow(embeded, r.left - pr.left, r.top - pr.top, r.Width(), r.Height(), 0);
	}
};

GUI_APP_MAIN
{	
	MainFrm w;
	w.Open();	

	//w.TestExcel();//embeded
#if 1
	w.TestWord();//opened in separated window
#else
        //if we manualy opened some Word, it embeded
	w.EmbedAsFrame("Opusapp");
#endif
	w.Run();

[Updated on: Mon, 23 September 2013 06:56]

Report message to a moderator

Re: Ole Automation [FEATURE REQUEST?] [message #40846 is a reply to message #40841] Mon, 23 September 2013 10:04 Go to previous messageGo to next message
koldo is currently offline  koldo
Messages: 3268
Registered: August 2008
Senior Veteran
Shocked

It is a dirty trick Smile

A version just for Word and included Layout().

There are details to be improved but this could be a base.

#include <OfficeAutomation/OfficeAutomation.h>

using namespace Upp;

class WordFrm : public TopWindow {
public:
	WordFrm() {
		Sizeable().Zoomable();
		embedded = 0;
	}
	void Embed() {	
		if (doc.IsAvailable("Microsoft")) 
			doc.Init("Microsoft");
		
		doc.AddDoc(true);
		String className = "Opusapp";
		embedded = FindWindow(className, NULL);
		::SetParent(embedded, GetHWND());		 			 	
		Layout();
	}
private:
	OfficeDoc doc;
	HWND embedded;
	
	virtual void Layout() {
		if (embedded == 0)
			return;
		Rect r = GetScreenView();
    	Rect pr = GetScreenClient(GetHWND());	
		MoveWindow(embedded, r.left - pr.left, r.top - pr.top, r.Width(), r.Height(), 0);
	}
};

GUI_APP_MAIN
{	
	WordFrm w;
	w.Open();	
	w.Embed();
	w.Run();
}




Best regards
Iñaki
Re: Ole Automation [FEATURE REQUEST?] [message #40848 is a reply to message #40846] Mon, 23 September 2013 10:21 Go to previous messageGo to next message
iST1 is currently offline  iST1
Messages: 107
Registered: August 2013
Experienced Member
I have no another way to do what customer wants:p
For You the code above is working with Word?

What my Word (separately):
http://i018.radikal.ru/1309/20/cc45b9b6008f.png

What my Excel (embedded):
http://s017.radikal.ru/i416/1309/85/98c858e36503.png

I need Word embedded...

[Updated on: Mon, 23 September 2013 10:27]

Report message to a moderator

Re: Ole Automation [FEATURE REQUEST?] [message #40851 is a reply to message #40848] Mon, 23 September 2013 13:17 Go to previous messageGo to next message
koldo is currently offline  koldo
Messages: 3268
Registered: August 2008
Senior Veteran
Hello iST1

The code included works basically well for me with W7-64 Office 2010. The embedded Word moves and resizes with U++ window. However there is some flickering in the Word window frame. The next step could be to remove Word window frame to avoid this.


Best regards
Iñaki
Re: Ole Automation [FEATURE REQUEST?] [message #40854 is a reply to message #40851] Mon, 23 September 2013 15:29 Go to previous messageGo to next message
iST1 is currently offline  iST1
Messages: 107
Registered: August 2013
Experienced Member
I do not have Office > 2003, but can you give me some advice about frame removing? Something like this
int counter = ActiveWindow.Application.CommandBars.Count;
for(int i = 0; i < counter;i++)
ActiveWindow.Application.CommandBars[i].Enabled=false;
}


Also can be Close method added to Automation?
Re: Ole Automation [FEATURE REQUEST?] [message #40855 is a reply to message #40854] Mon, 23 September 2013 16:07 Go to previous messageGo to next message
koldo is currently offline  koldo
Messages: 3268
Registered: August 2008
Senior Veteran
iST1 wrote on Mon, 23 September 2013 15:29

I do not have Office > 2003, but can you give me some advice about frame removing? Something like this
int counter = ActiveWindow.Application.CommandBars.Count;
for(int i = 0; i < counter;i++)
ActiveWindow.Application.CommandBars[i].Enabled=false;
}


Also can be Close method added to Automation?

Hello iST1

I do not know what do you mean with "frame removing".

What would have to do Close()?

This code is better but flickering remains:

#include <OfficeAutomation/OfficeAutomation.h>

using namespace Upp;

class WordFrm : public TopWindow {
public:
	WordFrm() {
		Sizeable().Zoomable();
		embedded = 0;
	}
	void Embed() {	
		if (doc.IsAvailable("Microsoft")) 
			doc.Init("Microsoft");
		
		doc.AddDoc(true);
		embedded = FindWindow("Opusapp", NULL);
		LONG lStyle = GetWindowLong(embedded, GWL_STYLE);
		lStyle &= ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE | WS_SYSMENU | WS_BORDER | WS_DLGFRAME | WS_SIZEBOX);
		SetWindowLong(embedded, GWL_STYLE, lStyle); 
		LONG lExStyle = GetWindowLong(embedded, GWL_EXSTYLE);
		lExStyle &= ~(WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE | WS_EX_STATICEDGE);
		SetWindowLong(embedded, GWL_EXSTYLE, lExStyle);			 	
		SetWindowPos(embedded, NULL, 0,0,0,0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER);
		::SetParent(embedded, GetHWND());		
		Layout();
	}
private:
	OfficeDoc doc;
	HWND embedded;
	
	virtual void Layout() {
		if (embedded == 0)
			return;
		Rect r = GetScreenView();
    	Rect pr = GetScreenClient(embedded);	
		MoveWindow(embedded, r.left - pr.left, r.top - pr.top, r.Width(), r.Height(), TRUE);
	}
	virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam) {
		if (message == WM_SIZE)
			Layout();
		return TopWindow::WindowProc(message, wParam, lParam);
	}
};

GUI_APP_MAIN
{	
	WordFrm w;
	w.Open();	
	w.Embed();
	w.Run();
}



Best regards
Iñaki

[Updated on: Mon, 23 September 2013 16:09]

Report message to a moderator

Re: Ole Automation [FEATURE REQUEST?] [message #40857 is a reply to message #40855] Mon, 23 September 2013 16:31 Go to previous messageGo to next message
iST1 is currently offline  iST1
Messages: 107
Registered: August 2013
Experienced Member
I mean removing all Word/Excel command bars - only document view like in preview mode. Close method need fot close document before open.
Re: Ole Automation [FEATURE REQUEST?] [message #40862 is a reply to message #40857] Tue, 24 September 2013 18:47 Go to previous messageGo to next message
koldo is currently offline  koldo
Messages: 3268
Registered: August 2008
Senior Veteran
Hello iST1

Please post the VBA code to do it and probably it will be rather easy to implement it. There are many forum explaining the details.


Best regards
Iñaki
Re: Ole Automation [FEATURE REQUEST?] [message #40866 is a reply to message #40862] Thu, 26 September 2013 05:53 Go to previous messageGo to next message
iST1 is currently offline  iST1
Messages: 107
Registered: August 2013
Experienced Member
Private Sub Workbook_Open()
    
    For Each cmd In ActiveWindow.Application.CommandBars
        cmd.Enabled = False
    Next
    
End Sub

Thanks in advance
Re: Ole Automation [FEATURE REQUEST?] [message #40871 is a reply to message #40866] Thu, 26 September 2013 16:05 Go to previous messageGo to next message
koldo is currently offline  koldo
Messages: 3268
Registered: August 2008
Senior Veteran
Hello iST1

I have tried it but it does not work in Office 2007 and higher.

It is due to the new Office menus (called "Fluent") work in a completely different way.


Best regards
Iñaki
Re: Ole Automation [FEATURE REQUEST?] [message #40872 is a reply to message #40871] Thu, 26 September 2013 17:47 Go to previous messageGo to previous message
iST1 is currently offline  iST1
Messages: 107
Registered: August 2013
Experienced Member
This is strange, because .net code here work perfectly with Word 2007 and use the analogue of the VBA above code + SetParent method.
Previous Topic: MAPIEx works with MinGW
Next Topic: [Controls4U] IE shows script errors
Goto Forum:
  


Current Time: Thu Oct 21 07:37:11 CEST 2021

Total time taken to generate the page: 0.01193 seconds