(現在 過去ログ60 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 ファイル一覧 検索 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■9286 / inTopicNo.1)  桐9から桐10へ変更した場合
  
□投稿者/ たゆー -(2015/08/27(Thu) 16:16:10)
    ・実は困った問題が発生しました。

    桐9から桐10へ変更したフォームのオブジェクト名が
    たとえば「フォーム」になったままで、新規に桐10で作成した名前が「フォーム」になります
    違いは半角か全角の違いですが、ライブラリー.cmxで利用中のメソッドがエラーになってしまいます

    なにか対応はあるのでしょうか?たとえば
    ・「桐9」から、変換したファイルか桐10で新規作成したフォームかを判断する関数とか
    ・フォームにもバージョンがあって、それを調べるとか
    ・「フォーム」の文字が、全角か半角か調べる方法とか

    イベントだったらそのフォーム専用ですので修正可能ですが、
    せっかくのライブラリが、エラー続出状態です。よろしくお願いいたします。


引用返信 [メール受信/OFF] 削除キー/
■9287 / inTopicNo.2)  Re[1]: 桐9から桐10へ変更した場合
□投稿者/ ONnoji -(2015/08/27(Thu) 22:49:24)
    No9286に返信(たゆーさんの記事)
    > ・実は困った問題が発生しました。
    >
    > 桐9から桐10へ変更したフォームのオブジェクト名が
    > たとえば「フォーム」になったままで、新規に桐10で作成した名前が「フォーム」になります
    > 違いは半角か全角の違いですが、ライブラリー.cmxで利用中のメソッドがエラーになってしまいます


    以下に拙作BBSを引用します。ご参考にしてください。
    かっこうBBS( http://8229.teacup.com/onnoji/bbs

    【引用】かっこうBBS|半角の[フォーム]オブジェクトと全角の[フォーム]オブジェクトを識別する 投稿者:ONnoji 投稿日:2015年 7月 9日(木)17時12分34秒

    メソッドや関数で半角の[フォーム]オブジェクトと全角の[フォーム]オブジェクトを識別する方法ありませんでした。

    しかし、意外な方法が見つかりました。

    つまり、絶対に存在する[フォーム開始]イベントのプロパティをオンにする

     オブジェクト操作 @フォーム{ フォーム開始 = 1 }

    この時、半角の「フォーム」 が存在せずに、全角の「フォーム」が存在する場合、エラーします。

    このエラーによって、呼び出した一般手続きで

     オブジェクト操作 @フォーム{ フォーム開始 = 1 } /* プロパティ名は、半角でもOK */

    を実行しようというワケです。

    この時ついでに、局所変数のフラグも立てておきます。

    フラグを参照すれば、半角の「フォーム」なのか、全角の「フォーム」なのかは一目瞭然。

    名案でしょ。ハハハハha。v(^_^)v

    <参考例>

    名札 メイン

     :
     :

     変数宣言 局所,整数 { &INFmLive = 1 } /* INF Framework を有効にする Yes:1 No:0 */

     if ( #変数( "INFmLive" ) )
      *---------- begin INF Framework Library Load ---------------*
      変数宣言 局所,文字列{ &INFmLibraryName }
      &INFmLibraryName = #一括パス名 + "INF_Tools_Framework.cmd" /* Rev.88 以降は INF_Tools_Framework.cmd ※Rev.73 までは INF_Tools_library.cmd */
      if ( #ファイルサイズ( &INFmLibraryName ) < 0 .and #バージョン番号 >= 10 )
       &INFmLibraryName = #ファイル名( &INFmLibraryName, 5 ) + #ファイル名( &INFmLibraryName, 2 ) + ".cmx"
      end
      条件 ( #バージョン番号 >= 10 ) 変数宣言 局所,整数{ &INFmKnjForm }

      if ( #ファイルサイズ( &INFmLibraryName ) > 0 )
       ライブラリ &INFmLibraryName
       条件 ( #バージョン番号 >= 10 ) エラー処理 手続き名 = "INFprcOnErrorEventFormBeginON"
       オブジェクト操作 @フォーム{ フォーム開始 = 1 }
       条件 ( #バージョン番号 >= 10 ) エラー処理 /* 解除を忘れずに */
      else
       &INFmLive = 0, &INFmLibraryName = "ライブラリが見つかりません\n\nフォルダ: " + #文字置換( #ファイル名( &INFmLibraryName, 5), "\", "\\" ) + "\n\nファイル: " + #文字置換( #ファイル名( &INFmLibraryName, 3), "\", "\\" )
       メッセージボックス "INF Framework 名札 メイン", &INFmLibraryName + "\n\nコメント: INF Framework は停止しました", アイコン=i, ボタン指定=1, 制御文字展開 = する
      end
      *---------- end INF Framework Library Load -----------------*
     end


     :
     :




    手続き定義開始 INFprcOnErrorEventFormBeginON( )
     変数宣言 自動,文字列{ &icon, &title = " INFprcOnErrorEventFormBeginON( )", &msg }
     変数宣言 自動,整数 { &setInt }

     &setInt = #set( "INFmKnjForm", 1 )
     オブジェクト操作 @フォーム{ フォーム開始 = 1 } /* プロパティ名は、半角でもOK */

    手続き定義終了


    <サンプルファイルの入手に関して>

    utx_list3sp1のベータ版をアップしました。

    こちらのURLからダウンロードできます。

    桐のイベント道場 オモチャのチャチャチャ
    http://www.geocities.jp/siliconvalley_bay_7565/toy_form2.htm

    ダウンロード utx_list3_sp1_20150821.lzh  2015-08-21 約881KB ※桐V9バージョン

引用返信 [メール受信/OFF] 削除キー/
■9288 / inTopicNo.3)  Re[2]: 桐9から桐10へ変更した場合
□投稿者/ ONnoji -(2015/08/27(Thu) 22:57:01)
    > つまり、絶対に存在する[フォーム開始]イベントのプロパティをオンにする
    >  オブジェクト操作 @フォーム{ フォーム開始 = 1 }
    > この時、半角の「フォーム」 が存在せずに、全角の「フォーム」が存在する場合、エラーします。
    > このエラーによって、呼び出した一般手続きで
    >  オブジェクト操作 @フォーム{ フォーム開始 = 1 } /* プロパティ名は、半角でもOK */
    > を実行しようというワケです。
    > この時ついでに、局所変数のフラグも立てておきます。

    [フォーム開始]イベントのプロパティをオンにする代わりに、

    [フォーム開始]イベントのプロパティを参照する方法でも可能です。

    以下も参考にしてください。

     *---------- begin VK Framework 名札 メイン ---------------*
     変数宣言 局所,整数 { &VKmLive = 1 } /* VK_library を有効にする Yes:1 No:0 */
     if ( #変数( "VKmLive" ) )
      変数宣言 局所,文字列{ &VKmLibraryName } /* Rev.3 以降は VK_Framework.cmd ※Rev.2 までは VK_library.cmd */
      &VKmLibraryName = #一括パス名 + "VK_Framework.cmd"
      if ( #ファイルサイズ( &VKmLibraryName ) < 0 .and #バージョン番号 >= 10 )
       &VKmLibraryName = #ファイル名( &VKmLibraryName, 5 ) + #ファイル名( &VKmLibraryName, 2 ) + ".cmx"
      end

      if ( #ファイルサイズ( &VKmLibraryName ) > 0 )
       ライブラリ &VKmLibraryName

       if  ( #バージョン番号 >= 10 .and #配列要素数( "INFmKnjForm" ) = -1 ) /* 変数:&INFmKnjForm が未宣言ならば */
        変数宣言 局所,整数{ &INFmKnjForm }
        手続き実行 VKprcKnjFormCheck( )
       end
      else
       &VKmLive = 0
       メッセージボックス "VK Framework 名札 メイン", \
        "ファイルが見つかりません\n\nフォルダ: " + #文字置換( #ファイル名( &VKmLibraryName, 5 ), "\", "\\") \
        + "\n\nファイル: " + #ファイル名( &VKmLibraryName, 3 ) + "\n\nVK Framework は停止しました" \
        , アイコン = !, ボタン指定 = 1, 制御文字展開 = する
      end
      if ( #変数( "VKmLive" ) )
       ** VK Variable
       変数宣言 局所,文字列{ &VKmScanString, &VKmChr, &VKmFlagKeyName, &VKmKeyString, &VKmMouseString }
       変数宣言 局所,文字列{ &VKmKeyNameKeyDownDim[8], &VKmKeyNameSystemKeyDownDim[8], &VKmKeyNameKeyUpDim[8], &VKmKeyNameSystemKeyUpDim[8] }
       変数宣言 局所,文字列{ &VKmKeyMacroKeyDownDim[8], &VKmKeyMacroSystemKeyDownDim[8], &VKmKeyMacroKeyUpDim[8], &VKmKeyMacroSystemKeyUpDim[8] }
       変数宣言 局所,文字列{ &VKmKeyCancelKeyDownDim[8], &VKmKeyCancelSystemKeyDownDim[8], &VKmConstantNumList, &VKmConstantChrList }
       変数宣言 局所,長整数{ &VKmKeyNum, &VKmScanNum, &VKmFlagNum, &VKmLongNum }
       変数宣言 局所,整数 { &VKmAltKey, &VKmRepeat, &VKmExtendKey, &VKmNoKeyboard }
       変数宣言 局所,整数 { &VKmKeyDownLive, &VKmSystemKeyDownLive, &VKmKeyUpLive, &VKmSystemKeyUpLive, &VKmOnKey, &VKmConstantDimNum }
       手続き実行 VKprcConstantDefine( &VKmConstantNumList, &VKmConstantChrList, &VKmConstantDimNum )
       ** option 変数宣言 局所,整数 { &VKmKeyMask, &VKmCustomizeKeyMask, &VKmSpecialKeyMask, &VKmFunctionKeyMask }
       ** option 変数宣言 局所,文字列{ &VKmConstantChrDim[ &VKmConstantDimNum ] }
       ** option 手続き実行 VKprcConstantDimStore( &VKmConstantChrList, &VKmConstantChrDim )
      end
     end
     *---------- end VK Framework 名札 メイン ---------------*



    手続き定義開始 VKprcKnjFormCheck( )
     変数宣言 自動,文字列{ &icon, &title = "VKprcKnjFormCheck( )", &msg }
     変数宣言 自動,整数 { &eventFormBeginStatus }

     条件 ( #バージョン番号 >= 10 ) エラー処理 手続き名 = "VKprcOnErrorEventFormBeginStatusGet"
     オブジェクト操作 @フォーム{ &eventFormBeginStatus = フォーム開始 }
     条件 ( #バージョン番号 >= 10 ) エラー処理 /* 解除を忘れずに */

    手続き定義終了



    手続き定義開始 SPNprcOnErrorEventFormBeginStatusGet( )
     変数宣言 自動,文字列{ &icon, &title = "SPNprcOnErrorEventFormBeginStatusGet( )", &msg }
     変数宣言 自動,整数 { &setInt }
     変数宣言 自動,整数 { &eventFormBeginStatus }

     ** この手続きは、[SPN Framework 名札 メイン]の SPNprcKnjFormCheck( ) の[エラー処理]コマンドで呼び出される

     ** 桐10 では、フォームオブジェクト名が 半角 と 全角 の2種類ある
     ** 桐9 等から変換したフォームでは "フォーム" ※半角
     ** 桐10で新規作成したフォームでは "フォーム" ※全角
     ** この手続きは、局所変数:整数:&INFmKnjForm にフラグ:1 を立てる
     ** プロパティ:フォーム開始 は変更しない

     &setInt = #set( "INFmKnjForm", 1 )
     **オブジェクト操作 @フォーム{ &eventFormBeginStatus = フォーム開始 } /* プロパティ名は、半角でもOK */

     **&errno エラーメッセージの番号が代入されています。この番号はKUから始まるエラーの場合は正の数、KDから始まるエラーの場合は負の数になります(整数)。
     **&lineno エラーが発生した一括処理またはイベント処理の行番号が代入されています(長整数)。
     **&cmdname エラーが発生した一括処理またはイベント処理のファイル名が代入されています(文字列)。
     **&errmsg エラーメッセージの内容が代入されています(文字列)。
     **&detail エラーの詳細情報が代入されています(文字列)。

     &msg = "エラー処理コマンドで呼び出された手続きです"
     &msg = &msg + "\n\n&errno = " + #str( &errno )
     &msg = &msg + "\n\n&lineno = " + #str( &lineno )
     &msg = &msg + "\n\n&cmdname = " + #文字置換( &cmdname, "\", "\\" )
     &msg = &msg + "\n\n&errmsg = " + &errmsg
     &msg = &msg + "\n\n&detail = " + &detail
     &icon = "i"
     **手続き実行 SPNprcMsgPause( &icon, &title, &msg )

    手続き定義終了


引用返信 [メール受信/OFF] 削除キー/
■9289 / inTopicNo.4)  Re[3]: 桐9から桐10へ変更した場合
□投稿者/ ONnoji -(2015/08/27(Thu) 23:04:18)
    2015/08/27(Thu) 23:06:11 編集(投稿者)


    老婆心ながら、[エラー処理]コマンドの注意点を引用します。

    釈迦に説法で恐縮です。m(__)m

    【引用】かっこうBBS|[エラー処理]コマンドは、安易に使用してはいけないコマンド 投稿者:ONnoji 投稿日:2015年 7月10日(金)10時20分22秒

    > エラーが発生したときに実行する手続きを定義するというのは一見便利そうだが、
    > 実はエラーにもさまざまな種類があるので気を付けなければいけない。
    > まず、文法エラーに対して用いるのはNGだっ!。これは論外。
    > なぜなら、文法エラーが発生するということは、プログラムの信頼性が低いという意味だからだし、
    > さらにデバッグも出来なくなってしまいます。
    > また、使用するファイルがディスクに存在しなかった場合の判定に使用するのもNGだっ!。
    > これは、#ファイルサイズという関数で判定するのが確実なのでありますゾ。
    >
    > じゃあ、どんな時につかうのか???
    > 老婆心ながら、実に使い道が限られたコマンドだという認識が必要だと思いますよ。


    老婆心ながらクドクドと書きますが、

    [エラー処理]コマンドは、安易に使用してはいけないコマンドです。

    今回、私( ONnoji )は、半角の[フォーム]オブジェクトと全角の[フォーム]オブジェクトを識別するために使用したのだが、

    この使い方には問題が発生しないという確信があった。

    使い方の要点を以下に示すと、

    (1) 条件 ( #バージョン番号 >= 10 ) エラー処理 手続き名 = "INFprcOnErrorEventFormBeginON"
    (2) オブジェクト操作 @フォーム{ フォーム開始 = 1 }
    (3) 条件 ( #バージョン番号 >= 10 ) エラー処理 /* 解除を忘れずに */

    まず、(1)桐10(または桐10以降)ならば、[エラー処理]コマンドで実行する手続きを予約する。

    次に、(2)オブジェクト名が半角「フォーム」の「フォーム開始」属性をオンにする。

    ただし、(2)ではオブジェクト名が半角「フォーム」が存在しない場合があり、その場合にはエラーになる。

    それゆえに、(2)の前に(1)で[エラー処理]コマンドで実行する手続きを予約したのである。

    エラーが発生しても発生しなくても(3)が実行されるので、[エラー処理]コマンドを解除する。


    このように、あらかじめエラー発生が想定されるコマンドの前後を[エラー処理]コマンドでサンドイッチのように挟むことが重要です。

    [エラー処理]コマンドは、「予約したら、すぐに解除する」というのが上手な使い方です。

    つまり、[エラー処理]の対象区間を限定し、なるべく対象区間を短くすることが重要です。

    そして、今回のケースは(2)において回避不能なエラーが発生する場合が存在するという確信があるから成立します。


    【引用】かっこうBBS|[エラー処理]コマンドのこと 投稿者:ONnoji 投稿日:2015年 7月 9日(木)16時52分29秒

    【桐10ヘルプより引用】
    エラー処理

    イベントでの使用 ○可能
    ■説明
    ・エラーが発生したときに実行する手続きを定義します。
    ・「エラー処理」とだけ記述すると、エラー処理を解除します。
    ・<名札名>を指定すると、エラーが発生した際にその名札に分岐します。
    ・「手続き名=」でエラーを定義しておくと、エラーが発生した際に定義した手続きが実行されます。手続きの実行が終了するとエラーが発生した行の次から処理を継続します。

    ・「手続き名=」で手続きを指定した場合、その手続きの実行中につぎの自動変数を参照できます。 変数名 説明(データ型)
     &errno エラーメッセージの番号が代入されています。この番号はKUから始まるエラーの場合は正の数、KDから始まるエラーの場合は負の数になります(整数)。
     &lineno エラーが発生した一括処理またはイベント処理の行番号が代入されています(長整数)。
     &cmdname エラーが発生した一括処理またはイベント処理のファイル名が代入されています(文字列)。
     &errmsg エラーメッセージの内容が代入されています(文字列)。
     &detail エラーの詳細情報が代入されています(文字列)。



    桐10で公開された[エラー処理]コマンド。

    私の記憶では、以前は隠しコマンドだったと思う。

    だから、桐10で初めて使用することになる。

    ちなみに、私は、DOSの頃に dBASE3Plus の[ON ERROR]コマンドを使ったことがある。

    [ON ERROR]も[エラー処理]も使い方はほぼ同じだ。

    コマンドの後に何も書かなければ解除されるのも同じ。

    エラーが発生したときに実行する手続きを定義するというのは一見便利そうだが、

    実はエラーにもさまざまな種類があるので気を付けなければいけない。

    まず、文法エラーに対して用いるのはNGだっ!。これは論外。

    なぜなら、文法エラーが発生するということは、プログラムの信頼性が低いという意味だからだし、

    さらにデバッグも出来なくなってしまいます。

    また、使用するファイルがディスクに存在しなかった場合の判定に使用するのもNGだっ!。

    これは、#ファイルサイズという関数で判定するのが確実なのでありますゾ。

    じゃあ、どんな時につかうのか???

    老婆心ながら、実に使い道が限られたコマンドだという認識が必要だと思いますよ。

    私は、DOSの頃の dBASE3Plus で、プリンタが印字可能か否か調べるために使用した。

    つまり基本的には装置のエラーに対して有効だと思う次第。

    だから、(詳しく見ていないが)桐10ヘルプの例示は不適当かもしれないよ。
引用返信 [メール受信/OFF] 削除キー/
■9290 / inTopicNo.5)  Re[4]: 桐9から桐10へ変更した場合
□投稿者/ たゆー -(2015/08/28(Fri) 00:07:55)
    いろいろ参考になるご返事ありがとうございます。

    いつも思うのですが、なんでも不自由を感じたとき、世界中で私が最初に
    不自由を感じたのではなく、誰かがその前に不自由を感じてると思います。し、
    それに対する何かの対応があったりします。

    ご返事を参考に、少し思考させていただきます。
    どうもありがとうございました



引用返信 [メール受信/OFF] 削除キー/
■9291 / inTopicNo.6)  Re[5]: 桐9から桐10へ変更した場合
□投稿者/ ONnoji -(2015/08/28(Fri) 10:17:45)
    蛇足ですが

    ■桐10のフォームのオブジェクト名の全角半角に関して

    (1)フォームの[オブジェクトの属性]の[フォーム開始]にチェック印がある場合、

    V9から変換したフォーム( .wfx ) と
    V10で新規作成したフォーム( .wfx ) のどちらでも

    手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
    手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
    手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
    手続き定義開始 フォーム::フォーム開始(長整数 &表番号)

    のどれでも動く。

    つまり、フォームのオブジェクト名が全角であっても半角であっても動く。

    ※ちなみに、イベント名は、もともと全角半角の違いを区別しない。

    以上はソフトランディングというべきでしょう。


    ところが、メソッドやコマンドのレベルでは、オブジェクト名が違うと叱られる。

    (2A)フォームオブジェクトのメソッドの場合、

    V9から変換したフォーム( .wfx )では、

     ○メソッド呼び出し @フォーム.変数変更( )
     ×メソッド呼び出し @フォーム.変数変更( )

    V10で新規作成したフォーム( .wfx )では、

     ×メソッド呼び出し @フォーム.変数変更( )
     ○メソッド呼び出し @フォーム.変数変更( )

    となる。

    (2B)フォームオブジェクトに対するオブジェクト操作コマンドの場合

    V9から変換したフォーム( .wfx )では、

     ○オブジェクト操作 @フォーム{ フォーム開始 = 1 }
     ×オブジェクト操作 @フォーム{ フォーム開始 = 1 }

    V10で新規作成したフォーム( .wfx )では、

     ×オブジェクト操作 @フォーム{ フォーム開始 = 1 }
     ○オブジェクト操作 @フォーム{ フォーム開始 = 1 }

    となる。

    ※ちなみに、属性名は、もともと全角半角の違いを区別しない。

    ということで、メソッドやコマンドのレベルでは、ハードランディングなのです。

    ■ソフトランディング可能だったのではないか

    このハードランディングの件は、そういうものですと言ってしまえばそれまでですが、

    私の個人的な感想ですが、これはソフトランディング可能だったのではないかと思うのです。

    今回のバージョンアップで全角に変更したフォーム関係のオブジェクトの数は10個以下でしょ。

    フォーム
    ワークスペース
    フォームヘッダ部
    フォーム明細部
    フォームフッタ部
    フォーム操作バー
    グループ操作バー
    レコード操作バー
    行セレクタ

    これくらいだったら、全角のオブジェクトに読み替えが出来るんじゃないですかね。

    ちょっと残念に思った次第です。


    ■SI(VAR)など

    アプリケーション業者の場合には、エディタで「えい!」と置換するのでそれほど問題ではないかもしれません。

    しかし、桐9の一括・イベントをコピペして動かない場合が起きるのですから、閉口する業者もあるかもしれません。

    もっとも、オブジェクト名の件に加えて、ファイル名拡張子が変更された件もあるので、

    なおさら、エディタで「えい!」と置換する業者が多いのかもしれません。


    <追伸>

    ドラッグ&ドロップの動作などを作る場合、フォームの該当イベントのON/OFFを動的に行いますよね。

    だから、フォームを対象にしたオブジェクト操作は頻繁に行います。

    また、ユーザ定義のオブジェクトを操作する場合などは、

    事前にオブジェクトが存在するか[オブジェクト検査]メソッドを実行しますよね。

    この時のメソッドの対象は次の通り、

    @フォーム|@フォーム明細部|@フォームフッタ部|@フォームヘッダ部|@ワークスペース

    つまり、全滅なんです。ハハハハha。

    当方は、フォームオブジェクトが全角か半角か判定する方法が判ったので、

    これにより、フォームに対するオブジェクト操作・メソッドを一般手続きなどにして対応する予定です。


引用返信 [メール受信/OFF] 削除キー/
■9292 / inTopicNo.7)  Re[6]: 桐9から桐10へ変更した場合
□投稿者/ たゆー -(2015/08/28(Fri) 18:15:11)
    >今回のバージョンアップで全角に変更したフォーム関係のオブジェクトの数は10個以下でしょ。
    >
    >フォーム
    >ワークスペース
    >フォームヘッダ部
    ・・・・・中略
    >行セレクタ
    >
    >これくらいだったら、全角のオブジェクトに読み替えが出来るんじゃないですかね。>
    >ちょっと残念に思った次第です。

    いえ、まだ時間はありますので、今後でも対応してほしいですね

    桐10は、プログラム作成担当者が違うのか、最初からちぐはぐなスタートでしたね


引用返信 [メール受信/OFF] 削除キー/
■9293 / inTopicNo.8)  Re[7]: 桐9から桐10へ変更した場合
□投稿者/ ONnoji -(2015/08/28(Fri) 20:28:04)
    2015/08/28(Fri) 21:20:06 編集(投稿者)
    2015/08/28(Fri) 20:28:53 編集(投稿者)

    > いえ、まだ時間はありますので、今後でも対応してほしいですね

    [オブジェクト操作]コマンドでエラーするか否かで、

    フォーム関連のオブジェクト名の全角半角の識別できるので、今さらの対応は必要ないと思いますよ。

    桐10の利用者としては、リリース後に仕様を変えられる方がウンザリなんですよね。

    > 桐10は、プログラム作成担当者が違うのか、最初からちぐはぐなスタートでしたね

    一般的には初期不良は仕方ないとしても、現在の桐10はまあまあ安定してますね。

    <追伸>

    フォーム関連のオブジェクト名の全角半角の識別問題ですが、

    同様の悩みを持っている人がたくさんいると思うので、

    このスレッドで[たゆー]さんなりの解決策を例示してください。



引用返信 [メール受信/OFF] 削除キー/
■9294 / inTopicNo.9)  Re[8]: 桐9から桐10へ変更した場合
□投稿者/ たゆー -(2015/08/29(Sat) 14:06:57)
    今回のエラーの原因は、「フォーム」オブジェクト名に「半角・全角」があるため、
    「メソッド呼び出し」をライブラリで使用するとエラーになります

    そこで、エラーになるのなら、「エラー処理」で対応することにします

    ・方法はいろいろあると思いますがとにかく一番簡単な方法で

    ○サンプルは、桐HELPの
    ・メソッド呼び出し 編集選択位置取得・・・このなかの
    「選択されている文字列を大文字にします。」を利用します

    変数宣言 整数{ &pos, &cnt }, 文字列{ &str }
    メソッド呼び出し @メモ.編集選択位置取得( &pos, &cnt )
    if ( &cnt > 0 )
      メソッド呼び出し @メモ.編集文字列取得( &str )
      &str = #部分列( &str, 1, &pos -1 ) + \
          #uc2( #部分列( &str, &pos, &cnt ) ) + \
          #部分列( &str, &pos + &cnt )
      メソッド呼び出し @メモ.編集文字列設定( &str )
    end

    ただ、この例では、オブジェクト名が「@メモ」に固定されてますので
    ライブラリーでの使用はできません(項目名が非固定のため)

    そこで、そのまえに1行追加します
    「メソッド呼び出し @フォーム.フォーカスオブジェクト取得(&focus)」を挿入します
    このとき、「全角・半角」のエラーが起きます

    そこで、さきほどのプログラムを修正します

    変数宣言 整数{ &pos, &cnt }, 文字列{ &str,&focus }
    エラー処理 手続き名 = オブジェクト取得
      メソッド呼び出し @フォーム.フォーカスオブジェクト取得(&STR)
    エラー処理
    &focus=&STR
    メソッド呼び出し &focus.編集選択位置取得( &pos, &cnt )
    if ( &cnt > 0 )
      メソッド呼び出し &focus.編集文字列取得( &str )
      &str = #部分列( &str, 1, &pos -1 ) + \
          #uc2( #部分列( &str, &pos, &cnt ) ) + \
          #部分列( &str, &pos + &cnt )
      メソッド呼び出し &focus.編集文字列設定( &str )
    end

    手続き定義開始 オブジェクト取得()
      メソッド呼び出し @フォーム.フォーカスオブジェクト取得(&STR)
    手続き定義終了

    これで、「フォーム」のときは、エラーが出ないためそのまま項目名の取得が
    可能ですが、「フォーム」のときは、エラーにりエラー処理で対応します

    これで、フォームの「全角・半角」のどちらの場合でも対応可能です

    今回は
    ・ライブラリでの使用
    ・項目名が非固定
    ・できるだけ簡単に対応する
    ・余分な定義はしない・・・
    これで、いけそうです


引用返信 [メール受信/OFF] 削除キー/
■9295 / inTopicNo.10)  Re[9]: 桐9から桐10へ変更した場合
□投稿者/ ONnoji -(2015/08/29(Sat) 15:16:09)
    2015/08/29(Sat) 15:21:11 編集(投稿者)

    > 変数宣言 整数{ &pos, &cnt }, 文字列{ &str,&focus }
    > エラー処理 手続き名 = オブジェクト取得
    >   メソッド呼び出し @フォーム.フォーカスオブジェクト取得(&STR)
    > エラー処理
    > &focus=&STR
    > メソッド呼び出し &focus.編集選択位置取得( &pos, &cnt )
    > if ( &cnt > 0 )
    >   メソッド呼び出し &focus.編集文字列取得( &str )
    >   &str = #部分列( &str, 1, &pos -1 ) + \
    >       #uc2( #部分列( &str, &pos, &cnt ) ) + \
    >       #部分列( &str, &pos + &cnt )
    >   メソッド呼び出し &focus.編集文字列設定( &str )
    > end
    >
    > 手続き定義開始 オブジェクト取得()
    >   メソッド呼び出し @フォーム.フォーカスオブジェクト取得(&STR)
    > 手続き定義終了


    老婆心ですが、

    何回も、[エラー処理]コマンドを実行しないで、※一度実行すれば十分
    名札メインで、一回だけ[エラー処理]コマンドを実行して、
    (1)参照フラグを立てる方法か、
    (2)オブジェクト名を代入した局所変数の値を全角にする方法をお勧めしますよ。

    オブジェクト名を @ほにゃらら のようにリテラル文字で指定しないで、
    オブジェクト名を &変数名   のように変数で指定する方が柔軟に記述できます。


    (1)参照フラグを立てる方法 局所変数:&全角フラグ と 自動変数:&オブジェクト名 の例

    名札 メイン
     変数宣言 局所,整数{ &全角フラグ = 0 }

     条件 ( #バージョン番号 >= 10 ) エラー処理 手続き名 = "prc全角フラグを立てる"
     オブジェクト操作 @フォーム{ &標準偏差 = フォーム開始 } /* 組み込み変数:&標準偏差 に属性値を代入 */
     条件 ( #バージョン番号 >= 10 ) エラー処理 /* 解除を忘れずに */

     :




    手続き定義開始 prc全角フラグを立てる( )
     &全角フラグ = 1 /* フラグを立てる */
    手続き定義終了


    手続き定義開始 ほげほげ( )
     変数宣言 自動,文字列{ &オブジェクト名 = "フォーム" }


     条件 ( &全角フラグ = 1 ) &オブジェクト名 = #全角( &オブジェクト名 )
     メソッド呼び出し &オブジェクト名.フォーカスオブジェクト取得(&STR)

    手続き定義終了



    (2)オブジェクト名を代入した局所変数の値を全角にする方法 局所変数:&オブジェクト名 の例

    名札 メイン
     変数宣言 局所,整数{ &全角フラグ = 0 }
     変数宣言 局所,文字列{ &オブジェクト名 = "フォーム" }

     条件 ( #バージョン番号 >= 10 ) エラー処理 手続き名 = "prcエラーなら全角に変換"
     オブジェクト操作 @フォーム{ &標準偏差 = フォーム開始 } /* 組み込み変数:&標準偏差 に属性値を代入 */
     条件 ( #バージョン番号 >= 10 ) エラー処理 /* 解除を忘れずに */

     :




    手続き定義開始 prcエラーなら全角に変換( )
     &オブジェクト名 = #全角( &オブジェクト名 )
    手続き定義終了


    手続き定義開始 ほげほげ( )

     メソッド呼び出し &オブジェクト名.フォーカスオブジェクト取得(&STR)

    手続き定義終了


引用返信 [メール受信/OFF] 削除キー/
■9296 / inTopicNo.11)  Re[10]: 桐9から桐10へ変更した場合
□投稿者/ たゆー -(2015/08/29(Sat) 17:28:31)
    そうですね。方法はご紹介のほうがいいかも知れませんが
    利用する人が、できるだけ簡単に利用できるようにとのことで

    1.利用したいフォームに、コマンドボタンを作成
      手続き実行:そのライブラリーの定義名記入
    2.そのフォームのイベントに「ライブラリ *****cmx」

    たったこれだけで利用できますので、今回はこちらを利用になりました。



引用返信 [メール受信/OFF] 削除キー/
■9299 / inTopicNo.12)  [エラー処理]コマンド
□投稿者/ たゆー -(2015/08/31(Mon) 13:47:24)
    細かいはなしですが
    > 桐10で公開された[エラー処理]コマンド。
    > 私の記憶では、以前は隠しコマンドだったと思う。
    桐9のどのバージョンからかわわかりませんが、少なくとも
    「桐9s」では正式にヘルプファイルに紹介されてます

    ちなみに、桐9sのヘルプは
    ・お読みください
    ・移行ガイド
    ・桐の起動と終了・・・以下略
    桐10のヘルプは
    ・お読みください
    ・逆引き目次
    ・桐の起動と終了・・・以下略
    となっていて、「移行ガイド」がありません

    桐9が「桐9-2004、桐9-2005、桐9-2006、桐9-2007、桐9-2009、桐9-2012」と
    あまりにも頻繁に更新され、ユーザーが困るといけないのでヘルプを作成したと
    思いますが、桐9の細かい更新より「桐9**」が、「桐10」に変更される方が
    もっと困ると思います。特に、今回のようなことも発生したときなど
    ヘルプの充実もお願いしたいですね

引用返信 [メール受信/OFF] 削除キー/
■9301 / inTopicNo.13)  Re[5]: [エラー処理]コマンド
□投稿者/ ONnoji -(2015/08/31(Mon) 13:56:20)
    >>桐10で公開された[エラー処理]コマンド。
    >>私の記憶では、以前は隠しコマンドだったと思う。
    > 桐9のどのバージョンからかわわかりませんが、少なくとも
    > 「桐9s」では正式にヘルプファイルに紹介されてます

    なるほど、桐9s からでしたか!。

    当方は、桐9s をスルーしたので、まったくワカリマセンでした。

引用返信 [メール受信/OFF] 削除キー/
■9315 / inTopicNo.14)  Re[1]: 桐9から桐10へ変更した場合
□投稿者/ 尾形 -(2015/09/03(Thu) 10:45:38)
    どうも、こんにちは

    大変ありがたく、参考にさせていただいています


    K3の見解が気になります (^^;

    #置換で書き換えてくださいなのかな?



引用返信 [メール受信/OFF] 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/

HOME HELP 新規作成 新着記事 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -