ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2017年11月23日(木) 23:57

All times are UTC+09:00




新しいトピックを投稿する  トピックへ返信する  [ 6 件の記事 ] 

使用しているABのバージョン
ActiveBasic 2
ActiveBasic 3
ActiveBasic 4
ActiveBasic 5
1 個のオプションを選択できます

投票結果を見る
作成者 メッセージ
投稿記事Posted: 2007年3月05日(月) 21:44 
オフライン

登録日時: 2006年10月14日(土) 10:52
記事: 22
住所: 愛知
AB5の開発が進んでいますが、皆さんはどのバージョンを使っていますか?
ちなみに自分はAB4.24を使っています。

それと今回AB4.24でクラスに関するバグ(だと思う)を見つけたのですが、
バグ報告所に投稿したほうがいいですかね?
ver2,3はサポート対象外とされてますが、AB4はどうなのでしょうか?
新たに機能等の追加はなくてもかまわないのですが、
バグの修正くらいはしてくださるとありがたいですね。

一応発見したバグ(だと思う)を載せときます
必要があればバグ報告所に載せなおしますが
[hide]
コード:
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]ボタンを押しても再び同じダイアログが表示される

[/hide]


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2007年3月05日(月) 22:02 
オフライン

登録日時: 2005年5月31日(火) 17:14
記事: 231
住所: 茨城県
引用:
AB5の開発が進んでいますが、皆さんはどのバージョンを使っていますか?
私は常に最新版を使っています。コーディングしているといつもバグを見つけてしまうので、最新版を使わざるを得ません。というより、ライブラリ開発なので当たり前ですね。
引用:
一応発見したバグ(だと思う)を載せときます
詳しい事情は説明に自信がないので省略させていただきますが、たしかAddressOf()でメソッドのポインタを取得してあれこれするというのは、うまくいかなかった気がします。これらは、5.0で搭載予定のデリゲートによって解決することが出来ます。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2007年3月05日(月) 22:09 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 895
住所: 東京都
それはこういう風にすると回避できます。
コード:
Sub MascotBasicSystem_EndMascot(ByRef mbs As MascotBasicSystem)
    mbs.EndMascot()
End Sub
こうしてAddressOf (EndMascot)の代わりにAddressOf (MascotBasicSystem_EndMascot)とするという具合です。勿論*Sub (ByRef mbs As MascotBasicSystem)と型が変わっていますけど。

それはともかく私はAB5とAB4をいったりきたりです。最近はAB5の方が多いですが。滅多に使いませんがAB2と3もそれぞれとっておいてはあります。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2007年3月06日(火) 16:51 
オフライン

登録日時: 2006年10月14日(土) 10:52
記事: 22
住所: 愛知
引用:
詳しい事情は説明に自信がないので省略させていただきますが、たしかAddressOf()でメソッドのポインタを取得してあれこれするというのは、うまくいかなかった気がします。これらは、5.0で搭載予定のデリゲートによって解決することが出来ます。
SetDropFunction()以外のメンバ関数を同様に関数ポインタで呼び出したときは
上手くいっていたので、てっきり大丈夫なのだと思ってました。
引用:
それはこういう風にすると回避できます。
コード:
Sub MascotBasicSystem_EndMascot(ByRef mbs As MascotBasicSystem) 
    mbs.EndMascot() 
End Sub
こうしてAddressOf (EndMascot)の代わりにAddressOf (MascotBasicSystem_EndMascot)とするという具合です。勿論*Sub (ByRef mbs As MascotBasicSystem)と型が変わっていますけど。
このクラス(MascotBasicSystem)は1つしか無いので以下のコードと同義と考えてよろしいでしょうか?
以下のように書き換えたらエラーが出なくなったので大丈夫だとは思うのですが・・・
コード:
Dim system As MascotBasicSystem

Class MascotBasicSystem

Sub Sample()

    ~,AddressOf(MascotBasicSystem_EndMascot), ~

End Sub

Sub EndMascot()
    (省略)
End Sub

End Class

'グローバルな領域に関数を宣言
Sub MascotBasicSystem_EndMascot()
    system.EndMascot() 
End Sub
実はAddressOfで取得した関数ポインタはDLLに送り、
DLLで関数ポインタから関数を実行しているので、なるべく引数はとりたくないんです。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2007年3月06日(火) 17:58 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 895
住所: 東京都
> このクラス(MascotBasicSystem)は1つしか無いので以下のコードと同義と考えてよろしいでしょうか?
とりあえずはそれで構わないです。
こういう場合を考えてか,Windows APIでは予めEnumWindowのように関数へのポインタと共に1つ引数を渡すようになっています。逆に自分がこういう風に関数へのポインタを受け取るときには,そういう風にしてクラスメソッドもコールバックできるようにしましょうということになります。これはデリゲートが導入されても変わりません。


通報する
ページトップ
 記事の件名: AB5CP4がメインです
投稿記事Posted: 2011年1月25日(火) 21:11 
オフライン

登録日時: 2006年2月05日(日) 17:10
記事: 189
住所: 東京都
私はAB5CP4をメインとしてAB4.24は動作確認用として使用します。
とりわけAB5CP4はIDEのタブがTHE TEXT PRO版に類似していて大変気に入ってます。
本当はAB5CP5を使うのがベストですがなにしろEXEのサイズが700KB以上になるので。
2014年9月11日修正


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

All times are UTC+09:00


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[1人]


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

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