ãã®èšäºã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠMicrosoft Wordãã·ã§ã«ãšããŠèªèãããWindows Formsãããžã§ã¯ãã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãæäŸããŸãã ãã®èšäºã§ã¯ãComposite UI Application Blockã䜿çšããããã€ãã®èå³æ·±ãç¹ãç¹ã«ãã¬ãŒã ã¯ãŒã¯æ¡åŒµãµãŒãã¹ã§ã®Wordãã¡ã€ã³ã¢ãã«ã€ã³ãã©ã¹ãã©ã¯ãã£ã®æ¥ç¶ãããã³VSTOããŒã«ã䜿çšããããã€ãã®äºå®ãšéçºæ©èœãæããã«ããŸãã
ææŠãã
ææžãæžããç·šéè ãšçµ¶ããäœæ¥ããæ°å人ã®äººããããšããŸãã Sharepointããã®ä»ã®ããŒã¿ã«ã¯äœããã®çç±ã§é©åã§ã¯ãªããããç¬èªã®ããžãã¹ããžãã¯ã®å®è£ ãå¿ èŠã§ãã ã¿ã¹ã¯ãè€éã«ããŸããã-人ã ã¯ã³ã³ãã¥ãŒã¿ãŒã®è©±é¡ããéåžžã«é ãé¢ããå Žæã§åããŠãããMicrosoft Officeã¹ã€ãŒãã®ã¿ãããç¥ã£ãŠããŸãã ããã«è€éã§ã-ãªãã£ã¹ã¯è²§åŒ±ã§ãMicrosoft Officeã«ã¯2003ããŒãžã§ã³ã®äººã ã®å€§éšåãããŸãã ãã¡ãã¡ã§ãããã°ãã¹ãšã¡ã€ã³ãã¹ã¯2007幎ã§ãã ãã·ã³çŸ€ã¯å€æ§ã§ã-2000çªç®ã®WindowsããWindows VistaãŸã§ã
解決ç
1ã€ã®è§£æ±ºçã¯ãMicrosoft Officeã®ãã©ã°ã€ã³ã§ãã COMã裞ã®Officeçžäºéçšæ©èœããŸãã¯åãçžäºéçšæ©èœãä»ããŠäœæã§ããŸãããVSTOããŒã«ã§å·§åŠã«ã©ãããããŠããŸãã ãããã®è³éã䜿çšããŸãã ãŠãŒã¶ãŒã¯Wordãèµ·åããVSTOã©ã³ã¿ã€ã ã¯.NETã¢ã»ã³ããªãååŸããMicrosoft Wordã³ã³ãããŒã«ãäœããã®åœ¢ã§è£å®ããŠããŠãŒã¶ãŒãã¿ã¹ã¯ã«å¿ èŠãªããžãã¹ããžãã¯ãå®è¡ã§ããããã«ããŸãããããŠããªããããã¹ãŠã§ããïŒ
ïŒããã¯ããããã©ã®ããã«çµäºããããèŠã€ããã®ãåŸ ã€ããšãã§ããªã人ã§ãïŒã åºåã§ã¯ãVisual Studioãœãªã¥ãŒã·ã§ã³ãã¬ã€ã¢ãŠãããŸããããã«ãããMicrosoft Wordã§ã¢ããªã±ãŒã·ã§ã³ãã©ã°ã€ã³ãäœæããããšãã§ããŸãã ãã®éçšã§ããã®ãœãªã¥ãŒã·ã§ã³ã§äœ¿çšãããã»ãŒãã¹ãŠã説æããŸããä»äºã«å¿ èŠãªãã®
- Microsoft Word 2003 SP3
- VSTO 2005 SE
- VSTO 2005 SEã©ã³ã¿ã€ã
- ãã£ã
- Visual Studio 2005ãŸãã¯2008
CABãéžã¶çç±
åçŽãªWindowsãã©ãŒã ããžãã¯ããMicrosoft Wordã«é¢é£ããæ©èœãæ瀺çã«åé¢ããããã ç°¡åã«èšãã°ããã©ã°ã€ã³ã¯CABã¢ãžã¥ãŒã«ã«ãªããå¿ èŠã«å¿ããŠããã®ããžãã¯ãä»ã®CABã¢ããªã±ãŒã·ã§ã³ã«ç°¡åã«æ¥ç¶ã§ããŸãã ç°¡åã«èšãã°ãCABã䜿çšãããšã°ã«ãŒã³ãŒãã®éãæå°éã«æããããŸãããœãªã¥ãŒã·ã§ã³ã«CABãå«ããçç±ã¯2ã€ãããŸãã 1ã€ç®ã¯ããã®ãã¬ãŒã ã¯ãŒã¯ã®èª¬æãããã§ãã§ã«è¡ã£ãããšã§ãããããŠä»ãæ¬æ ŒçãªåäœäŸã瀺ããããšæããŸãã 2çªç®ã®çç±ã¯ããäžè¬çã§ã-ç§ã¯CABã奜ãã§ããããã¯äžçãšãã®äžã®ç©äºãç°¡åã«ããŸã:)
VSTOã®è©³çŽ°
äžè¬çã«ãVSTOã¯Wordçšã®ãã©ã°ã€ã³ãäœæã§ããã ãã§ã¯ãããŸããã ããã¯åŒ·åãªã·ã¹ãã ã§ãããçŸåšã¯ãã§ã«3çªç®ã®ããŒãžã§ã³ã«ãããŸãã VSTOã¯ãèªååããã³ããã°ã©ãã³ã°ã®OfficeããŒã¹ã®ãœãªã¥ãŒã·ã§ã³ã®äžçã«ãããéçºè ãžã®ã²ãŒããŠã§ã€ã§ãã ç°¡åã«èšãã°ã.NETéçºè ã¯Officeã¢ããªã±ãŒã·ã§ã³ã®ãã¡ã€ã³ã¢ãã«ã«ã¢ã¯ã»ã¹ããå¿ èŠãªããšãäœã§ãè¡ããŸãããããã®ãœãªã¥ãŒã·ã§ã³ã¯ãã¹ãŠã2ã€ã®ã¿ã€ãã«åé¡ã§ããŸãã
- ããã¥ã¡ã³ãã¬ãã«ã®ã«ã¹ã¿ãã€ãº
- ã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã®ã«ã¹ã¿ãã€ãº
ãããã¯ç¬ç«ããã¬ãã«ã§ãã æåã¯ãMicrosoft Officeã¢ããªã±ãŒã·ã§ã³çšã®ããã¥ã¡ã³ããã³ãã¬ãŒããäœæããŸãã Excelãã³ãã¬ãŒããååŸããããŸããŸãªãŠãŒã¶ãŒã³ã³ãããŒã«ïŒãã¿ã³ãã°ãªããïŒã§å€æ§åããããžãã¯ãè¿œå ã§ããŸã-ããšãã°ããã¿ã³ã¯ãªãã¯ã®ã€ãã³ãã§ããŠãŒã¶ãŒã«ãã£ãŠåéãããããŒã¿ãWebãµãŒãã¹ãä»ããŠãµãŒããŒã«éä¿¡ãããããã§åŠçãããŸãã ãã®ã¬ãã«ã§ã¯ãéçºè ã«ã¯ã¢ã¯ã·ã§ã³ãã€ã³ïŒ2003ããŒãžã§ã³ïŒããããã³ã³ãããŒã«ãæ¥ç¶ã§ããŸããããã«ã2007ããŒãžã§ã³ã§ã¯ããã«å€ãã®ããšãã§ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã®ã«ã¹ã¿ãã€ãºãšã¯ãæ¡åŒµã¢ãžã¥ãŒã«ïŒããããã¢ãã€ã³ïŒãMicrosoft Officeã¢ããªã±ãŒã·ã§ã³ç°å¢ã«æ¥ç¶ãããããšãæå³ããŸãã å®éãç§ã¯æåã«åœŒã«ã€ããŠè©±ãå§ããŸããã ãã®æ¡åŒµã¢ãžã¥ãŒã«ã¯ãããžãã¹ã¢ããªã±ãŒã·ã§ã³ã®æ©é¢è»ã§ãããMicrosoft Officeã®.NETãã©ãããã©ãŒã ã®ãã¹ãŠã®æ©èœãæ¥ç¶ã§ããŸãã 第2ã¬ãã«ã®ãœãªã¥ãŒã·ã§ã³ãæ£ç¢ºã«ç€ºããŸãã
VSTOã®æ©èœã«èå³ããã人ã¯ãå€ããmsdnã«ãããŸãã
æ¬äŒŒã¿ã¹ã¯
äžèšã®ãã¹ãŠã説æããå°ããªäŸãäœæããŸãããã ãŠãŒã¶ãŒãMicrosoft Wordææžããããã¹ããéžæãããŠãŒã¶ãŒèŠçŽ ã®ãŠã£ã³ããŠã§ãã®éžæãããããã¹ããååŸã§ãããšããèŠä»¶ããããŸãïŒç§ã¯æããªäŸãç¥ã£ãŠããŸããããã£ãšè€éã«ãããã¯ãããŸããããããã»ã©è€éã§ã¯ãªããã®ãèŠã€ããã®ã¯é£ããã§ãïŒããã詳现ã«ã ãŠãŒã¶ãŒãMicrosoft Wordãèµ·åããŸãã èµ·ååŸãããŒã«ããŒã®äžã§ããŠãŒã¶ãŒã¯TP-æ¡åŒµããŒã«ããŒïŒã€ãŸããæ¡åŒµæ©èœïŒã«ã¢ã¯ã»ã¹ã§ããŸãã ãã®äžã«ãã¿ã³ããããã¯ãªãã¯ãããšããããã¹ããååŸããã¿ã³ãšè€æ°è¡ã®ããã¹ãããã¯ã¹ã³ã³ãããŒã«ã衚瀺ããããŠã£ã³ããŠã衚瀺ãããŸãã ãŠãŒã¶ãŒããããã¹ããååŸããã¿ã³ãã¯ãªãã¯ãããšãããã¥ã¡ã³ãã§éžæãããããã¹ããããã¹ãããã¯ã¹ã«ã³ããŒãããŸãã 誰ãã幞ãã§ãã
äŸã人çã«ã»ãšãã©åœ¹ã«ç«ããªãããšã¯æããã§ãã ãããããã誰ãããããå¿ èŠãšãããªããäœæãããŠããã€ã³ãã©ã¹ãã©ã¯ãã£ã¯ãã®äžã«ãçèããæ§ç¯ããããšãéåžžã«ç°¡åã«ããŸãã
ãœãªã¥ãŒã·ã§ã³ãäœæãã
ã¹ã¿ãžãªã«VSTOãã€ã³ã¹ããŒã«ããåŸãæ°ãããœãªã¥ãŒã·ã§ã³ãäœæãããšãOfficeãããžã§ã¯ããå©çšå¯èœã«ãªããŸããååã«ã¯æ³šæããŠãã ãã-åæã«ååã®ã«ãŒãåå空éã«ãªãããããžã§ã¯ãã®ã¢ã³ããŒããéããŠãã³ãã«ã«ãã£ãŠã®ã¿ååãå€æŽããããšãå¯èœã«ãªããŸãã
åºåã¯ã2ã€ã®ãããžã§ã¯ããå«ããœãªã¥ãŒã·ã§ã³ã§ãã
å®éãWordCABã¯ã¢ãã€ã³ã§ãã 2ã€ç®-åæ§ã«éèŠãªã®ã¯ãæ¡åŒµã¢ãžã¥ãŒã«ã®å±éãããžã§ã¯ãã§ãã ãªããããéèŠãªã®ã§ããïŒ
å®éããŠãŒã¶ãŒã®ã¯ãŒã¯ã¹ããŒã·ã§ã³ã«æ¡åŒµã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ããã®ã¯éåžžã«æéãããããŸãã ã©ã€ãã©ãªãé©åãªãã©ã«ããŒã«ã³ããŒããã ãã§ã¯ãããŸããã ã¢ãžã¥ãŒã«ãæ£åžžã«åäœãããã«ã¯ãã¬ãžã¹ããªã«äžé£ã®ããŒãç»é²ããå¿ èŠããããŸãã ããã«æ·±ãæãäžãããšãæ¡åŒµã¢ãžã¥ãŒã«ãCOMã©ã€ãã©ãªãšããŠMicrosoft Officeã«æ¥ç¶ãããŠããããšãããããŸãã æ°ã«ãã人ã¯ãå¿ èŠãªãã¹ãŠã®ã¬ãžã¹ããªããŒãå±éãããžã§ã¯ãã§è¡šç€ºã§ããŸãïŒå³ã¯ãªãã¯ã[衚瀺]ã[ã¬ãžã¹ããª]ïŒã
ThisAddInã¯ã©ã¹ã«ã¯ãã¢ãžã¥ãŒã«ãžã®ã¢ã¯ã»ã¹ãã€ã³ãããããŸãã
public partial class ThisAddIn
{
private void ThisAddIn_Startup( object sender, System. EventArgs e)
{
new AddInApplication().Run();
}
private void ThisAddIn_Shutdown( object sender, System. EventArgs e)
{
}
#region VSTO generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InternalStartup()
{
this .Startup += new System.EventHandler(ThisAddIn_Startup);
this .Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
}
#endregion
}
* This source code was highlighted with Source Code Highlighter .
ThisAddIn_Startup
ã³ãŒãã
ThisAddIn_Startup
ãŸãã ããæ£ç¢ºã«ã¯ãCABã¢ããªã±ãŒã·ã§ã³ãèµ·åããŸãã
cabã¢ããªã±ãŒã·ã§ã³ãšã¯äœã§ããïŒ
ããã¯ãã®ãããªã¯ã©ã¹ã§ãã èµ·åãã€ã³ãRun()
ã¡ãœãããããã³ããã€ãã®ãã¬ãŒã ã¯ãŒã¯ã€ã³ãã©ã¹ãã©ã¯ãã£-ç¹ã«ãã¡ã€ã³ãŠãŒã¹ã±ãŒã¹ãã¢ããªã±ãŒã·ã§ã³ãïŒã€ãŸããã¡ã€ã³ãã«ãŒãWorkItemïŒãžã®ã¢ã¯ã»ã¹ãšãã¢ããªã±ãŒã·ã§ã³ã«è¿œå ãããã·ã¹ãã ãµãŒãã¹ããªãŒããŒã©ã€ãããæ©èœããããŸããããã©ã«ãã§ã ãã®ã¯ã©ã¹ã¯åºæ¬çãªåœ¢åŒã§æ¢ã«å®è£ ãããŠãããããã°ã©ãã¯ããããã©ã¡ãŒã¿åããå¿ èŠããããŸã-ã«ãŒãã®ãŠãŒã¹ã±ãŒã¹ã®ã¿ã€ããšã¡ã€ã³ãã©ãŒã ã®ã¿ã€ããæå®ããŸãïŒ
internal sealed class AddInApplication : WindowsFormsApplication<AddInWorkItem, object >
{
protected override void Start()
{
}
}
* This source code was highlighted with Source Code Highlighter .
ã¡ã€ã³ãã©ãŒã ïŒã·ã§ã«ãã©ãŒã ïŒã®ã¿ã€ããšããŠããªããžã§ã¯ããæå®ãããŸãã ãªãã§ïŒ ã¢ããªã±ãŒã·ã§ã³ã¯Microsoft Wordã§å®è¡ããããããã¡ã€ã³ãã©ãŒã ãäœæããå¿ èŠã¯ãããŸããã ãã ããMicrosoft Wordãã©ãŒã ã¯ãåŸæ¥ã®æ©èœããªãã¡ã€ã³ãã©ãŒã ã§ãã
ãã¬ã€ãé²ãã«ã€ããŠãMicrosoft Wordã®æ¡åŒµã¢ãžã¥ãŒã«ã®ã¢ããªã±ãŒã·ã§ã³ã¢ãã«ãå°ãæããã«ããããšã«ãªããŸããã
Wordã¢ãã€ã³ã¢ããªã±ãŒã·ã§ã³ã¢ãã«
ãããã£ãŠããŠãŒã¶ãŒã¯ããã¥ã¡ã³ããæäœããŸãã ããã«ãæéåäœã§ã圌ã¯1ã€ã®ããã¥ã¡ã³ãã®ã¿ã§äœæ¥ã§ããŸãã ãããã£ãŠãæ¡åŒµã¢ãžã¥ãŒã«ã«ã¯æ確ãªã³ã³ããã¹ãïŒçŸåšéããŠããããã¥ã¡ã³ãïŒããããŸãã ïŒãšããã§ãMicrosoft Word VSTOã¢ãã«ã§ã¯ããã®ããã¥ã¡ã³ãã¯Globals.ThisAddIn.Application.ActiveDocument
ãšããŠæå®ãããŠããŸãïŒã ããããïŒçµè«ïŒçµè«ïŒãŸãã¯åçŽåïŒ-ã¢ãŒãã«ã¢ãŒãã§ã«ã¹ã¿ã ããžãã¹èŠçŽ ã衚瀺ããã®ãçã«ããªã£ãŠããŸããããããªããšãã³ã³ããã¹ããå£ããŸãã åäžã®ããã¥ã¡ã³ãã«å¯ŸããŠéããŠããã³ã³ãããŒã«ã¯ããã®ããã¥ã¡ã³ããã¢ã¯ãã£ããªéã®ã¿ååšããå¿ èŠããããŸãã
äŸ-ãŠãŒã¶ãŒãããã¥ã¡ã³ããéããã«ãŒããéããŸããïŒã¢ãŒãã«ã¢ãŒãã§ã¯ãããŸããïŒã ç§ã¯å¥ã®ææžã«åãæ¿ããŸããããã«ãŒãã¯åã®ãã®ã«æ®ã£ãŠããŸãã-æèã®éåãšç¥èŠã®å®å šæ§ã ãã¡ããããã®ãããªåäœã¯å¶åŸ¡ã§ããŸãïŒå Žåã«ãã£ãŠã¯å¿ èŠãªå ŽåããããŸãïŒããã³ã³ãããŒã«ã®ã¢ããªãã£ãšçŸåšã®ã¢ã¯ãã£ãããã¥ã¡ã³ããžã®ç·å¯ãªãã€ã³ãã«ãããäœæ¥ã楜ã«ãªããŸãã
ã¢ãŒãã«ã¯ãŒã¯ã¹ããŒã¹
CABã®ãŠãŒã¶ãŒã³ã³ãããŒã«ã¯ãç¹å¥ãªããããã¯ãŒã¯ã¹ããŒã¹ã«è¡šç€ºãããŸãã äžèšã®åäœã«åŸã£ãŠãã³ã³ãããŒã«ãã¢ãŒãã«ã¢ãŒãã§è¡šç€ºããå¿ èŠããããŸãã ãã€ãã£ãã®CAB WindowWorkspaceã¯å°ããªãŒããŒã§èŠèŠãããããç°¡åãªã³ãŒããäœæããŸãããç»é¢ã2ã€ãããããã³ãŒãã¯æäŸããŸããã ã³ãŒããå«ããœãªã¥ãŒã·ã§ã³ãããŠã³ããŒãããããšã§åµé æ§ã楜ããããšãã§ããŸãïŒèšäºãžã®ãªã³ã¯ã¯èšäºã®æåŸã«ãããŸãïŒãã¢ãŒãã«ã¯ãŒã¯ã¹ããŒã¹ã®ç»é²ã¯ãã¡ã€ã³ãŠãŒã¹ã±ãŒã¹
AddInWorkitem
ã®
InitializeServices()
ã¡ãœããã§è¡ãããŸãã
Workspaces.Add(( new SimpleModalWorkspace() ), WorkspaceNames.MainWorkspace);
* This source code was highlighted with Source Code Highlighter .
åèšïŒèå¥åããŒ
WorkspaceNames.MainWorkspace
ã¢ãŒãã«ã¯ãŒã¯
WorkspaceNames.MainWorkspace
ç»é²ãããŸããã ããã§ãäž»ãªäœ¿çšäŸãžã®ãªã³ã¯ãããã©ãããã§ãã¢ã¯ã»ã¹ã§ããŸããäžèšã§æå®ããããŒã䜿çšããŠã
Workspaces
ã³ã¬ã¯ã·ã§ã³ãã
IWorkspace
ã€ã³ã¿ãŒãã§ã€ã¹ãèŠæ±ããŸãã ãã¹ãŠããªã¬ã³ãžã®ãããªãã®ã§ãïŒ ïŒcïŒx / fãã¿ãŒãããŒã¿ãŒ2ã
Microsoft Word Control Factory
ããã¯ãWordããŒã«ããŒãšãã®ãã¿ã³ã«ã€ããŠã§ãã VSTOã§ã¯ããããã¯COMãªããžã§ã¯ãïŒMicrosoft.Office.Core
åå空éã®
CommandBar
ãš
CommandBarButton
ã©ãããŒã§ãã æ£çŽã«èšããšãã²ã©ããã°ã®å€ããã®ãç¹ã«ã¢ãã¡ãŒã·ã§ã³ã VSTOãã©ãŒã©ã ã§ã·ã§ãã¯ãããŒãªã³ã°ãããŠåããŠããã¹ãŠã®åŸ®åŠããšè©³çŽ°ãç解ããããšãã§ããŸããã
ã¢ã€ãã¢ãšã¯-ããã°ã©ããšããžãã¹ã¢ãžã¥ãŒã«ã®éçºè ãCOMã©ãããŒã§äœæ¥ããå¿ èŠæ§ããå®ãããšã§ãã ãããè¡ãããã«ãç§ãã¡ïŒã€ãŸãç§ïŒã¯Misrosoft Wordã¢ãã«ãCABãã¬ãŒã ã¯ãŒã¯ã®ããããæ¡åŒµãã€ã³ãïŒUiExtensionSiteïŒã®ã¡ã«ããºã ã«çµ±åããŸãã
æ¡åŒµãµã€ãã®ã¡ã«ããºã ã¯ãæ©èœçãªæ¥ç¶è©ã®è¿œå ã§æ§æãããŠããŸãã ç°¡åã«èšãã°ãã³ãŒãã¯åŸå±èŠçŽ ã®é¢ä¿ãèŠèŠåããå¿ èŠããããŸãã ç§ãã¡ã®å Žåããããã®é¢ä¿ã¯æ¬¡ã®ãšããã§ãã
- ããŒã«ããŒã¯ãMicrosoft Wordã®ããŒã«ããŒã®é åã«æ¿å ¥ãããŸã
- ãã¿ã³ãããŒã«ããŒã®ãã¿ã³ã®ã³ã¬ã¯ã·ã§ã³ã«æ¿å ¥ãããŸã
- ãã¿ã³ã«ã¯äœãæ¿å ¥ãããŸããïŒã³ã³ãããã¯ã¹ã¯ååšããŸãããã³ã³ãããã¯ã¹ã®å Žåã¯èæ ®ãããŸããïŒããããã£ãŠãããã¯ã¿ãŒããã«ãªããžã§ã¯ãã§ãã
åèšã§ãäºãã«åŸå±ãã3ã€ã®ãšã³ãã£ãã£ãåŸãããŸããã
-
IWordCommandBarContainer
-Microsoft WordIWordCommandBarContainer
ã³ã³ãã㌠-
IWordCommandBar
ããŒã«ããŒã®ãã¿ã³ã³ã³ãã㌠-
IWordButton
ãã¿ã³
ãšããã§ãWordã³ã³ãããŒã«ã®å®çŸ©ã«å ããŠãç¹å®ã®ã€ã³ã¿ãŒãã§ã€ã¹ã¿ã€ã
IWordCommandBar
ãš
IWordButton
ã¯
CommandBarButton
ããããäžèšã®
CommandBar
ãš
CommandBarButton
ã¢ããã¿ãŒã§ãã
ãã¬ãŒã ã¯ãŒã¯ãäœããã©ãã§ããããŠæãéèŠãªããšãšããŠããããæ¿å ¥ããæ¹æ³ãç解ããããã«ããŠãŒã¶ãŒã³ã³ãããŒã«çšã®ã¢ããã¿ãŒãã¡ã¯ããªãç»é²ããå¿ èŠããããŸãã ãã®å ŽåãããŒã«ããŒïŒããŒã«ããŒã®ã³ã¬ã¯ã·ã§ã³ïŒãšãã¿ã³ïŒããŒã«ããŒã®ãã¿ã³ã®ã³ã¬ã¯ã·ã§ã³ïŒãæ¿å ¥ã§ããŸãã ãããã£ãŠã
IWordCommandBarContainer
ããã³
IWordCommandBarContainer
ã®ã¢ããã¿ãŒãã¡ã¯ããªãç»é²ããŸãã 次ã«ããŠãŒã¶ãŒãæ¡åŒµãã±ãŒã·ã§ã³ãåãåããšããã¬ãŒã ã¯ãŒã¯ã¯ãã®æ¡åŒµãã±ãŒã·ã§ã³ã«åŸå±èŠçŽ ãè¿œå ããããã®ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãæ¢ããããããç®çã«äœ¿çšããŸã-èŠçŽ ãè¿œå ããŸãã ããŠãæ°ã«ããªãããã«ããããã®ã€ã³ã¹ã¿ã³ã¹ã¯ãã¡ã¯ããªãŒã«ãã£ãŠçæãããŸãïŒ
public class CommandBarUIAdapterFactory : IUIElementAdapterFactory
{
public IUIElementAdapter GetAdapter( object uiElement)
{
if ( uiElement is IWordCommandBarContainer ) //
return new CommandBarUIAdapter(( IWordCommandBarContainer )uiElement);
if ( uiElement is IWordCommandBar ) //
return new CommandBarButtonUIAdapter(( IWordCommandBar )uiElement);
throw new ArgumentException( "uiElement" );
}
public bool Supports( object uiElement)
{
return ( uiElement is IWordCommandBarContainer ) || ( uiElement is IWordCommandBar );
}
}
* This source code was highlighted with Source Code Highlighter .
ãããŠãããã«ããŒã«ããŒã³ã¬ã¯ã·ã§ã³ã®å®è£ ããããŸãïŒæ°ãããã®ãè¿œå ããæ©èœããããŸãïŒïŒ
internal class BarCollection : IWordCommandBarContainer
{
#region IWordCommandBarContainer Members
public void AddBar(IWordCommandBar bar)
{
CommandBar commandBar = null ;
//todo: ,
try
{
commandBar = Globals.ThisAddIn.Application.CommandBars[bar.Id];
}
catch ( ArgumentException ) { }
if ( commandBar == null )
commandBar = Globals.ThisAddIn.Application.CommandBars.Add(bar.Id, ( object )MsoBarPosition.msoBarTop, _null, true );
commandBar.Visible = true ;
}
private object _null = System.Reflection.Missing.Value;
#endregion
}
* This source code was highlighted with Source Code Highlighter .
ããŒã«ããŒã®ãã¿ã³ãåæ§ã§ãã ãèªç±ã«ã³ãŒããã芧ãã ããã
ã¡ãªã¿ã«ããã¿ã³ãšããŒã«ããŒèªäœã®ãã¡ã¯ããªãäœæããå¿ èŠããããŸããïŒ
IWordUIElementFactory
åç §ïŒã äºå®ã¯ãCABã¢ãžã¥ãŒã«ã
IWordCommandBar
ããã³
IWordButton
ã§ãã ãããã®ã€ã³ã¿ãŒãã§ã€ã¹ã®ç¹å®ã®çš®é¡ã¯VSTO Word-AddInã¢ã»ã³ããªã«ããã
Microsoft.Office.Core
é¢é£ä»ããããŠã
Microsoft.Office.Core
ã ãããã£ãŠãã¢ãžã¥ãŒã«ïŒOfficeãžã®ãªã³ã¯ããªãïŒãæå®ãããèŠçŽ ã®ã€ã³ã¹ã¿ã³ã¹ãåãåãããã«ããã¡ã¯ããªãŒãäœæãããŸãã 圌女ã¯ã¡ã€ã³ã®WorkItemã«ç»é²ããŸãã
ããŒã«ããŒã®å·¥å Žããã³æ¡åŒµãµã€ãã®ç»é²ïŒ
Services.AddNew<WordUIElementFactory, IWordUIElementFactory>();
IUIElementAdapterFactoryCatalog factoryService = base .Services.Get<IUIElementAdapterFactoryCatalog>();
factoryService.RegisterFactory( new CommandBarUIAdapterFactory());
UIExtensionSites.RegisterSite(UIExtensionSiteNames.WordBarsSite, new BarCollection());
* This source code was highlighted with Source Code Highlighter .
æ··ä¹±ããŠããå Žåã¯ãããããªãã:)ç§èªèº«ã¯ã0.5ãªããã«ããªããã°ç解ã§ããªãããšãç解ããŠããŸãã ïŒåžã«çããšãå€ããæããã«ãªããŸããïŒ
CABã¢ãžã¥ãŒã«
ããã¯éåžžã®ãã«ãã§ããModuleInit
ã¯ã©ã¹ãå¿ èŠã§ãã ãã®ã¯ã©ã¹ã«ã¯ã
AddInWorkitem
äž»ãªäœ¿çšäŸãžã®ãªã³ã¯ãããããã®çµæãäžã§æžãããã¹ãŠã®è¯ããã®ãžã®ã¢ã¯ã»ã¹ããããŸãã
CABã¢ãžã¥ãŒã«ã®ã¿ã¹ã¯ã¯ãäž»èŠãªåäŸã«ããŒãããããŒã«ããŒãæ¿å ¥ãããã®äžã«ãã¿ã³ãæ¿å ¥ãããã¿ã³ãã³ãã©ãŒãèšè¿°ããããšã§ãã
åºæ¥äžããïŒ
UIExtensionSite site = _rootWorkItem.UIExtensionSites[UIExtensionSiteNames.WordBarsSite];
IWordCommandBar mainBar = site.Add<IWordCommandBar>(_factory.CreateBar( "AddInToolbar" ));
IWordButton btn = _factory.CreateButton(mainBar, CommandNames.OpenForm, ToolStripItemDisplayStyle.ImageAndText, " " ,
" Custom Control" , Resources.OpenForm, false );
mainBar.AddButton(btn);
btn.Click += new EventHandler<WordButtonClickArgs>(ButtonClick);
* This source code was highlighted with Source Code Highlighter .
ãã¿ã³ãã³ãã©ãŒã¯ããããã¹ããååŸããã¿ã³ãšããã¹ããã£ãŒã«ããæã€ã«ã¹ã¿ã ãŠã£ã³ããŠãäœæãããããåè¿°ã®äœæ¥é åã«è¡šç€ºããŸãïŒç¹å¥ãª
WindowSmartPartInfo
衚瀺
WindowSmartPartInfo
ïŒïŒæãåºãããã«ãããŒ
WorkspaceNames.MainWorkspace
äžã®ãŠãŒã¹ã±ãŒã¹ã§ç»é²ããŸããïŒïŒ
private void ButtonClick( object sender, WordButtonClickArgs e)
{
object smartPart = _rootWorkItem.SmartParts.AddNew<SampleSmartPart>();
WindowSmartPartInfo info = new WindowSmartPartInfo();
info.FormStartPosition = FormStartPosition.CenterScreen;
info.MaximizeBox = false ;
info.MinimizeBox = false ;
info.Resizable = false ;
info.Title = "Custom Control" ;
info.ShowInTaskbar = false ;
_rootWorkItem.Workspaces[WorkspaceNames.MainWorkspace].Show(smartPart, info);
}
* This source code was highlighted with Source Code Highlighter .
ã¢ãžã¥ãŒã«ã®ããŒã
ããã§ç§ã¯ãã§ã€ã³ãããŒãäœããŸããã éåžžãã¢ãžã¥ãŒã«ã¯ç¹å¥ãªå®£èšçãªããŒã圢åŒïŒããããProfileCatalogïŒãéããŠãã¬ãŒã ã¯ãŒã¯ã«ããŒããããŸãã éåžžãããã¯å¿ èŠãªãã¹ãŠãæ¥ç¶ããã®ã«é©ããæ¹æ³ã§ãã ãããããœããšãã®å³ããçŸå®ãèãããšãããã°ã©ããã¢ãžã¥ãŒã«ãæ¥ç¶ããé宣èšçããžãã¯ãå¿ èŠãšããå¯èœæ§ã¯ãŒãã§ã¯ãããŸããã ãããè¡ãããã«ãããŒããããã¢ãžã¥ãŒã«module-IModuleEnumerator
ç¹å¥ãªåæãåå®çŸ©ããŸãã ç§ã¯ãããéåžžã«åçŽã«ããŸãã-å®è¡å¯èœãªã¢ã»ã³ããªãã©ã«ããŒãæ¢ãããã®äžã®CustomModule.dllãšããã¢ãžã¥ãŒã«ãæ¢ããŸãã æ€çŽ¢ããŠããŒãããŸãã ãŸãããŸãã¯èŠã€ãããªãå Žåã¯ããŒãããŸããïŒ
public class CustomModuleEnumerator : IModuleEnumerator
{
#region Constants
private const string ModuleName = "CustomModule.dll" ;
#endregion
#region IModuleEnumerator Members
public IModuleInfo[] EnumerateModules()
{
List <IModuleInfo> result = new List <IModuleInfo>();
string path = GetModulePath(ModuleName);
if ( File .Exists(path) )
result.Add( new ModuleInfo(ModuleName));
return result.ToArray();
}
#endregion
#region Private Methods
private string GetModulePath( string assemblyFile)
{
if ( !Path.IsPathRooted(assemblyFile) )
assemblyFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, assemblyFile);
return assemblyFile;
}
#endregion
}
* This source code was highlighted with Source Code Highlighter .
ããã§ãã®ãµãŒãã¹ã¯éåžžã«ã·ã³ãã«ã«ãªããŸãããããã¡ãããå¿ èŠã«å¿ããŠã¯ãããã®ãè£ åããããšãã§ããŸãã ããšãã°ãããŒã¿ããŒã¹ããã¢ãžã¥ãŒã«ãããŒãããŸã:)
ãã®ãµãŒãã¹ã¯ãCABã¢ããªã±ãŒã·ã§ã³ã¯ã©ã¹ã§ãªããŒãããå¿ èŠããããŸãã
protected override void AddServices()
{
base .AddServices();
RootWorkItem.Services.Remove<IModuleEnumerator>();
RootWorkItem.Services.AddOnDemand<CustomModuleEnumerator, IModuleEnumerator>();
}
* This source code was highlighted with Source Code Highlighter .
å»è ãç²ããã ã©ãããã®ïŒ
å ã®æ¬äŒŒäŸã§èããããŠããããšãå€æããŸããïŒMicrosoftã®ããŒã«ããŒã¯Microsoftã®ããŒã«ããŒã«ãããã¢ã€ã³ã³ãä»ãããã¿ã³ããã³ã°ããŸãããã¿ã³ãã¯ãªãã¯ãããšããŠãŒã¶ãŒã³ã³ãããŒã«ãããã¹ããã£ãŒã«ãã«ãããã¢ãããããã¿ã³ã䜿çšããŠããã¥ã¡ã³ãã§éžæãããããã¹ããé§åã§ããŸã:)äºçŽ°ãªããšã§ããããªããžã§ã¯ãéã®æ¥ç¶ãã©ãã»ã©éèŠã§ãªããã«æ³šæããŠãã ããïŒ é©åã«åŠçããããã¬ãŒã ã¯ãå®å šãªã³ãŒãä¿å®æ§ãåããŠããããšã«æ³šæããŠãã ããã
泚æïŒ èœãšãç©ŽïŒ
ã»ãã¥ãªãã£
ãµã³ãã«ãã³ã³ãã€ã«ããŠå®è¡ããŠããäœãéå§ãããŸããã ããã«ããµãŒãããŒãã£ã®ã¢ãžã¥ãŒã«ïŒãã®å Žåã¯CustomModule.dllïŒãèµ·åããããã®ååãªæš©éããªãããšãäŒããã¡ãã»ãŒãžã衚瀺ãããŸãã åé¡ã¯ãããã©ã«ãã§ã¯ãVSTOã¢ããªã±ãŒã·ã§ã³ãïŒéçºã¢ãŒãã§ïŒïŒå®è¡å¯èœã¢ã»ã³ããªãšãããäŸåãããã¹ãŠã®ã¢ã»ã³ããªã«ã®ã¿ãå®å šãªä¿¡é Œæš©ãäžããããšã§ãã WordCAB.dllãžã ãµãŒãããŒãã£ã®ã©ã€ãã©ãªã³ãŒãã®äœ¿çšãæå¹ã«ããã«ã¯ã次ã®æé ãå®è¡ããŸããC:\Windows\Microsoft.NET\Framework\v2.0.50727>caspol -u -ag All_Code -url "D:\Projects\WordCAB\bin\Debug\*" FullTrust
Microsoft (R) .NET Framework CasPol 2.0.50727.3053
Copyright (c) Microsoft Corporation. All rights reserved.
The operation you are performing will alter security policy.
Are you sure you want to perform this operation? (yes/no)
yes
Added union code group with "-url" membership condition to the User level.
Success
"D:\Projects\WordCAB\bin\Debug\*"
代ããã«ãã¢ãã€ã³ãèµ·åãããã©ã«ããŒãæå®ããå¿ èŠããããŸãã ã¢ã¹ã¿ãªã¹ã¯ãå¿ããªãã§ãã ããã
ã¢ãã€ã³ã¯èªã¿èŸŒã¿ãåæ¢ããŸããïŒ
ã¢ãžã¥ãŒã«ã§æªåŠçã®äŸå€ãçºçãããšãWordã次ã«ããŒãããããšãã«ãã®ã¢ãžã¥ãŒã«ã®å®è¡ããããã¯ãããããšããããŸãã [ãã«ã]-> [ããŒãžã§ã³æ å ±]-> [ç¡å¹ãªã¢ã€ãã ]ã«ç§»åããæ¡åŒµæ©èœããªã¹ãã«ãããã©ããã確èªããŸãã ããå Žåã¯ãããããåé€ããŸãã 次ã®Run-Debugã§è¡šç€ºãããŸãããæå ¥ãæ¹æ³
æ¡åŒµæ©èœã®åé€ã¯ããã»ã©ç°¡åã§ã¯ãããŸããã Microsoft WordããŒã«ããŒã®COM-AddInsãã¿ã³ãåŒãåºããŸãã ãããè¡ãã«ã¯ã[ããŒã«]-> [ã«ã¹ã¿ãã€ãº]-> [ããŒã«]->ïŒãã©ãã°ã¢ã³ãããããïŒCOM-AddInsã«ç§»åããŸãã ãããã¯ãªãã¯ããŠãæ¡åŒµæ©èœã®ãã§ãã¯ãå€ããŸãã ã¢ã³ããŒããããŸãã éã«ãªããŒãããã«ã¯ãDawãå ã«æ»ããŸãã å¥ã®æ¹æ³ã¯ãã³ã³ãããŒã«ããã«ã«ç§»åããããã°ã©ã ããåé€ããããšã§ããWord 2007ã¯ã©ãã§ããïŒ
ã¢ãã€ã³ã¯ãæåŸã®ã¿ãã®ãªãã³ã«èŠäºã«ããŒããããŸãããŸã å°ããªèœãšãç©ŽããããããããŸãã ããããããã§ç§ã¯ãã§ã«å€ãã®ããšãæžããŠããã®ã§ã誰ãæåŸãŸã§èªããã©ããã¯ããããŸãã:)