教えてください

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
ゲスト

教えてください

#1 投稿記事 by ゲスト »

 電卓風に、数字の貼り付けてあるボタンを押したら、スタティックウインドウに表示されるモジュールを作りたいのですが、記述の方法が分かりません。
 ウィンドウにボタンが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
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#2 投稿記事 by 7 »

数値を文字列に直す必要があります。
ABのヘルプに載っているStr$()関数とSetWindowText()関数をご覧下さい。
ゲスト

#3 投稿記事 by ゲスト »

 ありがとうございました。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

 やってみたら、型が違いますとメッセージが出ます。どこがいけないのでしょうか?
Uhsp

#4 投稿記事 by Uhsp »

一般のBASICを考えると文字列の扱いが面倒ですよね。
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))
ゲスト

#5 投稿記事 by ゲスト »

 やってみました。できました!ありがとうございました。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#6 投稿記事 by イグトランス »

もう終わったようですけど,ちなみにABのヘルプに記載はありませんが,
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
返信する