ちなみに自分はAB4.24を使っています。
それと今回AB4.24でクラスに関するバグ(だと思う)を見つけたのですが、
バグ報告所に投稿したほうがいいですかね?
ver2,3はサポート対象外とされてますが、AB4はどうなのでしょうか?
新たに機能等の追加はなくてもかまわないのですが、
バグの修正くらいはしてくださるとありがたいですね。
一応発見したバグ(だと思う)を載せときます
必要があればバグ報告所に載せなおしますが
[ここをクリックすると内容が表示されます]呼び出す順番は
1.プログラム開始時にStartup()を呼び出す
2.SetDropFunction()を呼び出すとDropFunctionに適当な値が入っており、+1は正常に行われる
3.再びSetDropFunction()を呼び出すと先ほどと同じ値(+1する前)が入っており、+1の行で例外処理のダイアログが表示される
例外処理のダイアログは「例外処理 code:C0000096」となっており、「OK]ボタンを押しても再び同じダイアログが表示される
コード: 全て選択
Dim DropFunction As *Sub(hDrop As HDROP) 'メンバ変数だと例外エラーになる
Class MascotBasicSystem
Private
'DropFunction As *Sub(hDrop As HDROP) 'メンバ変数では例外エラーになる
Public
Sub Startup()
'SetMenuTitle, SetMenuTopic, GetMenuTitleIDはグローバルな関数ポインタ
'第3引数は関数ポインタ
'第4引数はメニュータイトルID、第3引数が0のとき、これで指定したメニューを開く(第5引数は無視される)
'第5引数はTRUEでウィンドウを表示したまま、FALSEで閉じる
Dim TitleID As DWord
TitleID=GetMenuTitleID("終了")
SetMenuTopic(TitleID, "終了確認", 0, 0, 0)
SetMenuTopic(TitleID, "続ける", AddressOf(NullFunction), 0, FALSE)
SetMenuTopic(TitleID, "終了する", AddressOf(EndMascot), 0, TRUE)
TitleID=GetMenuTitleID("表示方法")
SetMenuTopic(TitleID, "最前面表示に設定する", AddressOf(SetWindow_TopMost), 0, TRUE)
SetMenuTopic(TitleID, "最前面表示を解除する", AddressOf(SetWindow_NoTopMost), 0, TRUE)
SetMenuTopic(TitleID, "", 0, 0, 0)
SetMenuTopic(TitleID, "閉じる", AddressOf(NullFunction), 0, FALSE)
SetMenuTopic(TitleID, "戻る", 0, 1, 0)
TitleID=GetMenuTitleID("設定")
SetMenuTopic(TitleID, "マスコットにドラッグしたときの処理", AddressOf(SetDropFunction), 0, TRUE)
SetMenuTopic(TitleID, "戻る", 0, 1, 0)
DropFunction=0
End Sub
Private
'マスコットの終了
Sub EndMascot()
PostMessage(hMainWnd, WM_DESTROY,0,0)
End Sub
'マスコットの表示設定(最前面ウィンドウのON,OFF)
Sub SetWindow_TopMost()
SetWindowPos(hMainWnd, HWND_TOPMOST As HWND, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOREDRAW)
End Sub
Sub SetWindow_NoTopMost()
SetWindowPos(hMainWnd, HWND_NOTOPMOST As HWND, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOREDRAW)
End Sub
'マスコットにファイルがドロップされたとき
Sub DropFile(hDrop As HDROP) 'ドロップされたときの処理
If DropFunction<>0 then DropFunction(hDrop)
End Sub
Sub SetDropFunction()
DropFunction+=1
'ここで例外処理が起きる
'デバッグウィンドウにDropFunctionの値を表示させると
'どうやら最初に設定した0ではなく、適当な数字が入っている
End Sub
Private
Sub NullFunction()
End Sub
End Class
1.プログラム開始時にStartup()を呼び出す
2.SetDropFunction()を呼び出すとDropFunctionに適当な値が入っており、+1は正常に行われる
3.再びSetDropFunction()を呼び出すと先ほどと同じ値(+1する前)が入っており、+1の行で例外処理のダイアログが表示される
例外処理のダイアログは「例外処理 code:C0000096」となっており、「OK]ボタンを押しても再び同じダイアログが表示される