Miyamiyaの『★MMエディタ』掲示板1 2012年04/30     戻る

re:置換マクロ 投稿者:ヒョン
2012年4月30日(月)13時42分

宮崎さん、こんにちは、お世話になります。

分かりました。

有り難うございました。

今後とも宜しくお願い致します。

re:置換マクロ 投稿者:Miyamiya
2012年4月28日(土)10時56分

ヒョンさんへ。
改行をまたいでの変換は難しいです。
改行を除いて1行に連結してから実行してください。

re:置換マクロ 投稿者:ヒョン
2012年4月28日(土)00時41分

宮崎さん、こんにちは、早速に有り難うございました。

教示頂きましたマクロでは、\textbfと\ForestGreenを同時に抜き去ることが出来
ませんでしたので、以下のように二段階で実行しました。

SetRep(0x444);
SetFindS("\\\\textbf{\\([^}]+\\)}");
SetRepS("\\1");
Replace();
SetFind(fstat);
SetRep(rstat);

SetRep(0x444);
SetFindS("\\\\ForestGreen{\\([^}]+\\)}");
SetRepS("\\1");
Replace();
SetFind(fstat);
SetRep(rstat);

それで、追加ですが、例文からTeXコマンドを抜き去る際、以下のように改行が入
っていた場合には、上記二つのマクロは機能しません。

たとえば、以下のような例です。

\ForestGreen{(5)根本的には、地域福祉を地域から再構
築することが大切です。}

\textbf{(5)根本的には、地域福祉を地域から再構
築することが大切です。}

改行が入っていた場合の対処法がありましたらお願いします。

re:置換マクロ 投稿者:Miyamiya
2012年4月27日(金)11時58分

ヒョンさんへ。
TeXコマンドを抜き取って後に残す部分を ( ) で囲んでください。
以下のマクロを使ってみてください。

------------------------------------------------------------------
main()
{
SetRep(0x444);
SetFindS("\\\\textbf{\\\\ForestGreen{\\([^}]+\\)}}");
SetRepS("\\1");
Replace();
}
------------------------------------------------------------------


置換マクロ 投稿者:ヒョン
2012年4月27日(金)03時22分

宮崎さん、こんにちは、いつもお世話になります。

\textbf{\ForestGreen{(5)根本的には、地域福祉を地域から再構
築することが大切です。}}

\textbf{築する}

以上の文面から、TeXコマンドを抜き取りたいのですが、

SetRep(0x444);
SetFindS("\\\\textbf{\\([^}]+\\)}");
SetRepS("\\1");
Replace();
SetFind(fstat);
SetRep(rstat);

が、おそらく、\textbf{築する}、から、\textbf{}を抜き取っていると思う
のです。

それで、それを参考にして、上の部分の削除マクロを作ってみたのですが、
上手く動きません。


SetRep(0x444);
SetFindS("\\\\textbf{\\\\ForestGreen\\{[^}]+\\}}");
SetRepS("\\1");
Replace();
SetFind(fstat);
SetRep(rstat);

何処が間違っているのでしょうか?

宜しくご検討お願い致します。



re:MMエディタのポータブル化 投稿者:KOMA
2012年4月16日(月)22時50分

Miyamiya様
早速のご回答有難うございます。
了解致しました。

re:MMエディタのポータブル化 投稿者:Miyamiya
2012年4月16日(月)11時34分

KOMAさんへ。
MMエディタは、設定した内容をWindowsのレジストリへ保存していますので、
基本的にUSBメモリで使うのは無理です。

MMエディタのポータブル化 投稿者:KOMA
2012年4月14日(土)23時29分

MMエディタを愛用しています。
USBメモリに入れて持ち運べませんか?

re:ツールバーのメニューについて 投稿者:satoru
2012年3月15日(木)05時29分

宮崎様

お世話様でございます。

1.個々に設定した書式設定ファイルをアイコン登録
 承知致しました。

2.最前面を<実行><解除>と交互に
 私の早とちりだったようで、大変申し訳ありませんでした。問題なく交互に切り替わりました。

この度も、迅速な御教示ありがとうございました。
今後とも何卒よろしくお願いいたします。


re:ツールバーのメニューについて 投稿者:Miyamiya
2012年3月14日(水)13時12分

satoruさんへ。
1.個々に設定した書式設定ファイルをアイコンとして登録することはできないです。
2.このマクロ<最前面に>は、実行ごとに<最前面に>のモードがON.OFFするようになっていますので、
マクロを登録したボタンを押すごとに、最前面を<実行><解除>とならないでしょうか。

ツールバーのメニューについて 投稿者:satoru
2012年3月14日(水)09時56分

宮崎様

いつもお世話になっております。
ツールバーのメニューについて、2つ質問です。

1.
<表示設定の書式読み込み>は登録できますが、個々に設定した書式設定ファイルをアイコンとして登録できますでしょうか?
(例)メモ帳用.DS1 編集用.DS1 と2つの表示設定をツールバーアイコンのクリックで切り替えたい。

2.
マクロ<最前面に>をツールバーに登録しているのですが、ボタンを押すごとに、最前面を<実行><解除>とトグることは可能でしょうか?

最前面マクロは、以前ここのサポート掲示板にて御教示していただいたものを使用しております。

最前面用マクロ----------------------------------------------------

main()
{
HWND h = GetParent(GetParent(Handle()));
HINSTANCE lib = LoadLibrary("user32.dll");
FARPROC f = GetProcAddress(lib, "GetWindowLongA");
if(f){
if(Dff2(f, h, (void*)(-20)) & 0x8) SetWindowPos(h, -2, 0, 0, 0, 0, 0x3);
else SetWindowPos(h, -1, 0, 0, 0, 0, 0x3);
}
FreeLibrary(lib);
}
-----------------------------------

以上2点、御教示のほど、何卒よろしくお願いいたします。

re:windows7での互換性ファイル 投稿者:mi
2011年12月4日(日)09時32分

了解しました。
その上記方法でしばらくやってて見ます。

re:windows7での互換性ファイル 投稿者:Miyamiya
2011年12月3日(土)13時21分

miさんへ。
Windows7のUACモードでは、基本的には、編集したソフトの設定ファイルなどは、
program files 内とは別のフォルダに保存して管理されたほうがよいです。
どうしても program files 内に保存したい場合は、別のフォルダに保存後に
移動するか、ミラーサイトへ保存された状態で使うか、のどちらかになります。

英単語の先頭文字を大文字に変換 投稿者:satoru
2011年12月3日(土)09時46分

宮崎様 お世話様でございます。

改定版マクロ、どうもありがとうございました。
希望の通りの、完璧な英単語変換ができました!
この度のマクロも、末永く重宝させていたたぎます。

今後とも、どうぞよろしくお願いいたします。

re:windows7での互換性ファイル 投稿者:mi
2011年12月2日(金)21時21分

ソフトの設定ファイルなどを直接編集したい場合は、一度、違うフォルダに
保存後に本来のフォルダに移動するという方法しか無いと言う事でしょうか?

re:windows7での互換性ファイル 投稿者:mi
2011年12月2日(金)19時27分

ソフトの設定ファイルなどを直接編集したい場合は、一度、違うフォルダに
保存後に本来のフォルダに移動するという方法しか無いと言う事でしょうか?

re:windows7での互換性ファイル 投稿者:Miyamiya
2011年12月2日(金)12時50分

miさんへ。
Windows7のUACモードでは、基本的にユーザーが作成したファイルは program files
内のフォルダには保存できないような仕組みになっています。(ミラーサイトへ保存されます)
したがって、作成して保存されるファイルは program files以外のフォルダへ
保存するようにしてください。

re:英単語の先頭文字を大文字に変換 投稿者:Miyamiya
2011年12月2日(金)12時49分

satoruさんへ。
以下のマクロを使ってみてください。
記号等も区切りの文字として認識します。
変換する範囲を選択してから実行してください。

------------------------------------------------------------------
main()
{
if(Block() != 1 && Block() != 2)
return; // 範囲中でなければ NG
int aCode, cp = Cecp();
GoBlok();
Select(0);
while(1)
{
if(KbHit() == 0x1b) // [ESC]が押されたら中断
break;
aCode = Code();
if((aCode >= 'A' && aCode <= 'Z') || (aCode >= 'a' && aCode <= 'z'))
{
if(aCode >= 'a' && aCode <= 'z')
{
Del();
PutChr('A'+(aCode-'a'));
}
while(Tcode() > 5) // 1=改行,2=スペース,3=記号,4=全角ひらがな,5=全角文字
Right();
}
Right();
if(Cecp() >= cp || Tcode() < 1) // [END]
break;
}
}
------------------------------------------------------------------


windows7での互換性ファイル 投稿者:mi
2011年12月1日(木)18時51分

Windows7でprogram filesフォルダなどのUAC配下でファイルを保存する時など
互換性ファイルではなく通常ファイルとして保存する事は出来ないでしょうか?

エクスプローラでは表示されなく、表示させるように毎回操作を行わないと
駄目なので、正直面倒くさいです。

お忙しい中申し訳ないですが、よろしくお願い致します。

英単語の先頭文字を大文字に変換 投稿者:satoru
2011年12月1日(木)14時24分

宮崎様 早速の新規マクロでのご対応、ありがとうございます。

1つ筆問です。

paint-color や paint(color) のように、
単語と単語が記号(半角・全角問わず)でつながっている場合、記号の後ろにくる単語の頭が小文字のままでした。
他にも < >()+*-%.+ …等々の記号でつながっている場合でも、
なんとか個々の単語(aからzまでの範囲の英字になりますね)の頭が大文字になりませんでしょうか?

恐れ入りますが、御検討・御教示のほど、何卒よろしくお願いいたします。

re:英単語の先頭文字を大文字に変換 投稿者:Miyamiya
2011年12月1日(木)12時36分

satoruさんへ。
以下のマクロを使ってみてください。
選択範囲内の、英文の、個々の単語の<頭文字のみを大文字>に変換します。
変換する範囲を選択してから実行してください。

------------------------------------------------------------------
main()
{
if(Block() != 1 && Block() != 2)
return; // 範囲中でなければ NG
int aCode, cp = Cecp();
GoBlok();
Select(0);
while(1)
{
if(KbHit() == 0x1b) // [ESC]が押されたら中断
break;
aCode = Code();
if((aCode >= 'A' && aCode <= 'Z') || (aCode >= 'a' && aCode <= 'z'))
{
if(aCode >= 'a' && aCode <= 'z')
{
Del();
PutChr('A'+(aCode-'a'));
}
while(Tcode() > 2) //
Right();
}
Right();
if(Cecp() >= cp || Tcode() < 1) // [END]
break;
}
}
------------------------------------------------------------------


英単語の先頭文字を大文字に変換 投稿者:satoru
2011年11月30日(水)00時04分

宮崎様 いつも大変お世話になっております。

英文の、個々の単語の<頭文字のみを大文字>に変換することは可能でしょうか?

選択文字変換ツールでも、<大←→小>や<大→小>といった変換が可能ですが、
<頭文字のみ大文字変換>を、複数行選択→実行できると非常に助かるのですが…。

<例>
The barak hussein obama junior
  ↓ 
The Barak Hussein Obama Junior

以上、ご検討・ご教示のほど、何卒よろしくお願いいたします。

re:改行を無くす方法 投稿者:ヒョン
2011年11月11日(金)02時11分

宮崎さん、こんにちは。

早速に有り難うございました。

今後とも宜しくご指導お願い致します。

re:改行を無くす方法 投稿者:Miyamiya
2011年11月10日(木)17時49分

ヒョンさんへ。
以下のマクロを使ってみてください。
選択範囲内の、整形した段落行を連結します。
連結する範囲を選択してから実行してください。

------------------------------------------------------------------
main()
{
if(Block() != 1 && Block() != 2)
return; // 範囲中でなければ NG
int cp = Cecp();
GoBlok();
Select(0);
while(1)
{
if(KbHit() == 0x1b) // [ESC]が押されたら中断
break;
REdge();
Right();
if(Tcode() < 1) // [EOF]
break;
if(Tcode() > 1) // CR 以外
{
Bs();
cp--;
}
while(Tcode() == 1) // CR
Right();
if(Cecp() >= cp || Tcode() < 1) // [END]
break;
}
}
------------------------------------------------------------------


re:改行を無くす方法 投稿者:ヒョン
2011年11月10日(木)00時43分

宮崎さん、こんにちは。

早速に有り難うございました。

ところで、改行された文字列の塊が、複数あり、各々が、空行で隔てられている
場合に、これらを、一度に、改行なしの文字列に戻す方法はないでしょうか。

renketu.mamは、あくまでも、改行された一塊の文字列から改行を無くし、元に戻す
作業しかしてくれません。

出来れば、範囲指定して、実行してやると、一度に処理出来ると有り難いです。

では、宜しくご検討お願い致します。

re:改行を無くす方法 投稿者:Miyamiya
2011年11月9日(水)13時34分

ヒョンさんへ。
改行された文字列を連結して、改行なしの文字列に戻したい場合は、
マクロメニュー の 登録したマクロの実行 の マクロ7に登録されている
段落整形行を連結マクロ(renketu.mam)を使ってみてください。
整形した段落行を空白行の前までを連結します。
2行目以降の先頭の全角スペースは連結の際に自動的に削除します。
カーソル位置を段落先頭行に置いて実行して下さい。

改行を無くす方法 投稿者:ヒョン
2011年11月8日(火)13時34分

宮崎さん、いつもお世話になります。

整形マクロを使っていつも一行を全角30文字にしています。

これを、元に戻す方法を教えて頂きたいのです。

たとえば、

○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○

この三行の30文字目で改行された文字列を、改行なしの、以下のような文字列
に、戻したいわけです。

○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○

宜しくご検討お願い致します。

参考までに、教えて頂いた、整形マクロを以下に添付します。

#define XWIDE 30 // 1行の長さを指定します
// 行頭禁則文字を指定します
char *ps=" 、。,.:;!?)]}」-、。, .:;!?)〕]}〉》」』】’”";
// 行末禁則文字を指定します
char *pe="([{「(〔[{〈《「『【‘“";
int cp, smode;
main()
{
int sIns = Ins();
int sInd = Indent();
InsMode(1);
AIndent(0);
if(Block() == 1 || Block() == 2)
{ // 範囲選択モード
smode = 1;
cp = Cecp();
GoBlok();
Select(0);
}
else
{
smode = 0;
Top();
}
while(Linestat() >= 0 && (smode == 0 || Cecp() < cp))
danraku();
InsMode(sIns);
AIndent(sInd);
// Bottom();
}

// 1段落を整形
void danraku()
{
int n, num, xwide;

num = 0;
LEdge();
if(Code() == 0x8140) // 段落の最初が全角スペースなら
{
while(Code() == 0x8140) // 全角スペースの連続数を数える
{
num++;
Right();
}
LEdge();
}
while(1)
{
if(KbHit() == 0x1b) // [ESC]が押されたら中断
break;
GotoX(XWIDE + 1);
if(Tcode() == 1) // 改行
{
Right();
if(Tcode() > 1) // 改行の次が文字なら
{
while(Tcode() > 1) // 不要な改行があれば取り除く
{
Bs();
cp -= 2;
GotoX(XWIDE + 1);
if(Tcode() != 1) // 改行ではないなら
break;
Right();
}
}
else // 整形終了で、カーソル位置は次の段落の先頭へ
{
while(Tcode() == 1)
Right();
break;
}
}
Left();
if(StrChr(Code(), pe) == -1) // 行末禁則文字をチェック
{
Right();
if(StrChr(Code(), ps) != -1) // 行頭禁則文字をチェック
Right();
}
Ret();
cp += 2;
if(num > 1) // 行頭を n-1 字分インデント
{
for(n = num; n > 1; n--)
{
PutChr(0x8140);
cp += 2;
}
}
if(smode == 1 && Cecp() >= cp) // 選択範囲の終わりのチェック
break;
if(Tcode() == 0) // EOF
break;
}
SetRep(0x46);
SetFindS("“");
SetRepS("″");
Replace();

SetRep(0x46);
SetFindS("”");
SetRepS("″");
Replace();
}

re:複数ページ印刷警告マクロ 投稿者:saki
2011年11月2日(水)19時13分

宮崎様

承知いたしました。
どうも有り難うございました。

re:複数ページ印刷警告マクロ 投稿者:Miyamiya
2011年11月2日(水)12時13分

sakiさんへ。
マクロからは、印刷の設定の印刷するページ数等の情報を得る方法がありませんので
マクロでの実現は無理です。

re:複数ページ印刷警告マクロ 投稿者:saki
2011年11月1日(火)13時31分

どうも有難うございました。
印刷専用のマクロで、実現することは可能でしょうか?

re:複数ページ印刷警告マクロ 投稿者:Miyamiya
2011年11月1日(火)12時15分

sakiさんへ。
今のところ、その辺りの動作の変更の予定はないです。
印刷の設定の、印刷の範囲で、印刷するページ数の確認をして、その枚数の用紙を
セットしてから印刷を開始されてください。

複数ページ印刷警告マクロ 投稿者:saki
2011年10月31日(月)15時36分

宮崎様、いつもお世話になり、有難うございます。

印刷をするときに、2ページ以上の場合は、「●ページ印刷します」というメッセージボックスが出て、「はい(Y)」「いいえ(N)」というボタンで、印刷をするかどうか、選べるようにして頂けませんでしょうか。デフォルトは、「いいえ」が選択されるようにして頂きたく思います。

 よろしくお願い申し上げます。

re2:半角スペース2個を全角スペース1個に 投稿者:saki
2011年9月19日(月)15時01分

宮崎様

 綺麗に変換されました。
 本当にどうもありがとうございました。

re:半角スペース2個を全角スペース1個に 投稿者:Miyamiya
2011年9月17日(土)15時43分

sakiさんへ。
以下のマクロを使ってみてください。
文章全体の半角スペース2個を全角スペース1個に置換するマクロです。

------------------------------------------------------------------
void main()
{
int pos = Cecp(); // カーソル位置を記憶

Top();
for(;;)
{
if(KbHit() == 0x1b) // [ESC]が押されたら中断
break;
if(Linestat() < 0) // [END]
break;
if(Code() == ' ')
{
Right();
if(Code() == ' ')
{
Del();
Bs();
PutChr(0x8140); // 0x8140=全角スペース
}
else
Right();
}
else
Right();
}
GoCp(pos);
}
------------------------------------------------------------------


半角スペース2個を全角スペース1個に 投稿者:saki
2011年9月16日(金)15時32分

宮崎様

 いつも有難うございます。

 編集中の文章全体の、半角スペース2個を全角スペース1個に置換することは、マクロで、できますでしょうか?

 カーソル位置は保存して頂きたいのですが、よろしくお願い致します。

>re3:コピーマクロ作成依頼 投稿者:saki
2011年8月18日(木)19時33分

宮崎様

カーソル位置が、保存されました。
いつも本当に有難うございます。

これからもMMエディタを使わせて頂きます。

re2:コピーマクロ作成依頼 投稿者:Miyamiya
2011年8月16日(火)11時17分

sakiさんへ。
以下のマクロを使ってみてください。
カーソル位置を記憶します。

------------------------------------------------------------------
void main()
{
int pos = Cecp(); // カーソル位置を記憶
PutChr(71 << 8); // 71 = すべてを選択
ClipCopy();
GoCp(pos);
}
------------------------------------------------------------------


re2:コピーマクロ作成依頼 投稿者:saki
2011年8月13日(土)21時53分

宮崎様、どうも有難うございました。

全範囲コピーが、できました。

申し訳ございませんが、Ctrl+A→Ctr+Cを実行すると、カーソルが文末に移動します。
カーソル位置は変わらないようにして頂くことはできますでしょうか。

よろしくお願い致します。

re:コピーマクロ作成依頼 投稿者:Miyamiya
2011年8月13日(土)15時39分

sakiさんへ。
以下のマクロを使ってみてください。
全範囲をコピーするマクロです。

------------------------------------------------------------------
void main()
{
PutChr(71 << 8); // 71 = すべてを選択
ClipCopy();
}
------------------------------------------------------------------


コピーマクロ作成依頼 投稿者:saki
2011年8月13日(土)12時13分

いつもMMエディタを使わせて頂いております。

申し訳ございませんが、編集中のテキストを、全範囲コピーするマクロをお願いできませんでしょうか。

Ctrl+A→Ctrl+C

という操作を、頻繁にしますので、マクロで自動化して頂きたく思います。

よろしくお願い致します。


コピーマクロ作成依頼 投稿者:saki
2011年8月13日(土)10時08分

いつもMMエディタを使わせて頂いております。

申し訳ございませんが、編集中のテキストを、全範囲コピーするマクロをお願いできませんでしょうか。

Ctrl+A→Ctrl+C

という操作を、頻繁にしますので、マクロで自動化して頂きたく思います。

よろしくお願い致します。


re:TEXCOMP.MAMの修正依頼 投稿者:ヒョン
2011年4月15日(金)19時59分

宮崎さん、こんにちは。

有り難うございました。いつも無理を言いまして済みません。

今後とも宜しくお願い致します。

re:TEXCOMP.MAMの修正依頼 投稿者:Miyamiya
2011年4月15日(金)18時24分

ヒョンさんへ。
書かれたコードの最後の行
fclose(out);
の後ろに以下のコードを追加されると、d:\tex へ保存できるはずです。

------------------------------------------------------------------
char *sdir = "d:\\tex";

GetFileName(fname);
p = strrchr(fname, '\\');
strcpy(addfname, sdir);
strcat(addfname, p);
if((in = fopen(fname, "r")) == NULL)
{
return 0;
}
if((out = fopen(addfname, "w")) == NULL) // 書き込むファイルを開く
{
Message("メモリカードを挿入してください。");
if((out = fopen(addfname, "w")) == NULL) // 書き込むファイルを開く
{
fclose(in);
return 0;
}
}
while(1)
{
size = fread(buf, 1, 3000, in); // ファイルの読み込み
fwrite(buf, size, 1, out); // ファイルへ書き込み
if(size < 3000)
break;
}
fclose(in);
fclose(out);
------------------------------------------------------------------


re:TEXCOMP.MAMの修正依頼 投稿者:ヒョン
2011年4月14日(木)23時16分

宮崎さん、こんにちは、お世話になります。

済みませんでした。

char *sdir = "i:\\tex";
// char *sdir = "d:\\tex";

FILE *out, *in;
int size;
char addfname[300], buf[3000];

GetFileName(fname);
p = strrchr(fname, '\\');
strcpy(addfname, sdir);
strcat(addfname, p);
if((in = fopen(fname, "r")) == NULL)
{
return 0;
}
if((out = fopen(addfname, "w")) == NULL) // 書き込むファイルを開く
{
Message("メモリカードを挿入してください。");
if((out = fopen(addfname, "w")) == NULL) // 書き込むファイルを開く
{
fclose(in);
return 0;
}
}
while(1)
{
size = fread(buf, 1, 3000, in); // ファイルの読み込み
fwrite(buf, size, 1, out); // ファイルへ書き込み
if(size < 3000)
break;
}
fclose(in);
fclose(out);

ここら辺りまでが該当するようです。不足でしたら、また、お願いします。

では宜しくお願いします。

re:TEXCOMP.MAMの修正依頼 投稿者:Miyamiya
2011年4月14日(木)13時10分

ヒョンさんへ。
二重に保存している部分のコードを示してください。
そうしないと、書き方が分からないです。

TEXCOMP.MAMの修正依頼 投稿者:ヒョン
2011年4月13日(水)16時41分

宮崎さん、こんにちは、いつもお世話になります。

TEXCOMP.MAMを起動した時、現在は、メインのHDDとSDメモリカードに二重保存
するようにしています。これを、もう一つのHDDを加えて、三重保存したいのです。

現在の37行目以下の箇所は、以下のようになっています。

int Compile(int mode)
{
static char adname[300]; // アドバイスループで使う配列は static の必要がある
HWND hwnd;
HANDLE shFile, dhFile;
FILETIME sft, dft;
char *p, *p2, s[500], fname[300], efname[300];
int ret;

Save();

char *sdir = "i:\\tex";

最後の行の記述で、SDメモリカードに保存することが出来ますが、同じ記述を、

char *sdir = "d:\\tex";

として、

char *sdir = "i:\\tex";
char *sdir = "d:\\tex";

と、並べますと、今度は、SDメモリカードに保存されることがなくなります。

もう一つのHDDはDドライブです。

趣旨をご理解頂き、可能でしたら、お願いします。



re:re:入力中、文字が消えることがあります 投稿者:湯川登紀雄
2011年4月6日(水)15時56分

さっそくのご対応、ありがとうございます。
まさに、「変換確定した文字文字自体はあるのに、表示がされていない」状況だと
思います。
入力システムは「ATOK」です。MS−IMEで1時間ほど試してみたかぎりで
は、「状況」は生じていません。
しばらく、両者を使いつつ、「状況」の発生する環境などを調べてみて、もう少し
具体的な質問のしかたができるようになったら、あらためておたずねさせていただ
きます。
なお、「ATOK」を使っているときに発生した「状況」のキャプチャー画像は念
のため保存しておきます。
いろいろお手数をおかけしました。
湯川登紀雄 拝

re:入力中、文字が消えることがあります 投稿者:Miyamiya
2011年4月6日(水)13時24分

湯川登紀雄さんへ。
変換して確定した文字が消えるということですが、普通はあり得ないことです。
リターンキーを押すと現れるということは、変換確定した文字自体はあるのに、表示がされて
いない状態のように思われます。原因は現時点ではちょっとわかりません。
IMEは何をお使いでしょうか。WINDOWSに標準で付属している MS-IMEでもそのようになるでしょうか。

入力中、文字が消えることがあります 投稿者:湯川登紀雄
2011年4月5日(火)17時26分

とても使い勝手のよいソフトに出会えました。ワープロソフトの代わりに日常的に使い始めました。

ただ、題名のように、入力中に文字表示が消えることがあります。変換して確定すると消え、もう一度リターンキーを押すと現れますが、改行されてしまいます。
必ずというわけではないのですが頻繁に起こります。打ち直したときには起こらなかったりもします。
それ以外には、なんの異常もありません。
これは、やむを得ないものなのでしょうか。

たとえば、

  このエディタは大変に使いやすいものです。↓

と入力するとします(↓ は改行マークとします)。

  このエディタはたいへんに↓
          ̄ ̄ ̄ ̄ ̄

と入力し、「大変に」と変換して確定すると

  このエディタは   ↓
    
このように「は」のあと3文字が消えてしまいます。

なにぶん、ど素人のため、使い方がよくないのかもしれません。ご教示いただければ幸いです。








Re:マクロのお願い 投稿者:M&Y
2011年3月23日(水)13時52分

宮崎さん、こんにちは。
さっそくマクロを作っていただき、ありがとうございます。
希望の編集ができ、大変満足です。ありがとうございました。

re:マクロのお願い 投稿者:Miyamiya
2011年3月23日(水)11時12分

M&Yさんへ。
以下のマクロを使ってみてください。
テキスト全体が対象となります。
先頭行の NUMLINE に空行を入れる行数を指定して下さい。
初期値では、20 となっているところです。

------------------------------------------------------------------
#define NUMLINE 20 // 空行を入れる行数を指定して下さい
void main()
{
int sIns = Ins();
int sInd = Indent();
int num = 0;

InsMode(1);
AIndent(0);
Top();
while(1)
{
if(Code() == 0x8142) // 。
{
num++;
if(num == NUMLINE)
{
Right();
Ret();
num = 0;
}
}
if(Tcode() == 0) // [EOF]
break;
if(KbHit() == 0x1b) // [ESC]が押されたら中断する
break;
Right();
}
InsMode(sIns);
AIndent(sInd);
}
------------------------------------------------------------------


マクロのお願い 投稿者:M&Y
2011年3月22日(火)15時14分

宮崎さん、こんにちは。
。 で区切られる論理行で、20ないし30の 。 の数ごとに空行を入れるマクロを作っていただけないでしょうか。
宜しくお願いいたします。


re:MmEditorをタスクトレイに 投稿者:ヒョン
2011年1月20日(木)18時18分

宮崎さん、こんにちは、いつもお世話になります。

分かりました。

有り難うございました。

今後とも宜しくお願いします。

re:MmEditorをタスクトレイに 投稿者:Miyamiya
2011年1月19日(水)17時29分

ヒョンさんへ。
シングルクリックはメニューの表示になっています。
MmEditorを起動させるにはダブルクリックしないとだめです。

re:MmEditorをタスクトレイに 投稿者:ヒョン
2011年1月18日(火)21時01分

宮崎さん、こんにちは、いつもお世話になります。

有り難うございました。

タスクトレイに置かれたMmEditorはダブルクリックしないと立ち上がらない
のですね。シングルクリックには出来ないのでしょうか。

宜しくお願いします。

re:MmEditorをタスクトレイに 投稿者:Miyamiya
2011年1月17日(月)18時22分

ヒョンさんへ。
右上の小さな×印をクリックしたときに、終了せずにMmEditorをタスクトレイに収納
したい場合は、環境設定→ウィンドウ属性→MMの常駐 にチェックを入れて下さい。

MmEditorをタスクトレイに 投稿者:ヒョン
2011年1月15日(土)19時30分

簡単なことで済みません。

MmEditorをタスクトレイに一時的に収納しておきたいのです。コマンドを教えて
下さい。

右上の小さな×印をクリックして最小化する動作です。小さいので疲れるんです。

MinWindow();では納得しないのです。

宜しくお願いします。

re:文字列の獲得と挿入 投稿者:ヒョン
2011年1月14日(金)00時36分

宮崎さん、こんにちは、いつもお世話になります。

有り難うございました。希望が叶いました。

最初の説明が悪くて申し訳ありませんでした。

今後とも宜しくお願い致します。


re:文字列の獲得と挿入 投稿者:Miyamiya
2011年1月13日(木)18時36分

ヒョンさんへ。
現在実行中のマクロ内の記述の
PutStr("○○○○()");
の部分を
PutStr("○○○○(あいうえお)");
等と変更して、PutStr();が書き出す文字列を動的に変更したいという
ことであれば、それは無理です。
なぜかというと、実行するマクロのコードは、マクロ開始時にすべて
読み込まれていて、マクロの実行途中でコードの記述が変更になっても、
その変更は反映されず、実行結果は変わらないからです。
変更したマクロの実行結果を反映したい場合は、変更されたマクロで
マクロを実行する必要があります。

実行するマクロの先頭で、
○○○○(??????)
のような文字列を入力したいのであれば、下記のコードをマクロの
先頭に追加して ?????? の部分を入力文字から得てください。

------------------------------------------------------------------
char str[300], ostr[500];

if(GetStr("文字列の入力", str) < 0)
return;

sprintf(ostr, "○○○○(%s)\n", str);
PutStr(ostr);
------------------------------------------------------------------


re:文字列の獲得と挿入 投稿者:ヒョン
2011年1月13日(木)02時27分

宮崎さん、こんにちは、いつもお世話になります。

やっぱり、そうでした。Save();を入れますと、入ります。

でも、そうしますと、次回、同じことしようとしても、PutStr("○○○○(文字列)");には、括弧の中に「文字列」という文字が入っていますので、マクロは、
完遂しません。「文字列」の部分を削除するマクロを加えないと駄目なように
思います。

更なる工夫をお願い致します。

では、宜しくご指導お願い致します。

re:文字列の獲得と挿入 投稿者:ヒョン
2011年1月12日(水)20時09分

宮崎さん、こんにちは、いつもお世話になります。

早速に有り難うございました。

マクロの先頭に入れてみましたが、うまく、○○○○の後の()の中に、文字列
が入ってくれません。作って頂いたマクロ自体は動いており、ダイアログが出ま
すし、その中に、文字列を入れて、OKボタンを押しますと、マクロは従来通り
実行されますが、括弧の中に、文字列は入りません。

それで、調べてみましたら、宮崎さんに作っていただいたマクロを使った結果、私のマクロ自体が更新されていることが分かりました。そうしますと、これを、まず、保存してからでないと、私の希望は叶えられない、ということになります。

しかし、このように、私のマクロ自体を、文字列を入れる度に変更してしまうと、
次に、同じ作業をやります場合には、以前括弧に入れた文字列を消去した後に、
保存した上で、再度文字列を挿入した上で、また、保存してマクロを実行させる
ことになります。

私の希望は、○○○○の後に続く括弧の中に、ある文字列を挿入した上で、残りの
マクロを従来通り実行することにあります。

宮崎さんが作っていただいたマクロに対する私の理解が正しければ、もう少し改良
の余地があるように思いますので、急ぎませんので、ご検討願えれば幸いです。

re:文字列の獲得と挿入 投稿者:Miyamiya
2011年1月12日(水)18時42分

ヒョンさんへ。
以下のマクロを使ってみてください。
現カーソル位置より最初に見つかった PutStr("○○○○()"); の()の中に
ダイアログで入力した文字列をセットします。

------------------------------------------------------------------
void main()
{
int cfflg;
char str[300];

if(GetStr("文字列の入力", str) < 0)
return;
cfflg = GetFind(); // 検索フラグを保存
SetFind(0x00); // 検索フラグのセット
SetFindS("PutStr(");
if(Find() != 0) // NG
return;
SetFindS("()");
if(Find() != 0) // NG
return;
Right();
PutStr(str);
SetFind(cfflg); // 検索フラグを復帰
}
------------------------------------------------------------------


文字列の獲得と挿入 投稿者:ヒョン
2011年1月12日(水)00時18分

宮崎さん、こんにちは、いつもお世話になります。

ある文字列を得るダイアログを開いた上でそこに文字列を入れてOKボタンを
押すと、マクロ内にある以下の記述の括弧()に、その文字列が入るようにしたい
のです。

PutStr("○○○○()");

この記述は、あるファイルを開いた上で、特定のマクロを実行する途中で実行され
ます。

従来は、 PutStr("○○○○");の記述で満足していたのですが、○○○○の後に、
括弧を入れて、そこに特定の文字列を入れて、○○○○というタイトル内で区別
を付けたいと思った次第です。

納得が行きましたらご指導お願い致します。

re:BeginCollectUndo();の使い方 投稿者:ヒョン
2010年12月9日(木)23時17分

宮崎さん、こんにちは、遅くなって済みません。

少し複雑な関数のようです。

具体的にどうしたいのか指摘しないと答えるのが難しいのでしょう。

私のほうで少し考えてみます。

また、宜しくお願いします。

re:BeginCollectUndo();の使い方 投稿者:Miyamiya
2010年11月27日(土)17時05分

ヒョンさんへ。
BeginCollectUndo();は、アンドゥをひとまとめにする為の処理を開始します。
この関数実行後、EndCollectUndo();が実行されるまでのテキストの変更は、
1回のアンドゥで BeginCollectUndo();実行直前の状態に戻るようになります。
使い方としては、

BeginCollectUndo();

// いろいろな処理

EndCollectUndo(); // ここまでの変更を一つの変更としてまとめる

のようになります。

テキストの変更というのは、BeginCollectUndo();関数実行後の
マクロ内でのテキストの変更です。すでに変更が終わってディスクに保存
されているテキストの内容を元に戻すものではありません。

BeginCollectUndo();の使い方 投稿者:ヒョン
2010年11月27日(土)01時15分

宮崎さん、こんにちは、いつもお世話になります。

ファイルの記述全体を誤って加工してしまい、加工前の状態に戻そうと思っています。

BeginCollectUndo();とEndCollectUndo();を使えそうな気がしているのですが、使い方がわかりません。

かなり大きなファイルを一挙に元に戻したいのです。可能でしたらお願いします。

誤ってマクロを修正してしまい、そのマクロが誤って動いてしまい、収拾が取れなくなりまして困っています。

それでは、可能でしたら、宜しくお願いします。

re:カーソル移動マクロ  投稿者:ヒョン
2010年11月23日(火)11時14分

宮崎さん、こんにちは、いつもお世話になります。

有り難うございました。希望通りのマクロが作れました。

本当に助かりました。今後とも宜しくお願い致します。

re:カーソル移動マクロ 投稿者:Miyamiya
2010年11月22日(月)15時30分

ヒョンさんへ。
複数のマクロを同時に実行することは出来ませんので、別のマクロを実行する MacroExec();を
実行後は実行中のマクロは終了してしまいますので、それ以降のコードは実行できません。
別のマクロの実行後に制御をこちらのマクロに戻したい場合は、
LoadMam();関数でマクロを読み込んで動作させると、たぶんうまくいくはずです。

MacroExec("整形マクロ-60.mam");

の代わりに、

LoadMam("整形マクロ-60.mam", "seikei60");
seikei60();
ReleaseMam("整形マクロ-60.mam");

とすると、
整形マクロ-60.mam の実行後に、それ以降に書かれたコードも実行できるはずです。
LoadMam();関数の詳しい使い方については、マムマクロのヘルプをご覧ください。

補足 投稿者:ヒョン
2010年11月20日(土)00時27分

すみません。何故か消えるみたいです。

#include <MmDialog.h>

です。

補足 投稿者:ヒョン
2010年11月20日(土)00時25分

マクロの最初の行が完全ではありませでした。

#include

です。

宜しくお願いします。

カーソル移動マクロ 投稿者:ヒョン
2010年11月19日(金)12時44分

宮崎さん、こんにちは、いつもお世話になります。

あれから、自分で工夫して、今度は、以下のようなマクロを作ったのですが、
最後のカーソル上移動が上手く機能しません。何処が奇怪しいのでしょうか。

整形マクロ-60.mamはMacroExec();で機能し、MacroExec2();では機能しません
でした。

添削頂けると幸いです。

#include

main()

{

Open("c:\\mmeditor\\tex\\テスト.tex");
Bottom();
Up();
PutStr("\n\\newpage\n\n\\begin{center}\n\n\\end{center}\n\\bigskip\n\n\n\n\\medskip\n\n");
Ups(4);
ClipPast();
LDEdge();

int cfflg;
cfflg = GetFind(); // 検索フラグを保
SetFind(0x01); // 検索フラグのセット(上向き)
SetFindS("\\begin{center}");
if(Find() == 0) // 見つかった
Down();
SetFind(cfflg); // 検索フラグを復帰

PutStr("○○会");
LDEdge();
Downs(4);

int cfflg;
cfflg = GetFind(); // 検索フラグを保存
Select(1);
SetFind(0x00); // 検索フラグのセット(下向き)
SetFindS("\\medskip");
if(Find() == 0) // 見つかった
Ups(2);
else
Select(0);
SetFind(cfflg); // 検索フラグを復帰

MacroExec("整形マクロ-60.mam");

int cfflg;
cfflg = GetFind(); // 検索フラグを保
SetFind(0x01); // 検索フラグのセット(上向き)
SetFindS("\\bigskip");
if(Find() == 0) // 見つかった
Downs(2);
SetFind(cfflg); // 検索フラグを復帰
}

整形マクロ-60.mamの内容は以下の通りです。

#define XWIDE 60 // 1行の長さを指定します
// 行頭禁則文字を指定します
char *ps=" 、。,.:;!?)]}」-、。, .:;!?)〕]}〉》」』】’”";
// 行末禁則文字を指定します
char *pe="([{「(〔[{〈《「『【‘“";
int cp, smode;
main()
{
int sIns = Ins();
int sInd = Indent();
InsMode(1);
AIndent(0);
if(Block() == 1 || Block() == 2)
{ // 範囲選択モード
smode = 1;
cp = Cecp();
GoBlok();
Select(0);
}
else
{
smode = 0;
Top();
}
while(Linestat() >= 0 && (smode == 0 || Cecp() < cp))
danraku();
InsMode(sIns);
AIndent(sInd);
// Bottom();
}

// 1段落を整形
void danraku()
{
int n, num, xwide;

num = 0;
LEdge();
if(Code() == 0x8140) // 段落の最初が全角スペースなら
{
while(Code() == 0x8140) // 全角スペースの連続数を数える
{
num++;
Right();
}
LEdge();
}
while(1)
{
if(KbHit() == 0x1b) // [ESC]が押されたら中断
break;
GotoX(XWIDE + 1);
if(Tcode() == 1) // 改行
{
Right();
if(Tcode() > 1) // 改行の次が文字なら
{
while(Tcode() > 1) // 不要な改行があれば取り除く
{
Bs();
cp -= 2;
GotoX(XWIDE + 1);
if(Tcode() != 1) // 改行ではないなら
break;
Right();
}
}
else // 整形終了で、カーソル位置は次の段落の先頭へ
{
while(Tcode() == 1)
Right();
break;
}
}
Left();
if(StrChr(Code(), pe) == -1) // 行末禁則文字をチェック
{
Right();
if(StrChr(Code(), ps) != -1) // 行頭禁則文字をチェック
Right();
}
Ret();
cp += 2;
if(num > 1) // 行頭を n-1 字分インデント
{
for(n = num; n > 1; n--)
{
PutChr(0x8140);
cp += 2;
}
}
if(smode == 1 && Cecp() >= cp) // 選択範囲の終わりのチェック
break;
if(Tcode() == 0) // EOF
break;
}
SetRep(0x46);
SetFindS("“");
SetRepS("″");
Replace();

SetRep(0x46);
SetFindS("”");
SetRepS("″");
Replace();
}

では、急ぎませんので、宜しくお願い致します。

>re: テキストのタブ表示について 投稿者:nora
2010年11月7日(日)20時23分

いつも大変お世話になっております。
早速の回答ありがとうございます。
おかげさまでタブ表示されるようになりました。

お手数をおかけして申し訳ありませんでした。
今後とも宜しくお願いいたします。

re:再び文字列検索 投稿者:ヒョン
2010年11月7日(日)13時06分

宮崎さん、こんにちは、いつもお世話になります。

MacroExec2();を使ったら解決しました。どうも説明がなかなか理解できず、
ご迷惑をおかけ致しました。

今後とも宜しくお願い致します。

re:再び文字列検索 投稿者:ヒョン
2010年11月7日(日)00時34分

宮崎さん、こんにちは、いつもお世話になります。

ご指摘のことも試したのですが、どうも、その前にマクロを実行しているのが、
災いしているみたいです。

範囲選択して、\medskipの二行上にカーソルを持っていき、整形マクロを実行
させますと、そこまでは、上手く行くのですが、その後に、カーソルを\bigskip
まで、上昇させ、二行下げさせる命令が上手く機能しません。

以下に、そのマクロを書きますので、ご検討願えますと幸いです。

int cfflg;
cfflg = GetFind(); // 検索フラグを保存
Select(1);
SetFind(0x00); // 検索フラグのセット
SetFindS("\\medskip");
if(Find() == 0) // 見つかった
Ups(2);
else
Select(0);
SetFind(cfflg); // 検索フラグを復帰

MacroExec("整形マクロ-60.mam");

int cfflg;
cfflg = GetFind(); // 検索フラグを保
SetFind(0x01); // 検索フラグのセット
SetFindS("\\bigskip");
if(Find() == 0) // 見つかった
Downs(2);
SetFind(cfflg); // 検索フラグを復帰

では宜しくお願いします。何度も済みません。

re: テキストのタブ表示について 投稿者:Miyamiya
2010年11月6日(土)22時31分

noraさんへ
複数ファイルのタブ表示の変更は・・
メニューの その他の 表示設定の 「バー設定」の中の
「ファイルバーを表示する」のオンオフで行います
[オン] 設定にすれば
ウインドウの上部へ、編集ウインドウを切り替えるためのファイルバー(タブ表示)を表示します。


テキストのタブ表示について 投稿者:nora
2010年11月6日(土)17時18分

いつも大変お世話になっております。

大変初歩的な質問で失礼しますが、MMエディタで複数のテキストを開いたときに、タブで表示するための設定はどちらで行えばよいのでしょうか。

タブで複数開く形で使わせて頂いていたのですが、PC故障のため再インストールを行ったところ、ドコをどういじったものかタブ表示ができなくなってしまったので……。

お忙しいところお手数ですが、ご回答いただけますでしょうか。
宜しくお願い申し上げます。

re:再び文字列検索 投稿者:Miyamiya
2010年11月6日(土)10時44分

ヒョンさんへ。
上向きの場合は、検索フラグのセットを、SetFind(1x00);ではなくて
SetFind(0x01);とすればよいです。

再び文字列検索 投稿者:ヒョン
2010年11月6日(土)02時50分

宮崎さん、こんにちは、いつもお世話になります。

今度は、上向きに、\bigskipを検索して、二行カーソルを下げるマクロを
作ろうとしましたが、うまくいきません。

以下のようにしましたが、何処か奇怪しいでしょうか?

検索フラグのセットのところで、SetFind(1x00);としてみたのですが。

int cfflg;
cfflg = GetFind(); // 検索フラグを保
SetFind(1x00); // 検索フラグのセット
SetFindS("\\bigskip");
if(Find() == 0) // 見つかった
Downs(2);
SetFind(cfflg); // 検索フラグを復帰

宜しくお願い致します。

re:文字列選択 投稿者:ヒョン
2010年11月5日(金)12時54分

宮崎さん、こんにちは、いつもお世話になります。

有り難うございました。

とても参考になりました。出来るだけ自分でやってみます。

今後とも宜しくお願い致します。

re:文字列選択 投稿者:Miyamiya
2010年11月5日(金)11時32分

ヒョンさんへ。
以下のマクロを使ってみてください。
現カーソル位置から選択を開始して、\medskipという文字列を捜した上で、
その二行目前で範囲選択を終えるマクロです。

------------------------------------------------------------------
void main()
{
int cfflg;

cfflg = GetFind(); // 検索フラグを保存
Select(1);
SetFind(0x00); // 検索フラグのセット
SetFindS("\\medskip");
if(Find() == 0) // 見つかった
{
Up();
Up();
}
else
Select(0);
SetFind(cfflg); // 検索フラグを復帰
}
------------------------------------------------------------------


re:文字列選択 投稿者:ヒョン
2010年11月4日(木)22時33分

宮崎さん、こんばんは、いつもお世話になります。

ご質問の通りです。

\medskipまで選択するのを避けたいのです。

宜しくご検討お願い致します。

re:文字列選択 投稿者:Miyamiya
2010年11月4日(木)15時27分

ヒョンさんへ。
これは、現カーソル位置から選択を開始して、\medskipという文字列を捜した上で、
その二行目前で範囲選択を終えるマクロということでしょうか。

文字列選択 投稿者:ヒョン
2010年11月3日(水)01時33分

宮崎さん、こんばんは、いつもお世話になります。

Shiftキー+PageDownキーを使って文字列を範囲選択して、特定のマクロを作動
させ、目的の結果を得たいのです。

Select4(); というシステム関数が使えそうなのですが、私は、\midskipという
文字列が存在するカーソル位置の二つ上のカーソル位置まで、範囲選択した上
で、特定のマクロを作動させたいと思っています。

\medskipという文字列を捜した上で、その二行目前で、範囲選択を終えたいわ
けで、少し複雑なので、手に負えません。

お忙しいでしょうが、ゆっくりで構いませんので、宜しくお願い致します。

re:MM携帯のメールデータを移動したい 投稿者:Miyamiya
2010年10月20日(水)12時45分

吉澤 清さんへ。
MMメール携帯からMMメール2へのデータコンバートツール mtom2.exe
では、メールデータのコンバートと設定データの転送 の標準のモードで
作業を行うことにより、設定データ、アドレスデータの移動とともに、
メールデータも移動できますが、メールデータは移動されなかったのでしょうか。

なお、ここは「MMエディタのサポート掲示板」です。
MMメールのサポートは、「MMメールのサポート掲示板」で行っていますので、
今後のMMメールに関する質問はそちらの方へお願いします。

MM携帯のメールデータを移動したい 投稿者:吉澤 清
2010年10月19日(火)16時40分

MM携帯からMM2(Ver.3.11)へメールデータを移動したい。

データコンバータで設定データ、アドレスは移動できました。

>re:MMエディタ V8.01のPC-Talker7 2.00 への対応について 投稿者:yanikun
2010年10月10日(日)01時35分

宮崎 様
了解しました。よろしくお願いいたします。

re:MMエディタ V8.01のPC-Talker7 2.00 への対応について 投稿者:Miyamiya
2010年10月9日(土)15時51分

yanikunさんへ。
PC-Talker7 2.00 へのMMエディタの対応については、PC-Talker7 2.00 の
正規版が出た時点で対応する予定です。

MMエディタ V8.01のPC-Talker7 2.00 への対応について 投稿者:yanikun
2010年10月9日(土)09時34分

Windows7 Pro 64bit
PC-Talker7 2.00 RC8 x64

先日、MMエディタ V8.01 をダウンロードして使ってみたのですが、音声設定をしても、正常に読み上げません。
PC-Talker7のバージョンによるものではないかと思うのですが、その場合、MMエディタ側で対応していただけるのでしょうか。


re:検索マクロの使い方 投稿者:ヒョン
2010年10月7日(木)23時39分

宮崎さん、こんばんは。

有り難うございました。結果を得ることが出来ました。

システム関数は複雑なものになると使いこなせません。

今回も大変勉強になりました。

今後とも宜しくお願い致します。

re:検索マクロの使い方 投稿者:Miyamiya
2010年10月7日(木)12時26分

ヒョンさんへ。
\begin{center}という文字列を上向きに検索して、その下に、カーソルを移動させたいのであれば
以下のマクロで可能です。

------------------------------------------------------------------
main()
{
int cfflg;

cfflg = GetFind(); // 検索フラグを保存
SetFind(0x01); // 検索フラグのセット
SetFindS("\\begin{center}");
if(Find() == 0) // 見つかった
Down();
SetFind(cfflg); // 検索フラグを復帰
}
------------------------------------------------------------------


検索マクロの使い方 投稿者:ヒョン
2010年10月7日(木)00時05分

こんにちは、いつもお世話になります。

マクロを実行後、カーソルを、ある文字列の下まで移動させたいのです。

文字列を上向きに検索してカーソルをそこまで移動させ、そして、Down();を使いたいと思っています。

たとえば、\begin{center}という文字列を検索して、その下に、カーソルを移動させたいわけです。

宜しくお願いします。

>re3:txt(LF)とは何でしょうか? 投稿者:saki
2010年7月3日(土)11時43分

Miyamiya様

 疑問が解けました。
 丁寧に教えて頂き、どうも有難うございました。

re2:txt(LF)とは何でしょうか? 投稿者:Miyamiya
2010年7月3日(土)11時38分

sakiさんへ。
改行コードがCR+LF以外の場合は、(LF)や(CR)が表示されます。
文字コードがシフトJIS以外の場合は、(EUC)や(UTF8)等が表示されます。
何も表示されない場合は、改行コードはCR+LFで、文字コードはシフトJISです。

re2:txt(LF)とは何でしょうか? 投稿者:saki
2010年7月2日(金)14時09分

Miyamiya様

 どうも有難うございました。
「改行コード」についてのメッセージで、「文字コードセット」についてのメッセージではなかったのですね。
(LF)や(EUC)というメッセージが出ないときは、「文字コードセット」は「シフトJIS」だと判断して、よろしいでしょうか?


re:txt(LF)とは何でしょうか? 投稿者:Miyamiya
2010年7月2日(金)12時02分

sakiさんへ。
(LF)というのは、その文書の改行コードが LF だということです。
Windows では改行コードは CR+LF が使われます。
そのために、改行コードが CR+LF 以外のテキストが読み込まれた時には、
警告の意味を込めて、そのようにして表示しているわけです。
ちなみに、LF の改行コードは、主にLinux系のOS環境で使われています。

一太郎はWindowsのソフトですので改行コードはCR+LFを使っているはずです。
何かのツールで、一太郎の文書をテキストファイルに変換するときに、
改行コードが CR+LF から LF に変換されたのかもしれません。

txt(LF)とは何でしょうか? 投稿者:saki
2010年7月1日(木)12時59分

一太郎で作った文書を、テキストファイルに変換して、MMエディタで開くと、MMエディタの画面の一番上のファイル名が表示されているところに、
「●●●●.txt(LF)」というように、拡張子txtの後ろに、
(LF)がついています。
 これは、どういうことでしょうか?

>re4:プリンタ名をその都度、指定しての印刷 投稿者:saki
2010年6月23日(水)23時12分

Miyamiya様

 どうも有難うございました。メッセージを表示するのは、一行で済むのかと思いましたが、難しいのですね。何も知らずにお願いして、申し訳ございませんでした。
 今回、作って頂いたメッセージ表示マクロは、他のマクロと組み合わせて、便利に使えそうです。
 初心者の希望に、親切丁寧にお応え下さり、どうも有り難うございました。

re3:プリンタ名をその都度、指定しての印刷 投稿者:Miyamiya
2010年6月23日(水)18時20分

sakiさんへ。
実際にプリンタの印字が終わった時点と言うのはマクロからは分かりませんので
メッセージが出るのは、マクロでの印刷処理が終わった時点と言うことになります。

34行目の
------------------------------------------------------------------
SetCurDirectory(sdir); // ディレクトリを元へ戻す
------------------------------------------------------------------
の下に、以下の2行を追加してください。
------------------------------------------------------------------
if(ans == 0 || ans == 1)
TimeOutMessage("印刷しました。", 3); // 3秒表示
------------------------------------------------------------------
そして、以下をmain();関数の下に追加してください。
------------------------------------------------------------------
#include <MmDialog.h>
#define IDC_STATIC 100
static int timeout;
// str: 表示するメッセージ
// time:表示する時間(秒) 5=5秒
void TimeOutMessage(char *str, int time)
{
timeout = time;
int ans = DIALOG(60, 20, 185, 23,
DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU,
0, NULL, NULL, "MMメッセージマクロ",
"MS Pゴシック", 9);
if(ans == 0)
return;
CONTROL("", IDC_STATIC, "static", SS_LEFT, 10, 6, 100, 12, 0);
CONTROL("終了(&C)", IDOK, "BUTTON",BS_DEFPUSHBUTTON, 140, 5, 38, 13, 0);
DialogParam((LPARAM)str);
}

LRESULT DialogProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
int Timer;
int id = LOWORD(wParam), code = HIWORD(wParam);
HWND pw = GetParent(Handle());
RECT pr, dr;
POINT pt;

GetClientRect(pw, &pr);
GetWindowRect(hdlg, &dr);
pt.x = ((pr.right - pr.left) - (dr.right - dr.left))/ 2;
pt.y = pr.top;
ClientToScreen(pw , &pt);
switch(msg)
{
case WM_INITDIALOG:
SetDlgItemText(hdlg, IDC_STATIC, (char*)lParam);
SetWindowPos(hdlg, 0, pt.x, pt.y, 0, 0, SWP_NOSIZE|SWP_NOZORDER);
Timer = SetTimer(hdlg, 100, timeout*1000, (void*)0);
break;
case WM_TIMER:
KillTimer(hdlg, Timer);
PostMessage(hdlg, WM_COMMAND, IDCANCEL, 0);
break;
case WM_COMMAND:
switch(id)
{
case IDCANCEL:
if(Timer)
KillTimer(hdlg, Timer);
break;
case IDOK:
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
------------------------------------------------------------------



re3:プリンタ名をその都度、指定しての印刷 投稿者:saki
2010年6月23日(水)09時22分

Miyamiya様

 うまく行きました。どうも有難うございました!!

 PrintStart(0)のところは、(1)にして「いきなり印刷」にしたのですが、印刷が終わった後、「印刷しました」というメッセージを3秒か5秒ほど出すことは、できますでしょうか?

 よろしくお願い申し上げます。

re2:プリンタ名をその都度、指定しての印刷 投稿者:Miyamiya
2010年6月22日(火)17時12分

sakiさんへ。
コンピューター名と元の印刷書式はマクロからはわからないので、
コンピューターについては、メニューで分岐するようにし、
元の印刷書式については、マクロに記述しておく必要があります。
9行目の
pr1dir = "c:\\mm\\mmeditor";
に、*.pr1 のあるフォルダ名をフルパスでセットして下さい
18行目の
prtbl[1] = "プリンタsaki-7.pr1"; // ここへsaki-7で使う印刷書式を指定
に、saki-7で使う印刷書式を指定して下さい

------------------------------------------------------------------
main()
{
int ans;
char sdir[300], *pr1dir;
char *s[4]; // メニュー用のポインタの配列
char *prtbl[2]; // 印刷書式ファイル名のポインタの配列

// ここに *.pr1 のあるフォルダ名をフルパスでセットして下さい
pr1dir = "c:\\mm\\mmeditor";

s[0] = "saki(&S)";
s[1] = "saki-7(&7)";
s[2] = ""; // セパレータ
s[3] = "終 了(&X)";

// メニューが選択されたときに呼び出される印刷書式ファイルのテーブル
prtbl[0] = "プリンタsaki.pr1"; // ここへ通常使う印刷書式を指定
prtbl[1] = "プリンタsaki-7.pr1"; // ここへsaki-7で使う印刷書式を指定

GetCurDirectory(sdir); // カレントディレクトリを保存
SetCurDirectory(pr1dir); // *.pr1 のあるディレクトリへ変更

while(1)
{
ans = Menu(s, 4); // メニューの表示
if(ans == 1)
LoadPrFile(prtbl[ans]); // 印刷書式ファイルを変更する
break;
}
if(ans == 0 || ans == 1)
PrintStart(0); // 0=通常の印刷, 1=いきなり印刷
if(ans == 1)
LoadPrFile(prtbl[0]); // 印刷書式ファイルを元へ戻す
SetCurDirectory(sdir); // ディレクトリを元へ戻す
}
------------------------------------------------------------------


>re2:プリンタ名をその都度、指定しての印刷 投稿者:saki
2010年6月22日(火)09時22分

miyamiya様

 どうも有難うございました。

 では、方向をかえて、プリンター2台の使い分けをしたいと思います。
 パソコン本体も複数、使って、プリンターを共有しているのですが、以下のようなことは、マクロで可能でしょうか? 

 基本的には、どのパソコンでも、現在、選択している印刷書式で、ダイアログを表示せず、すぐ印刷したいです。ですが、コンピューター名が「saki-7」の時に限り、一時的に「プリンタA.pr1」という印刷書式で印刷して、また元の印刷書式に戻したいと思っています。

 申し訳ございません。よろしくお願い申し上げます。



re:プリンタ名をその都度、指定しての印刷 投稿者:Miyamiya
2010年6月21日(月)13時08分

sakiさんへ。
マクロでも、印刷設定のプリンタ名が、仮に「EPSON PC-8900」になっていても、
「EPSON PX-201」にして印刷する、というようなことは、できないです。
マクロで行う場合には、
印刷設定でプリンタ名の異なった2個の印刷書式ファイル(*.pr1)を作り、
印刷書式ファイルを読み込む関数 LoadPrFile(); でそれらの印刷書式ファイルを
読み込んでから印刷を行うという操作になります。

プリンタ名をその都度、指定しての印刷 投稿者:saki
2010年6月21日(月)10時45分

プリンターを二台、使っています。普段、使っているMMエディタの印刷設定では、プリンタ名が「EPSON PC-8900」になっているのですが、「EPSON PX-201」に変更して、印刷したいことも頻繁にあります。
そういうときは毎回、印刷設定を手動で変更していますが、このマクロを起動すれば、印刷設定のプリンタ名が、仮に「EPSON PC-8900」になっていても、「EPSON PX-201」にして印刷する、というようにすることは、できますでしょうか。
よろしくお願い致します。

re3:キーボードマクロが登録できません 投稿者:Miyamiya
2010年3月22日(月)10時11分

初めてさんへ。
ダイアログを出して何かの操作をするマクロでは、ダイアログが表示された時点から
ウインドウズの全てのメッセージはダイアログへ届けられますので、ダイアログへ
飛んでくるメッセージをマクロ内で処理するようなコードを書かないとだめです。
具体的には、マクロキットの中に、ダイアログを使ったサンプル(openmam.mam等)が
いくつかありますので、それらを参考にされてください。
ダイアログを表示するマクロの作成は、ダイアログの作成とそのメッセージを処理する
コードを書かないといけないので、少し難しくなります。
ただ単にマクロで検索を行いたいのであれば、ダイアログを表示しないで、検索を行う
マクロのほうが簡単に作れます。

re3:キーボードマクロが登録できません   投稿者:初めて
2010年3月20日(土)18時48分

お世話になります。
次のようにマクロを作ったんですが、検索のダイアログを表示したところで止まってしまいます。
どう修正すればよろしいんでしょうか?

main()
{
char *str;
PutChr(17 << 8);
str = "データ";
SetFindS(str);
Find();

}

re2:キーボードマクロが登録できません  投稿者:初めて
2010年3月20日(土)16時18分

>検索ウインドウを出しての操作を行う場合は、マクロを
書かないとだめです。

回答ありがとうございます。
直接マクロを書いてみます。

re:キーボードマクロが登録できません 投稿者:Miyamiya
2010年3月20日(土)15時47分

初めてさんへ。
キーボードマクロは、ショートカットキーでのダイアログを出しての操作には
対応していません。検索ウインドウを出しての操作を行う場合は、マクロを
書かないとだめです。

キーボードマクロが登録できません 投稿者:初めて
2010年3月20日(土)11時28分

宮崎さん、こんにちは。
初めてお世話になります。
マクロ作成のため、まずキーボードマクロを登録しようとしているのですが、うまく行きません。

手始めに検索ウインドウを出そうとしています。
1.キーボードマクロの記録終了をクリック
2.検索ウインドウを出すために、CTRL+[Q][F] を押す
3.キーボードマクロの記録終了をクリック
4.キーボードマクロの保存をクリック

エディタで見ても中身がありません。
ちなみに、同じ手順で文字列を入力してみるとうまく登録できています。

どこか間違っているのでしょうか?

re:ドイツ語原文を編集できますか? 投稿者:Miyamiya
2010年3月18日(木)12時29分

ヒョンさんへ。
最新のMMエディタでもそのあたりの変更は特にありません。
unicodeのテキストをunicodeモードで編集中は、マクロは使えないです。
unicodeではないドイツ語のテキストであれば、編集メニューの言語で西ヨーロッパ言語を
指定してフォントの設定で西ヨーロッパ言語を表示できるフォントを指定すれば
表示できるはずです。入力して編集には、ドイツ語を入力できるキーボードがあれば
できるはずです。

ドイツ語原文を編集できますか? 投稿者:ヒョン
2010年3月17日(水)12時22分

宮崎さん、こんにちは、いつもお世話になります。

新しいMmEditorでドイツ語原文を編集出来るでしょうか?古いので、unicodeを指定しますと、マクロが動きません。改善されているのでしょうか?

ただいま、ドイツ語文献がネットで配信されており、いつ削除されるか分からないので、保存しておきたいのです。

宜しくご返答お願い致します。

re:バージョンアップライセンス料 投稿者:Miyamiya
2010年3月12日(金)20時55分

しのちゃん さんへ

ご指摘、ありがとうございます。
ホームページの一部でミスしていたようです、このページは修正しておきます。

以下のように、配布の説明書の冒頭の内容のとおりでございます。
よろしくお願いします。

[縦書き可★MMエディタ]Ver 8.01
----------------------
★「重要なお知らせ」★
 Windows7 に対応した、2009年10月の MMエディタ V8.00以上では、
 バージョンアップ料金(3,000円(税込み))をお願いします。
 これはV8.00より前の旧バージョンからのバージョンアップ料金です。
 新規のユーザー登録料は、これまでと同じで 4,000円(税込み)です。
 これまでの旧バージョンのユーザーIDでお使いの場合は、新たに初期画面の
 ユーザー登録の画面が表示されます。
 V8.00では旧バージョンのユーザーIDは使えません、新IDが必要となります。

 ※但し、2009年4月1日以降のMMエディタの購入者は、
  現在お使いのユーザーIDで、V8.00 を継続してお使いいただけます。
  この期間の購入者は、バージョンアップ利用は無料とします。
----------------------

バージョンアップライセンス料 投稿者:しのちゃん
2010年3月12日(金)16時46分

ホームページでは
>V3.0以前からのバージョンアップのライセンス料 単価 3.000円(税込み)

とありますが
説明書には
>2009年10月の MMエディタ V8.00以上では、
> バージョンアップ料金(3,000円(税込み))をお願いします。

とあります。
どちらも正しいのでしょうか。

re:64ビットOSには? 投稿者:しのちゃん
2010年3月4日(木)09時17分

Miyamiya様

>32bitアプリケーションは、64bit版のWindows 7でも問題なく動作する

そうですか。購入したら試して見ます。今は購入するかどうか、情報を得ている段階で…
ありがとうございます。

re:64ビットOSには? 投稿者:Miyamiya
2010年3月3日(水)17時27分

しのちゃんさんへ。
先ほどの書き込みで、
64ビット版のWindows 7には対応していないです。
と書きましたが、
MMエディタは、32bitアプリケーションですが、
たいていの32bitアプリケーションは、64bit版のWindows 7でも問題なく動作する
ようですので、64ビット版のWindows 7でも使用できるのではないでしょうか。
64ビット版のWindows 7をお使いなら、使用されて見られるとよいです。

re:64ビットOSには? 投稿者:Miyamiya
2010年3月3日(水)11時59分

しのちゃんさんへ。
64ビット版のWindows 7には対応していないです。

64ビットOSには? 投稿者:しのちゃん
2010年3月2日(火)16時40分

64ビット版のWindows 7には対応していますでしょうか?
re:一行選択時の改行不コピーの可否について 投稿者:satoru
2010年1月28日(木)08時39分

宮崎様 お世話様です。

1論理行のコピーをマクロ登録・実行、ご教示ありがとうございます。おかげさまで成功しました!
こちらのほうが、複数行でも1行でも、とにかく1論理行として認識・実行してくれるので、今後、この範囲選択でのマクロ登録を重宝させていただきます。

おかげさまで、作業効率が格段アップ間違いなしです。
この度は大変ありがとうございました。

re:一行選択時の改行不コピーの可否について 投稿者:Miyamiya
2010年1月27日(水)12時39分

satoruさんへ。
論理行1行分を範囲選択の動作を含めて、キーボードマクロへ登録したいならば、
まず、カーソルを選択開始行の先頭カラム位置へ移動します、
そして、キーボードマクロの登録を開始します。
Ctrl+B で選択開始、 Ctrl+Q+L で論理行末へ移動、 Ctrl+C でコピー
の操作で、改行を含まない1論理行のコピーが行えます。

re:一行選択時の改行不コピーの可否について 投稿者:satoru
2010年1月26日(火)13時56分

宮崎様 お世話になっております。

キーボードマクロなるもの、初めて体験させていただきました!
これはものすごく便利な機能でございますね。
1行選択コピペ(改行含まず)は、確認・把握いたしました。

これが、もし1段落分(表示では複数行ですが、論理行としては1行分)の場合、【改行含まずコピペ】の動作をキーボードマクロに登録させるには、
どのようなキーボード操作になるのでしょう?
試しにやってみたところ、選択した行数分(文字分)がキーボードマクロとして登録され、1段落(1論理行)分とはなりませんでした。

何か別の方法があるのか……それともカーソルのショートカットに【論理行末に】がありますが、【論理行末まで選択】といったことができるのでしょうか?
恐れ入りますが、何卒よろしくお願いいたします。

re:一行選択時の改行不コピーの可否について 投稿者:Miyamiya
2010年1月26日(火)12時22分

satoruさんへ。
左矢印キーを押すのが面倒なら、キーボードマクロで、
左矢印キーを押してコピー作業(Ctrl+C)の動作を記録して、
それをマクロファイルに保存して、そのマクロにショートカットキーを設定すれば
1キー操作で、【改行を除いた文字のみのコピー】が行えます。

re:一行選択時の改行不コピーの可否について 投稿者:satoru
2010年1月24日(日)18時42分

宮崎様 お世話になっております。

改行を入れたくないコピーのときは、従来からおっしゃる通り方向キーの方法をしておりました。
ただ、マウス使用での行選択作業時、数百回と同じ作業の繰り返しだと、どうしてもキーに指を使うことが煩わしくなってしまうもので……。
もしかしたら、環境設定の編集項目などで「マウスでの行選択時、改行はコピーしない」といった設定がもしできたら……と思った次第でございます。

無理難題な要望みたいになってしまいまして、申しわけございませんでした。

re:一行選択時の改行不コピーの可否について 投稿者:Miyamiya
2010年1月22日(金)12時12分

satoruさんへ。
マウスで行番号をクリックした後に左矢印キーを1回押してからコピー作業(Ctrl+C)を
行うと【改行を除いた文字のみのコピー】ができます。
複数行を選択した時も同じです。

一行選択時の改行不コピーの可否について 投稿者:satoru
2010年1月21日(木)11時50分

宮崎様、いつもお世話になっております。
マウスで行番号をクリックし、一行選択した後にコピー作業時(Ctrl+C)、【改行を除いた文字のみのコピー】というのは果たして可能なのでしょうか?
他アプリに文字コピーしたいとき、改行が不要なときが多々あるもので……。

また上記の発展で、複数行を選択した時の、一番最後の改行のみコピー不要が可能かどうかもお伺いいたします。

恐れ入りますが、ご教示のほど何卒よろしくお願いいたします。

RE: 正規表現での一括置き換え 投稿者:Mizuno
2010年1月5日(火)17時26分

宮崎さん、こんにちは。
希望とおり、改行マークを一括削除できました。
ありがとうございました。

re:正規表現の一括置き換えについて 投稿者:Miyamiya
2010年1月5日(火)16時03分

Mizunoさんへ。
この場合は、正規表現検索ではなくて、
\をエスケープ文字として検索、置換
のチェックボックスをチェックして、
検索文字列に 。\n」
置換文字列に 。」
をセットして置換を行うとよいです。

●私へのメール:miyamiya@po.saganet.ne.jp
戻る