電卓風に、数字の貼り付けてあるボタンを押したら、スタティックウインドウに表示されるモジュールを作りたいのですが、記述の方法が分かりません。
ウィンドウにボタンが1つ、スタティックウィンドウが1つ貼り付けてあります。ウインドウの識別名がCalcで、ウィンドウハンドルがhCalc、ボタンのIDがCommandButton1、スタティックウィンドウのIDがStatic1とします。ボタンが押されたら変数kosuに数字が入り、kosuの内容がスタティックウインドウに表示されるようにしたいのですが。Calc_CommandButton1_Click()にはどのように記述すればいいのでしょうか?
以下のように記述しましたが、エラーこそ出ないもののスタティックウインドウには何も表示されません。
Dim kosu As Long
Dim hStatic1 As HWND
Sub Calc_CommandButton1_Click() '"1"を押したとき
hStatic1 = GetDlgItem(hCalc,Static1)
kosu = kosu*10 + 1
SendMessage(hStatic1,WM_SETTEXT, 0, kosu)
End Sub
教えてください
ありがとうございました。ABのヘルプも見ましたがいまいちよく分かりません。以下のような記述をすればよかったのでしょうか?
Dim kosu As Long
Dim kosu$ As String
Dim hStatic1 As HWND
Sub Calc_CommandButton1_Click() '"1"を押したとき
hStatic1 = GetDlgItem(hCalc,Static1)
kosu = kosu*10 + 1
kosu$ = Str$(kosu)
SendMessage(hStatic1,WM_SETTEXT, 0, kosu$)
End Sub
やってみたら、型が違いますとメッセージが出ます。どこがいけないのでしょうか?
Dim kosu As Long
Dim kosu$ As String
Dim hStatic1 As HWND
Sub Calc_CommandButton1_Click() '"1"を押したとき
hStatic1 = GetDlgItem(hCalc,Static1)
kosu = kosu*10 + 1
kosu$ = Str$(kosu)
SendMessage(hStatic1,WM_SETTEXT, 0, kosu$)
End Sub
やってみたら、型が違いますとメッセージが出ます。どこがいけないのでしょうか?
一般のBASICを考えると文字列の扱いが面倒ですよね。
STRING型の構造とBytePtr型と要求される実引数の型などを適当なHPで
調べる必要があります。
ここの下段リンクの「OriosのActiveBasic講座」に多少解説があります。
STRING型の構造とBytePtr型と要求される実引数の型などを適当なHPで
調べる必要があります。
ここの下段リンクの「OriosのActiveBasic講座」に多少解説があります。
コード: 全て選択
Dim kosu As Long
Dim hStatic1 As HWND
Dim Buf As string 'BytePtr calloc() lstrcpy()
hStatic1 = GetDlgItem(hCalc,Static1) 'ORG = hMainWnd
kosu = kosu*10 + 1
Buf = Str$(kosu)
SendMessage(hStatic1,WM_SETTEXT, 0,StrPtr(Buf))
もう終わったようですけど,ちなみにABのヘルプに記載はありませんが,
SetDlgItemIntというまさに今回やろうとしていることを行ってくれる関数があります。
それを使うとこうなります。
SetDlgItemIntというまさに今回やろうとしていることを行ってくれる関数があります。
それを使うとこうなります。
コード: 全て選択
Sub Calc_CommandButton1_Click() '"1"を押したとき
kosu = kosu*10 + 1
SetDlgItemInt(hCalc, Static1, kosu, TRUE) ' 最後のTRUEはこの数値が符号付きであることを伝えています。
End Sub
Declare Function SetDlgItemInt Lib "User32.dll" (hDlg As HWND, idDlgItem As Long, Value As DWord, isSigned As Long) As Long