2009-04-22 7 views
0

VB6でフレックスグリッドテーブルの高さを計算し、塗りつぶした行の数だけをどのように計算しますか?テーブルの高さを正確に計算する方法

現在

myFlexGrid.Height = (myFlexGrid.CellHeight * myFlexGrid.Rows) ' paraphrased from code 

行あたりの短い約3ピクセルで出てきます。魔法の数を増やすことはちょっとハッキリしており、これに頼ることなくこれを達成したいと思っています。

更新: 問題を複雑にするには、複数行のセルも処理する必要があります。

答えて

1

あなたが+ 30

30を作ることです

Me.MSFlexGrid1.Height =(Me.MSFlexGrid1.CellHeight)*(Me.MSFlexGrid1.Rows + Me.MSFlexGrid1.FixedRows)を移動する必要がありますフレックスグリッドの周りを走る黒いボーダーを示すのに2ピクセル長い。

また、垂直スクロールバーを無効にすることも有効です。

+0

実際には、私は見つけることができません:ユーザーが120dpiモードで実行している場合、12 twipsは1ピクセルに等しいです。しかし、このような半恣意的な数字の追加は、私が避けようとしているものです。 –

+0

私はまた、複数行のセルを扱う必要があることを発見しました。 –

+0

コントロールが明示的にオートハイト機能をサポートしていないか、すべてのUI要素の高さの値を公開しない限り、マジックナンバーの使用を避けることはできません。これは、コントロールが黒いボックスとして設計されているためです。あなたのロジックがここで複雑になるようですが、フレックスグリッドをコントロールクラスの中にラップしてそこにオートハイト機能を追加して、メインルーチンのコードがきれいになるようにすることをお勧めします。 –

2

RS Coneleyは近いですが、ここではすべてのDPI設定を占め正しい方法は次のとおりです。

Me.MSFlexGrid1.Height = Me.MSFlexGrid1.CellHeight _ 
         * (Me.MSFlexGrid1.Rows + Me.MSFlexGrid1.FixedRows) _ 
         + (Screen.TwipsPerPixelY * 2) 
0

これは、あなたが宣言する必要があります私は

For i = 0 To fgrComments.Rows - 1 
     'Set MSFlexGrid to appropriate Cell 
     myFlexGrid.Row = i 

     'Set textbox to match the selected cell 
     txtSizer.Width = myFlexGrid.ColWidth(2) 
     txtSizer.Font = myFlexGrid.Font 
     txtSizer.Text = myFlexGrid.Text 

     'Call API to determine how many lines of text are in text box 
     lLinesOfText = SendMessage(txtSizer.hwnd, EM_GETLINECOUNT, 0&, 0&) 

     ' Update the running values 
     lTotalNumberOfRows = lTotalNumberOfRows + lLinesOfText 
     lCurrentHeight = lCurrentHeight + myFlexGrid.CellHeight 
    Next i 

    ' resize the grid 
    Dim iSpacers As Integer 
    iSpacers = Screen.TwipsPerPixelY * lTotalNumberOfRows 
    myFlexGrid.Height = lCurrentHeight + iSpacers 

を思い付いた最終的なコードですSendMessage(see here to see how)とEM_GETLINECOUNTの値ですが、あなた自身でそれを行うことができるはずです:-)

それはマジックナンバーを削除するものではありませんが、それは私のために十分に近いです。

関連する問題