ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月27日(土) 21:45

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




新しいトピックを投稿する  トピックへ返信する  [ 8 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2005年7月15日(金) 14:36 
include\api_msg.sbpに以下の定数宣言をしていただけないでしょうか。
コード:
Const VK_A		=&H41
Const VK_B		=&H42
Const VK_C		=&H43
Const VK_D		=&H44
Const VK_E		=&H45
Const VK_F		=&H46
Const VK_G		=&H47
Const VK_H		=&H48
Const VK_I		=&H49
Const VK_J		=&H4A
Const VK_K		=&H4B
Const VK_L		=&H4C
Const VK_M		=&H4D
Const VK_N		=&H4E
Const VK_O		=&H4F
Const VK_P		=&H50
Const VK_Q		=&H51
Const VK_R		=&H52
Const VK_S		=&H53
Const VK_T		=&H54
Const VK_U		=&H55
Const VK_V		=&H56
Const VK_W		=&H57
Const VK_X		=&H58
Const VK_Y		=&H59
Const VK_Z		=&H5A

Const VK_0		=&H30
Const VK_1		=&H31
Const VK_2		=&H32
Const VK_3		=&H33
Const VK_4		=&H34
Const VK_5		=&H35
Const VK_6		=&H36
Const VK_7		=&H37
Const VK_8		=&H38
Const VK_9		=&H39


通報する
ページトップ
   
投稿記事Posted: 2005年7月15日(金) 16:54 
オフライン

登録日時: 2005年5月31日(火) 10:52
記事: 264
お住まい: 高知
> include\api_msg.sbpに以下の定数宣言をしていただけないでしょうか。
>
実はこれらの定数はC++でも定義されていません。

それはどうしてかといいますと

仮想キーコードのA~9まではいわゆるアスキーコードと対応しているからです。

ですからC++では''を使って文字コードを直接数値として与えることができるのでVK_***は必要ないんです。

これはActiveBasicにも当てはまります。
ABではAsc()関数ってのありまして、これで文字コードを取得できます。

たとえばこんな感じです。
コード:
Sub MainWnd_KeyDown(KeyCode As Long, flags As Long)
	Select Case KeyCode
		Case Asc("A")
			PostMessage(hMainWnd,WM_CLOSE,0,0)
	End Select
End Sub

しかし、文字キーの仮想キーコードを定数としたい場合は話は別です。

たとえば
コード:
Const HOGE = VK_A<<8
こんな時にAsc関数しかないのは不便です。

山本(管理人)様も気付いているかもしれませんがmmsystem.hのMAKEFORCC()
もABに移植するのが大変なマクロの1つです。

これはチャンクを作成するマクロですが内部で文字コードをビットシフトしています。

仕方ないのでFunctionで代用という状況ですが、、、


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年7月15日(金) 22:21 
オフライン

登録日時: 2005年5月31日(火) 09:34
記事: 141
お住まい: 北海道
これでよいのではないのでしょうか?
コード:
#define MAKEFOURCC(ch0, ch1, ch2, ch3)                              \
		((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |   \
		((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
コード:
Const MAKEFOURCC(ch0, ch1, ch2, ch3) = _
((ch0) And &HFF) Or ((ch1) And &HFF)<<8 Or ((ch2) And &HFF)<<16 Or ((ch3) And &HFF)<<24
あと,Asc関数自体を
コード:
Const Asc(a) = a[0]
としてもいいかもしれないですが,それだと文字列定数が代入できない・・・。

_________________
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年7月15日(金) 23:46 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
いっそのこと構文を拡張してc"A"とするとAの文字コードの数値にするなどとしてみたらどうかと思ったりします。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年7月16日(土) 13:16 
オフライン

登録日時: 2005年5月31日(火) 09:34
記事: 141
お住まい: 北海道
> いっそのこと構文を拡張してc"A"とするとAの文字コードの数値にするなどとしてみたらどうかと思ったりします。

それなら,むしろCのように "ActiveBasic"(3)(結果は「i」の文字コード)とか,文字列リテラルにも配列のかっこを付けられるようにしたほうがよいかと思います。

_________________
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年7月16日(土) 13:24 
オフライン

登録日時: 2005年5月31日(火) 10:52
記事: 264
お住まい: 高知
> これでよいのではないのでしょうか?
>
コード:
#define MAKEFOURCC(ch0, ch1, ch2, ch3)                              \
> 		((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |   \
> 		((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
> ↓
>
コード:
Const MAKEFOURCC(ch0, ch1, ch2, ch3) = _
> ((ch0) And &HFF) Or ((ch1) And &HFF)<<8 Or ((ch2) And &HFF)<<16 Or ((ch3) And &HFF)<<24
ここまではいいんですよ。

次の
コード:
Const HOGE = MAKEFORCC("H","O","G","E")
が面倒なんです。
Cでは#defineよるマクロなので簡単にできるのですが
ABではConstに関数を含めることができないので
生の数値を打ち込むしかないんですね。

> あと,Asc関数自体を
>
コード:
Const Asc(a) = a[0]
> としてもいいかもしれないですが,それだと文字列定数が代入できない・・・。

なるほどこういう手もありますね。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年7月16日(土) 13:33 
オフライン

登録日時: 2005年5月31日(火) 09:34
記事: 141
お住まい: 北海道
> 次の
>
> Const HOGE = MAKEFORCC("H","O","G","E")
>
> が面倒なんです。
> Cでは#defineよるマクロなので簡単にできるのですが
> ABではConstに関数を含めることができないので
> 生の数値を打ち込むしかないんですね。

あ,そういうことでしたか(^^;)

前に私が「ABのConstを,Cの#defineと同じ仕様にしてほしい」と言いましたが,(あの時は言い忘れていたのですが)Const値の宣言時に関数を含めることが出来るようにしてほしい,という意味もあったんです。

_________________
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年7月17日(日) 00:19 
いろいろな情報ありがとうございます。大変勉強になりました。

ちなみに、VBでは最初に書いたような定義がされているようです。


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

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


オンラインデータ

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


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

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