プロが教えるわが家の防犯対策術!

教えて下さい。
vb6の環境下でTextbox、もしくはLabelのでそれに表示させる文字位置を枠内のセンターに持っていきたいのですが、その方法を教えて下さい。
横方向はプロパティ-でセンターに持っていけるのですが。縦方向がわかりません。教えて下さい。

A 回答 (2件)

※ラベルはVB独自のオブジェクトであり、実際にはフォームに直接描画されている絵と同じです。

ですのでAPI云々でどうこうできる物ではありません。
VBの仕様通りの動きしかできません。
○水平方向中央
×垂直方向中央

※テキストボックスはWindowsのEditClassのオブジェクトと同じような設定が可能です。(おそらくVB内部ではVBがEditClassと同じ物を作って、KeyDown,Change...などのイベントをVB用に加工しているものだと思ってます。)そのEditClassに垂直方向の中央という設定はないので、VBでもできないと思います。

さきほどカッコで書いた部分が違うのであれば、可能性があるのですが・・・EditClass用のAPI定数をSendMessageで送ると反映されるので、多分間違いないかと・・・



参考までに私もソースを載せます。
方法はピクチャボックスに、直接文字列を描画しています。
>  Call dspCenterText(strWk, Picture1)
の部分を
  Call dspCenterText(strWk, Me)
としたら、フォーム中央に描画します。(意味ないけど・・・)


※構成
フォーム
├Command1
├PictureBox1
└TextBox1

Option Explicit

Private Sub Command1_Click()
  Dim strWk  As String
  
  strWk = Text1.Text
  
  'テキストボックスの内容を、ピクチャボックスの中央に表示
  Call dspCenterText(strWk, Picture1)
End Sub

Private Sub Form_Load()
  'ピクチャボックス初期設定(ここのコードはロードイベントに書かないでも、デザイン時のプロパティで初期設定で可能です)
  With Picture1
    '再描画を自動(必須)
    .AutoRedraw = True
    
    'ピクチャボックスがフォーカスを保持しないように使用不可にしてしまう
    .Enabled = False
    
  '---- 以下の設定はお好みで ----
    
    'テキストボックスみたいにしたいなら、背景を白に
    .BackColor = vbWhite
    
    'フォント指定も可
    .Font.Size = 15
    .Font.Bold = True
    .Font.Italic = True
    .ForeColor = vbRed
  
  '---- お好み設定終了 ----
  End With
End Sub

'引数詳細
'  inValue:文字列
'  inObj:オブジェクト(ただし、フォームかピクチャボックス)
Private Sub dspCenterText(inValue As String, inObj As Object)
  Dim lngTextWidth  As Long
  Dim lngTextHeight  As Long
  
  With inObj
    'クリア
    .Cls
    
    '文字列の幅/高さを得る
    lngTextWidth = .TextWidth(inValue)
    lngTextHeight = .TextHeight(inValue)
    
    '描画開始のX/Y座標を設定
    .CurrentX = (.ScaleWidth - lngTextWidth) / 2
    .CurrentY = (.ScaleHeight - lngTextHeight) / 2
    
    '描画
    inObj.Print inValue
    .Refresh
  End With
End Sub
    • good
    • 0

私の知る限りでは、出来ないと思います。



そこで、Labelの中央表示の仕方で、
(1)Pictureを表示したい場所に作る。
(2)その上にLabelを貼り付け
(3)Label1.AutoSize を Trueに変更する。
   (Caption も 何も入力されていない状態にする)
(4)ラベルに表示する時に、
With Label1
.Caption = "ただいまテスト中" & Chr(13) & "少々お待ちください"
.Top = (Picture1.Height - .Height) / 2
.Left = (Picture1.Width - .Width) / 2
End With
のようにすれば、Pictureボックス内で中央に表示されます。

Sub LabelDsp(Dat as string)
With Label1
.Caption = Dat
.Top = (Picture1.Height - .Height) / 2
.Left = (Picture1.Width - .Width) / 2
End With
end sub
のようにしておけば、ラベルに表示する時に

LabelDsp "メッセージを出力中"

と書けば、毎回書くよりは楽に書けます。
Textboxの方は、いい方法が思いつきません。すいません。

参考になればいいのですが・・・
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!