MSFlexGridの列の幅を自動調整するというのが過去ログにもあったのですが、その方法をためしてみたのですが文字が少し隠れてしまうときがありました。
文字列の長さを正確に求めて文字が隠れないようにしたいのですが、何か方法はないでしょうか?
AutoSizeプロパティをTrueにしたLabelに一旦格納して、
そのWidthを取得なんて力技は駄目ですか?
・・・駄目ですよね、ほんとに気まぐれですみません。
過去ログの方法を見ていないのですが
GetTextExtentPoint32 を使ってみるとか。
過去ログの方法と同じだったらごめんなさい。
GetTextExtentPoint32について調べてみて、
試しに少し作ってみたのですがうまくいきません。
間違っているところがあれば教えてください。
あと取得した幅の単位は何になるのでしょうか?
Private Declare Function GetTextExtentPoint32 Lib "gdi32.dll" _
Alias "GetTextExtentPoint32A" _
(ByVal hdc As Long, ByVal lpsz As String, _
ByVal cbString As Long, lpSize As SIZE) As Long
Private Type SIZE
cx As Long
cy As Long
End Type
Private Sub Form_Load()
Dim ret&
Dim sz As SIZE
With MSFlexGrid1
.TextMatrix(1, 1) = "abcd"
ret = GetTextExtentPoint32(.hWnd, .TextMatrix(1, 1), _
LenB(StrConv(.TextMatrix(1, 1), vbFromUnicode)), sz)
.ColWidth(1) = cx
End With
End Sub
文字幅なら、TextWidth メソッドで測定可能。
列幅などとして使うなら、両端に余白分を数ピクセル加えるとよさげ。
> 過去ログにもあったのですが
そういう時は、そのログの URL を示しましょう。
TextWidthでできました。
Dentalさん、ありがとうございました。
今後は、URLを張るよう気をつけます。
解決にチェック入れ忘れました。
ツイート | ![]() |