Top > OOobbs2 > 56
** [[OOobbs2/56]] [#n2683298]
-''サマリ'': CalcWindowの最小化、最大化ORアクティブ化について
-''環境'': Calc
-''状態'': 解決
-''投稿者'': [[かつお]]
-''投稿日'': 2007-07-31 (火) 11:07:30
*** 質問 [#h72ba948]
Calcのマクロにて、CSVからデータを読み込み、セルに出力後、
プレビュー表示をしておりますが、Cellに出力する作業で、画面がチラチラして見えます。

よって、プレビュー表示前までは、最小化し、プレビュー表示後に、
CalcWindowを最大化、もしくはアクティブ化したいのですが、
マクロで可能でしょうか?

バージョン:OpenOffice2.2.1
*** 回答 [#nd8516fa]
- 最大化と最小化は API からできないので、ContainerWindow を隠しておくのはどうでしょうか。

ContainerWindow の ''setVisible'' メソッドで可視性を変更できます。これで非表示にした場合、エラーなどでマクロが停止するとドキュメントを閉じたりできなくなるので、エラー処理などにドキュメントを見えるように設定するかドキュメントを閉じてやるのが無難です。

 Sub Main
 ON ERROR GOTO Handler
 Dim oDoc As Object
   sURL = "file:///C:/usr/cd.ods"
   oDoc = StarDesktop.loadComponentFromURL( sURL,"_blank",0,array())
   oWindow = oDoc.CurrentController.Frame.ContainerWindow
   
   msgbox ""
   oWindow.setVisible(false)
   msgbox ""
   oWindow.setVisible(true)
   
   Exit Sub
   Handler:
   oDoc.close(true)
 End Sub

ドキュメントの描写が問題であれば、''addActionLock'' でアクションを防ぐ手があります。

ドキュメントを開いたまま複雑な処理するのであれば、更新が減るので処理もちょっと早くなります。

http://api.openoffice.org/docs/common/ref/com/sun/star/document/XActionLockable.html

 Sub Main2
 Dim oDoc As Object
   sURL = "file:///C:/usr/cd.ods"
   oDoc = StarDesktop.loadComponentFromURL( sURL,"_blank",0,array())
   
   oDoc.addActionLock()
 
   'do something
 
   oDoc.removeActionLock()
 End Sub

-- [[はにゃ?]] &new{2007-07-31 (火) 14:22:02};
- はにゃ様ありがとうございます。おかげ様で対応できました。(addActionLockのおかげで処理スピードも倍になりました) -- [[かつお]] &new{2007-07-31 (火) 16:21:04};
- 似たような内容に関して追記。

Calc で図形描写をマクロで利用するときもウィンドウがチカチカするようです。根本的な解決策が見つからないので、少しましになる方法を書いておきます。

+アクティブシートを作業のシート以外のものに変更しておく
+一時的に図形描写オブジェクトを非表示に設定する

まずは、アクティブシートを作業のシート以外のものに変更しておく

 Sub Main
   oDoc = ThisComponent
   oController = oDoc.getCurrentController()
   oSheet = oDoc.getSheets().getByIndex(1)
   
   oController.setActiveSheet(oSheet)
 End Sub

画面が更新されないのでチカチカしません。

次の、一時的に図形描写オブジェクトを非表示に設定する。

 Sub Main
   oDoc = ThisComponent
   oController = oDoc.getCurrentController()
   oController.ShowDrawing = 1 'Hide
   ' do something
   oController.ShowDrawing = 0 'Show
 End Sub

''ShowDrawing'' プロパティーを 0: Show, 1: Hide の間で変更します。この方法では、セルカーソルが点滅するので少しだけ画面がチカチカします。作業しないシートがないとき、または余計なシートを追加したくないときなどにはこちらでがまん。

-- [[はにゃ?]] &new{2007-09-16 (日) 21:35:45};
- 表示関係を少し追記しておきます。

ContainerWindow と ComponentWindow のいくつかのプロパティについてです。

ContainerWindow というのは一つのドキュメントのウィンドウです(メニューバー、ツールバー、ステータスバー、タイトルバーを含む)。ComponentWindow はその中に表示されているドキュメントの部分になります(ContainerWindow に含まれる部分以外)。

ドキュメントの ContainerWindow と ComponentWindow の取得の仕方。

 Sub main
   oDoc = ThisComponent
   oFrame = oDoc.getCurrentController().getFrame()
   oContainerWindow = oFrame.getContainerWindow()
   oComponentWindow = oFrame.getComponentWindow()
 End Sub

両方ともドキュメントの場合はほぼ同じプロパティを持っています。

''Enable'' プロパティはウィンドウを操作可能にするかどうかを指定できます。
 oContainerWindow.Enable = False
とすると、メニューバーやツールバーを含めたウィンドウ全体に対してユーザーが操作できなくなります。
 oComponentWindow.Enable = False
の場合は、ドキュメントの部分のみが操作不可能になります。True に戻してやると元のように操作できるようになります。

''Visible'' プロパティは表示するかどうかを変更できます。
 oContainerWindow.Visible = False
とするとやはりウィンドウ全体が非表示になります(完全に操作不可になるので注意)。
 oComponentWindow.Visible = False
この場合はドキュメントの部分のみが非表示になります。True に戻すと元のように表示されます。

これを利用すればチカチカを見なくて済むようになるかもしれません。

ContainerWindow.Visible を切り替えるとツールバーとステータスバーが全部非表示になったりするので使わないほうがいいかもしれません。

図形描写時にもウィンドウのチカチカが起きなくなりました(表示されていないので当然のこと)。が、非表示状態で描写していいのかどうなのかが不明です。

-- [[はにゃ?]] &new{2007-09-19 (水) 02:18:26};
- 最初の質問の最大化する方法を知りたいのですが -- セルダン &new{2008-12-10 (水) 11:37:27};
- win 環境であれば windows api で可能のようですが、それでは他の環境では動きません。今のところ OOo API からはいい方法がありません。下記参考。

-http://user.services.openoffice.org/en/forum/viewtopic.php?f=20&t=6826&p=32145&hilit=maximize+and+window#p32145

-- はにゃ? &new{2008-12-10 (水) 22:30:52};

#comment
*** 感想,コメント,メモ [#a6378134]

#comment

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes