ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月28日(日) 08:02

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 5 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2008年5月09日(金) 18:35 
ActiveBasicを始めて約1週間が経ちますが、まだわからないことがいっぱいあります。

まず初めにメインのウィンドウが出てきて、スタートボタンを押すとモーダルダイアログが出てきます。
そしてそのダイアログのラジオボタンでモードを選択すると、そのラジオボタンによって"radio"という名前の変数に格納する数字を変えます。
そして決定ボタンを押すとそのダイアログをEndDialogで破棄します。そしてメインウィンドウに戻り、
"radio"変数に格納されている数字によって処理を変えるというプログラムを作りたいのですが、
違うウィンドウだとグローバル変数として宣言しても、扱えなくなってしまいます。
このような時はどんな命令を使えばいいのですか?

わかりにくい説明ですが、どうかお願いします。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2008年5月09日(金) 20:25 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
こちらでは全く問題なく使えています。
・ローカル変数に同じ名前の変数がありませんか?
・バージョンはいくつですか?

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2008年5月09日(金) 21:02 
バージョンは4.20です。
試しに4.23にバージョンアップしてやってみてもダメでした。
最初は"radio"変数をダイアログの方で宣言していたので、
MainWndで宣言してみたのですが、やっぱりダメです。
ちなみにコードは以下の通りです。
コード:
'-----------------------------------------------------------------------------
'  イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hMainWnd
' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
Dim hajime=0 As Long'スタート判定
Dim a As Long'正解数
Dim t As Long'For用
Dim u=0 As Long'擬似For用
Dim x[10] As Long'掛けられる数の配列
Dim y[10] As Long'掛ける数の配列
Dim b[10] As Long'正しい答えの配列
Dim z=0 As Double'入力した答えの配列
Dim answer As String'入力した答え_String版
Dim radio As Long'ラジオボタン用
'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数
			     
Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
	' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。

	' イベントプロシージャの呼び出しを行います。
	MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function


'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。
Sub MainWnd_Destroy()
	DtCalculation22_DestroyObjects()
	PostQuitMessage(0)
End Sub

Sub MainWnd_CommandButton1_Click()
	DialogBox(hMainWnd,"SubWnd")
EnableWindow(GetDlgItem(hMainWnd,CommandButton1),FALSE)
EnableWindow(GetDlgItem(hMainWnd,CommandButton2),TRUE)
SetDlgItemText(hMainWnd,Static7," ")
u=0
a=0
RANDOMIZE
If radio=2 THEN
	SetDlgItemText(hMainWnd,Static2,"次の2桁×2桁の問題を解きなさい。")
For t=1 TO 10
   x[t]=10+Int(Rnd()*90)
   y[t]=10+Int(Rnd()*90)
   b[t]=x[t]*y[t]
NEXT t
	SetDlgItemText(hMainWnd,Static4,+Str$(x[1])+"×"+Str$(y[1])+"=")
    SetDlgItemText(hMainWnd,Static6," ")
ELSE
	If radio=1 THEN
		SetDlgItemText(hMainWnd,Static2,"次の2桁×1桁の問題を解きなさい。")
		For t=1 TO 10
   x[t]=10+Int(Rnd()*90)
   y[t]=1+Int(Rnd()*9)
   b[t]=x[t]*y[t]
NEXT t
	SetDlgItemText(hMainWnd,Static4,+Str$(x[1])+"×"+Str$(y[1])+"=")
    SetDlgItemText(hMainWnd,Static6," ")
    ELSE
        If radio=3 THEN
SetDlgItemText(hMainWnd,Static2,"次の3桁×1桁の問題を解きなさい。")
            For t=1 TO 10
   x[t]=100+Int(Rnd()*900)
   y[t]=1+Int(Rnd()*9)
   b[t]=x[t]*y[t]
NEXT t
	SetDlgItemText(hMainWnd,Static4,+Str$(x[1])+"×"+Str$(y[1])+"=")
    SetDlgItemText(hMainWnd,Static6," ")
		 ELSE
		     If radio=4 THEN
		SetDlgItemText(hMainWnd,Static2,"次の3桁×2桁の問題を解きなさい。")
		         For t=1 TO 10
   x[t]=100+Int(Rnd()*900)
   y[t]=10+Int(Rnd()*90)
   b[t]=x[t]*y[t]
NEXT t
	SetDlgItemText(hMainWnd,Static4,+Str$(x[1])+"×"+Str$(y[1])+"=")
    SetDlgItemText(hMainWnd,Static6," ")
End If
End If
End If
End If
End Sub


Sub MainWnd_CommandButton2_Click()
    u=u+1
	GetWindowText(GetDlgItem(hMainWnd,EditBox1),answer,100)
	z=Val(answer)
 If z=x*y THEN
      SetDlgItemText(hMainWnd,Static6,"正解!" )
      Sleep(100)
      a=a+1 
   ELSE
      SetDlgItemText(hMainWnd,Static6,"不正解!正しい答えは"+Str$(b))
      Sleep(100)
 END If
 IF u=10 THEN
EnableWindow(GetDlgItem(hMainWnd,CommandButton2),FALSE)
EnableWindow(GetDlgItem(hMainWnd,CommandButton1),TRUE)
 SetDlgItemText(hMainWnd,Static6,"あなたの正解数:"+Str$(a)+"問")
  IF a<=3 THEN
	SetDlgItemText(hMainWnd,Static7,"もう少し頑張ろう!")
  Else
	If a=10 THEN
		SetDlgItemText(hMainWnd,Static7,"全問正解!君は掛け算の天才だね!")
	Else
		SetDlgItemText(hMainWnd,Static7,"その調子!次は全問正解を目指そう!")
	End If
  End If
 Else
	SetDlgItemText(hMainWnd,Static4,+Str$(x[u+1])+"×"+Str$(y[u+1])+"=")
 End If
End Sub
コード:
'-----------------------------------------------------------------------------
'  イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [SubWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hSubWnd

' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。


'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数

Function SubWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
	' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
	SendMessage(GetDlgItem(hSubWnd,RadioButton1),BM_SETCHECK,1,0)
	' イベントプロシージャの呼び出しを行います。
	SubWndProc=EventCall_SubWnd(hWnd,dwMsg,wParam,lParam)
End Function


'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。

Sub SubWnd_CommandButton1_Click()
	EndDialog(hSubWnd,1)

End Sub

Sub SubWnd_RadioButton1_Click()
	radio=1


End Sub

Sub SubWnd_RadioButton2_Click()
	radio=2

End Sub

Sub SubWnd_RadioButton3_Click()
	radio=3

End Sub

Sub SubWnd_RadioButton4_Click()
	radio=4

End Sub


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2008年5月09日(金) 23:59 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
読みにくい・・・
これで上手く動きますか?

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2008年5月10日(土) 13:47 
radiobutton1でないradiobuttonを押したら普通に動きました。
全部自分の勘違いだったようで。
多分BM_SETCHECKだと見た目だけチェックされていて、
実際は変数は入っていないようでした。
現在はSETCHECKをとり、チェックをしていない場合はMessageBoxでチェックを促す
設定にしました。
konisiさん、2度のアドバイス、ありがとうございました!


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 5 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: Semrush [Bot] & ゲスト[16人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean