Top > OOobbs > 93
  • The added line is THIS COLOR.
  • The deleted line is THIS COLOR.
  • Go to OOobbs/93.

** [[OOobbs/93]] [#t411346b]
-''サマリ'': クラス構造の取得
-''環境'': Calc
-''状態'': 解決
-''投稿者'': [[tomo]]
-''投稿日'': 2006-02-16 (木) 19:00:38

*** 質問 [#ebfa7390]
簡単にクラスの構造を眺める方法はないのでしょうか?

例えば、
ThisComponent のプロパティとメソッドの一覧などを取得する方法などです。
*** 回答 [#g718756a]
-tomoさん、こんばんわ。ここ↓ 
http://hermione.s41.xrea.com/pukiwiki/pukiwiki.php?cmd=read&page=OOoBasic%2FMacros%2FDbgInfo2sheet&word=Dbginfo2sheet%20
に便利なマクロが提供されていますよ。-- [[Kuma]] &new{2006-02-16 (木) 22:47:12};
-上記のマクロですと,プロパティとメソッドの一覧をCalcファイルに書き出すだけになってしまいます。私の場合は,そのファイルにコメントを入れてあとで見られるように保存してあります。連続的にオブジェクトを参照したり,プロパティ値をみるには他のマクロの方が適していると思います。 -- [[はにゃ?]] &new{2006-02-17 (金) 09:38:37};
-http://www.ooomacros.org/dev.php に公開されている X - Ray Tool ですと、オブジェクトを続けて見ることが出来ます。 -- [[はにゃ?]] &new{2006-02-17 (金) 09:34:06};
-日経Linux にOOoBasic の連載があったときに,X-ray 類似のマクロが掲載されていたのですが,どこかWeb上で公開されているのかどうか忘れてしまいました。 -- [[はにゃ?]] &new{2006-02-17 (金) 09:35:42};
-OOO 1.1.3 で上記の -- [[tomo]] &new{2006-02-18 (土) 12:07:06};
-OOO 1.1.3 で上記のマクロを使うとエラーとなってしまいましたが、試してみようと思います。 -- [[tomo]] &new{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]] &new{2006-02-19 (日) 08:33:17};
-遅レスですが、 http://www.nichoume.com/ooo/dev/OOoBasicDebugger/2.3/ ですね。私はこっち使ってます。 -- [[なかもと]] &new{2006-03-31 (金) 15:57:56};

#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