はじめまして。
VisualBasic 6.0, Windows2000 の環境で開発をしております。
あるフォームにリストボックスを貼り付け、SendMessageByNumを使って
リストボックスの横幅を越えた内容について、横スクロールバーを表示して
表示できるようにしました。
ここで表題の問題なのですが、横スクロールバーを表示した文字の右端位置まで
自動的に移動する手段をお伺いしたいのです。
色々なサイトを巡ってみたのですが、いまいち分からず・・・
皆さんのお知恵を拝借したいと思います。よろしくお願いします。
単なるVBのスクロールバーならValueをMax値にするだけだけど。
Value値というのは、SendMessageByNumの引数ですか?
うろ覚えながらVB.netでは、リストボックスに横スクロールバーの
設定をするプロパティが、標準でついているそうですが
VB6.0ではリストボックスに、横スクロールバーのプロパティがついていません。
ですので、SendMessageByNumを使い、表示領域に合わせた形にしなくてはならず・・・
SendMessageByNum という API は存在しません…。
おそらく、SendMessageA につけた別名(Alias)なのでしょうね。
で、今回の場合、「LB_SETHORIZONTALEXTENTメッセージ」を送出する事を
指して、SendMessageByNum だと書かれているのだと思いますが、
もしもそうであれば、WM_HSCROLL と SB_THUMBPOSITION について
併せて送出すれば、スクロール制御も可能でしょう。
> SendMessageByNum という API は存在しません…。
お恥ずかしい。その通りです。
とりあえずSendMessageAを再び使って、教えていただいた内容でいろいろ
やってみようと思います。(結果は後ほどm(__)m)
今回行おうと思っているのは、サーバとソケット通信を行い、
サーバの応答が送られてくると、それをリストボックスに表示するという機能です。
サーバは自身が考え中になると「**********」というように、アスタリスクを
連続送信してきて、処理がどれくらい進んでいるのかをこちらに通知してきます。
(実際にはアスタリスクは1つずつ送信されてきます)
それらをリストボックスにリアルタイムに表示するわけなのですが、
横幅の表示域を越えた場合、超えた分だけの横スクロールバー表示領域を確保し、
かつ、その横スクロールバーの一番右にツマミを持ってきたかったのです。
なかなかこれが難しく・・・
結果、出来ました。
受信毎に以下のような内容を読んでいます。
---------- Declaration ----------
Declare Function SendMessageByNum Lib "user32" _
Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Const WM_HSCROLL = &H114
Const SB_LINELEFT = 0
Const SB_LINERIGHT = 1
Const SB_THUMBPOSITION = 4
---------- Procedure ----------
With Form1.lstCmd
For i = 0 To .ListCount - 1
If lngWidth < Form1.TextWidth(.List(i) & " ") Then
lngWidth = Form1.TextWidth(.List(i) & " ")
End If
Next
If Form1.ScaleMode = vbTwips Then
lngWidth = lngWidth \ Screen.TwipsPerPixelX
End If
'横スクロールバー表示
Call SendMessageByNum(.hWnd, LB_SETHORIZONTALEXTENT, lngWidth, 0)
lngScWidth = Form1.TextWidth(.List(.ListCount - 1) & " ") \ Screen.TwipsPerPixelX
If lngScWidth > .Width \ Screen.TwipsPerPixelX Then
Call SendMessageByNum(.hWnd, WM_HSCROLL, SB_LINERIGHT, 0)
Else
Call SendMessageByNum(.hWnd, WM_HSCROLL, SB_THUMBPOSITION, 0)
End If
End With
---------------------------------
あとは何とかなりそうです。
ありがとうございましたm(__)m
http://forums.belution.com/ja/vb/000/014/36.shtml
ツイート | ![]() |