ここでご案内する Tips は ご紹介できる程度のノウハウを基にしています。ご自分のルールを決める際のサンプルとして活用していただければ。


〇 運用とファイル名の原則

原則1 フォームとイベント処理は1対1で対応させる

原則2 フォームとイベント処理は、同じフォルダの同じファイル名にする

原則3 表ファイルもフォーム+イベント処理と同じフォルダにする

                                   ( 桐の釣魚大全 より引用 )


〇 変数への接頭辞

局所変数 → 接頭辞に " m " を付ける ( 変数宣言 局所 , 文字列 { &m局所変数名 } ): m はモジュールの頭文字。

固有変数 → 接頭辞に " g " を付ける  ( 変数宣言 固有 , 文字列 { &g固有変数名 } ) : g はグローバルの頭文字。

共通変数 → 接頭辞に " p " を付ける  ( 変数宣言 共通 , 文字列 { &p共通変数名 } ) : p はパブリックの頭文字。

自動変数 → 接頭辞をつけない


〇 手続き名 につける接頭辞 

コマンドボタンから直接呼び出す「一般手続き」 を呼び出す場合 ⇒ オブジェクト名 + Click( 仮引き数リスト )

コマンドボタンから直接呼び出さない「一般手続き名」 ⇒ prc + 手続き名( 仮引き数リスト )


〇 表番号(ハンドル番号)を代入する 変数名の例

自分自身 : &currentTblNum     ( 使用例 : &currentTblNum = &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") )  &yen = #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 はどこかで宣言しておきます。