エディットボックスを水平スクロールさせる          <TOP>


SendMessage ウィンドウにメッセージを送信
SB_HORZ(0) 標準スクロールバーの水平
EM_LINESCROLL(&HB6) MLE内のテキストをスクロールさせる
 

スクロール文字数を入力し「Enter」押下でEditBoxの文字列およびスクロールバーを戻しています。

Edit1のプロパティは、複数入力行→あり、垂直オートスクロール→あり、に設定しています。

 

'================================================================
'= エディットボックスを水平スクロールさせる
'=    (EM_LINESCROLL.bas)
'================================================================
#include "Windows.bi"

' スクロールバーのスライダ位置を設定
Declare Function Api_SetScrollPos& Lib "user32" Alias "SetScrollPos" (ByVal hWnd&, ByVal nBar&, ByVal nPos&, ByVal bRedraw&)

' ウィンドウにメッセージを送信
Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any)

#define SB_HORZ 0                       '標準スクロールバーの水平
#define EM_LINESCROLL &HB6              'MLE内のテキストをスクロールさせる
#define CrLf Chr$(13, 10)

Var Shared Edit1 As Object
Var Shared Edit2 As Object
Var Shared Text1 As Object
Var Shared Button1 As Object

Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Edit2.Attach GetDlgItem("Edit2") : Edit2.SetFontSize 14
Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var ScrlNum As Long
    Var Ret As Long

    '水平スクロールする文字の数を指定
    ScrlNum = Val(Edit2.GetWindowtext)

    '水平スクロール実行
    Ret = Api_SendMessage(Edit1.GethWnd, EM_LINESCROLL, ScrlNum, ByVal CLng(0))
End Sub

'================================================================
'= 数値 + 「Enter」で決定
'================================================================
Declare Sub Edit2_Change edecl ()
Sub Edit2_Change()
    ED$ = Edit2.GetWindowText
    EPos% = InStr(ED$, CrLf)
    If EPos% <> 0 Then
        ED$ = Mid$(ED$, 1, EPos% - 1) & Mid$(ED$, EPos% + 2)
        Edit2.SetWindowText ED$

        Ret& = Api_SetScrollPos(Edit1.GethWnd, SB_HORZ, 0, 1)
        Edit1.SetSelText 0, 0, 1
        Edit1.SetFocus
    End If
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End