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

IDEにて、「BASIC ダイアログ」を挿入し、名称を「dlgCalendar」とします。そして、カレンダーに必要なコントロールを配置すると下図のようになります。これを作る時に気をつける事として、日付用のボタンは名称をいちいち設定するのが面倒なので連続して作成します。また、一ヶ月の最大日数は31日ですが、37個のコントロールを配置します。


次に、このダイアログを操作するためにモジュールを挿入し、名称を「mdlCalendar」とします。
このモジュールでダイアログの操作をするため、ダイアログと登録した全コントロール用の変数を宣言し、初期化処理にてそれを割り当てます。
また、ボタンを押した時の処理もマクロ内で割り当てるため、ActionLestener用変数も宣言します。

下記にコードの一部を示し、各部の説明を行います。

Option Explicit
 
Private oDialog As Object
 
Private lblMonth As Object
Private scbMonth As Object
Private btnDay(36) As Object
Private btnSet As Object
 
Public dlgCalendar_btnSet_Label As String
 
Private oActionListener As Object
Private oAdjustmentListener As Object
 
Private SelectedDate As Date
Private CalendarType As Integer
 
Public Const CALENDARTYPE_EDIT = 0
Public Const CALENDARTYPE_SELECT = 1

いつも通り、ダイアログとコントロール、リスナー用の変数を宣言します。また、カレンダーには日付選択と休日設定の2種類があるので、これらの種類を記録させるための変数を宣言します。

Public Function Show(TargetDate As Date, wkType As Integer)
    
    If TargetDate < FirstDate Then
        SelectedDate = Now()
    Else
        SelectedDate = TargetDate
    End If
    
    CalendarType = wkType
    
    Initialize
    setMonth(SelectedDate)
    
    If CalendarType = CALENDARTYPE_SELECT Then
        SelectedDate = 0
        btnSet.setVisible(False)
    End If
    
    With oDialog
        .execute
        .dispose
    End With
    
    Show = SelectedDate
    
End Function

ダイアログを表示するための関数ですが、最初に表示する年月とカレンダーの種類を指定するように引数を設けます 。また、選択用の時には日付を選択直後にダイアログを閉じることとしますのでbtnSetボタンを非表示にします。
ダイアログ終了時に選択した日付を戻り値として返します。

Private Sub Initialize
    
    Dim i As Integer
    
    oDialog = createUnoDialog(DialogLibraries.Standard.dlgCalendar)
    
    oAdjustmentListener = _
        CreateUnoListener("dlgCalendarAdjustmentListener_", _
            "com.sun.star.awt.XAdjustmentListener")
    oActionListener = _
        CreateUnoListener("dlgCalendarActionListener_", _
            "com.sun.star.awt.XActionListener")
    
    With oDialog
        lblMonth = .getControl("lblMonth")
        scbMonth = .getControl("scbMonth")
        btnSet = .getControl("btnSet")
        For i = 0 To UBound(btnDay())
            btnDay(i) = .getControl("CommandButton" & i + 1)
            btnDay(i).addActionListener(oActionListener)
            'btnDay(i).Label = ""
        Next i
    End With
    
    scbMonth.addAdjustmentListener(oAdjustmentListener)
    
    btnSet.Label = dlgCalendar_btnSet_Label
    btnSet.addActionListener(oActionListener)
    
End Sub

日付ボタンは扱いを容易にするために配列で宣言したので、多少これまでとは違って見えるかもしれませんが、基本的にやっていることは同じです。
また、mdlMainモジュールのInitialize関数に下記を追加しておきます。

dlgCalendar_btnSet_Label = ControlLabelString("設定")

また、リスナーは日付ボタンに配置する関係上、コントロール変数を初期化する前に宣言しています。

Private Sub setMonth(TargetDate As Date)
    
    Dim i As Integer
    Dim y As Integer
    Dim m As Integer
    
    y = Year(TargetDate)
    m = Month(TargetDate)
    
    lblMonth.Text = y & "/" & m
    scbMonth.Value = (y - Year(FirstDate)) * 12 + m - 1
    
    setDays(y,m)
    
End Sub
 
Private Sub setDays(y As Integer, m As Integer)
    
    Dim wk As Date
    Dim i As Integer
    Dim week As Integer
    
    scbMonth.setVisible(False)
    
    wk = DateSerial(y, m, 1)
    week = WeekDay(wk)
    
    For i = 0 To UBound(btnDay())
        If i < (week - 1) Or Month(wk) <> m Then
            btnDay(i).Label = "" & "~" & chr(13)
            btnDay(i).setVisible(False)
        Else
            btnDay(i).Label = Day(wk) & "~" & chr(13)
            btnDay(i).setVisible(True)
            If mdlHoliday.IsHoliday(wk) Then
                btnDay(i).getModel.TextColor = RGB(255,0,0)
            Else
                btnDay(i).getModel.TextColor = RGB(0, 0, 0)
            End If
            wk = wk + 1
        End If
    Next i
    
    scbMonth.setVisible(True)
    
End Sub

指定した日付に合わせてカレンダーのコントロールを調整します。OpenOffice.orgはマルチタスク(?)な処理をするので、時間のかかる処理をしている間でもコントロールの操作ができてしまいます。これでは色々問題が出てくるので、日付の表示を更新する間は年月用スクロールバーを非表示にして、年月を変更できないようにしてあります。

スポンサーサイト

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

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