ページ 1 / 1
単純な電卓
Posted: 2006年1月19日(木) 19:04
by M.S.
大分前にも電卓の投稿をしましたが、AB4 でコンパイルして起動させてみると、
正しく機能しなくなったので、また新しく作ろうと思いやってみたのですが、
うまくいかないので、質問させていただきます。
コード: 全て選択
dim buf[225] as Byte
dim buff[225] as Byte
GetDlgItemText(hMainWnd,EditBox1,buf,225)
GetDlgItemText(hMainWnd,EditBox2,buff,225)
SetWindowText(GetDlgItem(hMainWnd,Static1),buf+buff)
上記のコード(足し算用)でやってみると、なにも Static1 に表示されませんでした。
どこがいけないのか教えて下さい。
Posted: 2006年1月19日(木) 20:03
by Toshi
これは文字列を数値とみなして、それらを加算した値を文字列として表示するということでしょうか?
この場合 buf と buff は、それぞれがポインタとみなされますので、
SetWindowText にはそれらのポインタ同士を加算した値がポインタとして渡されてしまいます。
意図した動作にするには、まず GetDlgItemInt でそれぞれの文字列を
数値として取得し、それらを加算した値を文字列にしてから
SetWindowText へ渡します。
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]
コード: 全て選択
'定義
Declare Function GetDlgItemInt Lib "user32.dll" (hDlg As HWND,nIDDlgItem As Long,lpTranslated As DWordPtr,bSinged As Long) As Long
'Long 型
Dim buf As Long
Dim buff As Long
buf=GetDlgItemInt(hMainWnd,EditBox1,NULL,TRUE)
buff=GetDlgItemInt(hMainWnd,EditBox2,NULL,TRUE)
SetWindowText(GetDlgItem(hMainWnd,Static1),Str$(buf+buff))
Posted: 2006年1月20日(金) 20:28
by M.S.
>
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]
>
コード: 全て選択
> '定義
> Declare Function GetDlgItemInt Lib "user32.dll" (hDlg As HWND,nIDDlgItem As Long,lpTranslated As DWordPtr,bSinged As Long) As Long
>
> 'Long 型
> Dim buf As Long
> Dim buff As Long
>
> buf=GetDlgItemInt(hMainWnd,EditBox1,NULL,TRUE)
> buff=GetDlgItemInt(hMainWnd,EditBox2,NULL,TRUE)
>
> SetWindowText(GetDlgItem(hMainWnd,Static1),Str$(buf+buff))
>
>
>
上のコードでできました。
ありがとうございました。
Posted: 2006年1月20日(金) 22:25
by イグトランス
GetDlgItemIntとは逆のSetDlgItemIntもありますよ。
Declare Function SetDlgItemInt Lib "user32.dll" (hDlg As HWND, nIDDlgItem As Long, uValue As DWord, bSinged As Long) As Long
SetDlgItemInt(hMainWnd, Static1, (buf + buff) As DWord, TRUE)
Posted: 2006年1月22日(日) 20:29
by konisi
過去に暇だったので作った電卓を引っ張り出してみるテスト。
http://web1.nazca.co.jp/hp/himajinn13sei/11.zip
プレ画像→
http://web1.nazca.co.jp/hp/himajinn13sei/11.jpg
暇潰しに作った割には複雑な構造してますがヘルプに載ってる関数が殆んどだったと思うので読もうと思えば読めると思います。
そして皆様すみません。<<宣伝にほぼ等しい行為について