Top > OOobbs2 > 56

OOobbs2/56 Edit

  • サマリ: CalcWindowの最小化、最大化ORアクティブ化について
  • 環境: Calc
  • 状態: 解決
  • 投稿者: かつお?
  • 投稿日: 2007-07-31 (火) 11:07:30

質問 Edit

Calcのマクロにて、CSVからデータを読み込み、セルに出力後、 プレビュー表示をしておりますが、Cellに出力する作業で、画面がチラチラして見えます。

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

バージョン:OpenOffice2.2.1

回答 Edit

  • 最大化と最小化は 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
  • はにゃ?? 2007-07-31 (火) 14:22:02
  • はにゃ様ありがとうございます。おかげ様で対応できました。(addActionLockのおかげで処理スピードも倍になりました) -- かつお? 2007-07-31 (火) 16:21:04
  • 似たような内容に関して追記。

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

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

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

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 の間で変更します。この方法では、セルカーソルが点滅するので少しだけ画面がチカチカします。作業しないシートがないとき、または余計なシートを追加したくないときなどにはこちらでがまん。

  • はにゃ?? 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 を切り替えるとツールバーとステータスバーが全部非表示になったりするので使わないほうがいいかもしれません。

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

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

感想,コメント,メモ Edit



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