MSFlexGridの列の幅の調整

解決


bizi  2006-03-05 09:27:25  No: 94479

MSFlexGridの列の幅を自動調整するというのが過去ログにもあったのですが、その方法をためしてみたのですが文字が少し隠れてしまうときがありました。
文字列の長さを正確に求めて文字が隠れないようにしたいのですが、何か方法はないでしょうか?


気まぐれ  2006-03-06 09:37:47  No: 94480

AutoSizeプロパティをTrueにしたLabelに一旦格納して、
そのWidthを取得なんて力技は駄目ですか?
・・・駄目ですよね、ほんとに気まぐれですみません。


へむりん  2006-03-06 20:38:02  No: 94481

過去ログの方法を見ていないのですが
GetTextExtentPoint32 を使ってみるとか。

過去ログの方法と同じだったらごめんなさい。


bizi  2006-03-07 06:41:18  No: 94482

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


Dental  2006-03-07 06:46:24  No: 94483

文字幅なら、TextWidth メソッドで測定可能。
列幅などとして使うなら、両端に余白分を数ピクセル加えるとよさげ。

> 過去ログにもあったのですが
そういう時は、そのログの URL を示しましょう。


bizi  2006-03-07 09:54:33  No: 94484

TextWidthでできました。
Dentalさん、ありがとうございました。
今後は、URLを張るよう気をつけます。


bizi  2006-03-08 06:00:29  No: 94485

解決にチェック入れ忘れました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加