[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2004/09/02(Thu) 10:27
投稿者名:
URL :
タイトル:
DLLでグリッド操作
いつもお世話になっています。
最近、業務でよくMSHFlexGridを使うのでGridに表示させる部分を一般化し、
Functionにしたのですが、これをクラスに書き込んでDLLにしたいんですが、
どうも上手くいきません。
というより、クラスからフォーム上のMSHFlexGridの参照の仕方が全く分かりません。
色々調べたんですが、結局分かりませんでした。
なにかアドバイスをいただけないでしょうか?
下にGridのFunctionをのせます。

'Grid表示関数
Private Function setGrid(dynOra As OraDynaset)
    Dim RowCount As Integer '行数カウンタ
    Dim i As Integer        '汎用カウンタ
    
    With MSHFlexGrid1
        .Refresh
        .Redraw = False
    
        .Rows = dynOra.RecordCount + 1      '行数セット
        .Cols = dynOra.Fields.Count + 1     '列数セット
        .FixedRows = 1                      '固定行
        .FixedCols = 1                      '固定列
        
        .Row = 0
        .RowHeight(0) = 350  '行幅
        .ColWidth(0) = 300   '列幅
        '各列幅の定義
        For i = 1 To .Cols - 1
            .ColWidth(i) = 1200
        Next
        '列名の代入
        For i = 1 To .Cols - 1
            .Col = i
            .TextMatrix(0, i) = dynOra.FieldName(i - 1)
            .CellAlignment = flexAlignCenterCenter
        Next
        '行番号の設定
        .Col = 0
        For RowCount = 1 To .Rows - 1
            .RowHeight(RowCount) = 300
            .Row = RowCount
            .Text = RowCount               '行番号を表示
        Next
        
        'レコードの終端までループ
        '各値のセット
        RowCount = 1
        Do Until dynOra.EOF = True
            For i = 1 To .Cols - 1
                If IsNull(dynOra.Fields(i - 1).Value) = False Then
                    .TextMatrix(RowCount, i) = dynOra.Fields(i - 1).Value
                Else
                    .TextMatrix(RowCount, i) = ""
                End If
            Next
            RowCount = RowCount + 1
            dynOra.MoveNext
        Loop
        
        'グリッドスタイル
        .AllowBigSelection = True
        .FillStyle = flexFillRepeat
        
        'インデックスのフォント設定
        .Row = 0
        .Col = 0
        .RowSel = .FixedRows - 1
        .ColSel = .Cols - 1
        .CellFontBold = True

        .AllowBigSelection = True
        .FillStyle = flexFillSingle
        .Redraw = True

    End With
End Function

投稿時間:2004/09/02(Thu) 10:38
投稿者名:
URL :
タイトル:
Re: DLLでグリッド操作
やりたいこと書き忘れてました。
要は、この関数を、DLLにしてパラメータとしてレコードを
渡し、メソッドを叩くことで実行したいんです。

どなたかアドバイスをいただけると幸いです。
よろしくお願いします。

投稿時間:2004/09/02(Thu) 12:53
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re^2: DLLでグリッド操作
> やりたいこと書き忘れてました。
> 要は、この関数を、DLLにしてパラメータとしてレコードを
> 渡し、メソッドを叩くことで実行したいんです。
>
> どなたかアドバイスをいただけると幸いです。
> よろしくお願いします。

クラスの中で、グリッドのオブジェクト変数を作り、これにフォームのグリッドを
代入すれば出来ます。

'クラスのコード
Option Explicit

Private mFlexGrid As MSFlexGrid

Public Property Set Init(NewValue As MSFlexGrid)
    Set mFlexGrid = NewValue
End Property

'Grid表示関数
Public Function setGrid()
    Dim RowCount As Integer '行数カウンタ
    Dim i As Integer '汎用カウンタ
    
    With mFlexGrid
        .Refresh
        .Redraw = False
        
        '〜中略〜
    End With
End Function

フォームのコード
Option Explicit

Private objClass As Class1

Private Sub Form_Load()
    Set objClass = New Class1
    
    Set objClass.Init = MSFlexGrid1
    
    objClass.setGrid
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Set objClass = Nothing
End Sub

投稿時間:2004/09/02(Thu) 13:15
投稿者名:
URL :
タイトル:
Re^3: DLLでグリッド操作
早速の返信、本当にありがとうございます。
さて、LESIAさんのおっしゃるとおりクラスにコードを打ち込んで
MSHFlexGrid用のオブジェクトを宣言したのですが、
>Private mFlexGrid As MSHFlexGrid
の所でエラーが発生してしまいました。
「ユーザー定義型は定義されていません」とのことです。
恐らく参照設定がされていないのでしょうが、
いったい何を参照すればいいんでしょう?

お手数おかけして申し訳ないです。こちらでも調べてみます。

投稿時間:2004/09/02(Thu) 14:25
投稿者名:
URL :
タイトル:
Re^4: DLLでグリッド操作
> 早速の返信、本当にありがとうございます。
> さて、LESIAさんのおっしゃるとおりクラスにコードを打ち込んで
> MSHFlexGrid用のオブジェクトを宣言したのですが、
> >Private mFlexGrid As MSHFlexGrid
> の所でエラーが発生してしまいました。
> 「ユーザー定義型は定義されていません」とのことです。
> 恐らく参照設定がされていないのでしょうが、
> いったい何を参照すればいいんでしょう?
>
> お手数おかけして申し訳ないです。こちらでも調べてみます。

コンポーネントでMSHFlexGridをチェックすると、上記のエラー
はなくなりました。しかし、今度は
>Public Property Set Init(NewValue As MSHFlexGrid)
>    Set mFlexGrid = NewValue
>End Property
の部分でエラーが生じてしまいました。
「コンパイルエラー
プライベートオブジェクトモジュールを、パブリックオブジェクト
モジュール内で、パブリックプロシージャの引数または戻り値、パ
ブリックデータメンバ、またはパブリックのユーザー定義型のフィ
ールドとして使用することはできません。」
だそうです。
一体何が悪いんでしょう?意味がわからなくなってきました・・・。

投稿時間:2004/09/02(Thu) 17:56
投稿者名:
URL :
タイトル:
Re^5: DLLでグリッド操作(解決)
>Public Property Set Init(NewValue As MSHFlexGrid)
> Set mFlexGrid = NewValue
>End Property

>Public Property Set Init(ByVal NewValue As Object)
> Set mFlexGrid = NewValue
>End Property
とすることで、DLLを作成することができました。
また、そのDLLもちゃんと機能しています。
なんか、一人で大暴れしてた感がありますが(爆)、
LESIAさん、どうもありがとうございました!