abwiki @ ウィキ (ActiveBasic非公式wiki)内検索 / 「GoSub~Return」で検索した結果

検索 :
  • GoSub~Return
    名称 |GoSub~Return 読み |ごぅさぶ~りたーん 文法 |GoSub label ... label ... Return 説明 |サブルーチンにジャンプします。 サブルーチンはラベルまたは行番号で始まり、Returnで終ります。 Returnにくると、Gosubのつぎの行に戻ります。 スタックが崩壊するのでGosubは絶対にReturnで返るようにしなければいけません。 GoSub *SUB1Print "End"...End *SUB1Print "Call SUB1"Return
  • 関数
    ...数はどちらかと言えばGoSub~Returnに近い挙動。
  • リファレンス
    ...文 If Goto GoSub~Return For~Next While~Wend Do~Loop Select Case Declare Sub Function Macro Dim Const Enum Let Set〇〇 Type TypeDef With Class~End Class IV.Win32API MCI GDI user32 V.仕様、ヨタ話 基本型 宣言と定義 コマンドライン オプション 行番号 コメント プリプロセッサ 複文 アスキーコード表 バグ、不具合 N88BASICとの互換性 歴史 演算子については基本的な演算子には何があって、どう使うの?を参照のこと。 Win32APIは MSDNライブラリ が詳しい。
  • デジタル時計
    #N88BASIC10 GOTO 200100 LOCATE 3,3110 PRINT Time$()120 RETURN130'WAIT140 Sleep(100)150 RETURN200 'MAIN210 GOSUB 100220 GOSUB 130220 GOTO 210
  • ビジーループ
    昔のプログラミングで定番とされていた技法。 10 X=10 Y=10 30 I$="" 40 *MAIN 50 I$=INKEY$ 60 IF I$ "" THEN I=ASC(I$)- H1C 70 ON I GOSUB *RIGHT, *LEFT, *UP, *DOWN 80 LOCATE 0,0 PRINT X,Y, 90 GOTO *MAIN 100 *RIGHT X=X+1 RETURN 110 *LEFT X=X-1 RETURN 120 *UP Y=Y-1 RETURN 130 *DOWN Y=Y+1 RETURN
  • 計算ゲーム
    #N88BASICDim a As Long, b As Long, c As LongDim i As Long, q As LongDim seikai As LongDim qq As StringRandomize Print "計算ゲーム"*LLPrint "1 足し算"Print "2 引き算"Print "3 掛け算"Print "4 割り算"Input iseikai = 0Select Case iCase 1Gosub *TASIZANCase 2Gosub *HIKIZANCase 3Gosub *KAKEZANCase 4Gosub *WARIZANEnd SelectPrint "正解率=";seikai * 100 / 10; "%&...
  • ブロック崩し
    'ブロック崩し'操作方法'←と→キーだけ。#N88BASICConst Xmax = 21Const Ymax = 22Const KABE=99Const BALL=100Const BAN=101Dim map[Xmax,Ymax]'マップ情報Dim k'のこりブロック数Dim I$, x , y ,a'汎用Dim c, wait'速度制御Dim sx, sy'盤の位置Dim bx, by 'ボールの位置Dim bv, bh 'ボールの向きDim dflag'デバッグモードdflag=0Goto *MAIN'----------------------------' サブルーチンここから'----------------------------&#...
  • N88BASIC
    1000 1010 Hello World!! for N88(86)-DOS-BASIC 1020 (C) 2003, Omae-Mona 1030 All rights Reserved 1040 1100 GOTO *MAIN 1110 2000 *INIT 初期化 2010 DEFINT A-N DEFDBL O-Z 2020 SCREEN 3.0.0.1 COLSOLE 0.25,0,1 2030 CLS 3 2040 RETURN 2050 3000 *MAIN メイン関数 3010 GOSUB *INIT 3020 PRINT "Hello, World!!" 3030 END 10 IF INKEY$ "" THEN 30 20 GOTO 10...
  • N88BASICとの互換性
    N88BASIC互換性について PC8801とかのようにOSなんてものがROM-BASICとゴチャ混ぜ状態だったころのようなあの時代には戻れません。 以下にABのN88BASIC互換性のポイントを挙げる ダイレクトモードは無い 各種コマンドは無い。SAVE,LOAD,LIST,RUNはもちろんAUTO,KEYも無い。 READ,DATA関連は無い 変数はDimで明記しなければならない ON 〇〇 GOTO/GOSUB関連も存在しない SCREEN 3,0,0,1 CONSOLE ,,0,1 DEFINT A-Z CLS 3←CLSしか無い テキスト、グラフィックの重ね合わせはできない。 BEEP(0) BEEP(1)でブザーを作ることはできない。 関数は大文字小文字を区別する(ABSはAbs、ASCはAscとなる) このようなワケで、N88BASICのプログラムを移植す...
  • スクリーンセーバーを作る必要性
    MinGWのパブリックドメインのソース を ABに変換する 途中まで…あとはまかせた Const DLG_SCRNSAVECONFIGURE= 2003Const idsIsPassword=1000Const idsIniFile=1001Const idsScreenSaver=1002Const idsPassword=1003Const idsDifferentPW=1004Const idsChangePW=1005Const idsBadOldPW=1006Const idsAppName=1007Const idsNoHelpMemory=1008Const idsHelpFile=1009Const idsDefKeyword=1010Const IDS_DESCRIPTION =1Const ID_APP =100Const WS_GT =WS_GROUP or...
  • gogo.sbp
    Const ME_NOERR = 0 return normally;正常終了 Const ME_EMPTYSTREAM = 1 stream becomes empty;ストリームが最後に達した Const ME_HALTED = 2 stopped by user;(ユーザーの手により)中断された Const ME_INTERNALERROR = 10 internal error; 内部エラー Const ME_PARAMERROR = 11 parameters error;設定でパラメーターエラー Const ME_NOFPU = 12 no FPU;FPUを装着していない!! Const ME_INFILE_NOFOUND = 13 can t ope...
  • ABのヘルプを充実させよう!
    ABのヘルプに全文検索をつける ABのヘルプはchm形式ですが、chm形式の醍醐味である全文検索がありません… どうして無いの?という話ですが、Compile full-text search infomationにチェックを入れて ABのヘルプをリコンパイルしてみると必ずヘルプコンパイラが落ちます。 これはヘルプコンパイラのバグでもあるんですが、ABのヘルプにも問題があって、 落ちる場所であるPages\Command\Window.htmとPages\API\Window\Window\CreateWindowEx.htmのソースを見ると次のように書かれている箇所があります。 コントロールのテキスト中のアンパサント「 」文字を、 htmlでは&を&としなければいけませんのでこれを修正します。 はい。これでCompile full-...
  • コンボボックス
    コンボボックスはエディットボックスとリストボックスを組み合わせたコントロール ユーザーにアイテム選択をさせるために使う 標準ではエディットボックス脇のボタンを押すことによってリストが表示されるドロップダウンタイプになっている [edit] コンボボックスのスタイル † RADで設定できるスタイルについて 無効(使用不可)~タブストップ 他と同じなので省略 タイプ コンボボックスの種類 ドロップダウン、ドロップダウンリスト、デフォルトの3種類 デフォルトはエディットボックスにリストボックス付けただけの代物。別々に作った方が良いと思う ドロップダウンはコントロール右側の▼を押すとリストボックスが表示されるタイプ。空白部分はエディットボックスで編集可能 ドロップダウンリストはドロップダウンと大体同じだがエディットボックス部分は編集できない オーナー描画~文字列あ...
  • リストボックス
    リストボックスはコントロールが所有するアイテムを一覧の中から選択できるコントロール [edit] リストボックスのスタイル † RADで設定できるスタイルについて 無効(使用不可)~タブストップ 他と同じなので省略 選択 一度に選択できるアイテムの数 選択無し、単一選択、複数選択。拡張はよくわからん オーナー描画 加筆plz ソート リストボックスに追加された文字列が自動的にソートされる これをチェックして無い場合は終端に文字列が追加される 複数列 アイテムを追加していって下端を超えた時に次の列の一番上にアイテムが追加される これを指定していると垂直スクロールバーは動作しない 通知 クリックイベントやダブルクリックイベントを親ウィンドウに通知する チェックされていないとRADのイベント処理でクリックを検出できない 水平スクロールバー 複数列の...
  • Goto
    名称 |Goto 読み |ごぉぉとぅ 文法 |Goto label 説明 |同一関数内のラベルか行番号に無条件ジャンプする。 同じラベルが複数あったときは先頭のものが使われるらしい。 ラベルは*を頭につけた文字。 *AAA *SDF *QAZXSW67 など 補足 |すべての制御構文はIfとGotoで代用できる。 For i=0 *FOR If i=10 Then *BREAK ~ Goto *FOR *BREAK While *WHILE ~ Goto *WHILE Select If i=0 Then Else If i=1 End If Gosub j=1 Goto *S1 *S1 If j=1 Then *S1 議論 |Gotoにまつわる議論 Goto不要論 スパゲッティソース Gotoのメリ...
  • mciSendString
    mciSendString関数 mciSendString(lpszCommand As BytePtr, _ lpszReturnString As BytePtr, _ cchReturn As DWord, _ hwndCallback As DWord, _ ) As DWord MCI(メディアコントロールインターフェイス)デバイスへ、コマンド文字列を送信します。
  • 戻り値
    戻り値、返り値、ReturnValueとは、関数から戻る値のこと。 y=f(x)のyに代入される値のこと。 戻り値はアセンブラではEAXレジスタを使って引き渡される。
  • Select Case
    名称 |Select Case 読み |せれくとけーす 文法 |Select Case testexpression Case expression Case expression Case Else End Select 説明 |Gotoの上位版。 条件によって行き先を変える、 N88BASICのON X GoSubみたいなもの。 トリッキーな使用法もあり、「順番に判定して行き、1つでも当てはまればそこでキャッチする」という使い方がある。 例 Select Case -1 Case r 0 ... r 0ならば実行 Case t=0 ... t=0ならば実行 Case Else ... End Select
  • エディットボックス(1)
    エディットボックスについて † エディットボックスは文字や数字を入力できるコントロール 作られた直後は32KBまで編集可能 EM_SETLIMITTEXTメッセージを使うと最大で2GBか4GBまで増やせるが、9x系のOSだと64KBまでという制限がある エディットボックスのスタイル † RADで変更できるエディットボックスのスタイルについて 無効(使用不可) 入力エリアが灰色になって入力フォーカスを受け付けないが、Set、GetWindowTextは普通に使える 可視 チェックしておかないとエディットボックスが見えない グループ グループボックス?を参照 タブストップ 加筆plz 複数行 複数行のテキストが扱えるようになる 水平スクロールバー、垂直スクロールバー、垂直オートスクロールのスタイルが使用可能になる パスワードスタイルは使えない ...
  • ID3V1を取得
    #N88BASIC Dim id3genre[256] = [ _ "Blues", "Classic Rock", "Country", "Dance", "Disco", "Funk", "Grunge", "Hip-Hop", "Jazz", "Metal", "New Age", "Oldies", _ "Other", "Pop", "R B", "Rap", "Reggae", "Rock", "Tec...
  • ステップ28 「メモリ監視ツールを作る②(設定をレジストリに保存)」
    前回と同じ修正が必要。 またこのサンプルを実行するとレギストリに永遠に値が残るのでこれは重大な問題だと癒える。 前回に引き続き、メモリ監視ツールに、オプション項目を付け足してみます。 今回作成するプログラムのサンプルファイルを置いておきますので、参考にしたい方はどうぞ☆ SystemWatcher2.zip(プロジェクトに必要なファイルがすべて入っています) オプション項目って何をするの? 更新間隔の設定 最前面表示のオン/オフ 今回は、上記の2点と、それら設定項目のレジストリへの保存を試みます。 レジストリ操作 ① RegOpenKeyEx関数でレジストリキーをオープン ② RegQueryValueEx関数で値を読み込む / RegSetValueEx関数で値をセットする ③ RegCloseKey関数でレジストリキーを閉じる ...
  • 行番号
    ABでは従来のN88BASICとのくだらない互換性を考えて行番号を使うことができる。 ただし、プリプロセッサの行には使えず、行番号は、Goto,GoSubのラベルにしか利用されないので、行番号通りにプログラムは実行しない。 #N88BASIC 10 print "10" 30 print "30" 20 print "20" この場合上から順に実行され、 10 30 20 と表示される。 #N88BASIC goto 10 20 print "20" goto 30 10 print "10" goto 20 30 print "30" 行番号はラベルとしてのみ機能するのでこのような使い方もできる。
  • 最適化
    MessageBox(3,3,3,3) これをコパイルしてexeを出す。このexeをdumpbin.exeで逆アセンブルする。 すると… 00401000 55 push ebp 00401001 E8 04 0E 00 00 call 00401E0A 00401006 6A 00 push 0 00401008 E8 AC 14 00 00 call 004024B9 0040100D A3 4C 56 40 00 mov dword ptr ds [0040564Ch],eax 00401012 6A 00 push 0 00401014 E8 A0 14...
  • ステップ14 「DLLを作る」
    Basic言語でDLLを作るだって?冗談言うなよ! それが、ActiveBasicでは自然な形で作れてしまいます。ネイティブ コードにコンパイルされるため、DLLプログラムとして要求されるだけの実行速度、プログラム サイズが期待できます。 作り方はとてもシンプル 通常のEXEプログラムと違う点は以下の2つだけ。 ① プロジェクト作成時に「DLL」を選択する ② エクスポートする関数には "Export" 指定をする ①は画面の説明に従うだけなので解説の必要はありませんね。②に関してですが、今までは関数を定義するというと、 Sub func1(parm...) ... End Sub Function func2(oarm...) As Long ... End Sub という感じに定義するのに対し、エ...
  • B木
    Barance-Treeの略でデータ構造である木構造の一つ。 通常の2分探索木はデータを昇順ないし降順に入力すると左右どちらかにのみ枝が伸びるため、その後の探索が非常に遅くなる(O(n)程度)。そこでどのような順序でデータを入力しても左右のバランスを保つように工夫されたもの。 B木やその改良型であるB*木、B+木はデータベースなどで用いられている。 B木はページ単位(ベージ構造体)で情報を格納し、その内容は下記の通り。 そのページが持つキーの個数n キーの値(n個:key[0], key[1]...key[n-1]) 各キーに付随する情報(n個:info[0], info[1]...info[n-1])  ※下記プログラムでは省略 他のページへのポインタ(n+1個:branch[0], branch[1]...branch[n]) 各ページで格納するキ...
  • とりあえず実行ファイル作りたいんですけど。
    意味的に何もしない実行ファイルの作り方 1.ProjectEditorを起動する。 2.メニューから「ファイル(F)」というやつを探し、クリックする。 3.「新規作成(N) Ctrl+N」というやつを探し、クリックする。 4.「Basicプログラム (*.abp *.bas)」というやつが選択されている事を確認して、「OK」をクリックする。 5.メニューから「ファイル(F)」というやつを探し、クリックする。 6.「名前を付けて保存(A)」というやつを探し、クリックする。 7.とりあえずtestとかそんな名前を付けて保存する。保存した場所を覚えておくこと。 8.メニューから「ベーシック(B)」というやつを探し、クリックする。 9.「リリース コンパイル(C) F7」というやつを探し、クリックする。 10.ちょっと待つ。 11.さっき名前付けてなんか保存した場所に行...
  • mpglib.dllを使ったmp3再生
    前回は素のwaveファイルお再生しました。 これを使えばほかのものでも応用ができます。 今回はmp3をやります。 mp3はデコーダやプレイやがあって今さらですけど、 ABでもできるんですよ。 今回使うのは定番のmpglib.dllです。 mpglib.dllのある場所http //mpesch3.de1.cc/misc.html こいつはABから使うことを想定していないしドキュメントも不親切です だから元となったmpg123というライブラリも調べてみるといいかもしれませんね。 まずこのDLLは3つの関数しかないので、簡単ですけど、便利な昨日がないので 自分で作ります。 ID3V2も自力で読み飛ばさないといけません。 abmpglib.abp Const AUDIOBUFSIZE = 16384Const SBLIMIT ...
  • インターネット
    ABのサンプルにWinsockを使ったものが紹介されているので、ここではwininetを使ったものでも。 wininetはとても簡単で、ファイル操作と同じ感覚で使うことができる。 InternetOpenでNetを開く、 InternetOpenUrlでurlにつなぐ InternetReadFileで読み込む InternetCloseHandleで終了 HttpQueryInfoはサイズやタイプ、更新日時などの情報を得る 以下サンプル #console Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA"(lpszCallerName As BytePtr,dwAccessType As Long,_ lpszProxyName...
  • 印刷
    印刷 ローカルプリンタと カレントフォルダに"test.bmp"が必要。 '印刷テストDeclare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (lpApplicationName As BytePtr, lpKeyName As BytePtr, lpDefault As BytePtr, lpReturnedString As BytePtr, nSize As Long, lpFileName As BytePtr) As LongDeclare Function SetDIBitsToDevice Lib "gdi32" (hdc As Long,XDest As ...
  • マニフェスト埋め込み(XPスタイルへの変更)
    AB 4.24.00 でコンパイル&正常に実行できることを確認しています。 このソースで埋め込み実験をする場合は、どうでもよいプログラムにアイコンなどのリソースを追加してから対して行ってください。 このソースを使ったことで実行ファイルが壊れても責任は負えません。 Declare Function BeginUpdateResource Lib "kernel32" Alias "BeginUpdateResourceA" (pFileName As String, bDeleteExistingResources As Long) As HANDLEDeclare Funct...
  • Sub Function
    名称 |Sub/Function 読み |さぶ/ふぁぬしょん 文法 |Sub/Function name ([arglist]) [As type] [commands] [Exit Sub/Function] [commands] End Sub/Function 説明 |Subは戻り値無しFunctionは戻り値あり。
  • ダウンローダーを作ってみよう
    ABでもちょっとくふうすれば簡単なダウンローダーがすぐにできる。 ここでは限定的な機能しか無いダウンローダを作る。 連番のファイル例えばhttp //○○001.mp4~http //○○999.mp4 こんなものを毎回右クリするのは地獄だ。 せっかくABがあるんだから、自動化してみようかな。 連番の部分を(*)と置き換えて桁数を入力すれば、内部で展開する。 Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA"(lpszCallerName As BytePtr,dwAccessType As Long,_ lpszProxyName As BytePtr,lpszProxyBypass As BytePtr,dwFlags As Long) A...
  • INIファイル
    #N88BASICDeclare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" _ ( lpApplicationName As BytePtr, _ lpKeyName As BytePtr, _ nDefault As Long, _ lpFileName As BytePtr) As LongDeclare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" _ ( lpApplicationName As BytePtr, _ lpKeyName As VoidPtr, _ lp...
  • マルチメディア
    MCIによる、お手軽サウンドプレイヤー 公式サイトで毎日のようにABのバグフィックスが行われていた頃…公式にMCIを使った解説があった。 AB4.24のサンプルにCDPlayerがあるが、これもMCIを使ったもの。 MCIでmpegやavi、waveやmidiなどを簡単に再生することができるので、エロゲー制作にはもってこいだ。 ただしMCIには問題があって、再生終了などのメッセージを受け取るにはウインドウハンドルが必要なことだ。 つまり、コンソールアプリ、N88アプリでは、扱えないということになってしまうような気がする。 その回避方法は、ダミーウインドウを作り、そいつにメッセージを送らせるようにする。 ダミーと言ってもウインドウ。見えないだけ。 そこで登場するのがサブクラス化だ。 ウインドウプロシージャを横取りするものである。 #N88BASIC #i...
  • コンソールアプリ
    'コンソール#consoleDeclare Function SetConsoleTextAttribute Lib "kernel32" (hConsoleOutput As HANDLE, wAttributes As Word) As LongDeclare Function GetConsoleScreenBufferInfo Lib "kernel32" (hConsoleOutput As HANDLE, lpConsoleScreenBufferInfo As *CONSOLE_SCREEN_BUFFER_INFO) As LongType COORD X As IntegerY As Integer End TypeType SMALL_RECTLeft As IntegerTop As IntegerRight As In...
  • ステータスバー
    ステータスバーの中にプログレスバーを入れる。 プログレスバーをステータスバーの子にして、 SB_GETRECTでサイズ調整するのがミソ。 ↓プロジェクト名を"SPSP"にして、コモンコントロールを使用するにチェクを入れる。 '-----------------------------------------------------------------------------' イベント プロシージャ'-----------------------------------------------------------------------------' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。' ウィンドウ ハンドル hMainW...
  • ステップ32 「アナログ時計を作る」
    公式で配布されているプロジェクトファイルはAB5であるため、AB5プロジェクトファイルをAB4で開くを参照。 秒針、短針、長針がついているアナログ時計を作ってみます。 今回作成するプログラムのサンプルファイルを置いておきますので、参考にしたい方はどうぞ☆ clock.zip(プロジェクトに必要なファイルがすべて入っています) 早速作ろう! "clock" などという名前で、ノーマルウィンドウベースのプロジェクトを新規作成します。 MainWndはいじるところがないので、次はメニュー(IDは "OptionMenu")を挿入し、以下のような構成になるよう、メニューアイテムをいれていきます。 キャプション ID 備考 dummy - ポップアップ 常に前面に表示( T) IDM_TOPMOST - ...
  • waveファイルの再生
    #include api_mmsys.sbp Declare Function waveOutOpen Lib "winmm" (phwo As *HWAVEOUT, uDeviceID As DWord, pwfx As *WAVEFORMATEX, dwCallback As DWord, dwInstance As DWord, fdwOpen As DWord) As MMRESULTDeclare Function waveOutClose Lib "winmm" (hwo As HWAVEOUT) As MMRESULTDeclare Function waveOutPrepareHeader Lib "winmm" (hwo As HWAVEOUT, pwh As *WAVEHDR, cbwh As DWord) ...
  • 組合せの数
    #consoleDeclare Function printf CDECL Lib"msvcrt" (fmt As *Byte, ...) As Long/***********************************************************combinat.c -- 組合せの数***********************************************************/Function comb(n As Long, k As Long) As LongIf k = 0 Or k = n Thencomb = 1Exit FunctionEnd If/* if (k == 1) return n; */comb = comb(n - 1, k - 1) + comb(n - 1, k)End FunctionF...
  • AVIファイルの操作
    #N88BASICDeclare Sub AVIFileInit Lib "avifil32" ()Declare Sub AVIFileExit Lib "avifil32" ()Declare Function AVIFileOpen Lib "avifil32" Alias "AVIFileOpenA" (ppfile As **DWord, szFile As *Byte, mode As Long, pclsidHandler As VoidPtr) As LongDeclare Function AVIFileRelease Lib "avifil32" (pfile As *DWord) As LongDeclare Function AVIFileInfo Lib "...
  • UMLって何?
    UMLとはフローチャートの簡単にいえばクラス版です。 クラスを作るとき、オブジェクトを作るときにどうしよっかなーってのを絵で表すものです。 ABはホビー用言語なのであまり考えることはないですが、UMLの『クラス図』は読めるようになっておくと 他の人のプログを移植するときに役立つかもしれません。 とりあえずここでは簡単なクラスを作ってそれをクラス図で表わしてみます。 今回は「指定したフォルダからファイルを探して、それぞれ指定したフォルダ以下に拡張子ごとに別のフォルダ振り分ける」処理を考えます。 ここで作業する人を考えます。 1人目は指定したフォルダからファイルを探す人。 2人目は指定したフォルダ以下にそれぞれ拡張子ごとに別のフォルダ振り分ける人。 1人目はフォルダを指定する動作と、ファイルを見つける動作が必要です。 2人目はフォルダを指定する動作と、ファ...
  • FFT (高速Fourier変換)
    Const PI =3.14159265358979323846/* 関数 fft()の下請けとして三角関数表を作る.*/Sub make_sintbl(n As Long, sintbl As *Single)Dim i As Long, n2 As Long, n4 As Long, n8 As LongDim c As Double, s As Double, dc As Double, ds As Double, t As Doublen2 = n / 2 n4 = n / 4 n8 = n / 8t = Sin(PI / n)dc = 2 * t * t ds = Sqr(dc * (2 - dc))t = 2 * dc c = sintbl[n4] = 1 sintbl[0] = 0 s = sintbl[0]For i = 0 To n4-1 s...
  • クイックソート
    整列アルゴリズムのひとつ。 C.A.R.Horeにより開発された(The Computer Journal, 5 10-15, 1962)整列法で、分割統治法の一種。平均的には最も早くO(nlogn)程度の実行時間であるが、最悪の場合はO(n^2)にまで落ちる。安定ではない。 クイックソートのアルゴリズムは、以下のとおり。 適当な値xを選ぶ(この時、x未満の要素数とx以下の要素数を同程度にする) x未満の要素を前半に、x以上の要素を後半に集める 前半の要素数が2以上であれば前半をクイックソートする 後半の要素数が2以上であれば後半をクイックソートする このように配列を約二分割して、自分自身を再帰的に整列する(分割統治)。しかしながら、うまく二分割できない場合(例えば、一方に1個、もう一方に残り全て)は実行時間がn^2に比例する。よって、実行速度は入力デー...
  • マウスストーカー
    マウスに画像が追従するやつ。 CreateイベントでSetTimerして DestroyイベントでKillTimerすればあとは Timerイベント内でカーソル位置にSetWindowPosすれば良い。 以下はプロジェクト名"jama"で作成。 '-----------------------------------------------------------------------------' イベント プロシージャ'-----------------------------------------------------------------------------' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。' ウィンドウ ハンドル h...
  • とりあえず一般的なウインドウを作ってみたいんですけど。
    ABでウインドウを表示する方法にも幾つかあって、定番のRADを使う方法が一般的だと思う。 RADを使うと、裏で、ウインドウを作ったり、メニューやいろんなコントロールを付けてくれる。 これを今回は手書きでやってみよう。 まずはプログラムの提示。 ウインドウクラスの作成 Const classname = "AB-WINDOWCLASS" Main() ExitProcess(0) Sub Main() Dim wc As WNDCLASSEX Dim hwnd As HWND Dim msg As MSG ウインドウクラスの設定 With wc .cbSize = SizeOf(WNDCLASSEX) .style=CS_HREDRAW or CS_VREDRAW .lpfnWndProc = Ad...
  • プログレスバーの中に文字が表示できるやつ
    Class HIRAI_PROGRESSPrivatehWnd As HWNDhDC As HDChMDC As HDChBmp As HBITMAPrcc As RECThPen As HPENhBrs As HBRUSHmax As Longmin As Longcur As Longspo As LongPublicSub ~HIRAI_PROGRESS()DeleteObject(hBrs)DeleteObject(hPen)DeleteObject(hBmp)DeleteDC(hMDC)ReleaseDC(hWnd, hDC)End SubSub Set(hWnd2 As HWND)hWnd = hWnd2GetClientRect(hWnd, rcc)hDC = GetDC(hWnd)hMDC = CreateCompatibleDC(hDC)hBmp = CreateComp...
  • ステップ22 「ステータスバーを使う②」
    今回はステータスバーを複数のパーツに振り分け、日付、時刻、ウィンドウサイズを表示してみます。 どうやって振り分けるの? CreateStatusWindow関数を使ってステータスバーを生成したら、ステータスバーのハンドルに向けて、SB_SETPARTS メッセージを送ります。SB_SETPARTS メッセージのパラメータは以下の通り… wParamにはパーツ数を指定します。 lParamには、各パーツの長さ(ピクセルサイズ)が格納されたLong配列へのポインタを指定します。 また、各パーツへ文字列を設定するときには、SB_SETTEXT メッセージを使うわけですが、wParam部分にパーツ番号を指定する点をおさえておくと良いでしょう。 作ってみよう! ステップ21で作成したプログラムがある場合は上書き方式でプログラムを加工してみて下さい(変更点は...
  • htmlhelp
    'htmlhelp.sbp'05/05/10'06/09/10 最後まで書いた' Commands to pass to HtmlHelp()Const HH_DISPLAY_TOPIC = H0000Const HH_HELP_FINDER = H0000 ' WinHelp equivalentConst HH_DISPLAY_TOC = H0001 Const HH_DISPLAY_INDEX = H0002 Const HH_DISPLAY_SEARCH = H0003 Const HH_SET_WIN_TYPE = H0004Const HH_GET_WIN_TYPE = H0005Con...
  • 文字列に保存された数式を計算する
    DLLライブラリをだうんろーど http //www.vector.co.jp/soft/win95/prog/se136814.html #consoleDeclare Function Kaiseki cdecl Lib "epmath" (mojiretu As BytePtr, err As WordPtr) As DoubleDeclare Function Kaiseki_VB Lib "epmath" Alias "_Kaiseki_VB@8" (mojiretu As BytePtr, err As WordPtr) As DoubleDim bstr(31) As ByteDim i As Wordlstrcpy(bstr,"1+2*5")print Kaiseki(bstr,VarP...
  • 新メモリ最適化ツール In AB
    1999年、CompJapanを名乗るVBプログラマー中学生の遺作。それが新メモリ最適化ツール。 VBで作られたもので後にソースが公開された。 CompJapan自慢のASテクノロジと共にABにコア部分を移植してみた。 #N88BASICDim Aaaa As Single '最適化のタイマー関係の変数Dim Bbbb As Single 'For..Next構文にしようする変数Dim Kkkk As Long'なんでもDim Jjjj As String '最適化中のログ(log.dat)に使用する変数Dim Hhhh As DWord'ウインドウハンドルDim Llll As Long'最適化レベルDim Qqqq As String'ユーザー入力Dim Cccc As LongMmmm()Sub M...
  • @wiki全体から「GoSub~Return」で調べる

更新順にページ一覧表示 | 作成順にページ一覧表示 | ページ名順にページ一覧表示 | wiki内検索