◀ANSI版開発トップへ
  • 1281 マクロ
    • 1283 Re:マクロ
      • 1288 Re2:マクロ
    • 1304 Re:マクロ
      • 1305 Re2:マクロ
        • 1308 Re3:マクロ
    • 1312 Re:マクロ
      • 1313 Re2:マクロ
        • 1315 Re2:マクロ
          • 1316 Re2:マクロ
            • 1322 PPA.DLLはちょっと...
              • 1323 Re:PPA.DLLはちょっと...
                • 1324 Re:PPA.DLLはちょっと...
  • [1281] マクロ やざき 2002年01月22日 23:57

    マクロをいじっています。
    CKeyMacroMgrが、CShareDataにありますが、これってなぜでしょう?

    CEditDocに持たせたらどうかと思うのですが。

    もし、CShareDataにあるのが、あるウィンドウで記録したキーマクロを、別のウィンドウで使うためであれば、
    記録したキーマクロは、そのウィンドウでしか使えなくて、別のウィンドウで使うには、保存して読み込んでもらうってことにしたら
    だめでしょうか。

    最終的にはCSMacroMgrとあわせて、今みたいに、あっちではできるけど、こっちではできないよ。
    ってことが無いようにしちゃいたいんだけど。。。いかがでしょう?
    • [1283] Re:マクロ げんた 2002年01月23日 01:14

      ▼ やざきさん
      > CKeyMacroMgrが、CShareDataにありますが、これってなぜでしょう?
      CShareDataでなくてDLLSHAREですね。たぶんはじめから。

      DLLSHAREだとコンストラクタが動かないというもっと重大な問題があります。だからここから出した方がいいというのには同意。

      > CEditDocに持たせたらどうかと思うのですが。
      本来はドキュメントとマクロは密接に関係すべきではないのでCEditDocというのはなんかやな感じですが...
      将来的に1プロセス複数ドキュメントを目指したいと妄想しているので。

      > 記録したキーマクロは、そのウィンドウでしか使えなくて
      これはちょっとねぇ...

      共通メモリに入れるのはやめて、記録終了時に別の共有メモリを取るというのはうまくいかないかな?
      他のウィンドウがまだメモリを開いているときに新規に共有メモリを作るためには名前を変えないとうまくいかないですし、結構複雑かな?

      > 最終的にはCSMacroMgrとあわせて
      統一する案には賛成です。
      • [1288] Re2:マクロ やざき 2002年01月23日 01:58

        ▼ げんたさん
        > > 最終的にはCSMacroMgrとあわせて
        > 統一する案には賛成です。

        どもども~。
        確かにCEditDocに入れるのは気持ち悪いといえば気持ち悪いですね。
        でもまぁそのあたりの整理はまた後ほどやるとして。。。

        こういうのはどうでしょう?(ってもう実装してたりするけど)

        キーマクロは、デフォルトでマクロ保存用フォルダにRecKey.macというファイルを作るようにします。
        DLLSHARE(共通メモリ)に、そのファイル名(今のところRecKey.macに固定)を入れるようにします。

        で、キーマクロを実行するときは、DLLSHAREにかかれているファイル(RecKey.mac)を読み込んで実行する。
        そうすれば、共通メモリに入れておくのはCKeyMacroMgrではなくて、ファイル名だけになってグー。

        こうしておけば、「記録したキーマクロが、そのウィンドウでしか使えない」という制限はなくなるし、
        CKeyMacroMgrにどんとかまえたメモリ領域(下記)

        #define MAX_STRLEN 70
        #define MAX_KEYMACRONUM 10000
        KeyMacroData m_pKeyMacroDataArr[MAX_KEYMACRONUM];
        char m_szKeyMacroDataArr[MAX_KEYMACRONUM][
        MAX_STRLEN];

        を、リストにして、メモリの節約もできるという具合。
        今のところうまく動いているみたいです。

        今日はこの辺にして、また後日CSMacroMgrと混ぜ合わせに挑戦してみます。では。
    • [1304] Re:マクロ やざき 2002年01月23日 23:49

      ・CSMacroMgr
       登録済みマクロ20個を管理。
       実際の「実行」「読み込み」は、次のCKeyMacroMgrに委譲。

      ・CKeyMacroMgr
       ひとつ(一式)のキーマクロを管理。
       (次のCMacro(マクロコマンド)をつなげたものを管理。)
       マクロファイルを「読み込み」、CMacroの生成を担当する。
       実際の「実行」「保存」は、次のCMacroに委譲。

      ・CMacro
       マクロコマンド(InsTextひとつなど)を管理。
       「実行」「保存」を行う。

      ようにしました。
      保存をCMacroでやるか、CKeyMacroMgrでやるか、
      それに読込をCMacroでやるか、CKeyMacroMgrでやるかが
      相談のしどころですかねぇ。
      • [1305] Re2:マクロ げんた 2002年01月24日 00:12

        ▼やざきさん
        >・CSMacroMgr
        >・CKeyMacroMgr
        >・CMacro
        >ようにしました。
        検討すべきクラスを1つ忘れていますよ.
        CSMacroMgr::Macro1 というマクロを「1つ」管理する(貧弱な)クラスがあります.(structだけど一応クラスね)

        これはCMacroに統合した方がいいかも.

        >保存をCMacroでやるか、CKeyMacroMgrでやるか、
        >それに読込をCMacroでやるか、CKeyMacroMgrでやるかが
        1マクロに関することはCMacroだけど,ファイル処理までやらせるのは荷が重い...ってことですよね.

        ファイルのopen/close処理はCKeyMacroManagerで行い,実際の文字列化はCMacroで行うのはどうですか.

        ofstream fp( "macro.mac" );
        fp << macros[n];

        if( !fp ){
        error handling
        }
        --
        ifstream fp( "macro.mac" );
        macros[n].clear();
        fp >> macros[n]

        if( !macros[n].ready() ){
        error handling
        }
        --
        ostream& operator<<( ostream&, CMacro& );
        istream& operator>>( istream&, CMacro& );

        って感じで.わかってもらえました?
        • [1308] Re3:マクロ やざき 2002年01月24日 00:28

          ▼ げんたさん
          > ▼やざきさん
          > >・CSMacroMgr
          > >・CKeyMacroMgr
          > >・CMacro
          > >ようにしました。
          > 検討すべきクラスを1つ忘れていますよ.
          > CSMacroMgr::Macro1 というマクロを「1つ」管理する(貧弱な)クラスがあります.(structだけど一応クラスね)
          >
          > これはCMacroに統合した方がいいかも.

          ああ、削除しました。
          というかCMacroに統合かな。Readyフラグだけ、CMacroで仮採用しました。
          で、できあがったのが前記の3つのクラスです。


          > ファイルのopen/close処理はCKeyMacroManagerで行い,実際の文字列化はCMacroで行うのはどうですか.

          とりあえずその案ですすめてみます。
    • [1312] Re:マクロ hor 2002年01月24日 11:16

      ▼ やざきさん
      > マクロをいじっています。

      ご苦労様です。

      マクロで扱える引数を CEditView::HandleCommand にあわせて最大4っつにしていただけると
      置換や、外部コマンド実行のオプションを扱えるように変更するのも難しくないかな、と思うのですが
      …いかがでしょう?
      • [1313] Re2:マクロ やざき 2002年01月24日 11:41

        ▼ horさん
        > ▼ やざきさん
        > > マクロをいじっています。
        >
        > ご苦労様です。
        >
        > マクロで扱える引数を CEditView::HandleCommand にあわせて最大4っつにしていただけると
        > 置換や、外部コマンド実行のオプションを扱えるように変更するのも難しくないかな、と思うのですが
        > …いかがでしょう?

        をを、グッドアイディアですね。
        いま内部でも引数ひとつしか扱えないので、できる限り扱えるようにしてみます。
        • [1315] Re2:マクロ げんた 2002年01月24日 12:36

          ▼やざきさん
          >いま内部でも引数ひとつしか扱えないので、できる限り扱えるようにしてみます。
          本当はHandleCommandも4つではなくて可変長引数が扱える構造の方がいいんでしょうけどねぇ.配列+要素数を渡すとか.
          ポインタも無理矢理CASTではなくて,文字と数字を区別できる構造だといいのでしょうが.

          --
          全部見直すなら制御構文と変数...は簡単ではないか.
          フリーで使えるスクリプトエンジンを探してはいるのですが,なかなか評価できていません.それにGPLのものはライセンス上使えないし.(LGPLはOK)
          • [1316] Re2:マクロ みく 2002年01月24日 23:39

            >タイトル: Re2:マクロ
            >発言者: げんた
            >フリーで使えるスクリプトエンジンを探してはいるのですが,なかなか評価できていません.それにGPLのものはライセンス上使えないし.(LGPLはOK)

            PPA.DLL。フリー。
            日本人が作ってて活動中というのがいい。
            • [1322] PPA.DLLはちょっと... げんた 2002年01月25日 08:56

              ▼PPADLL.TXTより転載
              > オリジナルPPAとの違いについて
              >
              > 1)ユーザ定義関数・手続きへの引数は32個までしか使用出来ま
              > せん。それを越えるとエラーとなります。

              ちょっと足り無くないですか?
              全て CallSakuraFunc( "機能名", 引数... ) とすれば1つで十分なのかもしれませんが,使いづらそう.
              • [1323] Re:PPA.DLLはちょっと... hor 2002年01月25日 09:47

                ▼ げんたさん
                > ▼PPADLL.TXTより転載
                > > オリジナルPPAとの違いについて
                > >
                > > 1)ユーザ定義関数・手続きへの引数は32個までしか使用出来ま
                > > せん。それを越えるとエラーとなります。
                >
                > ちょっと足り無くないですか?
                > 全て CallSakuraFunc( "機能名", 引数... ) とすれば1つで十分なのかもしれませんが,使いづらそう.

                引数の制限が32個…充分じゃないですか?
                ~~~~
                • [1324] Re:PPA.DLLはちょっと... げんた 2002年01月25日 10:43

                  ▼horさん
                  >引数の制限が32個…充分じゃないですか?
                  >~~~~
                  失礼.ユーザ定義関数の数が32個と勘違いしていました.