ここでご案内する Tips は ご紹介できる程度のノウハウを基にしています。ご自分のルールを決める際のサンプルとして活用していただければ。
〇 運用とファイル名の原則
原則1 フォームとイベント処理は1対1で対応させる
原則2 フォームとイベント処理は、同じフォルダの同じファイル名にする
原則3 表ファイルもフォーム+イベント処理と同じフォルダにする
(
桐の釣魚大全 より引用 )
〇 変数への接頭辞
局所変数 → 接頭辞に " m " を付ける ( 変数宣言 局所 , 文字列 { &m局所変数名 } ): m はモジュールの頭文字。
固有変数 → 接頭辞に " g " を付ける ( 変数宣言 固有 , 文字列 { &g固有変数名 } ) : g はグローバルの頭文字。
共通変数 → 接頭辞に " p " を付ける ( 変数宣言 共通 , 文字列 { &p共通変数名 } ) : p はパブリックの頭文字。
自動変数 → 接頭辞をつけない
〇 手続き名 につける接頭辞
コマンドボタンから直接呼び出す「一般手続き」 を呼び出す場合 ⇒ オブジェクト名 + Click( 仮引き数リスト )
コマンドボタンから直接呼び出さない「一般手続き名」 ⇒ prc + 手続き名( 仮引き数リスト )
〇 表番号(ハンドル番号)を代入する 変数名の例
自分自身 : ¤tTblNum ( 使用例 : ¤tTblNum = &hwindow )
多重化表 : &multiTblNum ( 使用例 : &multiTblNum = #IS表 )
その他 : &importTblNum , &exportTblNum , &openTblNum , &lookupTblNum
〇 入力支援ボタンの命名
オブジェクト名+"入力支援ボタン" ( 例 : txt氏名検索入力支援ボタン )
〇 &STR の値を退避
変数宣言 自動,文字列 { &STRbak }
&STRbak = &STR /* &STR の値を 自動変数 &STRbak に退避 */
&STR = &STRbak /* &STRbakの値を 組み込み変数 &STR に戻す */
○ 特殊な文字を分かり易く(文字コードと変数を使います)
文字 | 意味 | 変換例 | 設定例 | |
" | 半角二重引用符 | #jis( #hex("22") ) | &WQ = #jis( #hex("22") ) | |
, | 半角コンマ | #jis( #hex("2C") ) | &comma = #jis( #hex("2C") ) | |
\ | 半角円マーク | #jis( #hex("5C") ) | ¥ = #jis( #hex("5C") ) | |
半角空白文字(スペース) | #jis( #hex("20") ) | &SP = #jis( #hex("20") ) | ||
- | 半角ハイフォン・マイナス | #jis( #hex("2D") ) | &bar = #jis( #hex("2D") ) |
例) | |
変数宣言 自動,文字列{ &WQ = #jis( #hex("22") ) } /* &WQ の値は半角二重引用符 ( " ) となります。
*/ |
|
変数宣言 自動,文字列{ &SP = #jis( #hex("20") ) } /* &SP の値は半角スペースになります。 */ | |
&WQ + "A" + "" + &SP + "" + "B" + &WQ | |
* 計算結果は "A B" になります。 |
※文字を直接使用するのではなく文字コードを使用するということです。ここでの変換例以外の方法もあるかと思います。
〇 ダブルクォーテーション、&表現式
手続き定義開始 prcサンプル手続き ( 文字列 &文字列 ) /* ここでは &文字列 の値は 文字列 とします */
変数宣言 自動,文字列{ &WQ = #jis( #hex("22") ) } /* &WQ の値は半角二重引用符 ( " ) となります。 */
変数宣言 自動,文字列{ &表現式 } /* &表現式 をつかうことで、&文字列 の値を保持したままにできます */
&表現式 = "*" + &WQ + &文字列 + &WQ + "*" /* &表現式を使って &文字列 = "*" + &WQ + &文字列 + &WQ + "*" よりも分かり易く */
( "*" + &WQ + &文字列 + &WQ + "*" ⇒ "*""" + &文字列 + """*" ⇒ *"文字列"* ) ということです。
-----------
&STR = &WQ + #文字列(&件数) + ":" + &氏名1 + &WQ
置換 [同居者1] =_ &STR
&STR = #文字列(&件数) + ":" + &氏名
行訂正 [同居者1] = &STR
○ 確認コマンドでの表示に、エラーの
変数宣言 自動,整数{ &status }
変数読み込み "History.vax",固有 , 終了状態 = &status
if ( &status <> 1 )
確認 "保存した変数の値が読み込めませんでした。終了状態 = " + #str( &status )
end
確認メッセージに #str( &status ) を加えておくことで、エラーの戻り値を見ることができます。
〇 項目への値入力
変数宣言 自動,長整数{&更新モード}
メソッド呼び出し @フォーム.更新モード取得(&更新モード)
if ( &更新モード = 0 )
行訂正 [郵便番号] = &郵便番号 , [都道府県] = &住所1 , [住所1] = &住所2 /* 項目名、入力値はサンプルです */
else
項目値代入 [郵便番号] = &郵便番号 , [都道府県] = &住所1 , [住所1] = &住所2 /* 項目名、入力値はサンプルです */
end
〇 メッセージボックス の使用例
変数宣言 自動,文字列{ &icon, &title = "cmd住所一括更新Click", &msg } | |
変数宣言 自動, 文字列{ &WQ = #jis( #hex("22") ) } | &WQ の値は半角二重引用符 ( " ) となります。 |
変数宣言 自動, 数値 { &ans } | |
*&title = "cmd住所一括更新Click()" /* 変数宣言時に代入済みです。サンプルとして記載 */ | メッセージを呼び出した手続きをタイトルにしています |
&msg = &msg + " << 住所を更新します >>" | |
&msg = &msg + "\n" | |
&msg = &msg + "\n郵便番号から" | |
&msg = &msg + "\n都道府県と住所1を更新します。" | |
&msg = &msg + "\n" | |
&msg = &msg + "\n郵便番号の " + &WQ + "-" + &WQ +" を一旦取り除いて" | 郵便番号の "-" を一旦取り除いて |
&msg = &msg + "\n郵便番号簿の住所で更新します。" | |
&msg = &msg + "\nその後新たに " + &WQ + "-" + &WQ +" を付け直します。" | その後新たに "-" を付け直します。 |
&msg = &msg + "\n" | |
&msg = &msg + "\n実行しますか?" | |
メッセージボックス &title, &msg,ボタン指定 = 2,アイコン = ?,制御文字展開 = する,&ans | |
* アイコン = i|?|!|E| 、ボタン指定 = 1:[OK]のみ|2:[OK]と[キャンセル] | 簡単な解説を記載しています |
if ( &ans = 1 ) | |
手続き実行 prc住所一括更新実行() | |
確認 "完了しました" | |
end |
〇 絞り込み
変数宣言 自動, 文字列{ &WQ = #jis( #hex("22") ) } | ||
値を含む | 絞り込み [住所1]{*"東京都"*} | 変数宣言 自動, 文字列{ &値を含む = "*" + &WQ + "東京都" + &WQ + "*" } |
値に一致 | 絞り込み [住所1]{"東京都"} | 変数宣言 自動, 文字列{ &値に一致 = &WQ + "東京都" + &WQ } |
値を含まない | 絞り込み [住所1]{≠*"東京都"*} | 変数宣言 自動, 文字列{ &値を含まない = "≠" + "*" + &WQ + "東京都" + &WQ + "*" } |
前方一致 | 絞り込み [住所1]{"東京都"*} | 変数宣言 自動, 文字列{ &前方一致 = &WQ + "東京都" + &WQ + "*" } |
後方一致 | 絞り込み [住所1]{*"東京都"} | 変数宣言 自動, 文字列{ &後方一致 = "*" + &WQ + "東京都" + &WQ } |
○ ダッシュ、ハイフン
ダッシュ : ― 「ダッシュ」 と入力して変換する。
ハイフン : - 「ハイフン」 と入力して変換する。
長音と間違えずに入力するには、以上の方法が便利です。
○たとえ参照しなくても、配列変数を引数で渡す場合には、参照にしないとエラーになる 投稿者:ONnoji 投稿日:2019年 6月 9日(日)21時43分23秒
「コマンドの形式に誤りがあります」と叱られたので、原因が判るまで調べるのに時間がかかった。
実は、忘れていたのでした。ハハハha。(^^ゞ
× 手続き定義開始 prcDimBottomGet( 文字列 &stringDim[], 参照 整数 &bottom )
○ 手続き定義開始 prcDimBottomGet( 参照 文字列 &stringDim[], 参照 整数 &bottom )
(例)
手続き定義開始 cmdTestClick( )
変数宣言 自動,文字列{ &icon, &title = "cmdTestClick( )", &msg }
変数宣言 自動,整数 { &i, &loop, &step = 1 }
変数宣言 自動,文字列{ &test[ 2 ] }
手続き実行 prcDimBottomGet( &test, &loop ) /* これはNG → 手続き実行 prcDimBottomGet(
&test[], &loop ) */
手続き定義終了
手続き定義開始 prcDimBottomGet( 参照 文字列 &stringDim[], 参照 整数 &bottom )
変数宣言 自動,文字列{ &icon, &title = "prcDimBottomGet( )", &msg }
変数宣言 自動,文字列{ &string }
変数宣言 自動,整数 { &i, &loop, &step = 1 }
&bottom = 0
&loop = #配列要素数( "stringDim" )
┌繰り返し &i = 1, &loop, &step
│
│ &string = #trim( #変数( "stringDim", &i ), 3 )
│┌if ( &string = #u )
││
││ &bottom = &i - 1
←┼─繰り返し中止
│└end
│
└繰り返し終了
手続き定義終了
■ありえない日付は、一日進めて、一日戻しても、元の日付にはならない 投稿者:ONnoji 投稿日:2015年 9月14日(月)11時22分1秒
* * *
種明かしをすると、
>&mYYMMDD に1日加算すると翌日になる。
は、常に翌日になるとは限らないのである。
ありえない日付文字列の場合を考えてみよう。
たとえば、"15/09/31" は、2015年9月に31日は存在しないのでありえない日付です。
"15/09/31" の翌日はなんだろ??
桐9-2009a で試してみると、2015年 9月 2日になる。
"2015年 9月 2日"は、DOS桐と同じ日付文字列なので、区切り文字がスラッシュでなくても構わない。
要は、年月日が文字で区切られていればOK。
&mChkYYMMDD = #日数加算( "15/09/31", 1 )
の結果が、"2015年 9月 2日" なのだから、
&mChkYYMMDD = #日数加算( "2015年 9月 2日", -1 )
の結果は、"2015年 9月 1日"
このままでは日付の区切り文字が異なるので
&mChkYYMMDD = #日付( &mChkYYMMDD, 3 )
で、"150901" に変換
さらに、
&mChkYYMMDD = #部分列( &mChkYYMMDD, 1, 2 ) + "/" + #部分列( &mChkYYMMDD, 3, 2 ) + "/"
+ #部分列( &mChkYYMMDD, 5, 2 )
で、 "15/09/01" に変換
以上でようやく比較可能になったので、
if ( &mYYMMDD <> &mChkYYMMDD )
つまり、
if ( "15/09/31" <> "15/09/01" )
という比較ができる。
当然ながら、ありえない日付は、一日進めて、一日戻しても、元の日付にはならないのである。
以上で種明かし終わり。
◆コマンドボタンを凹ませる方法を見つけた 投稿者:ONnoji 投稿日:2019年 5月19日(日)20時08分0秒
先日、フォームアプリケーション教書 第1部 を執筆中に、コマンドボタンの説明を全部読んでみた。
すると、今まで気付かなかったコマンドボタンを凹ませる方法を見つけた。
機能名 機能パラメータリスト 説明 |
:実行条件 :<実行条件式>[,<チェック条件式>] :以降の機能を実行するかどうかを実行条件式で指定する。<チェック条件式>が真のとき凹んだ状態になる。 |
さっそく試してみたら、プッシュボタン(トグルボタンの一種)よりも便利でしたよ。
オブジェクト名:
cmdUtiltyWindowNum_1 標題 :■□□□ 機能名 機能パラメータリスト 1 実行条件 ( 1 ), ( &mUtiltyWindowNum = 1 ) 2 なし #代入( &mUtiltyWindowNum, 1 ) 3 なし 4 なし |
実行条件 ( 1 ), ( &mUtiltyWindowNum = 1 )
↑ ↑
恒真式, コマンドボタンを凹ませる式
※変数 &mUtiltyWindowNum はどこかで宣言しておきます。