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