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

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
M.S.
記事: 212
登録日時: 2005年6月01日(水) 21:51
お住まい: 奈良県北西部

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

#1 投稿記事 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 の算術演算子と同じです)。
Mario2
記事: 205
登録日時: 2005年5月31日(火) 13:31
お住まい: 大阪市
連絡する:

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

#2 投稿記事 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」は、ご自由に変えていただいてもかまいません。)

間違えていたらごめんなさい。
M.S.
記事: 212
登録日時: 2005年6月01日(水) 21:51
お住まい: 奈良県北西部

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

#3 投稿記事 by M.S. »

コンパイルはできるのですが、0 での除算ができません。
M.S.
記事: 212
登録日時: 2005年6月01日(水) 21:51
お住まい: 奈良県北西部

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

#4 投稿記事 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
にしたらできました。
hira
記事: 203
登録日時: 2005年5月31日(火) 20:14
お住まい: 兵庫県
連絡する:

あれ…?

#5 投稿記事 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)
を入れてください。
あるときは正しく動いているように見えても、別のときはアクセス違反になることがありますので…。
M.S.
記事: 212
登録日時: 2005年6月01日(水) 21:51
お住まい: 奈良県北西部

Re: あれ…?

#6 投稿記事 by M.S. »

確かに、桁数が10文字くらいから、計算するとアクセス違反になりましたが、
hira 様が教えて下さったコードを入力するとアクセス違反のエラーがなくなりました。

どうも、ありがとうございました。
返信する