画面設計 山中和義 2004/02/19 13:38:54 ├そのプログラム 山中和義 2004/02/19 13:39:54 ├実際の動きは、、、 山中和義 2004/02/19 13:41:27 │├その1 山中和義 2004/02/19 13:43:53 │├その2 山中和義 2004/02/19 13:45:16 │└その3 山中和義 2004/02/19 13:45:45 ├subdisplaymessage(x,y,c,s$) もりの 2004/02/19 17:48:49 │└なぜでしょうか? 山中和義 2004/02/19 18:37:01 │ ├わかりません もりの 2004/02/19 20:24:40 │ └メールで送って もりの 2004/02/19 20:26:12 └自宅のパソコンでやってみましたら もりの 2004/02/20 07:25:46
画面設計 山中和義 2004/02/19 13:38:54 ツリーへ
画面設計 |
返事を書く |
山中和義 2004/02/19 13:38:54 | |
プログラムを作る(または依頼)場合、扱う情報の洗い出しが必要です。 特にユーザインタフェース部分、画面は重要です。 ということで、その画面を設計するプログラムを作ってみました。 COBOLの画面レイアウト設計が役に立ちます。 |
├そのプログラム 山中和義 2004/02/19 13:39:54 ツリーへ
Re: 画面設計 |
返事を書く |
山中和義 2004/02/19 13:39:54 | |
そのプログラム !画面定義 ver 0.1 十進BASIC版 by K.Yamanaka set window 0,80,39,-1 !※文字列単位でまとめる。表示、入力枠、操作項目(コマンド)ごとに別にする。 ! 表示位置(行桁)と文字数を明確にする。 ! ! Xは半角1文字。 Xは全角1文字。 ! 0、Zは半角数字。Zはサプレス。 0、Zは全角数字。 ! 番号、操作項目(直接数値を入力) ! 黒=1、表示 ! 青=2、カーソルキーで選択可能。選択状態を示す ! ! 赤=4、直接入力(数値、文字をINPUT文で入力する) ! 紫=7、項目選択(カーソルキーでリスト一覧から選ぶ。項目は1つずつ表示) !「追加」画面 data 20, 2,1,"追加(新規、未記入など)" data 25, 5,2,"1.日付:" data 36, 5,4,"Z0.Z0" data 25, 7,2,"2.摘要:" data 36, 7,7,"XXXX" data 25, 9,2,"3.区分:" data 36, 9,7,"XXXX" data 25,11,2,"4.費目:" data 36,11,7,"XXXXXXXXXX" data 25,13,2,"5.金額:" data 36,13,4,"##,###,##0 円" data 25,16,1,"9.実行" data 23,18,1,"ESC.戻る" data 20,22,1,"番号を入力してください。" LET i = -1 do while i<0 !データの数だけ繰り返す read IF MISSING THEN EXIT DO: x,y,c,s$ call DisplayMessage(x,y,c,s$) LET N = N + 1 loop print "項目数:";N !項目数を表示する STOP !指定の位置に文字を表示する SUB DisplayMessage(x,y,c,s$) set text color c plot text, at x,y: s$ END SUB END |
├実際の動きは、、、 山中和義 2004/02/19 13:41:27 ツリーへ
Re: 画面設計 |
返事を書く |
山中和義 2004/02/19 13:41:27 | |
実際の動きは、、、 サポートしているのは、一部です。 |
│├その1 山中和義 2004/02/19 13:43:53 ツリーへ
Re: 実際の動きは、、、 |
返事を書く |
山中和義 2004/02/19 13:43:53 | |
その1 !入力画面 ver 0.1 十進BASIC版 by K.Yamanaka set window 0,80,39,-1 220 data 2, "収入","支出" !摘要 230 data 3, "現金","通帳" !区分 240 data 5, "交通費","通信費","食費","消耗費","出金" !費目 dim Itm$(200) LET mmdd$ = "" LET tekiyo$ = "" LET kubun$ = "" LET himoku$ = "" LET kingaku$ = "" LET mNo = 1 LET ok_1 = -1 do while ok_1<>0 WAIT DELAY 0.5 !ちょっと待って、もう一度 ※0.5秒待つ call GAMEN_ADD(mNo) !追加 print s$ !debug debug debug select case s$ !選択されたメニューに対して case "1" !項目1 case "2" !項目2 restore 220 call SetMenuItem(ItmMax,Itm$) !選択メニュー項目を設定する LET old$ = tekiyo$ !一端保存しておく LET tekiyo$ = " " LET Itm = 1 LET ok_1_2 = -1 do while ok_1_2<0 WAIT DELAY 0.5 !ちょっと待って、もう一度 ※0.5秒待つ clear call GAMEN_ADD_ITEM(mNo) call DisplayData(35,7,1,"__________") call DisplayData(35,7,2,Itm$(Itm)) call GetMenuNo(s$) !単文字を入力する print s$ !debug debug debug select case s$ !選択されたメニューに対して case "↑" !選択項目番号を下げる LET Itm = Itm - 1 if Itm<1 then LET Itm = 1 case "↓" !選択項目番号を上げる LET Itm = Itm + 1 if Itm>ItmMax then LET Itm = ItmMax case "ESC" !取消 LET tekiyo$ = old$ !元に戻す LET ok_1_2 = 0 case "ENTER" !確定 LET tekiyo$ = Itm$(Itm) !新しい値を設定する LET ok_1_2 = 0 CASE ELSE end select loop case "3" !項目3 case "4" !項目4 case "5" !項目5 call GAMEN_ADD_ITEM(mNo) input PROMPT "金額を入力してください(例. 1000)": kingaku$ case "9" case "ESC" LET ok_1 = 0 !終了 end select loop print "プログラム終了" !debug debug debug STOP !選択メニューを設定する SUB SetMenuItem(ItmMax,Itm$()) read ItmMax for i=1 to ItmMax read Itm$(i) next i END SUB |
│├その2 山中和義 2004/02/19 13:45:16 ツリーへ
Re: 実際の動きは、、、 |
返事を書く |
山中和義 2004/02/19 13:45:16 | |
その2 !「追加」画面 SUB GAMEN_ADD(mNo) clear LET mNoMax = 5 LET ok2_0 = -1 do while ok2_0<0 !メニューが選択されるまで call GAMEN_ADD_ITEM(mNo) !項目を表示する call GetMenuNo(s$) !単文字を入力する print s$ !debug debug debug if s$="↑" then !メニュー番号を下げる LET mNo = mNo - 1 if mNo<1 then LET mNo = 1 end if if s$="↓" then !メニュー番号を上げる LET mNo = mNo + 1 if mNo>mNoMax then LET mNo = mNoMax end if if s$="ENTER" then !確定する LET s$ = str$(mNo) end if if s$="1" or s$="2" or s$="3" or s$="4" or s$="5" then LET mNo = val(s$) end if if s$="1" or s$="2" or s$="3" or s$="4" or s$="5" or s$="9" or s$="ESC" then !指定番号なら、次へ LET ok2_0=0 else WAIT DELAY 0.2 !ちょっと待って、もう一度 ※0.2秒待つ end if loop END SUB !「追加」画面の項目を表示する SUB GAMEN_ADD_ITEM(mNo) call DisplayMessage(20,2,1,"追加(新規、未記入など)") if mNo=1 then call DisplayMessage(25,5,2,"1.日付:") call DisplayData(35,5,2,mmdd$) else call DisplayMessage(25,5,1,"1.日付:") call DisplayData(35,5,1,mmdd$) end if if mNo=2 then call DisplayMessage(25,7,2,"2.摘要:") call DisplayData(35,7,2,tekiyo$) else call DisplayMessage(25,7,1,"2.摘要:") call DisplayData(35,7,1,tekiyo$) end if if mNo=3 then call DisplayMessage(25,9,2,"3.区分:") else call DisplayMessage(25,9,1,"3.区分:") end if if mNo=4 then call DisplayMessage(25,11,2,"4.費目:") else call DisplayMessage(25,11,1,"4.費目:") end if if mNo=5 then call DisplayMessage(25,13,2,"5.金額:") call DisplayDataFormat(35,13,2,kingaku$,"##,###,### 円") else call DisplayMessage(25,13,1,"5.金額:") call DisplayDataFormat(35,13,1,kingaku$,"##,###,### 円") end if call DisplayMessage(25,16,1,"9.実行") !キー入力で! call DisplayMessage(23,18,1,"ESC.戻る") call DisplayMessage(20,22,1,"番号を入力してください。") END SUB |
│└その3 山中和義 2004/02/19 13:45:45 ツリーへ
Re: 実際の動きは、、、 |
返事を書く |
山中和義 2004/02/19 13:45:45 | |
その3 !指定位置に文字を表示する ※NULなら、「未入力」と表示される SUB DisplayDataFormat(x,y,c,s$,f$) LET ss$ = s$ set text color c if ss$="" then plot text, at x,y: "未入力" else plot text, at x,y, using f$: val(ss$) end if END SUB !指定位置に文字を表示する ※NULなら、「未入力」と表示される SUB DisplayData(x,y,c,s$) LET ss$ = s$ if ss$="" then LET ss$ = "未入力" call DisplayMessage(x,y,c,ss$) END SUB !メニュー番号を得る SUB GetMenuNo(s$) LET s$="" do while s$="" !指定のキーが押されるまで if getkeystate(37)<0 then LET s$ = "←" end if if getkeystate(38)<0 then LET s$ = "↑" end if if getkeystate(39)<0 then LET s$ = "→" end if if getkeystate(40)<0 then LET s$ = "↓" end if if getkeystate(32)<0 then LET s$ = "SPACE" end if if getkeystate(49)<0 or getkeystate(97)<0 then LET s$ = "1" end if if getkeystate(50)<0 or getkeystate(98)<0 then LET s$ = "2" end if if getkeystate(51)<0 or getkeystate(99)<0 then LET s$ = "3" end if if getkeystate(52)<0 or getkeystate(100)<0 then LET s$ = "4" end if if getkeystate(53)<0 or getkeystate(101)<0 then LET s$ = "5" end if if getkeystate(57)<0 or getkeystate(105)<0 then LET s$ = "9" end if if getkeystate(13)<0 then LET s$ = "ENTER" end if if getkeystate(27)<0 then LET s$ = "ESC" end if LOOP END SUB !指定の位置に文字を表示する SUB DisplayMessage(x,y,c,s$) set text color c plot text, at x,y: s$ END SUB END |
├subdisplaymessage(x,y,c,s$) もりの 2004/02/19 17:48:49 ツリーへ
Re: 画面設計 |
返事を書く |
もりの 2004/02/19 17:48:49 | |
sub display message (x,y,c,s$) t color c のところでエラーになって しまいます 改良して下さい 表が作成・入力できる ようになったら またカキコします できればメールで 送っていただけますか? |
│└なぜでしょうか? 山中和義 2004/02/19 18:37:01 ツリーへ
Re: subdisplaymessage(x,y,c,s$) |
返事を書く |
山中和義 2004/02/19 18:37:01 | |
なぜでしょうか? HPの文字を範囲指定(先頭から最後までドラッグ、反転表示)して、切取り、 十進BASICのプログラムを入力する画面に貼付け、 実行してもエラーになりませんが、、!? t color c の行は、 set text color c ですけど、これでエラーになっているのでしょうか? また、エラーメッセージは何ですか? |
│ ├わかりません もりの 2004/02/19 20:24:40 ツリーへ
Re: なぜでしょうか? |
返事を書く |
もりの 2004/02/19 20:24:40 | |
わかりません |
│ └メールで送って もりの 2004/02/19 20:26:12 ツリーへ
Re: なぜでしょうか? |
返事を書く |
もりの 2004/02/19 20:26:12 | |
メールで送って くださいますか? メニューは文字を 大きく 枠がつくといいですね。 |
└自宅のパソコンでやってみましたら もりの 2004/02/20 07:25:46 ツリーへ
Re: 画面設計 |
返事を書く |
もりの 2004/02/20 07:25:46 | |
自宅のパソコンでやってみましたら メニューはでてきました あとは申し訳ありませんが まだ全然だめですね エクセルやロータスのような 表形式の入力でカーソルが上下 左右に自由に動くようにできませんか? データの入力・書き換え・必要な部分・範囲が 印刷・保存できるようになると良いですね。 使いやすいなということが 画面設計のポイントです COBOLでもLINUXでも 十進でもそれは同じです まず、思った事がそのプログラムで できないと先にすすめません 使いやすいように改良してみてくださいますか? よろしく |