本文の一部を選択してSubjectにするマクロNo.21951
megu さん 05/03/04 10:35
 
こんにちは。いつも鶴亀メールとマクロ作成者の皆様のマクロにお世話に
なっています。
以前、鶴亀の会議室において表記の内容のマクロを見て、
重宝していたのですが、この度、パソコンを再セットアップしてしまい、
このマクロをバックアップするのを忘れていました。
過去ログも探し方が悪いのか、それらしき発言が見当たりません。
よろしければ、どなたか作って頂けないでしょうか?

マクロの動作は、

1 本文の中の一部を選択し、マクロ実行
2 すると、
 1)選択範囲のみSubjectにする
 2)行全体をSubjectにする
 3)キャンセル
と、いうダイアログが出てくるというイメージです。

自分で作成してみようとマクロ記録をしてみたのですが、
うまくいきませんでした。(>_<)
つたない文章でわかっていただけるかどうか、自信がありませんが、
よろしくお願いします。

なお、この会議室でなかった場合ご指摘ください。


環境 WIN98SE 鶴亀Ver 4.08test3

[ ]
RE:21951 本文の一部を選択してSubjectにNo.21953
どみにか さん 05/03/04 12:26
 
こんにちは。どみにかと申します。

未熟ながら、コメントつけさせていただきます。

> 1)選択範囲のみSubjectにする
> 2)行全体をSubjectにする
> 3)キャンセル
>と、いうダイアログが出てくるというイメージです。

ダイアログじゃないですが、こんなんでどうでしょ?
いちおう簡単な動作確認はしてます。

------------------------------
ProcMain:
  call SubStart;                // 開始処理
  call SubGetString;            // Subjectにセットする候補文字列の取得
  if(##return<=0) call SubEnd;  // 取得できなければ終了処理
  call SubSelectSubject;        // 選択範囲 or 行全体の選択処理
  call SubSetSubject;           // Subjectセット処理
  call SubEnd;                  // 終了処理
endmacro;


SubStart:
  #BROWSE   = browsemode;       // 閲覧モードの定義
  if(#BROWSE) browsemodeswitch; // 閲覧モード切替
  $SearchBuf = searchbuffer;
  #SearchOpt = searchoption;
  $Terget = "Subject:";
  #StartX = x;  #StartY = y;
  $Selection = ""; $LineString = "";
  $ErrMsg = "";
return;

SubEnd:
  if($ErrMsg!="") message $ErrMsg;
  moveto #StartX, #StartY;
  if(#BROWSE) browsemodeswitch; // 閲覧モード切替
  setsearch $SearchBuf, #SearchOpt;
  endmacro;
return;

SubGetString:
  if(selecting){  
    if(seltopy==selendy)  { $Selection = gettext(seltopx, seltopy, selendx,
selendy); }
    else                  { $ErrMsg = "BOX選択には対応していません。"; call
SubEnd;   }
  }
  golineend;    
  $LineString = gettext(0, y, x, y);
  moveto #StartX, #StartY;
return strlen($Selection + $LineString);

SubSelectSubject:
  if($Selection=="")  { menu "行全体をSubjectにする", "キャンセル";
                        if(result==0 || result==2)  { call SubEnd;          
      }
                        else                        { $NewSubject = $LineStr
ing;  }}
  else                { menu "選択文字をSubjectにする", "行全体をSubjectにす
る", "キャンセル";
                        if(result==0 || result==3)  { call SubEnd;          
      }
                        else if(result==1)          { $NewSubject = $Selecti
on;   }
                        else                        { $NewSubject = $LineStr
ing;  }}
return;

SubSetSubject:
  moveto 0, -999;
  searchdown $Terget;
  golineend; beginsel; golinetop;
  insert $NewSubject;
  escape; endsel;
return;
-------------------------------

DLLを使わない方向で考えてみたんですが、やっぱダイアログがいいですかね?
BOX選択はとりあえずエラー扱いしてます。

どうでしょ・・・σ(^_^;)

[ ]
RE:21953 本文の一部を選択してSubjectにNo.21955
megu さん 05/03/04 13:08
 
// どみにかさん今日は。
// どみにかさんの 05/3/4 12:26:53 頃のメール
// 「hidesoft.8:21953| RE 21951 本文の一部を選択してSubjectにするマクロ
について」から引用しました。

どうもありがとうございました。やってみましたが
エラーコード47 式がおかしいです。とでます。
どこか、やり方が間違っているのでしょうか?

いただいたマクロをコピーして、マクロファイルにしただけなんですが・・・
本文を選択してマクロ実行できませんでした。(;_;)

[ ]
RE:21955 本文の一部を選択してSubjectにNo.21958
秀まるお2 さん 05/03/04 13:25
 
 会議室の書き込みが76桁で改行されてしまってるようです。

 以下の内容をコピーして使えば大丈夫みたいです。(勝手ながら途中の改行/空白
を整形してしまいました)

ProcMain:
  call SubStart;                // 開始処理
  call SubGetString;            // Subjectにセットする候補文字列の取得
  if(##return<=0) call SubEnd;  // 取得できなければ終了処理
  call SubSelectSubject;        // 選択範囲 or 行全体の選択処理
  call SubSetSubject;           // Subjectセット処理
  call SubEnd;                  // 終了処理
endmacro;


SubStart:
  #BROWSE   = browsemode;       // 閲覧モードの定義
  if(#BROWSE) browsemodeswitch; // 閲覧モード切替
  $SearchBuf = searchbuffer;
  #SearchOpt = searchoption;
  $Terget = "Subject:";
  #StartX = x;  #StartY = y;
  $Selection = ""; $LineString = "";
  $ErrMsg = "";
return;

SubEnd:
  if($ErrMsg!="") message $ErrMsg;
  moveto #StartX, #StartY;
  if(#BROWSE) browsemodeswitch; // 閲覧モード切替
  setsearch $SearchBuf, #SearchOpt;
  endmacro;
return;

SubGetString:
  if(selecting){  
    if(seltopy==selendy)
        { $Selection = gettext(seltopx, seltopy, selendx, selendy); }
    else
        { $ErrMsg = "BOX選択には対応していません。"; call SubEnd;   }
  }
  golineend;    
  $LineString = gettext(0, y, x, y);
  moveto #StartX, #StartY;
return strlen($Selection + $LineString);

SubSelectSubject:
  if($Selection=="")  { menu "行全体をSubjectにする", "キャンセル";
                        if(result==0 || result==2)  { call SubEnd;
      }
                        else            { $NewSubject = $LineString;  }}
  else                { menu "選択文字をSubjectにする",
                             "行全体をSubjectにする", "キャンセル";
                        if(result==0 || result==3)  { call SubEnd;
      }
                        else if(result==1){ $NewSubject = $Selection; }
                        else              { $NewSubject = $LineString;}}
return;

SubSetSubject:
  moveto 0, -999;
  searchdown $Terget;
  golineend; beginsel; golinetop;
  insert $NewSubject;
  escape; endsel;
return;


[ ]
RE:21955 本文の一部を選択してSubjectにNo.21959
どみにか さん 05/03/04 14:10
 
どみにかです。

>会議室の書き込みが76桁で改行されてしまってるようです。
>以下の内容をコピーして使えば大丈夫みたいです。(勝手ながら途中の改行/空白
>を整形してしまいました)

秀まるお2さん、サポートありがとうございます。
お手数おかけしました。
1行が長すぎたですね。
行数にばかり気がいって、まったく考慮していなかったです。
meguさんにも、ご迷惑を。。。m(_ _)m

ついでですが、
「Subject」ヘッダが見つからなかった場合の処理を追加しました。
さっきのものだと、万が一、手動で削除されていた場合におかしなことになりますの
で。
一番下にある「SubSetSubject:」行から「return;」の行までを、
以下のように置き換えてください。

------------------------------------
SubSetSubject:
  moveto 0, -999;
  ##TempX = x;  ##TempY = y;
  searchdown $Terget;
  if((x==##TempX && y==##TempY) || (y>=0)){
      $ErrMsg = "Subjectヘッダが見つかりませんでした。";
      call SubEnd;
  }
  golineend; beginsel; golinetop;
  insert $NewSubject;
  escape; endsel;
return;
------------------------------------

[ ]
RE:21959 本文の一部を選択してSubjectにNo.21961
megu さん 05/03/04 16:17
 
// どみにかさん今日は、m.kanemuraです。
// どみにかさんの 05/3/4 14:10:59 頃のメール
// 「hidesoft.8:21959| RE 21955 本文の一部を選択してSubjectにするマクロ
について」から引用しました。

>meguさんにも、ご迷惑を。。。m(_ _)m
>
いえいえ。私がマクロがわからないばかりに、お手数をおかけしました。
また、秀まるおさんもありがとうございました。

おかげですごく助かります。
本当にありがとうございました。

[ ]