新しく発言する EXIT インデックスへ
画面設計

  画面設計 山中和義 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でも
十進でもそれは同じです
まず、思った事がそのプログラムで
できないと先にすすめません
使いやすいように改良してみてくださいますか?
よろしく



インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。