ページ 11

VB 用のコードを AB 用に変換してください

Posted: 2005年7月27日(水) 11:58
by M.S.
ある月刊誌に載っている計算プログラムの VB のコードを、
AB 使用に書き換えてください。

コード: 全て選択


Result.Caption = Str(Val(Input.Text) _
+ Val(Input2.Text))

コード: 全て選択


If Val(Input2.Text) = 0 Then
    Result.Caption = "0 では割れません"
Else
    Result.Caption = Str(Val(Input1.Text) _
    / Val(Input2.Text))
End If
注意 :
「Iuput1」と「Input2」は AB でいう「エディット ボックス」の ID です。

「Result」は AB でいう「スタティック テキスト」の ID です。

「+ , /」は VB の算術演算子です(AB の算術演算子と同じです)。

Re: VB 用のコードを AB 用に変換してください

Posted: 2005年7月27日(水) 12:45
by Mario2

コード: 全て選択


Dim a As String,b As String,c As String
GetDlgItemText(hMainWnd,EditBox1,b,255)
GetDlgItemText(hMainWnd,EditBox2,c,255)
a=Str$(Val(b) + Val(c))
SetDlgItemText(hMainWnd,Static1,a)

コード: 全て選択


If Val(c)=0 Then
SetDlgItemText(hMainWnd,Static1,"0 では割れません"
Else
a=Str$(Val(b) / Val(c))
SetDlgItemText(hMainWnd,Static1,a)
End If
2つあわせると

コード: 全て選択


Dim a As String,b As String,c As String
GetDlgItemText(hMainWnd,EditBox1,b,255)
GetDlgItemText(hMainWnd,EditBox2,c,255)
a=Str$(Val(b) + Val(c))
SetDlgItemText(hMainWnd,Static1,a)

If Val(c)=0 Then
SetDlgItemText(hMainWnd,Static1,"0 では割れません"
Else
a=Str$(Val(b) / Val(c))
SetDlgItemText(hMainWnd,Static1,a)
End If
だと思います。(コンパイル未確認(^_^;;;))
(Static1が「スタティック テキスト」のID、EditBox1,EditBox2が「エディト ボックス」のIDです)
それと、「String」は「BytePtr」かも知れませんが、自分はそこまでは分かりません。
(変数の「a」,「b」,「c」は、ご自由に変えていただいてもかまいません。)

間違えていたらごめんなさい。

Re: VB 用のコードを AB 用に変換してください

Posted: 2005年7月27日(水) 12:57
by M.S.
コンパイルはできるのですが、0 での除算ができません。

Re: VB 用のコードを AB 用に変換してください

Posted: 2005年7月27日(水) 13:00
by M.S.

コード: 全て選択


Dim a As String,b As String,c As String 
GetDlgItemText(hMainWnd,EditBox1,b,255) 
GetDlgItemText(hMainWnd,EditBox2,c,255) 
a=Str$(Val(b) / Val(c)) 
SetDlgItemText(hMainWnd,Static1,a) 

If Val(c)=0 Then 
SetDlgItemText(hMainWnd,Static1,"0 では割れません" 
Else 
a=Str$(Val(b) / Val(c)) 
SetDlgItemText(hMainWnd,Static1,a) 
End If

を、

Dim a As String,b As String,c As String 
GetDlgItemText(hMainWnd,EditBox1,b,255) 
GetDlgItemText(hMainWnd,EditBox2,c,255) 

If Val(c)=0 Then 
SetDlgItemText(hMainWnd,Static1,"0 では割れません" 
Else 
a=Str$(Val(b) / Val(c)) 
SetDlgItemText(hMainWnd,Static1,a) 
End If
にしたらできました。

あれ…?

Posted: 2005年7月27日(水) 15:07
by hira

コード: 全て選択

Dim a As String,b As String,c As String
GetDlgItemText(hMainWnd,EditBox1,b,255)
GetDlgItemText(hMainWnd,EditBox2,c,255)
bとcにメモリが確保されてないっぽいですが…?
変数宣言後、GetDlgItemTextより前に

コード: 全て選択

b=ZeroString(255)
c=ZeroString(255)
を入れてください。
あるときは正しく動いているように見えても、別のときはアクセス違反になることがありますので…。

Re: あれ…?

Posted: 2005年7月27日(水) 22:30
by M.S.
確かに、桁数が10文字くらいから、計算するとアクセス違反になりましたが、
hira 様が教えて下さったコードを入力するとアクセス違反のエラーがなくなりました。

どうも、ありがとうございました。