投稿日 | : 2006/02/01(Wed) 17:47 |
投稿者 | : ダンボ |
URL | : |
タイトル | : [解決]MSFlexGridのリサイズで疑問 |
GOD さん、花ちゃん さん どうもありがとうございます。まとめ感謝です。
> grdFILES.Width はクライアント領域の幅ではなくグリッド全体の幅です。
あ、納得納得。大納得です。.ScaleWidthはちょっと頭を掠めたのだけれど。
GetClientRectを使って自分でバンバンすればよいんですね。
ColWidth(3)の負値、バグの元です。
> .Appearance = flexFlat
> .BorderStyle = flexBorderNone
> の場合 = 8 (線幅がいらないからスクロールの余裕分だけ)
こういうややこしい場合分けは嫌だから、MSFlexGridにも.ScaleWidthがあれば良いのに。。
#確かSSTabには.ClientWidthがあったような(未確認)
#多分、昔はFlatだけだったので不要だったが3D表示を追加したときに.ScaleWidth/.ClientWidthを手抜きで追加しなかったのだろう
こんな内部関数を作って対処しました。スクロールバーも除いたサイズを返してくれるので結構。
Private Function InnerWidth(CNT As Control) As Long
Dim RCT As RECT, rc As Long
rc = GetClientRect(CNT.hWnd, RCT)
InnerWidth = RCT.Right * Screen.TwipsPerPixelX - 8
End Function