PackDBL$関数,UnpackDBL関数,WinHandle関数 (独自拡張)
組込み関数
WINHANDLE(文字列式)
Win32APIに渡すための,BASICシステム自身のウィンドウ(またはコントロール)のハンドル値。
引数は,"MAIN","TEXT","GRAPHICS","INPUT","CHARACTER INPUT","TRACE", "LOCATE", "LOCATECHOICE", "TEXTWINDOW1", "TEXTWINDOW2", "RICHEDIT", "RICHEDIT1", "RICHEDIT2"のいずれか。
大文字と小文字の違いは無視する。
"RICHEDIT", "RICHEDIT1", "RICHEDIT2"は,テキストウインドウ,TextWindow1,TextWindow2のRichEditコントロール。
上記以外を指定すると値が0になる(例外を生成しない)。
例1
100 DECLARE EXTERNAL SUB MoveTextWindow, ResizeTextWindow 110 FOR i=1 TO 5 120 PRINT "Hello" 130 CALL MoveTextWindow(i*100,i*60) 140 CALL ResizeTextWindow(320,160+i*20) 150 WAIT DELAY 1 160 NEXT i 170 END 180 EXTERNAL SUB MoveTextWindow(x,y) 190 SUB SetWindowPos(hwnd,HwndInsAfter,x,y,cx,cy,nFlags) 200 ASSIGN "user32.dll","SetWindowPos" 210 END SUB 220 CALL SetWindowPos(WinHandle("TEXT"),0,x,y,0,0,1) 230 END SUB 240 EXTERNAL SUB ResizeTextWindow(x,y) 250 SUB SetWindowPos(hwnd,HwndInsAfter,x,y,cx,cy,nFlags) 260 ASSIGN "user32.dll","SetWindowPos" 270 END SUB 280 CALL SetWindowPos(WinHandle("TEXT"),0,0,0,x,y,2) 290 END SUB
例2
FUNCTION SendMessage(Handle,MSG,WParam,IParam) ASSIGN "user32.dll","SendMessageA" END FUNCTION FOR i=1 TO 100 PRINT i NEXT i LET EM_SCROLL= BVAL("B5",16) LET SB_LINEUP =0 LET SB_LINEDOWN=1 LET SB_PAGEUP =2 LET SB_PAGEDOWN=3 FOR i=1 TO 100 WAIT DELAY 0.02 LET a= SendMessage(WINHANDLE("RICHEDIT"),EM_SCROLL,SB_LINEUP,0) NEXT i END
BYTE$(数値式)
数値式の値を持つ8ビット非負整数のメモリーイメージ(1バイト)。
WORD$(数値式)
数値式の値を持つ16ビット非負整数のメモリーイメージ(2バイト)。
DWORD$(数値式)
数値式の値を持つ32ビット非負整数のメモリーイメージ(4バイト)。
(上記3関数は,上位ビットを無視する。)
PACKDBL$(数値式)
数値式の値を持つ倍精度実数のメモリーイメージ(8バイト)。
UNPACKDBL(文字列式)
倍精度実数のメモリーイメージ(8バイト)をBASICの数値に変換した値。
BYTE$, WORD$, DWORD$ は,次の外部関数定義と同等。
1000 ! 外部関数定義 DWORD$ (32ビット整数化した文字列(4バイト)) 1010 EXTERNAL FUNCTION DWORD$(n) 1020 OPTION ARITHMETIC NATIVE 1030 OPTION CHARACTER byte 1040 LET r=MOD(n,2^8) 1050 LET s$=CHR$(r) 1060 LET n=(n-r)/2^8 1070 LET r=MOD(n,2^8) 1080 LET s$=s$ & CHR$(r) 1090 LET n=(n-r)/2^8 1100 LET r=MOD(n,2^8) 1110 LET s$=s$ & CHR$(r) 1120 LET n=(n-r)/2^8 1130 LET r=MOD(n,2^8) 1140 LET DWORD$=s$ & CHR$(r) 1150 END FUNCTION 1160 ! 外部関数定義 WORD$(16ビット整数化した文字列(2バイト)) 1170 EXTERNAL FUNCTION WORD$(n) 1180 OPTION ARITHMETIC NATIVE 1190 OPTION CHARACTER byte 1200 LET r=MOD(n,2^8) 1210 LET s$=CHR$(r) 1220 LET n=(n-r)/2^8 1230 LET r=MOD(n,2^8) 1240 LET WORD$=s$ & CHR$(r) 1250 END FUNCTION 1260 ! 外部関数定義 BYTE$(8ビット整数化した文字列(1バイト)) 1270 EXTERNAL FUNCTION BYTE$(n) 1280 OPTION ARITHMETIC NATIVE 1290 OPTION CHARACTER byte 1300 LET BYTE$=CHR$(MOD(n,2^8)) 1310 END FUNCTION