ソース名「form」で保存。
createcanvas(form) func formdlg(tit,grp,but){setfont("S");for(mgn=0,i=0;i<FORM[grp];i++){mgn=max(mgn,stwide(FORM[grp][i][0])+20)}title(tit,form)soft1(but?but:"決定";,form)trgt(form)lock();for(i=0;i<16;i++){drawform(grp,i,i==FORM[grp][-1],mgn)}unlock()canvas(form)while((in=input())!=keysoft1){fc=FORM[grp][-1];lock()switch(in){case keydown:FORM[grp][-1]=(fc+1)%FORM[grp];drawform(grp,fc,0,mgn);break;case keyup:FORM[grp][-1]=(fc+FORM[grp]-1)%FORM[grp];drawform(grp,fc,0,mgn);break;case keyselect:switch(FORM[grp][fc]){case 1:FORM[grp][fc][1]=!FORM[grp][fc][1];break;case 2:split(csv,FORM[grp][fc][4],",");sel=selectdlg(FORM[grp][fc][0]."を選択",csv);if(sel>-1){FORM[grp][fc][0]=sel}break;disarray(csv);default:disvar(st);st=inputdlg(FORM[grp][fc][0]."の入力",FORM[grp][fc][1],FORM[grp][fc][2],FORM[grp][fc][3])if(strlen(st)){FORM[grp][fc][0]=st}break;}break;}drawform(grp,FORM[grp][-1],1,mgn);unlock()}} func fget(grp,id){ return FORM[grp][id][1]; } func drawform(group,id,f,mgn){switch(id%2+f*2){case 0:col(white);break;case 1:col(0xEEEEEE);break;default:col(0xAACCFF);}frect(0,id*15+5,240,14)if(id<FORM[group]){switch(FORM[group][id]){case 0:txtbox(group,id,mgn);break;case 1:chkbox(group,id,mgn);break;case 2:choice(group,id,mgn);break;}}} func chkbox(grp,id,mgn){lbl=FORM[grp][id][0];val=FORM[grp][id][1];setfont("S")col(white)frect(mgn,id*15+5,13,13)col(0)text(lbl,10,id*15+6,0)text(val?"?":"";,mgn,id*15+6,0)rect(mgn,id*15+5,13,13)} func choice(grp,id,mgn){split(csv,FORM[grp][id][4],",")lbl=FORM[grp][id][0];val=csv[FORM[grp][id][1]];setfont("S")col(0xDDDDDD)frect(mgn,id*15+5,230-mgn,13)col(0)text(lbl,10,id*15+6,0)text(val,mgn+5,id*15+6,0)rect(mgn,id*15+5,230-mgn,13)col(gray)text("▼",229,id*15+6,TOP|RIGHT)col(0xDDDDDD)frect(216,id*15+6,13,6)} func txtbox(grp,id,mgn){lbl=FORM[grp][id][0]val=FORM[grp][id][1];typ=FORM[grp][id][3];@(t,"あ","Aa","12")setfont("S")col(white)frect(mgn,id*15+5,230-mgn,13)col(0)text(lbl,10,id*15+6,0)text(val,mgn+5,id*15+6,0)rect(mgn,id*15+5,230-mgn,13)col(gray)text(t[typ],229,id*15+6,TOP|RIGHT)}
#form# FORM[0]=5'0番のフォームの項目数' FORM[0][-1]=2'フォーカス位置' FORM[0][0]=0'0番のフォームの項目0の種類' FORM[0][0][0]="テキスト(かな)"'0番のフォームの項目0のラベル' FORM[0][0][1]="あいうえおABCDE12345"'0番のフォームの項目0の値' FORM[0][0][2]=30'0番のフォームの項目0の最大長' FORM[0][0][3]=0'0番のフォームの項目0の文字種別' FORM[0][1]=0 FORM[0][1][0]="テキスト(英数)" FORM[0][1][1]="abcdeABCDE" FORM[0][1][2]=15 FORM[0][1][3]=1 FORM[0][2]=0 FORM[0][2][0]="テキスト(数字)" FORM[0][2][1]=100 FORM[0][2][2]=3 FORM[0][2][3]=2 FORM[0][3]=1 FORM[0][3][0]="チェック" FORM[0][3][1]=1 FORM[0][4]=2 FORM[0][4][0]="リスト選択" FORM[0][4][1]=2 FORM[0][4][4]="選択項目1,選択項目2,選択項目3,選択項目4,選択項目5" formdlg("入力フォームサンプル",0,"押す"); canvas(default)'formdlgの後は必ずcanvas関数を呼んでください'
グローバルな多次元配列FORMを使って入力フォームを表示/操作するライブラリです。
このFORM配列部分をGUIで生成できるツールもできてはいるのですが、それはまた後日。
FrontPage
関数一覧
記号一覧
SPALM入門
作品集
自作関数活用術
ダウンロード先
うpロダ
wikiの使い方
SPALMまでの歴史
現行スレ