HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0408
umetaro&umekosample_02_memolite.hspを改造時にエラー2未解決


umetaro&umeko

リンク

2015/4/8(Wed) 17:24:35|NO.68449

なぜかsample_02_memolite.hspのサンプルスクリプトを改造していたところ
何も表示されなくなったので質問させていただきます。

#include "sqlele.hsp" #include "mod_menu.as";メニューを使用するために必要 #define CMD_NEW 1 #define CMD_HIRAKU 2 #define CMD_UWAGAKi 3 #define CMD_NAMESAVE 4 #define CMD_SEARCH 5 oncmd gosub *OnCommand, WM_COMMAND //サブメニューの設定(追加可) newmenu diary,1 addmenu diary, "新規作成(&N)", CMD_NEW addmenu diary, "txtファイルを開く(&O)", CMD_HIRAKU addmenu diary, "上書き保存(&S)", CMD_UWAGAKI addmenu diary, "内容をtxtファイルとして保存(&A)", CMD_NAMESAVE addmenu diary, "検索(&W)...", CMD_SEARCH //トップメニュー(追加可) newmenu dmenu,0 addmenu dmenu, "ファイル(&F)", diarymenu, 0x10 stop ;-------------------------------------------------------------------------------; ;OnCommandラベル。メニューはどういう働きをするのかの設定 ; ;-------------------------------------------------------------------------------; *OnCommand cmd=wparam & 0xFFFF if cmd=CMD_NEW { goto *new } if cmd=CMD_HIRAKU { goto *txtopen } if cmd=CMD_NAMESAVE { goto *txtsave } if cmd=CMD_SEARCH { goto *search } ;-------------------------------------------------- ; ステータス変数の初期化 lst = -1 ; 現在選択された過去メモリストのインデックス curid = -1 ; 現在選択されたレコードの ID (新規作成時は -1) srch = "" ; 検索文字列 srchbuf = "" ; 検索ボックス用バッファ sdim memobuf, 32768 ; メモ内容バッファ tomo="" ;-------------------------------------------------- ; 画面作成 title "windows DiaryEX" ; 背景表示 font "MS ゴシック", 13 color 222,222,111 : boxf 440-2, 0, 640, 80 ; left gui-object pos 0, 40 : mesbox memobuf, 440-4, 400, 1 : idmes = stat pos 170, 440 : objsize 100, 20 : button "登録/更新", *update ; right-top pos 440, 20 : objsize 200-4, 20 : input srchbuf : idsrch = stat pos 500, 45 : objsize 70, 20 : button "検索", *search pos 580, 45 : objsize 50, 20 : button "リセット", *reset ; right-btm pos 440, 100 : objsize 200-4, 300 : listbox lst, 0, memobuf : idlst = stat pos 500, 400 : objsize 70, 20 : button "開く", *open pos 580, 400 : objsize 50, 20 : button "削除", *dels objsel idmes ;-------------------------------------------------- ; DB オープン sql_open "memolite.db" ; TMemo テーブルがなければ新たに作成 sql_q "CREATE TABLE IF NOT EXISTS TMemo (ID INTEGER PRIMARY KEY, Date, Memo, Upd)" ; TMemo テーブルのフィールド ; ID 自動連番ID ; Date メモの登録日 ; Memo メモ内容 ; Upd メモの最終更新日 ;-------------------------------------------------- ; 画面更新 gosub *editor_renew_sub gosub *list_renew_sub stop ;============================================================ ; サブルーチン ; メモ内容の変更確認 if lst < 0{ dialog "開くメモが選択れていません" stop } ; エディタ領域の更新 *editor_renew_sub ; ID = curid のレコードを読み出し sql_q "SELECT * FROM TMemo WHERE ID=" + curid if stat { ; 現在のレコード ID が有効な場合 モ内容を取り出す memobuf = sql_v("Memo") objprm idmes, memobuf ; 画面更新 color 222,222,222 : boxf 0, 0, 440-2, 480 color : pos 0, 0 : mes sql_v("Date") + " のメモを編集 (更新 " + sql_v("Upd") + ")" } else { ; 現在のレコード ID が無効の場合 新規作成 memobuf = "" objprm idmes, memobuf ; 画面更新 color 222,222,222 : boxf 0, 0, 440-2, 480 color : pos 0, 0 : mes "新規作成" } return ; リスト領域の更新 *list_renew_sub if srch ! "" { ; 画面更新 color 111,222,222 : boxf 440-2, 80, 640, 480 color : pos 440, 80 : mes "'" + srch + "' 検索結果" ; 検索文字列がある場合 sql_q "SELECT ID, Date, substr(replace(Memo,'\n',''),0,100) as subMemo FROM TMemo WHERE Date like '%"+sqesc(srch)+"%' OR Memo like '%"+sqesc(srch)+"%' ORDER BY ID DESC" } else { ; 画面更新 color 111,222,222 : boxf 440-2, 80, 640, 480 color : pos 440, 80 : mes "メモの一覧" ; 全件抽出 sql_q "SELECT ID, Date, substr(replace(Memo,'\n',''),0,100) as subMemo FROM TMemo ORDER BY ID DESC" } count = stat astr = "" lst = -1 repeat count list_ids(cnt) = sql_i("ID") ; リストボックスのインデックスと レコード ID との変換テーブル if curid = sql_i("ID") : lst = cnt ; 現在のレコードがあれば選択状態にする astr += sql_v("Date") + " " + sql_v("subMemo") + "\n" sql_next loop objprm idlst, astr ; 内容更新 objprm idlst, lst ; 選択インデックス更新 return ;============================================================ ; ボタンを押した時の動作 ; 新規作成ボタン *new ; 新規作成モードへ (現在の選択 ID を無効値に設定) curid = -1 gosub *editor_renew_sub objsel idmes stop ; 開くボタン *open ; メモ内容の変更確認 yes = 1 sql_q "SELECT Memo FROM TMemo WHERE ID=" + curid if stat { if (sql_v("Memo") ! memobuf) : yes = 0 } else { if memobuf ! "" : yes = 0 } if yes = 0 { dialog "内容は変更されています。保存せずにメモを開きますか?", 2 if stat = 6 : yes = 1 } ; 新しい curid を設定してエディタ部を更新 if yes { curid = list_ids(lst) gosub *editor_renew_sub } stop ; 登録/更新ボタン *update dialog "内容を登録/更新します。", 2 if stat = 6 { ; レコードの挿入 or 更新 if curid >= 0 { ; 現在の ID が有効な場合 : 既存レコード更新 sql_q "UPDATE TMemo SET Memo=" + prm_text(memobuf) + ", Upd=datetime('now','localtime') WHERE ID="+curid } else { ; 現在の ID が無効な場合 : 新規レコード 挿入 sql_q "INSERT INTO TMemo (Date, Memo) VALUES (datetime('now','localtime'), " + prm_text(memobuf) + ")" ; 挿入したレコードの ID を調べる sql_q "SELECT last_insert_rowid() AS ID" curid = sql_i("ID") } gosub *list_renew_sub gosub *editor_renew_sub } stop ; 検索ボタン *search ; srch を設定してリストを再表示させる srch = srchbuf gosub *list_renew_sub stop ; 検索リセットボタン *reset ; srch をクリアしてリストを再表示 srch = "" gosub *list_renew_sub stop ; 削除ボタン *dels if lst >= 0 { sql_q "SELECT * FROM TMemo WHERE ID=" + list_ids(lst) dialog sql_v("Date") + " のメモを削除しますか?", 2 if stat = 6 { ; 削除対象が現在のレコードの場合 現在のレコード ID を無効化 if list_ids(lst) = curid : curid = -1 ; レコード削除 sql_q "DELETE FROM TMemo WHERE ID=" + list_ids(lst) gosub *list_renew_sub } } stop ;///////////////////////////////////////////////////////////////////////////////// ;ここから下txt関係のスクリプト *txtsave dialog "txt",17,"txtファイル" if stat==0:stop fairuname=refstr fairuName=getpath(fairuName,1)+".txt" ;拡張子付け直し notesel tomo notesave fairuname stop *txtopen dialog "txt",16,"txtファイル" if stat==0:stop if getpath(refstr,2+16)!=".txt"{ ;読み込もうとしたファイルがテキストファイルでなければ dialog "txtファイル以外は開けません。\ntxtファイルを選択してください",1,"読み込み" stop } fairuName=refstr ;ファイル名を取得 notesel tomo ;対象指定 noteload fairuname ;ロード objprm 0,tomo ;内容更新 stop
とりあえず全部載せました。
もちろん改造完了状態ではありません。



この記事に返信する


_end

リンク

2015/4/8(Wed) 17:58:55|NO.68451

「改造中に何も表示されなくなって、その原因を調べてほしい」
という私の考えで、質問させていただきます。
30行目あたりに「applymenu dmenu」を追加したら、メニューバーが表示されましたよ。
まだ完成版では無いみたいですので、目的が分かりませんが、これで良かったでしょうか?



暇人

リンク

2015/4/10(Fri) 21:31:43|NO.68492

まず
>addmenu dmenu, "ファイル(&F)", diarymenu, 0x10
diarymenuじゃ無くdiaryだろう

NO.68451で指摘されてるけど肝心な

applymenu dmenu
が無い

それからOnCommandラベルの場所がおかしい
ステータス変数の初期化等画面構成作る前にstopで止めてる
gosubで*OnCommandに跳んでるのにreturnさせてない
他にもgosubしてるのにreturnされてない所がある多数ある



ONION software Copyright 1997-2023(c) All rights reserved.