「FAQ」の編集履歴(バックアップ)一覧はこちら

FAQ」(2017/06/18 (日) 20:56:03) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

FAQ(Frequently Asked Questions)よくある質問と答え **全般的なこと :Q:どこからダウンロードできるの? |A: 公式サイトが死んでいる場合は[[vector>http://www.vector.co.jp/soft/dl/win95/prog/se117283.html]]からでも。 :Q:利用にお金はかかりますか? |A: いいえ。 ABそのものにお金はかかりませんが、使いこなすには相当な出費を覚悟しましょう。 :Q:商用利用してもいいの? |A: 誰も止めはしない。 :Q:関数や命令、文法の仕様は無いの? |A: すべて作者の頭の中に入っていますよ。 :Q:ActiveBasicはActiveBasicで作ってるの? |A: CかC++で作っているらしい。 :Q:ActiveBasicのプログラミングコンテスト無いの? |A: **RADツールに関すること :Q:RADツールで[x]の無いウインドウをテストしたのですが…閉じ方が分かりません。 |A: Alt+F4で閉じることができます。 :Q:タブストップが効かない。 |A: プロジェクト名.abpのメッセージループにIsDialogMessage()を追加します。 #include "プロジェクト名.idx" '--------------------------- ' Window Message Loop '--------------------------- Dim msgMain As MSG, iResult As Long Do iResult=GetMessage(msgMain,0,0,0) If iResult=0 or iResult=-1 Then Exit Do If IsDialogMessage(hMainWnd, msgMain) = 0 Then'これが大事 TranslateMessage(msgMain) DispatchMessage(msgMain) End If'これも忘れずに Loop ' Call destructores and exit process End :Q:モードレスダイアログが表示されない |A: モードレスダイアログのフォームのプロパティの可視のチェックを入れるか ShowWindowでも使ってあげてください。 :Q:イメージボックスにjpegは貼れないの? |A: できません。 :Q:リッチエディット、タブとかのコントロールは使えないの? |A: CreateWindowEx()してください。 **プログラムに関すること :Q:関数から複数の値を返すことはできるか。 |A: 値を格納する領域をいくつか起動する側で用意して、それらの領域を 指すポインターを引数として渡し、関数にポインターの先に値を埋め てもらう。 あるいは、関数の戻り値を構造体にして、その構造体に希 望の値を設定してもらう。あるいは(最後の最後の手として)global変 数を使うことを考える。 :Q:「ハンガリー記法(Hungarian Notation)」とは。使う価値があるか。 |A: ハンガリー記法には大きく分けてアプリケーションハンガリアン記法とシステムハンガリアン記法があり、Charles Simonyiが発明したのはアプリケーションハンガリアン記法の方であるが、 論文に「型の意味」と言う意味で「type」と言う単語を使ったため、Microsoft社のExcel開発グループとWord開発グループ以外の殆ど全ての開発チームで誤解が生じ、今に至る。 詳細はhttp://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%B3%E3%82%AC%E3%83%AA%E3%82%A2%E3%83%B3%E8%A8%98%E6%B3%95に詳しい。 ハンガリアン記法とは変数名に接頭辞をつける記法の事で、システムハンガリアン記法では、例えばdouble型の変数にはdblという接頭辞が付く。 一方アプリケーションハンガリアン記法では、例えばHTML出力可能なようにエンコードが済んであるゼロ終端ASCII文字へのポインタにはspszという接頭辞が付く。 アプリケーションハンガリアン記法は使う価値が高い可能性が高い(用途にもよるだろうが)。 :Q:多次元の配列を動的に割り付けるのはどうしたらよいか? |A: たいていポインターの配列を割り付けて、それぞれのポインターを動 的に割り付けた"列"に初期化するのが一番の解決策である。以下に>2 次元配列の例を挙げる。 Const nrows = 5 Const ncolumns = 6 Dim i As Long, array1 As **Long array1 = malloc(nrows * SizeOf(*Long)) For i=0 To nrows-1 array1[i] = malloc(ncolumns * SizeOf(Long)) Next :Q:コンパイルは通るのに実行すると落ちる。なんで? |A: 1.配列の添字がオーバーしている 2.ヌルポインタにアクセスしている 3.RaiseException(),DebugBreak()などが呼ばれている などなど。 :Q:四捨五入するプログラムを教えてください。 |A: 次のようにするの。ただし負の値だと上手くいかない。符号をひっくり返して。 Dim aaaa As Double, bbbb As Double aaaa=5.4 bbbb=Int(aaaa+0.5) :Q:ポインターは本当に配列よりも高速なのか。関数呼び出しをするとど れだけ遅くなるのか。++iはi=i+1よりも高速か。 |A: はい ※インテルのコンパイラーを使ってる人はポインタより配列を使うようにしましょう。 :Q:さて問題です。どうやれば出力として、自分自身のソースコードを産 み出すコードをどうやったら書けるか。 |A: 10 LIST RUN :Q:円周率の値が欲しい |A: function.sbpの中の_System_PIで定義されています。 :Q:ヌルポインタってなんですか? |A: ポインタに0を代入したものです。 :Q:ABはWin32APIを使わないと何も出来ないんですか? |A: いいえ。 :Q:関数の戻り値に構造体を指定できないの? |A: できません。 :Q:変数が実数型か整数型かを知る方法は? |A: オーバーロード(多重定義)を使いましょう。 #N88BASIC Function f(a As Long) As Long Print "整数型です。" End Function Function f(a As Double) As Long Print "実数型です。" End Function Dim a As Long Dim b As Double f(a) f(b) :Q:「KILLがしたい」が人間の本能なのですか? |A: そうであるとも言えるし、そうでないかもしれません。 :Q:MIDIを再生する方法を教えてください。CDを再生する方法を教えてください。 |A: MCIを使えばいいのでは? :Q:Win32APIって何? |A: Windowsのが提供する機能の総称です。 :Q:open命令でエラーを判定できないの? |A: open命令はWin2APIのCreateFile関数を呼び出しているだけなので、 直後にGetLastError()を使うとエラーコードを得られるはず。 :Q:複素数は使えないの? |A: 自分で用意するしかないです。 Type COMPLEX r As Double i As Double End Type '複素数加算 a+b=c Sub AddComp(ByRef a As COMPLEX,ByRef b As COMPLEX, ByRef c As COMPLEX) c.r=a.r+b.r c.i=a.i+b.i End Sub '複素数乗算 a*b=c Sub MulComp(Byef a As COMPLEX,ByRef b As COMPLEX, ByRef c As COMPLEX) c.r=a.r*b.r-a.i*b.i c.i=a.i*b.r+a.r*b.i End Sub #N88BASIC Dim A As COMPLEX Dim B As COMPLEX Dim C As COMPLEX Dim D As COMPLEX Input "A "; A.r, A.i Input "B "; B.r, B.i AddComp(A,B,C) MulComp(A,B,D) Print C.r, C.i :Q:二重起動を抑止するには? |A: ミューテックスを使うのが一般的かと。 '宣言部 Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" ( _ pSAttr As Long, fOwner As Long, sMutexName As *Byte) As Long Declare Function ReleaseMutex Lib "kernel32" (hMutex As Long) As Long Const MutexName = "ともちん" Const ERROR_ALREADY_EXISTS = 183 Dim mutex As DWord '起動時Createイベントなど mutex = CreateMutex(0, 0, MutexName) If mutex = ERROR_ALREADY_EXISTS Then MessageBox(0, "多重起動", 0, 0) ExitProcess(0) End If '終了時Destroyイベントなど ReleaseMutex(mutex) :Q:独自のメッセージを作成するには? |A: WM_APPを使って独自メッセージを定義します。 WM_USERを使えと書いている説明は信じないように。 Const MyMessage = (WM_APP+1) SendMessage(hMainWnd, MyMessage, 0, 0) :Q:"new"と"malloc"の違いは何ですか |A: newはオブジェクトの生成のみに使います。 mallocはその他のものに使います。
FAQ(Frequently Asked Questions)よくある質問と答え **全般的なこと :Q:どこからダウンロードできるの? |A: 公式サイトが死んでいる場合は[[vector>http://www.vector.co.jp/soft/dl/win95/prog/se117283.html]]からでも。 :Q:利用にお金はかかりますか? |A: いいえ。ABは無料です。 :Q:商用利用してもいいの? |A: 誰も止めはしない。 :Q:関数や命令、文法の仕様は無いの? |A: すべて作者の頭の中に入っていますよ。 :Q:ActiveBasicはActiveBasicで作ってるの? |A: CかC++で作っているらしい。 :Q:ActiveBasicのプログラミングコンテスト無いの? |A: **RADツールに関すること :Q:RADツールで[x]の無いウインドウをテストしたのですが…閉じ方が分かりません。 |A: Alt+F4で閉じることができます。 :Q:タブストップが効かない。 |A: プロジェクト名.abpのメッセージループにIsDialogMessage()を追加します。 #include "プロジェクト名.idx" '--------------------------- ' Window Message Loop '--------------------------- Dim msgMain As MSG, iResult As Long Do iResult=GetMessage(msgMain,0,0,0) If iResult=0 or iResult=-1 Then Exit Do If IsDialogMessage(hMainWnd, msgMain) = 0 Then'これが大事 TranslateMessage(msgMain) DispatchMessage(msgMain) End If'これも忘れずに Loop ' Call destructores and exit process End :Q:モードレスダイアログが表示されない |A: モードレスダイアログのフォームのプロパティの可視のチェックを入れるか ShowWindowでも使ってあげてください。 :Q:イメージボックスにjpegは貼れないの? |A: できません。 :Q:リッチエディット、タブとかのコントロールは使えないの? |A: CreateWindowEx()してください。 **プログラムに関すること :Q:関数から複数の値を返すことはできるか。 |A: 値を格納する領域をいくつか起動する側で用意して、それらの領域を 指すポインターを引数として渡し、関数にポインターの先に値を埋め てもらう。 あるいは、関数の戻り値を構造体にして、その構造体に希 望の値を設定してもらう。あるいは(最後の最後の手として)global変 数を使うことを考える。 :Q:「ハンガリー記法(Hungarian Notation)」とは。使う価値があるか。 |A: ハンガリー記法には大きく分けてアプリケーションハンガリアン記法とシステムハンガリアン記法があり、Charles Simonyiが発明したのはアプリケーションハンガリアン記法の方であるが、 論文に「型の意味」と言う意味で「type」と言う単語を使ったため、Microsoft社のExcel開発グループとWord開発グループ以外の殆ど全ての開発チームで誤解が生じ、今に至る。 詳細はhttp://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%B3%E3%82%AC%E3%83%AA%E3%82%A2%E3%83%B3%E8%A8%98%E6%B3%95に詳しい。 ハンガリアン記法とは変数名に接頭辞をつける記法の事で、システムハンガリアン記法では、例えばdouble型の変数にはdblという接頭辞が付く。 一方アプリケーションハンガリアン記法では、例えばHTML出力可能なようにエンコードが済んであるゼロ終端ASCII文字へのポインタにはspszという接頭辞が付く。 アプリケーションハンガリアン記法は使う価値が高い可能性が高い(用途にもよるだろうが)。 :Q:多次元の配列を動的に割り付けるのはどうしたらよいか? |A: たいていポインターの配列を割り付けて、それぞれのポインターを動 的に割り付けた"列"に初期化するのが一番の解決策である。以下に>2 次元配列の例を挙げる。 Const nrows = 5 Const ncolumns = 6 Dim i As Long, array1 As **Long array1 = malloc(nrows * SizeOf(*Long)) For i=0 To nrows-1 array1[i] = malloc(ncolumns * SizeOf(Long)) Next :Q:コンパイルは通るのに実行すると落ちる。なんで? |A: 1.配列の添字がオーバーしている 2.ヌルポインタにアクセスしている 3.RaiseException(),DebugBreak()などが呼ばれている などなど。 :Q:四捨五入するプログラムを教えてください。 |A: 次のようにするの。ただし負の値だと上手くいかない。符号をひっくり返して。 Dim aaaa As Double, bbbb As Double aaaa=5.4 bbbb=Int(aaaa+0.5) :Q:ポインターは本当に配列よりも高速なのか。関数呼び出しをするとど れだけ遅くなるのか。++iはi=i+1よりも高速か。 |A: はい ※インテルのコンパイラーを使ってる人はポインタより配列を使うようにしましょう。 :Q:さて問題です。どうやれば出力として、自分自身のソースコードを産 み出すコードをどうやったら書けるか。 |A: 10 LIST RUN :Q:円周率の値が欲しい |A: function.sbpの中の_System_PIで定義されています。 :Q:ヌルポインタってなんですか? |A: ポインタに0を代入したものです。 :Q:ABはWin32APIを使わないと何も出来ないんですか? |A: いいえ。 :Q:関数の戻り値に構造体を指定できないの? |A: できません。 :Q:変数が実数型か整数型かを知る方法は? |A: オーバーロード(多重定義)を使いましょう。 #N88BASIC Function f(a As Long) As Long Print "整数型です。" End Function Function f(a As Double) As Long Print "実数型です。" End Function Dim a As Long Dim b As Double f(a) f(b) :Q:「KILLがしたい」が人間の本能なのですか? |A: そうであるとも言えるし、そうでないかもしれません。 :Q:MIDIを再生する方法を教えてください。CDを再生する方法を教えてください。 |A: MCIを使えばいいのでは? :Q:Win32APIって何? |A: Windowsのが提供する機能の総称です。 :Q:open命令でエラーを判定できないの? |A: open命令はWin2APIのCreateFile関数を呼び出しているだけなので、 直後にGetLastError()を使うとエラーコードを得られるはず。 :Q:複素数は使えないの? |A: 自分で用意するしかないです。 Type COMPLEX r As Double i As Double End Type '複素数加算 a+b=c Sub AddComp(ByRef a As COMPLEX,ByRef b As COMPLEX, ByRef c As COMPLEX) c.r=a.r+b.r c.i=a.i+b.i End Sub '複素数乗算 a*b=c Sub MulComp(Byef a As COMPLEX,ByRef b As COMPLEX, ByRef c As COMPLEX) c.r=a.r*b.r-a.i*b.i c.i=a.i*b.r+a.r*b.i End Sub #N88BASIC Dim A As COMPLEX Dim B As COMPLEX Dim C As COMPLEX Dim D As COMPLEX Input "A "; A.r, A.i Input "B "; B.r, B.i AddComp(A,B,C) MulComp(A,B,D) Print C.r, C.i :Q:二重起動を抑止するには? |A: ミューテックスを使うのが一般的かと。 '宣言部 Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" ( _ pSAttr As Long, fOwner As Long, sMutexName As *Byte) As Long Declare Function ReleaseMutex Lib "kernel32" (hMutex As Long) As Long Const MutexName = "ともちん" Const ERROR_ALREADY_EXISTS = 183 Dim mutex As DWord '起動時Createイベントなど mutex = CreateMutex(0, 0, MutexName) If mutex = ERROR_ALREADY_EXISTS Then MessageBox(0, "多重起動", 0, 0) ExitProcess(0) End If '終了時Destroyイベントなど ReleaseMutex(mutex) :Q:独自のメッセージを作成するには? |A: WM_APPを使って独自メッセージを定義します。 WM_USERを使えと書いている説明は信じないように。 Const MyMessage = (WM_APP+1) SendMessage(hMainWnd, MyMessage, 0, 0) :Q:"new"と"malloc"の違いは何ですか |A: newはオブジェクトの生成のみに使います。 mallocはその他のものに使います。

表示オプション

横に並べて表示:
変化行の前後のみ表示: