|
! サンプル閲覧ツール Ver.9
!----------------------------------------------------------
!テキスト・ウィンドウの、左上位置(x0,y0)と、幅(xw,yw)。
CALL SetWindowPos( WinHandle("TEXT" ),0, 10,100,500,550, 0)
SUB SetWindowPos( handle, C2, x0,y0,xw,yw, nFLG ) ! nFLG, 0=x0y0xwyw 1=x0y0 2=xwyw
ASSIGN "user32.dll","SetWindowPos"
END SUB
!----------------------------------------------------------
SET BITMAP SIZE 501,501
LET V=5 ! 表示列数 3~5
SET WINDOW 0, V, 27,-6
SET AREA COLOR 5
DIM p$(5*V),wild$(5*V),names$(200)
!下の DATA 文は、各フォルダーが配下に見える場所(BASIC.EXE と同じ場所)に
!このプログラムを置いて起動する場合の例。
DATA TEXTFILE\, TUTORIAL\, USERLIB\, COMM\
DATA COMPLEX\, FRACTAL\, FUNCTION\, GUIDE\
DATA LIBRARY\, MATH\, MICROSFT\, "Q&A\"
DATA SAMPLE\, STATEMEN\, ".\", "C:\My Documents\*.txt"
FOR f=1 TO 25
READ IF MISSING THEN EXIT FOR: w$
FILE splitname(w$) p$(f), name$, ext$ ! ext$は語頭に"."含む。
IF ext$="" THEN LET wild$(f)="*.*" ELSE LET wild$(f)=name$& ext$
NEXT f
LET w=13 !最初に開くフォルダー、1~?番目
CALL basfiles
OPEN #9 : TextWindow2
ERASE #9
CALL SetWindowPos( WinHandle("TEXTWINDOW2" ),0, 515, 0,509,172, 0)
PRINT #9 :"フォルダーを、選んで"
PRINT #9 :"ファイル名を、左クリックすると、内容表示する。"
PRINT #9 :"※重ねて再度、左クリックすると、(.BAS ならば、)"
PRINT #9 :" BASIC を、新しく起動、実行できます。閉じると、続行。"& CHR$(0)
DO
MOUSE POLL mx,my,mlb,mrb
IF mrb=1 THEN EXIT DO !右クリック
IF mlb=1 THEN !左クリック
IF -1< my THEN
IF 0< my THEN LET b=INT(mx)*27+CEIL(my) ELSE LET b=bak+1
IF b=< n THEN
IF b<>bak THEN
CALL sampdisp
ELSEIF UCASE$(right$(names$(b),4))=".BAS" THEN
execute "BASIC.EXE" WITH("/NR",p$(m)& names$(b))
END IF
END IF
ELSEIF my< -1 THEN
LET w=INT(my+6)*V+CEIL(mx)
IF w< f THEN CALL basfiles
END IF
LET i=0
DO
WAIT DELAY .02
MOUSE POLL mx,my,mlb,mrb
IF mlb=0 AND mrb=0 THEN LET i=i+1 ELSE LET i=0
LOOP UNTIL 5< i !マウスボタンが離れるまで待つ。
END IF
WAIT DELAY 0 !クロックアップを押える
LOOP
PLOT AREA:0,-1;V,-1;V,0;0,0
SET TEXT BACKGROUND "TRANSPARENT" ! background none
PLOT TEXT,AT V*.3,0 :"終了しました。"
SUB basfiles
LET m=w
CLEAR
PLOT AREA:0,-1;V,-1;V,0;0,0
SET TEXT BACKGROUND "TRANSPARENT" ! background none
PLOT TEXT,AT V*.17,0 :"ココを左クリックすると順送り。 右クリックで、終了。"
FOR i=0 TO 4
FOR j=1 TO V
LET w=i*V+j
IF w=m THEN PLOT AREA:j-1,i-5;j,i-5;j,i-6;j-1,i-6
IF wild$(w)="*.*" THEN LET w$=p$(w) ELSE LET w$=p$(w)& wild$(w)
PLOT TEXT,AT j-1+0.03,i-5 :w$ !p$(w)& wild$(w)
NEXT j
NEXT i
IF m>0 THEN LET n=files(p$(m)& wild$(m))
IF n>0 THEN file list p$(m)& wild$(m), names$
SET TEXT BACKGROUND "OPAQUE" ! background color 0
FOR w=1 TO n
PLOT TEXT,AT IP((w-1)/27)+0.03, MOD((w-1),27)+1 :"|"& names$(w)
NEXT w
LET bak=0
END SUB
SUB sampdisp
LET x=IP((bak-1)/27)
LET y=MOD((bak-1),27)
SET LINE COLOR 0
PLOT LINES:x,y; x+1-0.03,y; x+1-0.03,y+1; x,y+1; x,y
LET x=IP((b-1)/27)
LET y=MOD((b-1),27)
SET LINE COLOR 2
PLOT LINES:x,y; x+1-0.03,y; x+1-0.03,y+1; x,y+1; x,y
PRINT
PRINT "!*******************************"
PRINT "!"& p$(m)& names$(b)
PRINT "!*******************************"
WHEN EXCEPTION IN
OPEN #1: NAME p$(m)& names$(b),ACCESS INPUT
FOR L=1 TO 500 ! 最大表示行数
LINE INPUT #1,IF MISSING THEN EXIT FOR :w$
FOR i=1 TO LEN(w$)
IF w$(i:i)< " " AND w$(i:i)<>CHR$(9) THEN CAUSE EXCEPTION 1
NEXT i
PRINT w$
NEXT L
USE
PRINT "******* テキストではない、表示の中止。"
END WHEN
CLOSE #1
LET bak=b
END SUB
END
|
|