OpenOffice.org Basicでガントチャート
OpenOffice.org Basicを使ってガントチャート作成用マクロ ガントチャートforOOoを開発する手順を紹介していきます。
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
データ編集ダイアログ作成サポートダイアログ

データを編集するダイアログの作成方法は、ほぼ決まっています。
必須項目を挙げると

  1. 変数宣言の強制 Option Explicit
  2. ダイアログ用変数、コントロール用変数の宣言
  3. コントロール表示用の文字列変数宣言
  4. 初期化関数内での各種変数へのコントロール割当
  5. コントロールの値をデータと同期させる
です。
そこで、これらの処理を半自動的に作成するモジュールを作成します。

まず、テキストフィールドのみをもつダイアログを作成し、dlgTextとします。
ダイアログは下図のようになります。ここで、テキストフィールドに複数行を入力/表示可能としておくため、複数行を「はい」に設定しておきます。

次に、mdlTextというモジュールを追加して、このダイアログを表示するためのコードを書きます。

mdlText

Option Explicit
 
Sub Show(myText As String)
    
    Dim oDialog As Object
    
    oDialog = createUnoDialog(DialogLibraries.Standard.dlgText)
    
    With oDialog.getControl("TextField")
        oDialog.Model.Width = .Model.Width
        oDialog.Model.Height = .Model.Height
        .Text = myText
    End With
    
    With oDialog
        .execute
        .dispose
    End With
    
End Sub

ダイアログを宣言して、テキストフィールドに合わせてダイアログの大きさ調整を行ってから引数のテキストをテキストフィールドに割り当てると言う単純なものです。
このダイアログは結構便利なので、僕はよく使います。

次に、前述の編集ダイアログ開発手順に従ってダイアログ操作用のコードを生成するコードを書きます。

mdlText

Sub MakeDialogModuleTemplete(oDialog As Object)
    
    Dim myCode As String
    
    Dim oControls
    Dim DialogName As String
    
    Dim i As Integer
    Dim wk(6) As String
    
    Dim sName As String
    Dim sType As String
    
    oControls = oDialog.Controls
    DialogName = oDialog.getModel.Name
    
    myCode = "Option Explicit" & chr(13) & _
        "Private oDialog As Object" & chr(13)
    
    For i = 0 To UBound(oControls)
        
        'oControlModel = oControls(i).getModel
        sName = oControls(i).getModel.Name
        
        Select Case oControls(i).ImplementationName
            Case "stardiv.Toolkit.UnoButtonControl", _
                "stardiv.Toolkit.UnoCheckBoxControl"
                sType = "Label"
            Case Else
                sType = "Text"
        End Select
        
        wk(0) = wk(0) & chr(13) & "Private " & sName & " As Object"
        wk(1) = wk(1) & chr(13) & "Public " & DialogName & "_" & _
            sName & "_" & sType & " As String"
        wk(2) = wk(2) & chr(13) & chr(9) & chr(9) & _
            sName & " = .getControl("""& sName & """)"
        
        wk(3) = wk(3) & chr(13) & chr(9) & sName & "." & sType & _
            " = " & DialogName & "_" & sName & "_" & sType
        
        wk(4) = wk(4) & chr(13) & chr(9) & _
            DialogName & "_" & sName & "_" & sType & _
            " = ControlLabelString("""")" 
        
        wk(5) = wk(5) & chr(13) & chr(9) & chr(9) & _
            sName & ".Text" & _
            " = ._" & Right(sName, Len(sName) - 3)
        
        wk(6) = wk(6) & chr(13) & chr(9) & chr(9) & _
            "._" & Right(sName, Len(sName) - 3) & _
            " = " & sName & ".Text"
    Next i
    
    myCode = myCode & wk(0) & chr(13) & wk(1) & chr(13) & chr(13) & _
        "Private flgUpdate As Boolean" & chr(13) & chr(13) & _
        "Sub Show" & chr(13) & _
            chr(9) & "Initialize" & chr(13) & _
        "End Sub" & chr(13) & chr(13) & _
        "Sub Initialize" & chr(13) & _
            chr(9) & "With oDialog" & wk(2) & chr(13) & _
            chr(9) & "End With" & chr(13) & _
            wk(4) & chr(13) & _
            wk(3) & chr(13) & _
        "End Sub" & chr(13) & chr(13) & _
        "Sub setValues(obj As Object)" & chr(13) & _
            chr(9) & "With obj" & _
            wk(5) & chr(13) & _
            chr(9) & "End With" & chr(13) & _
        "End Sub" & chr(13) & chr(13) & _
        "Sub getValues" & chr(13) & _
            chr(9) & "With obj" & _
            wk(6) & chr(13) & _
            chr(9) & "End With" & chr(13) & _
        "End Sub"
    
    Show(myCode)
    
End Sub

まず、ダイアログに登録されている全コントロールとダイアログの名称を取得します。
そして、配列wkにそれぞれ

  1. コントロールの名称に合わせて変数を宣言するコード
  2. 表示用文字列を宣言するコード
  3. コントロールを変数に割り当てるコード
  4. 表示用文字列を初期化するコード
  5. コントロールに表示用文字列を割り当てるコード
  6. コントロール名からデータの構造を推測して、コントロール値をデータに割り当てるコード
  7. 同様に、データにコントロール値を割り当てるコード
を入力します。そして、取得したコードを見やすく整形してコードとして完成させます。
完成したコードを先ほど作成したShow関数で表示すると、内容をコピーし目的のモジュールに貼付けます。

ただし、LabelやScrollBarにListBox、CheckBoxなどの対応は全然考えていないのでこのままでは使えません。取得したコードは実情に合わせた手直しが必要になります。もちろん、凝ればもっといろいろ予め作るコードも生成できますがここではこれで終わりにします。是非、自分でカスタマイズしながら使って下さい。

ちなみに、chr(13)は改行、chr(9)はタブを意味します。これらの番号を調べるにはAsc関数を利用します。

試しにこれまでに作成したダイアログをこれで作ってみるなら、oDialogを初期化した後に以下のコードを追加してみて下さい。

mdlText.MakeDialogModuleTemplete(oDialog)
スポンサーサイト

テーマ:OpenOffice.org - ジャンル:コンピュータ

コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://shinob.blog42.fc2.com/tb.php/49-ccebc4f2
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック
COPYRIGHT(C) 2004 POWERD BY FC2 ALLRIGHT RESERVED.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。