Top > OOobbs > 93

OOobbs/93 Edit

  • サマリ: クラス構造の取得
  • 環境: Calc
  • 状態: 解決
  • 投稿者: tomo?
  • 投稿日: 2006-02-16 (木) 19:00:38

質問 Edit

簡単にクラスの構造を眺める方法はないのでしょうか?

例えば、 ThisComponent のプロパティとメソッドの一覧などを取得する方法などです。

回答 Edit

  • tomoさん、こんばんわ。ここ↓ http://hermione.s41.xrea.com/pukiwiki/pukiwiki.php?cmd=read&page=OOoBasic%2FMacros%2FDbgInfo2sheet&word=Dbginfo2sheet%20 に便利なマクロが提供されていますよ。-- Kuma? 2006-02-16 (木) 22:47:12
  • 上記のマクロですと,プロパティとメソッドの一覧をCalcファイルに書き出すだけになってしまいます。私の場合は,そのファイルにコメントを入れてあとで見られるように保存してあります。連続的にオブジェクトを参照したり,プロパティ値をみるには他のマクロの方が適していると思います。 -- はにゃ?? 2006-02-17 (金) 09:38:37
  • http://www.ooomacros.org/dev.php に公開されている X - Ray Tool ですと、オブジェクトを続けて見ることが出来ます。 -- はにゃ?? 2006-02-17 (金) 09:34:06
  • 日経Linux にOOoBasic の連載があったときに,X-ray 類似のマクロが掲載されていたのですが,どこかWeb上で公開されているのかどうか忘れてしまいました。 -- はにゃ?? 2006-02-17 (金) 09:35:42
  • OOO 1.1.3 で上記の -- tomo? 2006-02-18 (土) 12:07:06
  • OOO 1.1.3 で上記のマクロを使うとエラーとなってしまいましたが、試してみようと思います。 -- tomo? 2006-02-18 (土) 12:14:02
  • tomoさん、こんにちわ。マクロにエラーが出たとの事ですが、恐らくシステムにライブラリとして登録するのがうまく行かなかったのでは無いかと思います。私の場合は上記マクロを自分用に一部修正し、システムに登録しなくても単なるcalcドキュメントとして使えるようにしていますので、エラーは出ないです。その全コードを示しましたので参考にされて下さい。

なお、calcシートの名前『表1』を『メソッド』、『表2』を『プロパティ』、『表3』を『インタフェイス』 に変更して下さい。Sub Main の中で対象のオブジェクト変数(obj)を定義してからMainを実行すると、各シートにメソッド/プロパティ/インタフェイスが表示されます。

Sub Main

 obj=ThisComponent
 'obj=ThisComponent.Sheets(0).getCellByPosition(0,0)
 'obj=StarDesktop
 DisplayMethods(obj)

End Sub

Sub DisplayMethods(obj As Object)

 Dim oSheet0 As Object,oSheet1 As Object,oSheet2 As Object
 Dim sList As String,sData As String
 Dim fs As Integer,ep As Integer,i As Integer
 Dim EOL As Boolean
 oSheet0=thiscomponent.getSheets().getByName("メソッド")
 oSheet1=thiscomponent.getSheets().getByName("プロパティ")
 oSheet2=thiscomponent.getSheets().getByName("インタフェイス")
 i=0
 do
   oCell=oSheet0.getCellByPosition(1,i)
   if oCell.getString="" then exit do
   oCell.setString("")
   i=i+1
 loop
 
 i=0
 do
   oCell=oSheet1.getCellByPosition(1,i)
   if oCell.getString="" then exit do
   oCell.setString("")
   i=i+1
 loop
 i=0
 do
   oCell=oSheet2.getCellByPosition(1,i)
   if oCell.getString="" then exit do
   oCell.setString("")
   i=i+1
 loop
 
 EOL=FALSE  
 sList=obj.DBG_Methods
 fs=1
 gyo=0
 while fs <=Len(sList)
    'sMsgBox=""
    for i=0 to 15
       ep=InStr(fs,sList,";")
       if ep=0 then
          ep=Len(sList)
       end if
       oCell=oSheet0.getCellByPosition(1,gyo)
       oCell.setString( Mid$(sList,fs,ep-fs))
       gyo=gyo+1
       fs=ep+1
    next i
 wend
 
 sList=obj.DBG_Properties
 fs=1
 gyo=0
 while fs <=Len(sList)
    'sMsgBox=""
    for i=0 to 15
       ep=InStr(fs,sList,";")
       if ep=0 then
          ep=Len(sList)
       end if
       oCell=oSheet1.getCellByPosition(1,gyo)
       oCell.setString( Mid$(sList,fs,ep-fs))
       gyo=gyo+1
       fs=ep+1
    next i
 wend
 
 sList=obj.Dbg_SupportedInterfaces
 fs=1
 gyo=0
 while fs <=Len(sList)
    'sMsgBox=""
    for i=0 to 15
       ep=InStr(fs,sList,"  ")'空白2個をチェック
       if ep=0 then
          ep=Len(sList)
       end if
       oCell=oSheet2.getCellByPosition(1,gyo)
       sData=Mid$(sList,fs,ep-fs)
       if Ltrim(sData)<>"" then
         oCell.setString(sData)
         gyo=gyo+1
       end if
       fs=ep+1
    next i
 wend  

End Sub

  • Kuma? 2006-02-19 (日) 08:33:17


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