home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1998 March / VPR9803B.ISO / APUPDATE / VC / Tx300b / TX300B.LZH / CONFIG.C < prev    next >
Text File  |  1997-06-16  |  139KB  |  4,345 lines

  1. // WZ EDITOR 標準機能 設定
  2. // Copyright 1996 TY
  3. // TX-C source program
  4.  
  5. //2.95 970125 設定ダイアログとカスタマイズダイアログを分離
  6. //2.99 970319 表示フォントの指定を仕様変更して改良
  7. //2.99 970320 印刷時のプロポーショナルON/OFFは画面表示に合わせる
  8.  
  9. #include <windows.h>
  10. #include <windowsx.h>
  11. #include "_filer.h"
  12.  
  13. #import "dialog"
  14. #import "search"
  15. #import "custmize"
  16.  
  17. extern "tx" BOOL TXAPI txSaveOption(tx* text);
  18. extern "tx" BOOL TXAPI shcfgSave(tx* text);
  19.  
  20. static mchar _szcfgStd[] = SZCFG_STD;    // "標準"設定
  21.  
  22. static void contextFromText(TX* text);
  23.  
  24. #define IDD_FONTKINDSTD        2000
  25. #define IDD_FONTKINDANK        2001
  26. #define IDD_PROP            2002
  27. #define IDD_KINSOKU_ANK        2003
  28. #define IDD_STYLE            2004
  29. #define IDD_STYLEEDIT        2005
  30. #define IDD_SAVE            2006
  31. #define IDD_WIDTH            2007
  32. #define IDD_DELETE            2010
  33. #define IDD_VERTICAL        2011    // 2012も使用
  34. #define IDD_LOAD            2015
  35. #define IDD_MENUBAR            2016
  36. #define IDD_MENUMOUSER        2017
  37. #define IDD_MENUMOUSERCLIP    2018
  38. #define IDD_KEY                2019
  39. #define IDD_TOOLBAR            2020
  40. #define IDD_PLUG            2021
  41. #define IDD_STYLERESET        2022
  42. #define IDD_PREVIEW            2023
  43. #define IDD_PREVIEW2        2024
  44. #define IDD_PREVIEW3        2025
  45. #define IDD_HELP            2026
  46. #define IDD_DETAIL            2027
  47. #define IDD_CONFIGBASE        2028
  48. #define IDD_EXTLIST            2029
  49. #define IDD_UPDATEALL        2030
  50. #define IDD_INIT            2031
  51. #define IDD_PRINTERFONT        2033
  52. #define IDD_SAVETO            2034
  53. #define IDD_TEMP            2035
  54. #define IDD_STYLEPREVIEW    2038
  55. #define IDD_STYLEPREVIEWALWAYS    2039
  56. #define IDD_NEW                2040    //2.00E2 
  57. #define IDD_COLORPARSE        2041
  58. #define IDD_CUSTKEY            2042
  59. #define IDD_CUSTMENUBAR        2043
  60. #define IDD_CUSTCONTEXTMENU    2044
  61. #define IDD_CUSTCONTEXTMENUSELECT    2045
  62. #define IDD_CUSTTOOLBAR        2046
  63. #define IDD_FONTDETAIL        2047
  64. #define IDD_FORMATSTR        2048
  65. #define IDD_ANK                2049
  66. #define IDD_NEWKEYWORDFILE    2050
  67. #define IDD_EDITKEYWORD        2051
  68. #define IDD_SAVEAS            2052
  69. #define IDD_KEYWORDNAME        2053
  70. #define IDD_AUTOCORRECT        2054
  71. #define IDD_WESTERN            2055    // 2056,2057も使用
  72. #define IDD_WIDTHMODE        2058    // 2059,2060も使用
  73. #define IDD_MYCOLOR            2070    //2.99C 970326 
  74. #define IDD_CUST_COLOR        2071    //2.99C 970326 
  75. #define IDD_CUSTSPEAK        2072    //3.00A5 970511 
  76. #define IDD_CUST_COLOR_VIEWMODE    2073//3.00B1 970613 
  77.  
  78. #define IPAGE_FORM            0
  79. #define IPAGE_DISPLAY        1
  80. #define IPAGE_COLOR            2
  81. #define IPAGE_WINDOW        3
  82. #define IPAGE_FILE            4
  83. #define IPAGE_EDIT            5
  84. #define IPAGE_SEARCH        6
  85. #define IPAGE_FORMDT        7
  86. #define IPAGE_HELP            8
  87. //
  88. #define IPAGE_STYLE            9
  89. #define IPAGE_VIEWMODE        10    //3.00B1 970613 
  90. //
  91. #define IPAGE_CUST_TOP        11    // 次行のIDと同じ
  92. #define IPAGE_CUST_FILE        11
  93. #define IPAGE_CUST_SAVE        12
  94. #define IPAGE_CUST_EDIT        13
  95. #define IPAGE_CUST_COLOR    14
  96. #define IPAGE_CUST_SEARCH    15
  97. #define IPAGE_CUST_SCROLL    16
  98. #define IPAGE_CUST_KINSOKU    17
  99. #define IPAGE_CUST_COMPATI    18
  100. #define IPAGE_CUST_KEY        19
  101. #define IPAGE_CUST_MENU        20
  102. #define IPAGE_CUST_TOOLBAR    21
  103. #define IPAGE_CUST_MOUSE    22
  104. #define IPAGE_CUST_MACRO    23
  105. #define IPAGE_CUST_MACRODEV    24
  106. #define IPAGE_CUST_STATBAR    25
  107. #define IPAGE_CUST_WINDOW    26
  108. #define IPAGE_CUST_OTHER    27
  109. #define IPAGE_CUST_END        27    // 前行のIDと同じ
  110. #define IPAGE_N                28
  111.  
  112. #define IPAGE_CUST_COLORSUB    99    //2.99C 970326 special
  113.  
  114. #define IPAGES_CONFIG    100
  115. #define IPAGES_CUSTMIZE    101
  116.  
  117. static int _ipageMode;
  118.  
  119. //{###設定}
  120.  
  121. keyEdit
  122. {
  123. // キー定義ファイルの編集
  124.     mchar szfilename[CCHPATHNAME];
  125.     pathFullConfig(szfilename,"wz.key");//2.00E 
  126.     txOpenForkExFast(text,szfilename);
  127. }
  128.  
  129. menuEdit
  130. {
  131. // ユーザメニュー定義ファイルの編集
  132.     mchar szfilename[CCHPATHNAME];
  133.     pathFullConfig(szfilename,"wz.mnu");//2.00E 
  134.     txOpenForkExFast(text,szfilename);
  135. }
  136.  
  137. toolbarEdit
  138. {
  139. // ツールバー定義ファイルの編集
  140.     mchar szfilename[CCHPATHNAME];
  141.     pathFullConfig(szfilename,"wz.bar");//2.00E 
  142.     txOpenForkExFast(text,szfilename);
  143. }
  144.  
  145. // 設定ダイアログ
  146.  
  147. //{###設定}
  148.  
  149. typedef struct {
  150.     TX _text;
  151.     TX* text;
  152.     TX* textf;    //2.91 
  153.     TX _text0;    //2.95 970127 for 設定が変更されたかどうか調べる
  154.     BOOL fEnglish0;//2.99D 970328 
  155.     TXCONFIGSHARE shcfg;
  156.     SEARCHOPT searchopt;
  157.     BYTE autosaveDevice;
  158.     BYTE autosaveMode;
  159.     BYTE autosaveAtQuit;
  160.     BYTE autosaveAtOpen;
  161.     BBOOL fAfArticleDisc;//2.98 970309 
  162.     BBOOL fAfTitle;//2.98 970309 
  163.     BBOOL fInlineformScenario;//2.99 970319 
  164.     BBOOL fInlineformIndentSpace;//2.99 970319 
  165.     BBOOL fInlineformQueryQuit;//3.00A2 970507 
  166.     BYTE modeInlineformZenhanSpace;//3.00A2 970507 
  167.     BYTE modeInlineformWordlap;//3.00A2 970507 
  168.     BYTE lcxInlineformIndentTogaki;//3.00A2 970507 
  169.     BYTE lcxInlineformIndentSerifu;//3.00A2 970507 
  170.     BYTE modeWidth;//2.99A 970321 
  171.     int width;//2.99A 970321 
  172.     BOOL fWzconfig;
  173.     BOOL fDummy1;        //2.00B 
  174.     BOOL fEdit;            //2.00B 
  175.     BYTE head_tfBold[TITLE_N];
  176.     BYTE head_tfUnderline[TITLE_N];
  177.     BYTE head_tfItalic[TITLE_N];
  178.     BYTE head_tmodeAlign[TITLE_N];
  179.     BYTE head_nline[TITLE_N];
  180.     BOOL fPreviewStyle;    //2.00C スタイルのプレビューが表示されなかった
  181.     BOOL fPreviewStyleAlways;    //2.00C 常にプレビューを表示
  182.     BOOL ret;    //2.00E2 __dialogConfigの返り値
  183. } CONFIGCONTEXT;
  184. static CONFIGCONTEXT context;
  185. permanent BOOL _fConfigShare;
  186. permanent BOOL _fPrinterFontOnly;
  187. static BOOL _fPrint;
  188. static BOOL _fNoFlush;
  189.  
  190. //2.00B 位置を覚える
  191. static BOOL _fWindowPos = FALSE;
  192. static int _x;
  193. static int _y;
  194.  
  195. static void contextToText(tx* text)
  196. {
  197.     txCopyConfig(text,context.text);
  198.     text->autosaveDevice = context.autosaveDevice;
  199.     text->autosaveMode = context.autosaveMode;
  200.     text->autosaveAtQuit = context.autosaveAtQuit;
  201.     text->autosaveAtOpen = context.autosaveAtOpen;
  202.     text->fAfArticleDisc = context.fAfArticleDisc;//2.98 970309 
  203.     text->fInlineformScenario = context.fInlineformScenario;//2.99 970319 
  204.     text->fInlineformIndentSpace = context.fInlineformIndentSpace;//2.99 970319 
  205.     text->fInlineformQueryQuit = context.fInlineformQueryQuit;//3.00A2 970507 
  206.     text->modeInlineformZenhanSpace = context.modeInlineformZenhanSpace;//3.00A2 970507 
  207.     text->modeInlineformWordlap = context.modeInlineformWordlap;//3.00A2 970507 
  208.     text->lcxInlineformIndentTogaki = context.lcxInlineformIndentTogaki;//3.00A2 970507 
  209.     text->lcxInlineformIndentSerifu = context.lcxInlineformIndentSerifu;//3.00A2 970507 
  210.     text->fAfTitle = context.fAfTitle;//2.98 970309 
  211. #if 1//2.99A 970321 折り返し幅は、「文字数と行数を指定する」以外を選んでも保存するようにした
  212.     #if 1//2.99A 970321 
  213.     text->tmodeWidth[text->dispstylemode] = context.modeWidth;
  214.     text->twidth[text->dispstylemode] = text->width = context.width;
  215.     #else
  216.     text->fSetWidthByWindow = (context.modeWidth == 0);
  217.     text->fSetWidthByLp = (context.modeWidth == 1);
  218.     text->tmodeWidth[text->dispstylemode] = context.modeWidth;
  219.     #endif
  220. #endif
  221.     text->searchmodeInit = searchmodeFromSearchopt(&context.searchopt);
  222.     if (context.text->tFontstyle) {
  223.         memcpy(text->tFontstyle,context.text->tFontstyle,SIZE_TFONTSTYLE);
  224.         {
  225.             int i;
  226.             for (i = 0;i < TITLE_N;i++) {
  227.                 FONTSTYLE* fs = &text->tFontstyle[FONTTX_H1 + i];
  228.                 {
  229.                     int nline = context.head_nline[i];
  230.                     fs->perNline = nline ? nline * 50 + 50 : 0;
  231.                 }
  232.                 fs->fBold = context.head_tfBold[i];
  233.                 fs->fUnderline = context.head_tfUnderline[i];
  234.                 fs->fItalic = context.head_tfItalic[i];
  235.                 //
  236.                 fs->modeAlign = context.head_tmodeAlign[i];
  237.             }
  238.         }
  239.     }
  240.     strcpy(text->szKey,context.shcfg.szenvkey);
  241.     {
  242.         int i;
  243.         for (i = 0;i < FORMAT_N;i++) {
  244.             strfromesc(text->tszformat[i]);
  245.         }
  246.         for (i = 0;i < TITLE_N;i++) {//3.00B1 970612 見出しに'\'を指定できなかった
  247.             strfromesc(text->tsztitle[i]);
  248.         }
  249.     }
  250. }
  251.  
  252. static void getcaption(TX* text,mchar buff[CCHPATHNAME])
  253. {
  254. //3.00A5 970511 引数text追加
  255.     //2.00B "(表示スタイル1)"の表示はわかりにくい
  256.     // (印刷の設定ができないと思われる)ので廃止
  257.     if (_fPrint) {
  258.         #if 1//2.00E2 
  259.         sprintf(buff,"スタイルシートの設定 - %s - 本文フォントと見出しフォント",text->lp->szstyle);
  260.         #else
  261.         strcpy(buff,"本文フォントと見出しフォント");
  262.         #endif
  263.     } else {
  264.         mchar szcfgname[CCHNAME];//2.00E2 
  265. #if 1//3.00A5 970511 WZ文書ファイルの設定名は、ファイル名を表示するようにした
  266.     #if 1//3.00A6 970512 印刷スタイルの設定からの本文、見出しフォントの設定ダイアログ呼び出しのキャプション名改良。個別設定のキャプションに対応
  267.         mchar* szGuide = "文書の設定 - %s / カスタマイズ - 共通";
  268.         if (_ipageMode == IPAGE_STYLE) szGuide = "文書の設定 - %s - 本文フォントと見出しフォント";
  269.         if (_ipageMode == IPAGES_CONFIG) szGuide = "文書の設定 - %s";
  270.         if (_ipageMode == IPAGES_CUSTMIZE) szGuide = "カスタマイズ - 共通 / [ ]付きの項目:%sの設定";
  271.         sprintf(
  272.             buff,szGuide,
  273.             text->fWztext ? (text->szfilename[0] ? pathGetFileName(text->szfilename) : "WZ文書ファイル(無題)") : txConfigOp(text,TXCONFIGOP_EXTGETNAME,szcfgname)
  274.         );
  275.     #else
  276.         sprintf(
  277.             buff,
  278.             ((_ipageMode == IPAGES_CONFIG) ? "文書の設定 - %s" : "カスタマイズ - 共通 / [ ]付きの項目:%sの設定"),//3.00A3 970508 カスタマイズダイアログのキャプションを改良
  279.             text->fWztext ? (text->szfilename[0] ? pathGetFileName(text->szfilename) : "WZ文書ファイル(無題)") : txConfigOp(text,TXCONFIGOP_EXTGETNAME,szcfgname)
  280.         );
  281.     #endif
  282. #else
  283.         sprintf(
  284.             buff,
  285.             ((_ipageMode == IPAGES_CONFIG) ? "文書の設定 - %s" : "カスタマイズ - 共通 / [ ]付きの項目:%sの設定"),//3.00A3 970508 カスタマイズダイアログのキャプションを改良
  286.             txConfigOp(text,TXCONFIGOP_EXTGETNAME,szcfgname)
  287.         );
  288. #endif
  289. #if 0//3.00B1 970613 
  290.         if (txGetViewmode(text)) {//2.00E4 
  291.             if (stricmp(szcfgname,"ビューモード")) {
  292.                 strcat(buff,"/ビューモード");
  293.             }
  294.         }
  295. #endif
  296.         if (text->fConfigsavePrim) {//2.00E2 
  297.             // '/'の後の名前を付けて保存される場合
  298.             txConfigOp(text,TXCONFIGOP_EXTGETNAMEPRIM,szcfgname);
  299.             sprintf(buff+strlen(buff),"/%s",szcfgname);
  300.         }
  301.     }
  302. }
  303.  
  304. static void DoCaption(HWND hwnd)
  305. {
  306.     mchar buff[CCHPATHNAME];
  307.     getcaption(context.textf,buff);
  308.     SetWindowText(hwnd,buff);
  309. }
  310.  
  311. //
  312. //    設定
  313. //
  314.  
  315. static int tidPrintFontStd[FONTTX_N];
  316. static int tidPrintFontAnk[FONTTX_N];
  317.  
  318. //2.98 970307「表示」タブのフォントと「高度なフォントの指定」タブのフォントが入り乱れていた
  319. // 以下、0なら無効。ダイアログを閉じたら0に初期化する。
  320. static int idFontBase;//2.98 970307 「表示」タブのフォント
  321. //2.98 970307 以下、「高度なフォントの指定」タブのフォント
  322. static int idFontStd;
  323. static int idFontAnk;
  324.  
  325. //##
  326.  
  327. static BOOL isexist3d(void)
  328. {
  329.     BOOL ret = TRUE;
  330.     
  331.     SetErrorMode(SEM_NOOPENFILEERRORBOX);
  332.     {
  333.         #ifdef __FLAT__
  334.         HINSTANCE hlib = LoadLibrary("CTL3D32.DLL");
  335.         #else
  336.         HINSTANCE hlib = LoadLibrary("CTL3DV2.DLL");
  337.         #endif
  338.         if (hlib < HINSTANCE_ERROR) {
  339.             ret = FALSE;
  340.         }
  341.         FreeLibrary(hlib);
  342.     }
  343.     return ret;
  344. }
  345.  
  346. static mchar* _szGuideStdFont = "全角フォント(&F):";
  347.  
  348. #if 0//2.99C 970323 
  349. static void EnableDlgItem(HWND hwnd,int id,BOOL fEnable)
  350. {
  351. //2.96 970208 
  352.     HWND hctrl = GetDlgItem(hwnd,id);
  353.     if (hctrl) EnableWindow(hctrl,fEnable);
  354. }
  355. #endif
  356.  
  357. static void EnableFontkindInit(HDIALOG hd,int id)
  358. {
  359.     if (id) {
  360.         FONTNAMES* fontnames = fontnamesFromId(hd,id);
  361.         if (fontnames) {
  362.             fontnames->lfCharSet = SHIFTJIS_CHARSET;
  363.             fontnamesFlush(fontnames);
  364.         }
  365.     }
  366. }
  367.  
  368. // フォント初期化
  369. static void EnableFontkind(HWND hwnd,BOOL lfProp,BOOL lfWestern)
  370. {
  371.     SetDlgItemText(hwnd,IDD_FONTKINDSTD,_szGuideStdFont);
  372.     {
  373.         HDIALOG hd = dialogFromHwndPshpage(hwnd);
  374.         EnableFontkindInit(hd,idFontStd);
  375.         EnableFontkindInit(hd,idFontBase);
  376.     }
  377.     BOOL fEnableAnk = TRUE;
  378.     EnableDlgItem(hwnd,IDD_FONTKINDANK,fEnableAnk);
  379.     if (idFontAnk) {
  380.         EnableDlgItem(hwnd,idFontAnk,fEnableAnk);
  381.         EnableDlgItem(hwnd,idFontAnk + 1,fEnableAnk);
  382.     }
  383. #if 0    //2.00E2 プロポーショナルoffでも英字禁則できるようにした
  384.     EnableDlgItem(hwnd,IDD_KINSOKU_ANK,lfProp);
  385. #endif
  386. }
  387.  
  388. //##
  389.  
  390. static int _ipageNow;
  391. static int _ipageConfig;
  392. static int _ipageCustmize;
  393. static int _tLogicalPage[IPAGE_N];    // 物理ページ番号と論理ページ番号の対応表
  394.  
  395. // 物理ページ番号を論理ページ番号に変換
  396. static int ipageLogical(int ipage)
  397. {
  398.     return _tLogicalPage[ipage];
  399. }
  400.  
  401. static void fontsel(HDIALOG hd,TX* text,int ifonttx,BOOL fHigh)
  402. {
  403.     FONTSTYLE* tfs = text->tFontstyle;
  404.     if (tfs) {
  405.         FONTSTYLE* fs = tfs + ifonttx;
  406.         SELFONTARG arg;
  407.         memset(&arg,0,sizeof(arg));
  408.         arg.lfPitch = DEFAULT_PITCH;
  409.         dialogSetH(hd);
  410.         dialogSetIntXY(hd,DTCXINT,0);
  411.         //
  412.         if (fHigh) {
  413.             dialogControlID(hd,IDD_FONTKINDSTD);
  414.             dialogCaption(hd,_szGuideStdFont);
  415.         } else {
  416.             dialogCaption(hd,"フォント(&F):");
  417.         }
  418.         arg.lfCharSet = SHIFTJIS_CHARSET;
  419.         dialogControlHelp(hd,276);
  420.         int id = dialogSelectFont(hd,NULL,0,
  421.             fs->tlfFaceName[IFONT_STD],
  422.             &fs->tlfHeight[IFONT_STD],
  423.             &arg
  424.         );
  425.         if (fHigh) {
  426.             idFontStd = id;
  427.         } else {
  428.             idFontBase = id;
  429.         }
  430.         dialogLF(hd);
  431.         dialogSpaceV(hd);
  432.         if (fHigh) {
  433.             dialogControlID(hd,IDD_FONTKINDANK);
  434.             dialogControlHelp(hd,277);
  435.             dialogCaption(hd,"半角フォント(&E):");
  436.             arg.lfCharSet = DEFAULT_CHARSET;
  437.             arg.fEnableDefaultFaceName = TRUE;//2.99 970320 
  438.             arg.fEnableDefaultHeight = TRUE;
  439.             idFontAnk = dialogSelectFont(hd,NULL,0,
  440.                 fs->tlfFaceName[IFONT_ANK],
  441.                 &fs->tlfHeight[IFONT_ANK],
  442.                 &arg
  443.             );
  444.             dialogLF(hd);
  445.             dialogSpaceV(hd);
  446.         }
  447.         dialogSetV(hd);
  448.         dialogResetInt(hd);
  449.     }
  450. }
  451.  
  452. static void dialogGroupEndCheckB(HDIALOG hd,mchar *szcaption,BBOOL *data)
  453. {
  454.     DTRECT r;
  455.     dialogGroupEndGetRect(hd,&r);
  456.     DTRECT r1 = r;
  457.     r.x += DTCX;
  458.     dialogSetPos(hd,&r);
  459.     dialogCheckB(hd,szcaption,data);
  460.     r1.y += r1.cy;
  461.     dialogSetPos(hd,&r1);
  462. }
  463.  
  464. static int dialogSelectColor(HDIALOG hd,mchar* szCaption,BYTE* data,int wCaption,int wData)
  465. {
  466.     return dialogSelectIDB(
  467.         hd,szCaption,data,wCaption,wData,
  468.         "なし","太字","下線","太字・下線","色分け","色分け・太字","色分け・下線","色分け・太字・下線"
  469.     );
  470. }
  471.  
  472. static int dialogColorParse(TX* text)
  473. {
  474.     HDIALOG hd = dialog("高度な色分け");
  475.     int lcx2 = 20;
  476.     DTRECT r1;
  477.     switch(text->filekind) {
  478.         case TEXT_C: {
  479.             dialogGroup(hd,"Cプログラムの色分け");
  480.                 dialogControlHelp(hd,30);
  481.                 dialogCheckB(hd,"C言語字句を色分け表示する(&P)",&text->fDispParse);
  482.                 dialogSetH(hd);
  483.                 dialogControlHelp(hd,31);
  484.                 dialogColor(hd,"文字列の色(&S)...","文字列の色",&text->rgbString,lcx2,NULL);
  485.                 dialogControlHelp(hd,32);
  486.                 dialogColor(hd,"定数の色(&C)...","定数の色",&text->rgbConst,lcx2,NULL);
  487.                 dialogLF(hd);
  488.                 dialogControlHelp(hd,33);
  489.                 dialogColor(hd,"コメントの色(&O)...","コメントの色",&text->rgbComment,lcx2,NULL);
  490.                 dialogControlHelp(hd,34);
  491.                 dialogColor(hd,"プリプロセッサの色(&R)...","プリプロセッサコマンド行の色",&text->rgbPreprocessor,lcx2,NULL);
  492.                 #if 0//2.95 970128 エラーは今のところ判別しない
  493.                 dialogLF(hd);
  494.                 dialogControlHelp(hd,35);
  495.                 dialogColor(hd,"エラー文字の色(&E)...","エラー文字列の色",&text->rgbErrorChar,lcx2,NULL);
  496.                 #endif
  497.             dialogGroupEnd(hd);
  498.             break;
  499.         }
  500. #if 1    //2.99D 970331 ASM,BASICの高度な色分けがなかった
  501.         case TEXT_PASCAL:
  502.         case TEXT_FORTRAN:
  503.         case TEXT_SCRIPT:
  504.         case TEXT_ASM:
  505.         case TEXT_BASIC: {
  506.             mchar* sz = "";
  507.             switch(text->filekind) {
  508.                 case TEXT_PASCAL: sz = "pascal";break;
  509.                 case TEXT_FORTRAN: sz = "FORTRAN";break;
  510.                 case TEXT_SCRIPT: sz = "スクリプト";break;
  511.                 case TEXT_ASM: sz = "アセンブラ";break;
  512.                 case TEXT_BASIC: sz = "BASIC";break;
  513.             }
  514.             dialogGroup(hd,sz + "プログラムの色分け");
  515.                 dialogControlHelp(hd,30);
  516.                 dialogCheckB(hd,sz + "言語字句を色分け表示する(&P)",&text->fDispParse);
  517.                 dialogControlHelp(hd,31);
  518.                 dialogColor(hd,"文字列の色(&S)...","文字列の色",&text->rgbString,lcx2,NULL);
  519.                 dialogControlHelp(hd,32);
  520.                 dialogColor(hd,"定数の色(&C)...","定数の色",&text->rgbConst,lcx2,NULL);
  521.                 dialogControlHelp(hd,33);
  522.                 dialogColor(hd,"コメントの色(&O)...","コメントの色",&text->rgbComment,lcx2,NULL);
  523.             dialogGroupEnd(hd);
  524.             break;
  525.         }
  526. #else
  527.         case TEXT_PASCAL: {
  528.             dialogGroup(hd,"pascalプログラムの色分け");
  529.                 dialogControlHelp(hd,30);
  530.                 dialogCheckB(hd,"pascal言語字句を色分け表示する(&P)",&text->fDispParse);
  531.                 dialogControlHelp(hd,31);
  532.                 dialogColor(hd,"文字列の色(&S)...","文字列の色",&text->rgbString,lcx2,NULL);
  533.                 dialogControlHelp(hd,32);
  534.                 dialogColor(hd,"定数の色(&C)...","定数の色",&text->rgbConst,lcx2,NULL);
  535.                 dialogControlHelp(hd,33);
  536.                 dialogColor(hd,"コメントの色(&O)...","コメントの色",&text->rgbComment,lcx2,NULL);
  537.             dialogGroupEnd(hd);
  538.             break;
  539.         }
  540.         case TEXT_FORTRAN: {
  541.             dialogGroup(hd,"FORTRANプログラムの色分け");
  542.                 dialogControlHelp(hd,30);
  543.                 dialogCheckB(hd,"FORTRAN言語字句を色分け表示する(&P)",&text->fDispParse);
  544.                 dialogControlHelp(hd,31);
  545.                 dialogColor(hd,"文字列の色(&S)...","文字列の色",&text->rgbString,lcx2,NULL);
  546.                 dialogControlHelp(hd,32);
  547.                 dialogColor(hd,"定数の色(&C)...","定数の色",&text->rgbConst,lcx2,NULL);
  548.                 dialogControlHelp(hd,33);
  549.                 dialogColor(hd,"コメントの色(&O)...","コメントの色",&text->rgbComment,lcx2,NULL);
  550.             dialogGroupEnd(hd);
  551.             break;
  552.         }
  553.         case TEXT_SCRIPT: {
  554.             dialogGroup(hd,"スクリプトプログラムの色分け");
  555.                 dialogControlHelp(hd,30);
  556.                 dialogCheckB(hd,"スクリプト言語字句を色分け表示する(&P)",&text->fDispParse);
  557.                 dialogControlHelp(hd,31);
  558.                 dialogColor(hd,"文字列の色(&S)...","文字列の色",&text->rgbString,lcx2,NULL);
  559.                 dialogControlHelp(hd,32);
  560.                 dialogColor(hd,"定数の色(&C)...","定数の色",&text->rgbConst,lcx2,NULL);
  561.                 dialogControlHelp(hd,33);
  562.                 dialogColor(hd,"コメントの色(&O)...","コメントの色",&text->rgbComment,lcx2,NULL);
  563.             dialogGroupEnd(hd);
  564.             break;
  565.         }
  566. #endif
  567.         case TEXT_HTML: {
  568. #if 1//2.99H 970405 HTML高度な色分け改良
  569.             if (text->editmode) {
  570.                 dialogSetGroupRight(hd,DTCX * 40);
  571.                 dialogGroup(hd,"タグ・文字列の色分け");
  572.                     dialogControlHelp(hd,178);
  573.                     dialogCheckB(hd,"タグ・文字列を色分け表示する(&P)",&text->fDispParse);
  574.                     dialogControlHelp(hd,179);
  575.                     dialogColor(hd,"タグの色(&T)...","タグの色",&text->rgbErrorChar,lcx2,NULL);
  576.                     dialogControlHelp(hd,31);
  577.                     dialogColor(hd,"文字列の色(&L)...","文字列の色",&text->rgbString,lcx2,NULL);
  578.                 dialogGroupEnd(hd);
  579.                 //
  580.                 dialogGroup(hd,"部位の色");
  581.                     dialogControlHelp(hd,180);
  582.                     dialogColor(hd,"ホットテキストの色(&H)...","ホットテキストの色",&text->rgbHottext,lcx2,NULL);
  583.                     dialogControlHelp(hd,181);
  584.                     dialogColor(hd,"イタリックの色(&I)...","イタリック装飾がかかっている文字の色",&text->rgbConst,lcx2,NULL);
  585.                     dialogControlHelp(hd,182);
  586.                     dialogColor(hd,"フォントサイズの色(&F)...","フォントサイズが変更されている文字の色",&text->rgbPreprocessor,lcx2,NULL);
  587.                 dialogGroupEnd(hd);
  588.             } else {
  589.                 dialogGroup(hd,"タグ・文字列の色分け");
  590.                     dialogControlHelp(hd,178);
  591.                     dialogCheckB(hd,"タグ・文字列を色分け表示する(&P)",&text->fDispParse);
  592.                     dialogControlHelp(hd,179);
  593.                     dialogColor(hd,"タグの色(&T)...","タグの色",&text->rgbErrorChar,lcx2,NULL);
  594.                     dialogControlHelp(hd,31);
  595.                     dialogColor(hd,"文字列の色(&L)...","文字列の色",&text->rgbString,lcx2,NULL);
  596.                 dialogGroupEnd(hd);
  597.             }
  598. #else
  599.             dialogGroup(hd,"色分け");
  600.     #if 0//2.99D 970331 
  601.             if (text->editmode) {
  602.                 dialogSetH(hd);
  603.                 dialogControlHelp(hd,180);
  604.                 dialogColor(hd,"リンクの色(&L)...","リンクが張られた文字列の色",&text->rgbString,lcx2,NULL);
  605.                 dialogControlHelp(hd,181);
  606.                 dialogColor(hd,"イタリックの色(&I)...","イタリック装飾がかかっている文字の色",&text->rgbConst,lcx2,NULL);
  607.                 dialogLF(hd);
  608.                 dialogControlHelp(hd,182);
  609.                 dialogColor(hd,"フォントサイズの色(&F)...","フォントサイズが変更されている文字の色",&text->rgbPreprocessor,lcx2,NULL);
  610.                 dialogControlHelp(hd,183);
  611.                 dialogColor(hd,"コメントの色(&C)...","コメントの色",&text->rgbComment,lcx2,NULL);
  612.                 dialogLF(hd);
  613.                 dialogSetV(hd);
  614.                 dialogCaption(hd,0);
  615.                 dialogCaption(hd,0);
  616.             } else {
  617.     #endif
  618.                 dialogControlHelp(hd,178);
  619.                 dialogCheckB(hd,"タグを色分け表示する(&P)",&text->fDispParse);
  620.                 dialogControlHelp(hd,179);
  621.                 dialogColor(hd,"タグの色(&T)...","タグの色",&text->rgbErrorChar,lcx2,NULL);
  622.                 dialogCaption(hd,0);
  623.                 dialogCaption(hd,0);
  624.                 dialogCaption(hd,0);
  625.     #if 0//2.99D 970331 
  626.             }
  627.     #endif
  628.             dialogGroupEnd(hd);
  629. #endif
  630.             break;
  631.         }
  632.         default: {
  633.             dialogGroup(hd,"色分け");
  634.                 dialogControlHelp(hd,177);
  635.                 dialogCheckB(hd,"文字列の色分け表示(&P)",&text->fDispParse);
  636.                 dialogControlHelp(hd,31);
  637.                 dialogColor(hd,"\"文字列\"の色(&S)...","\"文字列\"の色",&text->rgbString,lcx2,NULL);
  638.             dialogGroupEnd(hd);
  639.             dialogGroup(hd,"文字装飾の色分け");
  640.                 //2.00B イタリック文字の色分けを指定できるようにした
  641.                 dialogControlHelp(hd,181);
  642.                 dialogColor(hd,"イタリック装飾(&I)...","イタリック装飾がかかっている文字の色",&text->rgbConst,lcx2,NULL);
  643.             dialogGroupEnd(hd);
  644.             break;
  645.         }
  646.     }
  647.     return dialogOpen(hd);
  648. }
  649.  
  650. static int dialogAddPreview(HDIALOG hd,int id,int lcy)
  651. {
  652.     dialogSetIntXY(hd,0,0);
  653.     if (id == IDD_EDITKEYWORD) {
  654.         dialogCaption(hd,"キーワード:");
  655.     } else {
  656.         dialogCaption(hd,"プレビュー:");
  657.     }
  658.     DTRECT r;
  659.     dialogGetPos(hd,&r);
  660.     r.cx = DTCX * 59;
  661. #if 1//2.99C 970326 WZ32:VGAで大きすぎた
  662.     r.cy = DTCY * lcy + _fwin40 * ((DTCY * lcy) / 3);
  663. #else
  664.     r.cy = DTCY * (lcy + _fwin40 * lcy / 2);
  665. #endif
  666.     DWORD ws = TXWS_TEXT|TXWS_OPENTEXT|WS_VSCROLL|WS_BORDER|WS_CHILD|WS_VISIBLE;
  667.     if (id == IDD_EDITKEYWORD) ws |= WS_TABSTOP|TXWS_ENABLEUNDO;
  668.     int ret = __dialogAddItem(hd,TXWS_SZCLASS,"",id,&r,ws);
  669.     dialogResetInt(hd);
  670.     return ret;
  671. }
  672.  
  673. static BOOL _fInTxuser;    //2.95 970127 再入防止
  674.  
  675. static void myPostMessage(HWND hwnd,int message,WPARAM wParam,LPARAM lParam)
  676. {
  677.     MSG msg;
  678.     if (_fInTxuser) return;
  679.     if (PeekMessage(&msg,hwnd,message,message,PM_NOREMOVE)) {
  680.         //2.00B 設定ダイアログの[スタイル]タブのプレビューに異様に時間がかかった
  681.         // 既にポストされている場合は、ポストしない
  682.     } else {
  683.         PostMessage(hwnd,message,wParam,lParam);
  684.     }
  685. }
  686.  
  687. static void FlushPreview(HWND hwnd,int id)
  688. {
  689. #if 0//2.00C 
  690.     if (context.fPageChanging) return;//1.99C ページ切り替え中は描画しない。ちらつき防止
  691. #endif
  692.     HDIALOG hd = dialogFromHwnd(hwnd);
  693.     HWND hctrl = GetDlgItem(hwnd,id);
  694.     TX* text = (LPVOID)SendMessage(hctrl,TXWM_GETTX,0,0);
  695.     if (text) {
  696.         TX* text1 = txGetFrameNow();//2.99C 970324 
  697.         BOOL fInit = (txGetTextSize(text) == 0);
  698.         text->fNoCursor = TRUE;    //2.00B 設定ダイアログでマウスカーソルがちらついたのを改善
  699.         txSetUndisp(text);
  700.         //
  701.         dialogRead(hd);
  702.         contextToText(text);
  703.         // default
  704.         text->fScrollBarV = TRUE;
  705.         text->fScrollBarH = FALSE;
  706.         text->fCursorMoveBySB = FALSE;
  707.         text->fNoPrinterFont = TRUE;//1.99C スタイルのプレビュー時は印刷フォント不要。高速化
  708.         text->fOutline = FALSE;//2.00B アウトラインウィンドウを出している時に設定を行おうとするとおかしかった
  709.         //
  710.         switch(id) {
  711.             case IDD_PREVIEW: {
  712.                 if (fInit) {
  713.                     txInsert(text,"\tWZ EDITOR 3.0\tAlphabet 漢字 カナ \\ ");txInsertReturn(text);
  714.                     txInsert(text,"設定項目の説明を読むには、ダイアログ右上の[?]ボタンをクリックしてから、説明を読みたい項目をマウスクリックしてください。");txInsertReturn(text);
  715.                     txInsert(text,"または、読みたい項目にフォーカス移動して{F1}を押して下さい。");txInsertReturn(text);//3.00A4 970509 
  716.                     txInsert(text,"aaa@bbb.co.jp");txInsertReturn(text);//2.99B 970322 
  717.                     txJumpFileTop(text);
  718.                 }
  719.                 break;
  720.             }
  721.             case IDD_PREVIEW2: {
  722.                 // default
  723.                 text->fDispUnder = FALSE;
  724.                 text->fDispLine = FALSE;
  725.                 text->fDispTab = FALSE;
  726.                 text->fDispLf = FALSE;
  727.                 text->fDispEof = FALSE;
  728.                 if (context.fPreviewStyle || context.fPreviewStyleAlways) {
  729.                     if (fInit) {
  730.                         int i;
  731.                         text->fForm = TRUE;
  732.                         //2.00C 本文のプレビューが見やすい様に先頭にした
  733.                         txInsert(text,"本文 BODY body 見出し HEAD head\n");
  734.                         for (i = 0;i < SZTITLE_N;i++) {
  735.                             txInsertf(text,"%s見出し%d HEAD head\n",text1->tsztitle[i],i + 1);
  736.                         }
  737.                         for (i = SZFORMAT_TITLE4;i <= SZFORMAT_TITLE6;i++) {
  738.                             txInsertf(text,"%s見出し%d HEAD head\n",text1->tszformat[i],i - SZFORMAT_TITLE4 + 4);
  739.                         }
  740.                         txJumpFileTop(text);
  741.                         txSetEditmode(text,2);
  742.                     }
  743.                 } else {
  744.                     txSetEditmode(text,0);
  745.                     txDeleteText(text);
  746.                 }
  747.                 break;
  748.             }
  749.             case IDD_PREVIEW3: {
  750. #if 1//2.99B 970322 色の設定のプレビューの内容を、ファイルの種類で設定した内容によって変化するようにした
  751.                 txDeleteText(text);
  752.                 text->fForm = FALSE;
  753.                 text->fHTML = FALSE;
  754.                 text->fC = FALSE;
  755.                 txInsertLine(text,"aaa@bbb.co.jp");
  756.                 switch(text->filekind) {
  757.                     case TEXT_C: {
  758.                         text->fC = TRUE;
  759.                         txInsert(text,"\"文字列\"\n");
  760.                         txInsert(text,"#C-PreProcessor\n");
  761.                         txInsert(text,"C-123error\n");
  762.                         txInsert(text,"\tif (a == 12345) // コメント\n");
  763.                         break;
  764.                     }
  765.                     case TEXT_HTML: {
  766.                         text->fForm = TRUE;
  767.                         text->fHTML = TRUE;
  768.                         txInsert(text,"<H1>見出し</H1>\n");
  769.                         txInsert(text,"本文 全角スペース\n");
  770.                         txInsert(text,"<A HREF=\"readme.txt\">READ ME</A>\n");
  771.                         txInsert(text,"<I>斜体</I>\n");
  772.                         txInsert(text,"<FONT SIZE=7>大きな文字</FONT>\n");
  773.                         txInsert(text,"<!--コメント-->\n");
  774.                         txSetEditmode(text,text1->editmode);
  775.                         break;
  776.                     }
  777.                     case TEXT_PASCAL: {
  778.                         txInsert(text,"'文字列'\n");
  779.                         txInsert(text,"\tif var 12345 {コメント} (*コメント*)\n");
  780.                         break;
  781.                     }
  782.                     case TEXT_FORTRAN: {
  783.                         txInsert(text,"'文字列'\n");
  784.                         txInsert(text,"C コメント\n");
  785.                         txInsert(text,"\tif var 12345 !コメント\n");
  786.                         break;
  787.                     }
  788.                     case TEXT_SCRIPT: {
  789.                         txInsert(text,"'文字列'\n");
  790.                         txInsert(text,"# コメント\n");
  791.                         txInsert(text,"\tif var 12345\n");
  792.                         break;
  793.                     }
  794.                     case TEXT_ASM: {
  795.                         txInsert(text,"'文字列'\n");
  796.                         txInsert(text,"\tmov ax,12345 ; コメント\n");
  797.                         break;
  798.                     }
  799.                     case TEXT_BASIC: {
  800.                         txInsert(text,"\"文字列\"\n");
  801.                         txInsert(text,"rem コメント\n");
  802.                         txInsert(text,"'コメント\n");
  803.                         txInsert(text,"\tif var = 12345 then\n");
  804.                         break;
  805.                     }
  806.                     default: {
  807.                         text->fForm = TRUE;
  808.                         txInsertf(text,"%s見出し\n",text1->tsztitle[0]);
  809.                         txInsertf(text,"\t本文 全角スペース\n");
  810.                         txInsertf(text,"%s斜体%s\n",
  811.                             text1->tszformat[SZFORMAT_ITALIC_TOP],
  812.                             text1->tszformat[SZFORMAT_ITALIC_END]
  813.                         );
  814.                         txInsert(text,"\"文字列\"\n");
  815.                         txSetEditmode(text,text1->editmode);
  816.                         break;
  817.                     }
  818.                 }
  819.                 txJumpFileTop(text);
  820. #else
  821.                 if (fInit) {
  822.                     if (text1->fC) {
  823.                         txInsertf(text,"%s見出し\n",text1->tsztitle[0]);
  824.                         txInsertf(text,"\t本文 全角スペース\n");
  825.                         txInsert(text,"\"文字列\"\n");
  826.                         txInsert(text,"#C-PreProcessor\n");
  827.                         txInsert(text,"C-123error\n");
  828.                         txInsert(text,"\tif (a == 12345) // コメント\n");
  829.                         txInsertLine(text,"aaa@bbb.co.jp");
  830.                     } else if (text1->fHTML) {
  831.                         text->fForm = TRUE;
  832.                         text->fHTML = TRUE;
  833.                         txInsert(text,"<H1>見出し</H1>\n");
  834.                         txInsert(text,"本文 全角スペース\n");
  835.                         txInsert(text,"<A HREF=\"readme.txt\">READ ME</A>\n");
  836.                         txInsert(text,"<I>斜体</I>\n");
  837.                         txInsert(text,"<FONT SIZE=7>大きな文字</FONT>\n");
  838.                         txInsert(text,"<!--コメント-->\n");
  839.                         txInsertLine(text,"aaa@bbb.co.jp");
  840.                         txSetEditmode(text,text1->editmode);
  841.                     } else {
  842.                         text->fForm = TRUE;
  843.                         txInsertf(text,"%s見出し\n",text1->tsztitle[0]);
  844.                         txInsertf(text,"\t本文 全角スペース\n");
  845.                         txInsertf(text,"%s斜体%s\n",
  846.                             text1->tszformat[SZFORMAT_ITALIC_TOP],
  847.                             text1->tszformat[SZFORMAT_ITALIC_END]
  848.                         );
  849.                         txInsert(text,"\"文字列\"\n");
  850.                         txInsertLine(text,"aaa@bbb.co.jp");
  851.                         txSetEditmode(text,text1->editmode);
  852.                     }
  853.                     // 選択の色分けを表示する
  854.                     txJumpFileTop(text);
  855.                     txSearchEx(text,"全角",0);
  856.                     txSelect(text);
  857.                     txRightWord(text);
  858.                 }
  859. #endif
  860.                 break;
  861.             }
  862.         }
  863. #if 1//2.93 for tabsize=0
  864.         txFlush(text);
  865.         txSetDisp(text);
  866.         txFlush(text);
  867. #else
  868.         txSetDisp(text);
  869.         txFlush(text);
  870. #endif
  871.     }
  872. }
  873.  
  874. static void FlushPropFont(HDIALOG hd,int id,BOOL fProp)
  875. {
  876.     if (id) {
  877.         FONTNAMES* fontnames = fontnamesFromId(hd,id);
  878.         if (fontnames) {
  879.             fontnames->lfPitch = fProp ? DEFAULT_PITCH : FIXED_PITCH;
  880.             fontnamesFlush(fontnames);
  881.             dialogWriteItem(hd,id);
  882.         }
  883.     }
  884. }
  885.  
  886. static void FlushProp(HWND hwnd)
  887. {
  888.     BOOL lfProp = IsDlgButtonChecked(hwnd,IDD_PROP);
  889.     BOOL lfWestern = context.text->lfWestern;
  890.     // set lfWestern
  891.     if (GetDlgItem(hwnd,IDD_WESTERN)) {
  892.         lfWestern = FALSE;
  893.         if (IsDlgButtonChecked(hwnd,IDD_WESTERN+1)) lfWestern = 1;
  894.         if (IsDlgButtonChecked(hwnd,IDD_WESTERN+2)) lfWestern = 2;
  895.         EnableDlgItem(hwnd,IDD_ANK,!lfWestern);
  896.     }
  897.     //
  898.     EnableFontkind(hwnd,lfProp,lfWestern);
  899.     {
  900.         HDIALOG hd = dialogFromHwndPshpage(hwnd);
  901.         FlushPropFont(hd,idFontStd,lfProp);
  902.         FlushPropFont(hd,idFontBase,lfProp);//2.98 970307 
  903.         if (lfProp) {//2.00B プロポーショナルをOFFにしたときも半角フォントを覚える様にした
  904.             FlushPropFont(hd,idFontAnk,lfProp);
  905.         }
  906.     }
  907. }
  908.  
  909. static void pathSetKeyword(txstr szpath,mchar* szkeywordfile)
  910. {
  911. #if 1//2.99D 970401 Net-WZでキーワードファイルがユーザ毎に独立してなかった
  912.     mchar szfilename[CCHPATHNAME];
  913.     strcpy(szfilename,szkeywordfile);
  914.     pathSetExt(szfilename,".tkw");
  915.     pathFullConfig(szpath,szfilename);
  916. #else
  917.     szpath = text->szexedir;
  918.     szpath += szkeywordfile;
  919.     szpath += ".tkw";
  920. #endif
  921. }
  922.  
  923. static void FlushKeywordname(HDIALOG hd)
  924. {
  925.     HWND hwnd = dialogGetWindow(hd);
  926.     HWND hctrl = GetDlgItem(hwnd,IDD_KEYWORDNAME);
  927.     TX* texta = dialogGetCustdata(hd);
  928.     txstr szName;
  929.     szName = texta->szkeywordfile;
  930.     if (szName == "") szName = "新規ファイル";
  931.     SetWindowText(hctrl,"キーワードファイル名: " + szName);
  932. }
  933.  
  934. static BOOL dialogKeywordSaveAs(HDIALOG hd)
  935. {
  936. // 保存したかどうか返す
  937.     HWND hctrl = GetDlgItem(dialogGetWindow(hd),IDD_EDITKEYWORD);
  938.     TX* text = (LPVOID)SendMessage(hctrl,TXWM_GETTX,0,0);
  939.     //
  940.     TX* texta = dialogGetCustdata(hd);
  941.     txstr szName = texta->szkeywordfile;
  942.     int ret;
  943.     while(1) {
  944.         ret = IDYES;
  945.         HDIALOG hd = dialog("名前を付けて保存");
  946.         dialogStr(hd,"ファイル名(&N)",szName,16,16);
  947.         if (dialogOpen(hd)) {
  948.             if (szName[0]) {
  949.                 txstr szfilename;
  950.                 pathSetKeyword(szfilename,szName);
  951.                 if (fileIsExist(szfilename)) {
  952.                     ret = question(
  953.                         "キーワードファイル %s は存在します。\n"
  954.                         "\n"
  955.                         "上書きしてもよいですか?",
  956.                         szName
  957.                     );
  958.                 }
  959.                 if (ret == IDYES) {
  960.                     txSaveTo(text,szfilename);
  961.                     statprintf("キーワードファイル %s に保存しました",szName);
  962.                 }
  963.             } else {
  964.                 information("名前を付けてください");
  965.                 ret = IDCANCEL;
  966.             }
  967.         } else {
  968.             ret = IDNO;
  969.         }
  970.         if (ret != IDCANCEL) break;
  971.     }
  972.     if (ret == IDYES) {
  973.         sstrcpy(texta->szkeywordfile,szName);
  974.         return TRUE;
  975.     }
  976.     return FALSE;
  977. }
  978.  
  979. BOOL dlgprocKeyword(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
  980. {
  981.     HDIALOG hd = dialogFromHwnd(hwnd);
  982.     
  983.     switch(message) {
  984.         case WM_INITDIALOG: {
  985.             HDIALOG hd = dialogFromHwnd(hwnd);
  986.             TX* texta = dialogGetCustdata(hd);
  987.             HWND hctrl = GetDlgItem(hwnd,IDD_EDITKEYWORD);
  988.             TX* text = (LPVOID)SendMessage(hctrl,TXWM_GETTX,0,0);
  989.             if (text) {
  990.                 txstr szfilename;
  991.                 pathSetKeyword(szfilename,texta->szkeywordfile);
  992.                 txInsertFile(text,szfilename);
  993.                 txJumpFileTop(text);
  994.                 text->fEdit = FALSE;
  995.             }
  996.             FlushKeywordname(hd);
  997.             break;
  998.         }
  999.         case WM_COMMAND: {
  1000.             HDIALOG hd = dialogFromHwnd(hwnd);
  1001.             TX* texta = dialogGetCustdata(hd);
  1002.             int id = WM_COMMAND_GetId(wParam);
  1003.             int notify = WM_COMMAND_GetNotify(wParam,lParam);
  1004.             //
  1005.             HWND hctrl = GetDlgItem(hwnd,IDD_EDITKEYWORD);
  1006.             TX* text = (LPVOID)SendMessage(hctrl,TXWM_GETTX,0,0);
  1007.             switch(id) {
  1008.                 case IDOK: {
  1009.                     if (text->fEdit) {
  1010.                         if (texta->szkeywordfile[0]) {
  1011.                             txstr szfilename;
  1012.                             pathSetKeyword(szfilename,texta->szkeywordfile);
  1013.                             txSaveTo(text,szfilename);
  1014.                         } else {
  1015.                             if (dialogKeywordSaveAs(hd)) {
  1016.                                 FlushKeywordname(hd);
  1017.                             } else {
  1018.                                 return TRUE;    // hook
  1019.                             }
  1020.                         }
  1021.                     }
  1022.                     break;
  1023.                 }
  1024.                 case IDCANCEL: {
  1025.                     if (text->fEdit) {
  1026.                         int ret = question(
  1027.                             "キーワードは編集されています。\n"
  1028.                             "\n"
  1029.                             "編集内容を破棄してもよいですか?"
  1030.                         );
  1031.                         if (ret != IDYES) return TRUE;    // hook
  1032.                     }
  1033.                     break;
  1034.                 }
  1035.                 case IDD_SAVEAS: {
  1036.                     if (dialogKeywordSaveAs(hd)) {
  1037.                         FlushKeywordname(hd);
  1038.                         text->fEdit = FALSE;
  1039.                     }
  1040.                     return TRUE;
  1041.                 }
  1042.             }
  1043.             return FALSE;
  1044.         }
  1045.     }
  1046.     return FALSE;
  1047. }
  1048.  
  1049. static int dialogEditKeyword(TX* text)
  1050. {
  1051.     HDIALOG hd = dialog("キーワードファイルの編集");
  1052.     dialogSetGroupRight(hd,DTCX * 60);
  1053.     dialogSetHookEx(hd,"\m.dlgprocKeyword");
  1054.     dialogSetCustdata(hd,text);
  1055.     dialogSetFocus(hd,IDD_EDITKEYWORD);
  1056.     //
  1057.     dialogControlID(hd,IDD_KEYWORDNAME);
  1058.     dialogCaptionDynamic(hd,NULL,30);
  1059.     //
  1060.     dialogAddPreview(hd,IDD_EDITKEYWORD,10);
  1061.     //
  1062.     dialogLFV(hd);
  1063.     int lcx = 24;
  1064.     dialogControlID(hd,IDOK);
  1065.     dialogCmd(hd,"&OK",lcx);
  1066.     dialogControlID(hd,IDCANCEL);
  1067.     dialogCmd(hd,"キャンセル(&C)",lcx);
  1068.     dialogControlID(hd,IDD_SAVEAS);
  1069.     dialogCmd(hd,"名前を付けて保存(&A)...",lcx);
  1070.     
  1071.     return dialogOpen(hd);
  1072. }
  1073.  
  1074. static int dialogFormatstr(TX* text)
  1075. {
  1076.     HDIALOG hd = dialog("書式文字列");
  1077.     dialogSetGroupRight(hd,DTCX * 31);
  1078.     DTRECT r1;
  1079.     
  1080.     dialogGroup(hd,"見出し");
  1081.         int lxg = 12;
  1082.         int lx = 14;
  1083.         dialogSetIntXY(hd,0,1);// 縦は1は空けて置かないとWZ16の2D表示が見にくい
  1084.         dialogControlHelp(hd,287);
  1085.         dialogStrC(hd,"章(&1):",text->tsztitle[0],lxg,CCHTITLE,lx);
  1086.         dialogControlHelp(hd,287);
  1087.         dialogStrC(hd,"節(&2):",text->tsztitle[1],lxg,CCHTITLE,lx);
  1088.         dialogControlHelp(hd,287);
  1089.         dialogStrC(hd,"項(&3):",text->tsztitle[2],lxg,CCHTITLE,lx);
  1090.         dialogControlHelp(hd,287);
  1091.         dialogStrC(hd,"中見出し(&4):",text->tszformat[SZFORMAT_TITLE4],lxg,CCHFORMAT,lx);
  1092.         dialogControlHelp(hd,287);
  1093.         dialogStrC(hd,"小見出し(&5):",text->tszformat[SZFORMAT_TITLE5],lxg,CCHFORMAT,lx);
  1094.         dialogControlHelp(hd,287);
  1095.         dialogStrC(hd,"表題(&6):",text->tszformat[SZFORMAT_TITLE6],lxg,CCHFORMAT,lx);
  1096.         dialogResetInt(hd);
  1097.     dialogGroupEnd(hd);
  1098.     
  1099.     if (text->fPlaintext) dialogSetEnable(hd,FALSE);//3.00B1 970523 
  1100.     
  1101.     dialogGroup(hd,"文字装飾(&C)");
  1102.         dialogSetIntXY(hd,0,1);
  1103.         dialogSetH(hd);
  1104.         for (int i = SZFORMAT_BOLD_TOP;i <= SZFORMAT_ITALIC_END;i++) {
  1105.             static mchar* tsz[] = {
  1106.                 "太字:",NULL,
  1107.                 "下線:",NULL,
  1108.                 "斜体:",NULL,
  1109.             };
  1110.             mchar* szcaption = tsz[i - SZFORMAT_BOLD_TOP];
  1111.             if (szcaption) {
  1112.                 dialogControlGuide(hd,"~",3);
  1113.                 dialogControlHelp(hd,287);
  1114.                 dialogStrC(hd,szcaption,text->tszformat[i],8,CCHFORMAT,7);
  1115.             } else {
  1116.                 dialogControlHelp(hd,287);
  1117.                 dialogStrC(hd,szcaption,text->tszformat[i],0,CCHFORMAT,7);
  1118.                 dialogLF(hd);
  1119.             }
  1120.         }
  1121.         //2.98 970305 脚注、ルビなどの書式文字列が設定できるようにした。
  1122.         for (int i = SZFORMAT_FOOTNOTE_TOP;i <= SZFORMAT_LINK_END;i++) {
  1123.             static mchar* tsz[] = {
  1124.                 "脚注:",NULL,
  1125.                 "ルビ:",NULL,
  1126.                 "特殊文字",NULL,
  1127.                 "校正",NULL,
  1128.                 "リンク:",NULL,//2.98 970308 
  1129.             };
  1130.             mchar* szcaption = tsz[i - SZFORMAT_FOOTNOTE_TOP];
  1131.             if (szcaption) {
  1132.                 dialogControlGuide(hd,"~",3);
  1133.                 dialogControlHelp(hd,287);
  1134.                 dialogStrC(hd,szcaption,text->tszformat[i],8,CCHFORMAT,7);
  1135.             } else {
  1136.                 dialogControlHelp(hd,287);
  1137.                 dialogStrC(hd,szcaption,text->tszformat[i],0,CCHFORMAT,7);
  1138.                 dialogLF(hd);
  1139.             }
  1140.         }
  1141.         dialogSetV(hd);
  1142.         //
  1143.         dialogResetInt(hd);
  1144.     dialogGroupEndGetRect(hd,&r1);
  1145.     
  1146.     dialogLFV(hd);
  1147.     dialogSetGroupRight(hd,DTCX * 68);
  1148.     
  1149.     dialogGroup(hd,"段落書式(&P)");
  1150.         int lxg = 12;
  1151.         int lx = 20;
  1152.         dialogSetIntXY(hd,0,1);
  1153.         for (int i = SZFORMAT_ARTICLE;i <= SZFORMAT_ARTICLENOTICE;i++) {
  1154.             static mchar* tsz[] = {
  1155.                 "箇条書き:","番号付き:","注釈:",
  1156.             };
  1157.             dialogControlHelp(hd,287);
  1158.             dialogStrC(hd,tsz[i - SZFORMAT_ARTICLE],text->tszformat[i],lxg,CCHFORMAT,lx);
  1159.         }
  1160.         for (int i = SZFORMAT_INDENT;i <= SZFORMAT_TAB;i++) {
  1161.             static mchar* tsz[] = {
  1162.                 "インデント:",
  1163.                 "センタリング:",
  1164.                 "右寄せ:",
  1165.                 "改ページ:",
  1166.                 "表:",
  1167.                 "桁揃え:",
  1168.             };
  1169.             dialogControlHelp(hd,287);
  1170.             dialogStrC(hd,tsz[i - SZFORMAT_INDENT],text->tszformat[i],lxg,CCHFORMAT,lx);
  1171.         }
  1172.         dialogControlHelp(hd,287);
  1173.         dialogStrC(hd,"段落内改行:",text->tszformat[SZFORMAT_BR],lxg,CCHFORMAT,lx);
  1174.         //2.00E 
  1175.         dialogControlHelp(hd,287);
  1176.         dialogStrC(hd,"図:",text->tszformat[SZFORMAT_BITMAP],lxg,CCHFORMAT,lx);
  1177.         //2.97 970223 
  1178.         dialogControlHelp(hd,287);
  1179.         dialogStrC(hd,"水平線:",text->tszformat[SZFORMAT_HR],lxg,CCHFORMAT,lx);
  1180.         //
  1181.         dialogResetInt(hd);
  1182.     dialogGroupEnd(hd);
  1183.     
  1184.     dialogSetGroupBottom(hd,r1.y + r1.cy);
  1185.     dialogGroup(hd,"記号(&K)");
  1186.         dialogSetIntXY(hd,0,1);
  1187.         //
  1188.         dialogControlHelp(hd,287);
  1189.         dialogStrC(hd,"セパレータ:",text->tszformat[SZFORMAT_SEPARATOR],lxg,CCHFORMAT,lx);
  1190.         //2.98 970308 
  1191.         dialogControlHelp(hd,287);
  1192.         dialogStrC(hd,"レターヘッダ終り",text->tszformat[SZFORMAT_BODY],lxg,CCHFORMAT,lx);
  1193.         //
  1194.         dialogResetInt(hd);
  1195.     dialogGroupEnd(hd);
  1196.     
  1197.     if (text->fPlaintext) dialogSetEnable(hd,TRUE);//3.00B1 970523 
  1198.     
  1199.     return dialogOpen(hd);
  1200. }
  1201.  
  1202. DWORD convprocWs(DWORD data,int mode)
  1203. {
  1204.     static int t[] = {
  1205.         WS_PAGE,WS_MAX,WS_DESTEXT
  1206.     };
  1207.     int n = sizeof(t) / sizeof(int);
  1208.     if (mode == TXDIALOG_READ) {
  1209. //information("READ %d -> %d",data,t[data]);
  1210.         return t[data];
  1211.     } else {
  1212.         int i;
  1213.         for (i = 0;i < n;i++) {
  1214. //if (t[i] == data) information("WRITE %d -> %d",data,i);
  1215.             if (t[i] == data) return i;
  1216.         }
  1217.         return 0;
  1218.     }
  1219. }
  1220.  
  1221. DWORD convprocFk(DWORD data,int mode)
  1222. {
  1223.     static int t[] = {
  1224.         TEXT_PLAIN,
  1225.         TEXT_MAIL,
  1226.         //TEXT_WZ,
  1227.         TEXT_HTML,TEXT_C,
  1228.         TEXT_PASCAL,TEXT_FORTRAN,
  1229.         TEXT_SCRIPT,TEXT_ASM,TEXT_BASIC
  1230.     };
  1231.     int n = sizeof(t) / sizeof(int);
  1232.     if (mode == TXDIALOG_READ) {
  1233. //information("READ %d -> %d",data,t[data]);
  1234.         return t[data];
  1235.     } else {
  1236.         int i;
  1237.         for (i = 0;i < n;i++) {
  1238. //if (t[i] == data) information("WRITE %d -> %d",data,i);
  1239.             if (t[i] == data) return i;
  1240.         }
  1241.         return 0;
  1242.     }
  1243. }
  1244.  
  1245. static void dialogAddTxc32(HDIALOG hd)
  1246. {
  1247.     TXCONFIGSHARE *shcfg = &context.shcfg;
  1248.     dialogControlHelp(hd,137);
  1249.     dialogStrC(hd,"&32bitインクルード:",shcfg->szenvinclude[1],14,CCHWORD,40);
  1250.     dialogControlHelp(hd,470);
  1251.     dialogStrC(hd,"32bit出力:",shcfg->szPathTxpcode[1],14,CCHWORD,40);
  1252. }
  1253.  
  1254. static void dialogAddTxc16(HDIALOG hd)
  1255. {
  1256.     TXCONFIGSHARE *shcfg = &context.shcfg;
  1257.     dialogControlHelp(hd,136);
  1258.     dialogStrC(hd,"&16bitインクルード:",shcfg->szenvinclude[0],14,CCHWORD,40);
  1259.     dialogControlHelp(hd,471);
  1260.     dialogStrC(hd,"16bit出力:",shcfg->szPathTxpcode[0],14,CCHWORD,40);
  1261. }
  1262.  
  1263. //1.99 印刷スタイルは、印刷をしたときに選択されたスタイルを
  1264. // 覚えればいいので設定ダイアログには載せない
  1265.  
  1266. // コントロールのアクセスキーに'&0'-'&9','&Q','&X'-'&Z'は使わないこと
  1267. //2.99D 970330 dialogbig化
  1268. static HDIALOG configtxCreatePage(int iPage,HDC hdcPrinter,int arg)
  1269. {
  1270.     tx *text = context.text;
  1271.     TXCONFIGSHARE *shcfg = &context.shcfg;
  1272.     //
  1273.     HDIALOG hd = NULL;
  1274.     int lcxHeadline = 60;
  1275.     int xright0 = DTCX * 60;    //2.95 970126 
  1276.     int lx2 = 18;                // カラムの中央
  1277.     int lx3 = 36;                //2.99 970320 
  1278.     int lcx2 = 16;                // カラムの半分の幅
  1279.     int lxval = _fwin40 ? 6 : 4;// アップダウンコントロール付きの数値入力窓幅
  1280.     DTRECT r,r1,r2;
  1281.     
  1282.     switch(iPage) {
  1283.         case IPAGE_FORM: {
  1284.             hd = dialogbig(" 文字数・行数 ");
  1285.             dialogSetGroupRight(hd,xright0);
  1286.             
  1287.             dialogGroup(hd,"文字数・行数");
  1288. #if 1//2.99A 970321 文字数と行数の指定を変更。印刷スタイルに合わせた文字数で折り返し表示できるようにした
  1289.                 dialogControlRadioV(hd);
  1290.                 dialogControlID(hd,IDD_WIDTHMODE);
  1291.                 dialogControlHelp(hd,2);
  1292.                 //2.99B 970322 modeWidthの定義値変更により項目の順序変更
  1293.                 dialogRadioIDB(hd,&context.modeWidth,
  1294.                     "文字数と行数を指定する(&M)",
  1295.                     "標準の文字数を使う(&R)",
  1296.                     "印刷スタイルの文字数を使う(&P)"
  1297.                 );
  1298. #else
  1299.                 dialogControlRadioV(hd);
  1300.                 dialogControlReverseBool(hd);
  1301.                 dialogControlID(hd,IDD_WIDTHMODE);
  1302.                 dialogControlHelp(hd,2);
  1303.                 dialogSwitchB(hd,&text->fSetWidthByWindow,"文字数と行数を指定する(&M)","標準の文字数を使う(&R)");
  1304. #endif
  1305.                 //
  1306.                 dialogControlID(hd,IDD_WIDTH);
  1307.                 dialogControlGuide(hd,"文字(半角)",10);
  1308.                 dialogControlHelp(hd,1);
  1309.                 dialogControlUpdown(hd,MINWIDTH,MAXWIDTH);
  1310. #if 1//2.99A 970321 
  1311.                 dialogInt(hd,"1行の文字数(&C):",&context.width,16,lxval);
  1312. #else
  1313.                 dialogIntI(hd,"1行の文字数(&C):",&text->width,16,lxval);
  1314. #endif
  1315.                 //
  1316.                 dialogControlGuide(hd,"行",6);
  1317.                 dialogControlHelp(hd,3);
  1318.                 dialogControlUpdown(hd,0,LINE_N);
  1319.                 dialogIntI(hd,"1ページの行数(&L):",&text->height,16,lxval);
  1320.                 //
  1321.                 dialogControlGuide(hd,"段",3);
  1322.                 dialogControlHelp(hd,438);
  1323.                 dialogControlUpdown(hd,1,10);
  1324.                 dialogIntB(hd,"段組(&N):",&text->nClm,16,lxval);
  1325.                 //2.93 タブサイズを任意指定できるように(32や9にしたい時もある)
  1326.                 dialogControlHelp(hd,274);
  1327.                 dialogControlGuide(hd,"文字(半角)",10);
  1328.                 dialogControlUpdown(hd,1,MAXTABSIZE);
  1329.                 dialogIntW(hd,"タブの文字数(&T)",&text->tabsize,16,lxval);
  1330.                 //
  1331.                 dialogControlID(hd,IDD_VERTICAL);
  1332.                 dialogControlReverseBool(hd);
  1333.                 dialogControlHelp(hd,9);
  1334.                 dialogSwitchB(hd,&text->fVertical,"横書き(&H)","縦書き(&V)");
  1335.                 //
  1336.                 dialogControlHelp(hd,6);
  1337.                 dialogCheckB(hd,"ページめくり(&B)",&text->fPageTurn);
  1338.             dialogGroupEnd(hd);
  1339.             //
  1340.             dialogAddPreview(hd,IDD_PREVIEW,5);
  1341.             break;
  1342.         }
  1343.         case IPAGE_DISPLAY: {
  1344.             hd = dialogbig(" 表示 ");
  1345.             dialogSetGroupRight(hd,xright0);
  1346.             
  1347.             dialogHeadline(hd,"フォント",lcxHeadline);//2.99 970320 
  1348.                 // フォント
  1349.                 fontsel(hd,text,FONTTX_TEXT,TRUE);
  1350.                 dialogSetH(hd);
  1351.                     dialogControlID(hd,IDD_PROP);
  1352.                     dialogControlHelp(hd,16);
  1353.                     dialogCheckB(hd,"プロポーショナル(&P)",&text->lfProp);
  1354.                     //2.00B 欧文表示と編集に対応
  1355.                     dialogSetPosLX(hd,lx2);
  1356.                     dialogControlHelp(hd,17);
  1357.                     dialogSelectIDB(hd,"言語(&W):",&text->lfWestern,14,18,"日本語+英語","欧文メイン+日本語","日本語メイン+欧文");
  1358.                 dialogLF(hd);
  1359.                     dialogControlHelp(hd,18);
  1360.                     dialogCheckB(hd,"太字(&B)",&text->lfBold);
  1361.                     //
  1362.                     dialogSetPosLX(hd,lx2);
  1363.                     dialogControlHelp(hd,13);
  1364.                     dialogSelectIDB(hd,"フォントの指定(&I):",&text->fMyFont,14,18,"共通","ファイルタイプ専用");
  1365.                 dialogLFSetV(hd);
  1366.                     dialogControlHelp(hd,439);
  1367.                     dialogSelectIDB(hd,"バックスラッシュ(&S):",&text->lfBackslash,lx2-2,24,"標準","英語フォントは'\'で表示");
  1368.             dialogSetIntXY(hd,0,0);
  1369.             dialogHeadline(hd,"表示",lcxHeadline);//2.99 970320 
  1370.                 dialogSetH(hd);
  1371.                     dialogControlHelp(hd,4);
  1372.                     dialogControlGuide(hd,"ドット",6);
  1373.                     dialogControlUpdown(hd,0,50);
  1374.                     dialogIntI(hd,"行間(&D):",&text->cySpace,8,lxval);
  1375.                     //2.00E 文字間を空けて編集ができるようにした(特に縦書き時の字間の要望が強かった)
  1376.                     dialogControlHelp(hd,347);
  1377.                     dialogControlGuide(hd,"ドット",6);
  1378.                     dialogControlUpdown(hd,0,10);
  1379.                     dialogIntB(hd,"字間(&G):",&text->cxSpace,8,lxval);
  1380.                 dialogLF(hd);
  1381.                     dialogControlHelp(hd,5);
  1382.                     dialogCheckB(hd,"アンダーライン(&C)",&text->fDispUnder);//1.90 
  1383.                     dialogSetPosLX(hd,lx2);
  1384.                     dialogControlHelp(hd,8);
  1385.                     dialogCheckB(hd,"右マージン(&M)",&text->fDispRightMargin);
  1386.                     dialogSetPosLX(hd,lx3);
  1387.                     dialogControlHelp(hd,26);
  1388.                     dialogCheckB(hd,"タブ(&T)",&text->fDispTab);
  1389.                 dialogLF(hd);
  1390.                     dialogControlHelp(hd,27);
  1391.                     dialogCheckB(hd,"全角スペース(&J)",&text->fDispJspace);
  1392.                     dialogSetPosLX(hd,lx2);
  1393.                     dialogControlHelp(hd,28);
  1394.                     dialogCheckB(hd,"改行(&R)",&text->fDispLf);
  1395.                     dialogSetPosLX(hd,lx3);
  1396.                     dialogControlHelp(hd,29);
  1397.                     dialogCheckB(hd,"E&OF",&text->fDispEof);
  1398.                 dialogLF(hd);
  1399.                     dialogControlHelp(hd,7);
  1400.                     dialogCheckB(hd,"行番号(&N):",&text->fDispLine);
  1401.                     //
  1402.                     dialogControlHelp(hd,132);
  1403.                     dialogSetPosLX(hd,lx2);
  1404.                     dialogSwitchB(hd,&text->fLineD,"表示行番号","段落行番号");
  1405.                 dialogLFSetV(hd);
  1406.             dialogResetInt(hd);
  1407.             dialogAddPreview(hd,IDD_PREVIEW,5);
  1408.             break;
  1409.         }
  1410.         case IPAGE_FILE: {
  1411.             hd = dialogbig(" ファイル ");
  1412.             dialogSetGroupRight(hd,xright0);
  1413.             
  1414.             dialogGroup(hd,"ファイルオープン時の処理");
  1415.                 dialogControlHelp(hd,74);
  1416.                 #ifdef __FLAT__
  1417.                 dialogSelectIDW(hd,"IMEの制御(&K):",&text->modeImeSetFocus,24,20,"制御しない","OFF","ON");
  1418.                 #else
  1419.                 dialogSelectIDW(hd,"IMEの制御(&K):",&text->modeImeSetFocus,24,20,"制御しない","OFF","ON","ON+カナロック");
  1420.                 #endif
  1421.                 dialogControlHelp(hd,447);
  1422.                 dialogCheckB(hd,"自動インライン整形をONにする(&S)",&text->fConfigInlineform);
  1423.                 if (!text->fWztext) {//2.00E4 
  1424.                     dialogControlHelp(hd,398);
  1425.                     dialogSelectIDB(hd,"画面表示のモード(&E):",&text->editmodeOpen,24,20,"テキストモード","体裁モード","詳細モード");
  1426.                 }
  1427.             dialogGroupEnd(hd);
  1428.             
  1429.             dialogGroup(hd,"ファイル保存時の処理");
  1430.                 dialogControlHelp(hd,102);
  1431.                 dialogCheckB(hd,"世代管理を行う(&G)",&text->fSaveUndoBuff);
  1432.                 //
  1433.                 dialogControlHelp(hd,105);
  1434.                 dialogSelectIDB(hd,"タブ/スペースの変換(&T):",&text->modeConvertSpaceAtSave,24,20,"変換しない","タブをスペースに変換","スペースをタブに変換");
  1435.                 //
  1436.                 dialogControlHelp(hd,106);
  1437.                 dialogSelectIDB(hd,"全角/半角カタカナの変換(&J):",&text->modeConvertKanaAtSave,24,20,"変換しない","半角を全角に変換","全角を半角に変換");
  1438.                 //
  1439.                 dialogControlHelp(hd,107);
  1440.                 dialogCheckB(hd,"行末の空白を除去(&D)",&text->fDeleteTailSpaceAtSave);
  1441.             dialogGroupEnd(hd);
  1442.             
  1443.             dialogGroup(hd,"ファイルの形式");
  1444.                 dialogControlConvertEx(hd,"\m.convprocFk");
  1445.                 dialogControlHelp(hd,448);
  1446.                 dialogSelectIDB(
  1447.                     hd,"ファイルの種類(&P):",&text->filekind,14,20,
  1448.                     "標準",
  1449.                     //"WZ文書",
  1450.                     "メール文書",
  1451.                     "HTML文書",
  1452.                     "Cプログラム",
  1453.                     "pascalプログラム",
  1454.                     "FORTRANプログラム",
  1455.                     "スクリプトプログラム",
  1456.                     "アセンブラプログラム",//2.99B 970322 ASM,BASICの色分けを追加
  1457.                     "BASICプログラム"//2.99B 970322 
  1458.                 );
  1459.                 dialogControlID(hd,IDD_FORMATSTR);
  1460.                 dialogControlHelp(hd,449);
  1461.                 dialogButton(hd,"書式文字列(&F)...",NULL,20);
  1462.             dialogGroupEnd(hd);
  1463.             break;
  1464.         }
  1465.         case IPAGE_SEARCH: {
  1466.             //2.99 970320 検索ダイアログオプションの初期値を文書の設定に移動したほうがわかりやすいので移動
  1467.             hd = dialogbig(" 検索 ");
  1468.             dialogSetGroupRight(hd,xright0);
  1469.             
  1470.             dialogGroup(hd,"検索ダイアログオプションの初期値");
  1471.                 dialogControlHelp(hd,115);
  1472.                 dialogCheck(hd,"大文字・小文字を区別(&C)",&context.searchopt.fSearchSenseCase);
  1473.                 dialogControlHelp(hd,115);
  1474.                 dialogCheck(hd,"全角・半角文字を区別(&B)",&context.searchopt.fSearchSenseZenhan);
  1475.                 dialogControlHelp(hd,115);
  1476.                 dialogCheck(hd,"ワードサーチ(&W)",&context.searchopt.fSearchWord);
  1477.             dialogGroupEnd(hd);
  1478.                 //2.99C 970323 検索時に検索文字列の色分けを行うかどうか設定できるようにした
  1479.                 dialogControlHelp(hd,430);
  1480.                 dialogCheckB(hd,"検索時に検索文字列の色分けを行う(&S)",&text->fDispFindAtSearch);
  1481.             break;
  1482.         }
  1483.         case IPAGE_WINDOW: {
  1484.             hd = dialogbig(" ウィンドウ ");
  1485.             dialogSetGroupRight(hd,xright0);
  1486.             
  1487.             dialogGroup(hd,"ウィンドウサイズ");
  1488.                 dialogControlHelp(hd,149);
  1489.                 dialogControlRadioV(hd);
  1490.                 {
  1491.                     PMACROFUNC pfunc;
  1492.                     macroGetFuncAddress("convprocWs",&pfunc);
  1493.                     dialogControlConvert(hd,&pfunc);
  1494.                 }
  1495.                 dialogRadioIDI(hd,&text->modeWs,"文字数と行数から計算する(&C)","最大化する(&E)","サイズを指定する(&D)");
  1496.                 //
  1497.                 dialogSetH(hd);
  1498.                 dialogControlHelp(hd,149);
  1499.                 dialogControlGuide(hd,"文字",5);
  1500.                 dialogControlUpdown(hd,MINWIDTH,MAXWIDTH);
  1501.                 dialogIntI(hd," ",&text->lcxWindowDefault,4,lxval);
  1502.                 dialogControlGuide(hd,"行",3);
  1503.                 dialogControlUpdown(hd,0,LINE_N);
  1504.                 dialogIntI(hd,"x",&text->lcyWindowDefault,1,lxval);
  1505.                 dialogSetV(hd);
  1506.                 dialogLF(hd);
  1507.             dialogGroupEnd(hd);
  1508.             
  1509.             dialogGroup(hd,"各種バーの表示");
  1510. #if 1//3.00A5 970511 //3.00A5 970511 スクロールバーの設定の呼称:(行方向)、(桁方向)追加
  1511.                 dialogControlHelp(hd,154);
  1512.                 dialogCheckB(hd,"垂直(行方向)スクロールバー(&V)",&text->fScrollBarV);
  1513.                 //
  1514.                 dialogControlHelp(hd,155);
  1515.                 dialogSelectIDB(hd,"水平(桁方向)スクロールバー(&H):",&text->fScrollBarH,24,8,"OFF","ON","自動");
  1516. #else
  1517.                 dialogSetH(hd);
  1518.                     dialogControlHelp(hd,154);
  1519.                     dialogCheckB(hd,"垂直スクロールバー(&V)",&text->fScrollBarV);
  1520.     #if 1//2.99D 970329 水平スクロールバー:自動を追加
  1521.                     dialogLF(hd);//3.00A5 970511 
  1522.                     dialogControlHelp(hd,155);
  1523.                     dialogSelectIDB(hd,"水平スクロールバー(&H):",&text->fScrollBarH,16,8,"OFF","ON","自動");
  1524.     #else
  1525.                     dialogControlHelp(hd,155);
  1526.                     dialogCheckB(hd,"水平スクロールバー(&H)",&text->fScrollBarH);
  1527.     #endif
  1528.                 dialogLF(hd);
  1529.                 dialogSetV(hd);
  1530. #endif
  1531.                 dialogSpaceV(hd);
  1532.                 //2.98 970310 
  1533.                 dialogControlHelp(hd,445);
  1534.                 dialogCheckB(hd,"タイトルバー(&I)",&text->fDispTitlebar);//2.99D 970331 fDispFull->fDispTitlebar
  1535.                 //2.95 970128 
  1536.                 dialogControlHelp(hd,446);
  1537.                 dialogControlReverseBool(hd);
  1538.                 dialogCheckB(hd,"タイトルバーとメニューバー(&M)",&text->fDispFull);
  1539.                 //
  1540.                 dialogControlHelp(hd,156);
  1541.                 dialogCheckB(hd,"ツールバー(&T)",&text->fDispToolbar);
  1542.                 dialogControlHelp(hd,160);
  1543.                 dialogCheckB(hd,"ステータスバー(&S)",&text->fDispStatusbar);
  1544.                 
  1545.                 dialogSpaceV(hd);
  1546.                 dialogSetH(hd);
  1547.                     dialogControlHelp(hd,157);
  1548.                     dialogCheckB(hd,"ルーラー(&R):",&text->fDispRuler);
  1549.                     dialogSetPosLX(hd,20);
  1550.                     dialogControlHelp(hd,157);
  1551.                     dialogRadioIntB(hd,&text->nGageRuler,"8単位","10単位");
  1552.                 dialogLF(hd);
  1553.                     dialogControlHelp(hd,159);
  1554.                     dialogCheckB(hd,"ファンクションキー(&F):",&text->fDispFunctionKey);
  1555.                     dialogSetPosLX(hd,20);
  1556.                     dialogControlHelp(hd,159);
  1557.                     dialogRadioIntW(hd,&text->nFunctionKey,"8","10","12");
  1558.                 dialogLF(hd);
  1559.                 dialogSetV(hd);
  1560.             dialogGroupEnd(hd);
  1561.             
  1562.             break;
  1563.         }
  1564.         case IPAGE_VIEWMODE: {//3.00B1 970613 ビューモードの設定は、文書の設定とは独立して行える様にした。ビューモードの設定は[文書の設定]ダイアログの[ビューモード]タブで行う。macro.at_viewmodeでツールバーなどをONにするプログラムは削除してください。
  1565.             hd = dialogbig(" ビューモード ");
  1566.             dialogSetGroupRight(hd,xright0);
  1567.             
  1568. #if 0    // fDispUnderをtxGetDispUnder化するのは難しい。
  1569.         // 一時的にfDispUnderをON/OFFしている箇所があり、
  1570.         // これをいじるとバグの懸念あり
  1571.             dialogGroup(hd,"表示");
  1572.                 dialogControlHelp(hd,5);
  1573.                 dialogSelectIDB(hd,"アンダーライン(&U):",&shcfg->viewmodeModeDispUnder,13,16,"OFF","ON","文書の設定");
  1574.             dialogGroupEnd(hd);
  1575. #endif
  1576. #if 0    // rgbTextなどをビューモードで独立化するのは難しい
  1577.         // 純色に変換したりペンやブラシを作っているため
  1578.             dialogGroup(hd,"色分け");
  1579.                 dialogControlID(hd,IDD_CUST_COLOR_VIEWMODE);
  1580.                 dialogControlHelp(hd,443);
  1581.                 dialogButton(hd,"色のカスタマイズ(&C)...",NULL,24);
  1582.             dialogGroupEnd(hd);
  1583. #endif
  1584.             dialogGroup(hd,"各種バーの表示");
  1585.                 dialogControlHelp(hd,512);
  1586.                 dialogSelectIDB(hd,"ツールバー(&T):",&shcfg->viewmodeModeDispToolbar,13,16,"OFF","ON","文書の設定");
  1587.                 dialogControlHelp(hd,513);
  1588.                 dialogSelectIDB(hd,"ルーラー(&R):",&shcfg->viewmodeModeDispRuler,13,16,"OFF","ON","文書の設定");
  1589.                 dialogControlHelp(hd,515);
  1590.                 dialogSelectIDB(hd,"ステータスバー(&S):",&shcfg->viewmodeModeDispStatusbar,13,16,"OFF","ON","文書の設定");
  1591.                 dialogControlHelp(hd,514);
  1592.                 dialogSelectIDB(hd,"ファンクションキー(&F):",&shcfg->viewmodeModeDispFunctionKey,13,16,"OFF","ON","文書の設定");
  1593.             dialogGroupEnd(hd);
  1594.             
  1595.             dialogCaption(hd,"※ビューモードの設定は全テキストで共通です");
  1596.             
  1597.             break;
  1598.         }
  1599.         case IPAGE_COLOR: {
  1600.             int cxcolor = 10;
  1601.             hd = dialogbig(" 色分け ");
  1602.             dialogSetGroupRight(hd,xright0);
  1603.             
  1604.             dialogGroup(hd,"文字列の色分け");
  1605.                 dialogSetH(hd);
  1606.                     dialogControlHelp(hd,440);
  1607.                     dialogSelectColor(hd,"キーワード(&K):",&text->fDispKeyword,20,20);
  1608.                     dialogControlHelp(hd,41);
  1609.                     dialogColor(hd,"表示色...","キーワードの色",&text->rgbKeyword,cxcolor,NULL);
  1610.                 dialogLF(hd);
  1611.                     dialogControlHelp(hd,429);
  1612.                     dialogSelectColor(hd,"検索文字列(&S):",&text->fDispFind,20,20);
  1613.                     dialogControlHelp(hd,441);
  1614.                     dialogColor(hd,"表示色...","検索文字列の色",&text->rgbFind,cxcolor,NULL);
  1615.                 dialogLF(hd);
  1616.                     dialogControlHelp(hd,36);
  1617.                     dialogSelectColor(hd,"見出し・段落体裁(&H):",&text->fDispTitle,20,20);
  1618.                     dialogControlHelp(hd,38);
  1619.                     dialogColor(hd,"表示色...","見出しの色",&text->rgbTitle,cxcolor,NULL);
  1620.                 dialogLF(hd);
  1621.                 dialogSetV(hd);
  1622.                 //2.99 970313 URLの色分けON/OFF
  1623.                 dialogControlHelp(hd,414);
  1624.                 dialogCheckB(hd,"URL(&I)",&text->fColoringURL);
  1625.                 //
  1626.                     dialogSetH(hd);
  1627.                 dialogControlID(hd,IDD_COLORPARSE);
  1628.                 dialogControlHelp(hd,442);
  1629.                 dialogButton(hd,"高度な色分け(&W)...",NULL,24);
  1630.                 //2.99C 970326 「文書の設定」で色のカスタマイズを呼び出せる様にした(カスタマイズダイアログと行き来する場合もあるので)
  1631.                 dialogControlID(hd,IDD_CUST_COLOR);
  1632.                 dialogControlHelp(hd,443);
  1633.                 dialogButton(hd,"色のカスタマイズ(&C)...",NULL,24);
  1634.                     dialogSetV(hd);
  1635.             dialogGroupEnd(hd);
  1636.             
  1637.             dialogGroup(hd,"キーワードの指定");
  1638.                 dialogSetH(hd);
  1639. #if 1//2.99D 970401 
  1640.                     {
  1641.                         txstr szpath;
  1642.                         mchar szfilename[CCHPATHNAME];
  1643.                         strcpy(szfilename,"*.tkw");
  1644.                         pathFullConfig(szpath,szfilename);
  1645.                         dialogControlRefer(hd,"-n " + szpath);
  1646.                     }
  1647. #else
  1648.                     dialogControlRefer(hd,"-n "+text->szexedir+"*.tkw");
  1649. #endif
  1650.                     dialogControlHelp(hd,42);
  1651.                     dialogStrC(hd,"キーワードファイル(&F):",text->szkeywordfile,20,cchof(text->szkeywordfile),13);
  1652.                     dialogControlID(hd,IDD_NEWKEYWORDFILE);
  1653.                     dialogCmd(hd,"編集(&E)...",12);
  1654.                 dialogLF(hd);
  1655.                 dialogSetV(hd);
  1656.                 //
  1657.                 dialogControlHelp(hd,444);
  1658.                 dialogStrC(hd,"キーワード(&W):",text->szKeyword,20,cchof(text->szKeyword),24);
  1659.             dialogGroupEnd(hd);
  1660.             //
  1661.             dialogAddPreview(hd,IDD_PREVIEW3,5);
  1662.             break;
  1663.         }
  1664.         case IPAGE_EDIT: {
  1665.             hd = dialogbig(" 編集 ");
  1666.             dialogSetGroupRight(hd,xright0);
  1667. #if 1    //3.00A2 970507 「文書の設定|編集」ダイアログは、インライン整形の設定増加に伴い、デザイン変更
  1668.     //3.00A3 970507 「文書の設定|編集」デザイン変更
  1669.             int y;
  1670.             dialogHeadline(hd,"編集オプション",lcxHeadline);
  1671. //            dialogGroup(hd,"編集オプション");
  1672.                 y = dialogGetPosY(hd);
  1673.                 dialogControlHelp(hd,53);
  1674.                 dialogSelectIDB(hd,"フリーカーソル(&F):",&text->modeFreeCursor,13,16,"OFF","ON","擬似ON");
  1675.                 //
  1676.                 dialogControlHelp(hd,11);
  1677.                 dialogSelectIDB(hd,"オートインデント(&I):",&text->modeAutoIndent,13,16,"行わない","行う","全角スペースも行う");
  1678.                 //
  1679.                 dialogControlID(hd,IDD_AUTOCORRECT);
  1680.                 dialogControlHelp(hd,450);
  1681.                 dialogButton(hd,"オートコレクト(&C)...",NULL,24);
  1682.                 //
  1683.                 dialogSetPosY(hd,y);
  1684.                 dialogSetPosLX(hd,34);
  1685.                 //
  1686.                 dialogControlHelp(hd,12);
  1687.                 dialogCheckB(hd,"タブでスペースコードを入力(&S)",&text->fTabToSpace);
  1688.                 //2.98 970309 
  1689.                 dialogControlHelp(hd,404);
  1690.                 dialogCheckB(hd,"\"・\"で箇条書き(&R)",&context.fAfArticleDisc);
  1691.                 //2.98 970309 
  1692.                 dialogControlHelp(hd,405);
  1693.                 dialogCheckB(hd,"\".\"で見出し(&H)",&context.fAfTitle);
  1694.                 //
  1695.                 dialogLF(hd);
  1696. //            dialogGroupEnd(hd);
  1697.             
  1698.             dialogHeadline(hd,"禁則処理",lcxHeadline);
  1699. //            dialogGroup(hd,"禁則処理");
  1700.                 dialogSetH(hd);
  1701.                 dialogControlHelp(hd,10);
  1702.                 //2.99A 970321 禁則の設定改良
  1703.                 dialogSelectIDB(hd,"禁則(&K):",&text->fJkinsoku,10,28,
  1704.                     "しない",
  1705.                     "する",
  1706.                     "句読点も追い出す",
  1707.                     "できるだけ文字数を増やす"
  1708.                 );
  1709.                 //
  1710.                 dialogIndent(hd,2);
  1711.                 dialogControlID(hd,IDD_KINSOKU_ANK);
  1712.                 dialogControlHelp(hd,275);
  1713.                 dialogCheckB(hd,"英字禁則(&E)",&text->fWordlap);
  1714.                 dialogLFSetV(hd);
  1715. //            dialogGroupEnd(hd);
  1716.             
  1717.             dialogHeadline(hd,"インライン整形",lcxHeadline);
  1718. //            dialogGroup(hd,"インライン整形");
  1719.                 dialogControlHelp(hd,451);
  1720.                 dialogControlGuide(hd,"文字(半角)",12);
  1721.                 dialogControlUpdown(hd,MINWIDTH,MAXWIDTH);
  1722.                 dialogIntB(hd,"1行の文字数(&W):",&text->widthInlineform,20,lxval);
  1723.                     dialogSetH(hd);
  1724.                 dialogControlHelp(hd,419);
  1725.                 dialogCheckB(hd,"スペースでインデント(&O)",&context.fInlineformIndentSpace);
  1726.                 dialogControlHelp(hd,506);
  1727.                 dialogCheckB(hd,"[中止の確認(&U)]",&context.fInlineformQueryQuit);// (全テキスト共通)
  1728.                     dialogLFSetV(hd);
  1729.                 dialogControlHelp(hd,412);
  1730.                 dialogCheckB(hd,"シナリオモード(&N)",&context.fInlineformScenario);
  1731.                 //
  1732.                 dialogControlGuide(hd,"文字(半角) 0=標準値",22);
  1733.                 dialogControlUpdown(hd,1,31);
  1734.                 dialogControlHelp(hd,502);
  1735.     #if 1//3.00A3 970508 
  1736.                 dialogIntB(hd,"タブインデント数(&T):",&context.lcxInlineformIndentTogaki,20,lxval);
  1737.     #else
  1738.                 dialogIntB(hd,"ト書きのインデント数(&T):",&context.lcxInlineformIndentTogaki,20,lxval);
  1739.     #endif
  1740.                 //
  1741.                 dialogControlGuide(hd,"文字(半角)",12);
  1742.                 dialogControlUpdown(hd,1,31);
  1743.                 dialogControlHelp(hd,503);
  1744.                 dialogIntB(hd,"せりふのインデント数(&L):",&context.lcxInlineformIndentSerifu,20,lxval);
  1745.                 //
  1746.                 dialogControlHelp(hd,504);
  1747.                 dialogSelectIDB(hd,"全角・半角文字間の余白(&P):",&context.modeInlineformZenhanSpace,30,20,"調整しない","余白を空ける","余白を詰める");
  1748.                 dialogControlHelp(hd,505);
  1749.                 dialogSelectIDB(hd,"英字禁則(&D):",&context.modeInlineformWordlap,30,20,"文書の設定に従う","OFF","ON");
  1750. //            dialogGroupEnd(hd);
  1751. #else
  1752.             dialogGroup(hd,"編集オプション");
  1753.                 dialogControlHelp(hd,53);
  1754.                 dialogSelectIDB(hd,"フリーカーソル(&F):",&text->modeFreeCursor,16,16,"OFF","ON","擬似ON");
  1755.                 //
  1756.                 dialogControlHelp(hd,11);
  1757.                 dialogSelectIDB(hd,"オートインデント(&I):",&text->modeAutoIndent,16,16,"行わない","行う","全角スペースも行う");
  1758.                 //
  1759.                 dialogControlHelp(hd,12);
  1760.                 dialogCheckB(hd,"タブでスペースコードを入力(&S)",&text->fTabToSpace);
  1761.                 //2.98 970309 
  1762.                 dialogControlHelp(hd,404);
  1763.                 dialogCheckB(hd,"\"・\"で箇条書き(&R)",&context.fAfArticleDisc);
  1764.                 //2.98 970309 
  1765.                 dialogControlHelp(hd,405);
  1766.                 dialogCheckB(hd,"\".\"で見出し(&H)",&context.fAfTitle);
  1767.                 //
  1768.                 dialogControlID(hd,IDD_AUTOCORRECT);
  1769.                 dialogControlHelp(hd,450);
  1770.                 dialogButton(hd,"オートコレクト(&C)...",NULL,24);
  1771.             dialogGroupEnd(hd);
  1772.             
  1773.             dialogGroup(hd,"禁則処理");
  1774.                 dialogControlHelp(hd,10);
  1775.                 //2.99A 970321 禁則の設定改良
  1776.                 dialogSelectIDB(hd,"禁則(&K):",&text->fJkinsoku,16,28,
  1777.                     "しない",
  1778.                     "する",
  1779.                     "句読点も追い出す",
  1780.                     "できるだけ文字数を増やす"
  1781.                 );
  1782.                 dialogControlID(hd,IDD_KINSOKU_ANK);
  1783.                 dialogControlHelp(hd,275);
  1784.                 dialogCheckB(hd,"英字禁則(&E)",&text->fWordlap);
  1785.             dialogGroupEnd(hd);
  1786.             
  1787.             dialogGroup(hd,"インライン整形");
  1788.                 dialogControlHelp(hd,451);
  1789.                 dialogControlGuide(hd,"文字(半角)",12);
  1790.                 dialogControlUpdown(hd,MINWIDTH,MAXWIDTH);
  1791.                 dialogIntB(hd,"1行の文字数(&W):",&text->widthInlineform,16,lxval);
  1792.                 dialogControlHelp(hd,412);
  1793.                 dialogCheckB(hd,"シナリオモード(&N)",&context.fInlineformScenario);
  1794.                 //2.99 970319 
  1795.                 dialogControlHelp(hd,419);
  1796.                 dialogCheckB(hd,"スペースでインデント(&O)",&context.fInlineformIndentSpace);
  1797.             dialogGroupEnd(hd);
  1798. #endif
  1799.             break;
  1800.         }
  1801.         case IPAGE_FORMDT: {
  1802.             if (text->fHTML) {
  1803.                 hd = dialogbig(" HTML ");
  1804.                 dialogSetGroupRight(hd,xright0);
  1805.                 
  1806.                 dialogGroup(hd,"HTMLファイル保存時の処理");
  1807.                     dialogControlHelp(hd,184);
  1808.                     dialogCheckB(hd,"タグの書き換え確認(&T)",&shcfg->fConfirmHtmlChange);
  1809.                     dialogControlHelp(hd,397);
  1810.                     dialogCheckB(hd,"文字コードJIS,改行コードLFで保存(&J)",&shcfg->fHtmlSaveJisLf);
  1811.                 dialogGroupEnd(hd);
  1812.                 
  1813.                 dialogGroup(hd,"テキストモード→体裁モード切換時の処理");
  1814.                     //3.00A3 970508 
  1815.                     dialogControlHelp(hd,508);
  1816.                     dialogCheckB(hd,"改行を空白に変換(&R)",&shcfg->fHtmlConvertReturnToSpace);
  1817.                 dialogGroupEnd(hd);
  1818.                 
  1819.                 dialogGroup(hd,"体裁モード→テキストモード切換時の処理");//3.00A3 970508 「体裁モードからテキストモードへ切り替え時のタグ出力」から名称変更
  1820.                     dialogSelectIDB(hd,"表の出力(&B):",&shcfg->modeHtmlOutTable,16,30,"各行を1行で出力","セルを1行毎に出力");
  1821.                 dialogGroupEnd(hd);
  1822.                 
  1823.                 dialogGroup(hd,"HTML");
  1824.                     //2.99C 970326 "IE3とNetscape3の全てのタグを使用"追加
  1825.                     dialogSelectIDB(hd,"使用するタグ(&H):",&shcfg->modeHtml,16,35,"標準","IE3の拡張タグも使用","Netscape3の拡張タグも使用","IE3とNetscape3の全てのタグを使用");
  1826.                     //
  1827.                     dialogControlHelp(hd,420);
  1828.                     dialogControlRefer(hd,\"-d \*.*");
  1829.                     dialogStrC(hd,"リンクベースディレクトリ(&D):",shcfg->szPathHtmlBase,20,cchof(shcfg->szPathHtmlBase),26);
  1830.                     //2.99C 970323 
  1831.                     dialogSelectIDB(hd,"ファイル名指定時の変換(&F):",&shcfg->modeHtmlFilenameCase,24,20,"そのまま","小文字へ","大文字へ");
  1832.                 dialogGroupEnd(hd);
  1833.             }
  1834.             break;
  1835.         }
  1836.         case IPAGE_HELP: {
  1837.             hd = dialogbig(" ヘルプ ");
  1838.             dialogSetGroupRight(hd,DTCX * 60);
  1839.             
  1840.             dialogGroup(hd,"外部ヘルプファイル(&E)");
  1841.                 dialogControlRefer(hd,"*.hlp");
  1842.                 dialogControlHelp(hd,171);
  1843.                 dialogStrC(hd,"ヘルプ&1:",text->tszhelp[0],8,cchof(text->tszhelp[0]),30);
  1844.                 dialogControlRefer(hd,"*.hlp");
  1845.                 dialogControlHelp(hd,172);
  1846.                 dialogStrC(hd,"ヘルプ&2:",text->tszhelp[1],8,cchof(text->tszhelp[1]),30);
  1847.                 dialogCaption(hd,"    (\"tx\"を指定するとWZ APIヘルプが引けます)");
  1848.             dialogGroupEnd(hd);
  1849.             
  1850.             break;
  1851.         }
  1852.         case IPAGE_CUST_COLOR: {
  1853.             hd = dialogbig(" 色 ");
  1854.             dialogSetGroupRight(hd,xright0);
  1855.             
  1856.             dialogGroup(hd,"部位の色");
  1857.                 dialogControlHelp(hd,134);
  1858.                 dialogControlID(hd,IDD_MYCOLOR);//2.99C 970326 
  1859.                 if (arg) {//3.00B1 970613 
  1860.                     dialogCheckB(hd,"ビューモードの部位の色を指定する(&V)",&text->fMyColor);
  1861.                 } else {
  1862.                     dialogCheckB(hd,"[このファイルタイプ専用の指定を行う]",&text->fMyColor);
  1863.                 }
  1864.                 dialogSetH(hd);
  1865.                     dialogControlHelp(hd,19);
  1866.                     dialogColor(hd,"文字(&E)...","テキストの色",&text->rgbText,lcx2,NULL);
  1867.                     dialogControlHelp(hd,20);
  1868.                     dialogColor(hd,"背景(&C)...","テキストの背景",&text->rgbBack,lcx2,NULL);
  1869.                 dialogLF(hd);
  1870.                     dialogControlHelp(hd,21);
  1871.                     dialogColor(hd,"選択文字(&B)...","選択テキストの色",&text->rgbBlockText,lcx2,NULL);
  1872.                     dialogControlHelp(hd,22);
  1873.                     dialogColor(hd,"選択背景(&L)...","選択テキストの背景",&text->rgbBlock,lcx2,NULL);
  1874.                 dialogLF(hd);
  1875.                     dialogControlHelp(hd,23);
  1876.                     dialogColor(hd,"行番号(&N)...","行番号の色",&text->rgbNline,lcx2,NULL);
  1877.                     dialogControlHelp(hd,24);
  1878.                     dialogColor(hd,"アンダーライン(&U)...","アンダーラインの色",&text->rgbUnderline,lcx2,NULL);
  1879.                 dialogLF(hd);
  1880.                     dialogControlHelp(hd,25);
  1881.                     dialogColor(hd,"制御文字(&O)...","制御文字の色",&text->rgbControl,lcx2,NULL);
  1882.                     dialogControlHelp(hd,453);
  1883.                     dialogColor(hd,"URL(&I)...","URLの色",&text->rgbURL,lcx2,NULL);//2.93 
  1884.                 dialogSetV(hd);
  1885.                 dialogLF(hd);
  1886.             dialogGroupEnd(hd);
  1887.             
  1888.             dialogAddPreview(hd,IDD_PREVIEW,5);//2.99B 970322 カスタマイズの色にプレビューを付けた
  1889.             break;
  1890.         }
  1891.         case IPAGE_CUST_SCROLL: {
  1892.             hd = dialogbig(" スクロール ");
  1893.             dialogSetGroupRight(hd,xright0);
  1894.             
  1895.             dialogHeadline(hd,"加速",lcxHeadline);//2.99C 970327 
  1896. //            dialogGroup(hd,"加速");
  1897.                 dialogControlHelp(hd,43);
  1898.                 dialogControlGuide(hd,"行後から",10);
  1899.                 dialogControlUpdown(hd,1,20);
  1900.                 dialogIntB(hd,"加速開始(&S):",&text->nKeyScrollAccStart,16,lxval);
  1901.                 dialogControlHelp(hd,44);
  1902.                 dialogControlGuide(hd,"行ずつ",10);
  1903.                 dialogControlUpdown(hd,1,20);
  1904.                 dialogIntB(hd,"行数(&L):",&text->nKeyScrollAcc,16,lxval);
  1905.                 dialogControlHelp(hd,45);
  1906.                 dialogControlGuide(hd,"文字ずつ",10);
  1907.                 dialogControlUpdown(hd,1,30);
  1908.                 dialogIntB(hd,"横スクロール(&H):",&text->nCursorScrollH,16,lxval);
  1909. //            dialogGroupEnd(hd);
  1910.             
  1911.             dialogHeadline(hd,"自動スクロール",lcxHeadline);//2.99C 970327 
  1912. //            dialogGroup(hd,"自動スクロール");
  1913.                 dialogControlHelp(hd,46);
  1914.                 dialogSelectIDW(hd,"速度(&O):",&text->iScrollSpeed,16,14,"0:最低速","1:低速","2:中速","3:高速","4:最高速");
  1915.                 dialogControlHelp(hd,47);
  1916.                 dialogCheckB(hd,"倍速(&D)",&text->fScrollSpeedDouble);
  1917.                 dialogControlHelp(hd,48);
  1918.                 dialogCheckB(hd,"画面上下ジャンプと連動(&E)",&text->fVzEs);
  1919. //            dialogGroupEnd(hd);
  1920.             
  1921.             dialogHeadline(hd,"詳細",lcxHeadline);//2.99C 970327 
  1922. //            dialogGroup(hd,"詳細");
  1923.                 dialogControlHelp(hd,49);
  1924.                 dialogCheckB(hd,"スクロールバーでカーソル移動(&R)",&text->fCursorMoveBySB);
  1925.                 dialogControlHelp(hd,50);
  1926.                 dialogSelectIDB(hd,"ページング単位(&P):",&text->fHalfPage,16,16,"全画面","半画面");
  1927. //            dialogGroupEnd(hd);
  1928.             
  1929.             break;
  1930.         }
  1931.         case IPAGE_CUST_SAVE: {
  1932.             hd = dialogbig(" 保存 ");
  1933.             dialogSetGroupRight(hd,xright0);
  1934.             
  1935.             dialogHeadline(hd,"自動保存",lcxHeadline);//2.99C 970327 
  1936. //            dialogGroup(hd,"自動保存");
  1937.                 dialogControlHelp(hd,92);
  1938.                 dialogCheckB(hd,"自動保存を行う(&V)",&text->fAutoSave);
  1939.                 dialogControlHelp(hd,93);
  1940.                 dialogCheckB(hd,"フロッピーには自動保存しない(&F)",&context.autosaveDevice);
  1941.                 dialogSetH(hd);//2.99C 970327 
  1942.                     dialogControlHelp(hd,97);
  1943.                     dialogControlUpdown(hd,1,300);
  1944.                     dialogControlGuide(hd,"回の編集を行った後、",20);dialogIntW(hd,NULL,&text->nAutoSaveCmd,0,lxval);
  1945.                     dialogControlHelp(hd,98);
  1946.                     dialogControlUpdown(hd,0,300);
  1947.                     dialogControlGuide(hd,"秒後に自動保存する",20);dialogIntW(hd,NULL,&text->secAutoSaveWait,0,lxval);
  1948.                 dialogLFSetV(hd);//2.99C 970327 
  1949.                 dialogControlHelp(hd,94);
  1950.                 dialogSelectIDB(hd,"自動保存の方法(&S):",&context.autosaveMode,37,19,"ファイルを上書き","一時ファイルに保存");
  1951.                 dialogControlHelp(hd,95);
  1952.                 dialogSelectIDB(hd,"編集内容を保存しないで閉じた時(&C):",&context.autosaveAtQuit,37,19,"何もしない","一時ファイルを削除","一時ファイルに保存");
  1953.                 dialogControlHelp(hd,96);
  1954.                 dialogSelectIDB(hd,"オープン時に一時ファイルが残っている時(&M):",&context.autosaveAtOpen,37,19,"ステータスバーメッセージ","警告","一時ファイルを開く");
  1955. //            dialogGroupEnd(hd);
  1956.             
  1957.             dialogHeadline(hd,"上書き保存のバックアップ",lcxHeadline);//2.99C 970327 
  1958. //            dialogGroup(hd,"上書き保存のバックアップ");
  1959.                 dialogControlHelp(hd,103);
  1960.                 dialogCheckB(hd,"バックアップする(&B)",&text->fBackup);
  1961.                 dialogControlHelp(hd,104);
  1962.                 dialogControlRefer(hd,\"-d \*.*");
  1963.                 dialogStrC(hd,"ディレクトリ(&D):",text->szBackup,12,cchof(text->szBackup),30);
  1964. //            dialogGroupEnd(hd);
  1965.             
  1966.             dialogHeadline(hd,"詳細",lcxHeadline);//2.99C 970327 
  1967. //            dialogGroup(hd,"詳細");
  1968.                 dialogControlHelp(hd,109);
  1969.                 dialogCheckB(hd,"編集位置を保存(&P)",&text->fSaveEditContext);
  1970.                 dialogControlHelp(hd,128);
  1971.                 dialogCheckB(hd,"ウィンドウの位置を保存(&O)",&text->fSaveWindowPos);
  1972. //            dialogGroupEnd(hd);
  1973.             
  1974.             break;
  1975.         }
  1976.         case IPAGE_CUST_MENU: {
  1977.             int dtcybox = DTCYBOX + (_fwin40 ? 3 : 1);
  1978.             hd = dialogbig(" メニュー ");
  1979.             dialogSetGroupRight(hd,xright0);
  1980.             
  1981.             dialogHeadline(hd,"[メニュー]",lcxHeadline);//2.99C 970327 
  1982. //            dialogGroup(hd,"[メニュー]");
  1983.                 DTRECT r1,r2,r3;
  1984.                 dialogGetPos(hd,&r1);
  1985.                 r1.cx = DTCX * 16;
  1986.                 r1.cy = DTCY;
  1987.                 dialogControlHelp(hd,58);
  1988.                 _dialogAddLtext(hd,"メニューバー(&M):",&r1);
  1989.                 r2 = r1;
  1990.                 r2.x += r1.cx + DTCX;
  1991.                 r2.cx = DTCX * 26;
  1992.                 r2.cy = DTCY * 10;
  1993.                 _dialogAddCombobox(hd,IDD_MENUBAR,&r2);
  1994.                 _dialogAddControlInfo(hd,IDD_MENUBAR);
  1995.                 //
  1996.                 r3 = r2;r3.x += r3.cx + DTCX;
  1997.                 dialogSetPos(hd,&r3);
  1998.                 dialogControlID(hd,IDD_CUSTMENUBAR);
  1999.                 dialogButton(hd,"編集(&E) >>",NULL,12);
  2000.                 //
  2001.                 r1.y += dtcybox;
  2002.                 r2.y += dtcybox;
  2003.                 r3.y += dtcybox;
  2004.                 //
  2005.                 dialogControlHelp(hd,59);
  2006.                 _dialogAddLtext(hd,"右クリック(&C):",&r1);
  2007.                 _dialogAddCombobox(hd,IDD_MENUMOUSER,&r2);
  2008.                 _dialogAddControlInfo(hd,IDD_MENUMOUSER);
  2009.                 //
  2010.                 dialogSetPos(hd,&r3);
  2011.                 dialogControlID(hd,IDD_CUSTCONTEXTMENU);
  2012.                 dialogButton(hd,"編集(&F) >>",NULL,12);
  2013.                 //
  2014.                 r1.y += dtcybox;
  2015.                 r2.y += dtcybox;
  2016.                 r3.y += dtcybox;
  2017.                 //
  2018.                 dialogControlHelp(hd,60);
  2019.                 _dialogAddLtext(hd,"選択時右クリック(&D):",&r1);
  2020.                 _dialogAddCombobox(hd,IDD_MENUMOUSERCLIP,&r2);
  2021.                 _dialogAddControlInfo(hd,IDD_MENUMOUSERCLIP);
  2022.                 //
  2023.                 dialogSetPos(hd,&r3);
  2024.                 dialogControlID(hd,IDD_CUSTCONTEXTMENUSELECT);
  2025.                 dialogButton(hd,"編集(&G) >>",NULL,12);
  2026.                 //
  2027.                 r1.y += dtcybox;
  2028.                 r2.y += dtcybox;
  2029.                 r3.y += dtcybox;
  2030.                 dialogSetPos(hd,&r1);
  2031.                 //
  2032.                 dialogControlHelp(hd,61);
  2033.                 dialogCheckB(hd,"英語メニュー(&L)",&shcfg->fEnglish);
  2034. //            dialogGroupEnd(hd);
  2035.             
  2036.             dialogHeadline(hd,"ファイルメニューのヒストリ表示",lcxHeadline);//2.99C 970327 
  2037. //            dialogGroup(hd,"ファイルメニューのヒストリ表示");
  2038.                 dialogControlGuide(hd,"(0から70まで)",15);
  2039.                 dialogControlHelp(hd,86);
  2040.                 dialogControlUpdown(hd,0,70);
  2041.                 dialogIntW(hd,"メニュー表示数(&H):",&text->nDispFileHist,16,lxval);
  2042.                 dialogControlHelp(hd,87);
  2043.                 dialogSelectIDB(hd,"表示(&I):",&text->modeDispFileHist,16,16,"フルパス","ファイル名優先");
  2044. //            dialogGroupEnd(hd);
  2045.             
  2046.             break;
  2047.         }
  2048.         case IPAGE_CUST_TOOLBAR: {
  2049.             hd = dialogbig(" ツールバー ");
  2050.             dialogSetGroupRight(hd,xright0);
  2051.             
  2052.             dialogHeadline(hd,"ツールバー",lcxHeadline);//2.99C 970327 
  2053. //            dialogGroup(hd,"ツールバー");
  2054.                 DTRECT r1,r2;
  2055.                 dialogGetPos(hd,&r1);
  2056.                 r1.cx = DTCX * 20;
  2057.                 r1.cy = DTCY;
  2058.                 dialogControlHelp(hd,66);
  2059.                 _dialogAddLtext(hd,"[ツールバー(&T)]:",&r1);
  2060.                 r2 = r1;
  2061.                 r2.x += r1.cx + DTCX;
  2062.                 r2.cx = DTCX * 22;
  2063.                 r2.cy = DTCY * 10;
  2064.                 _dialogAddCombobox(hd,IDD_TOOLBAR,&r2);
  2065.                 _dialogAddControlInfo(hd,IDD_TOOLBAR);
  2066.                 //
  2067.                 r2.x += r2.cx + DTCX;
  2068.                 dialogSetPos(hd,&r2);
  2069.                 dialogControlID(hd,IDD_CUSTTOOLBAR);
  2070.                 dialogButton(hd,"編集(&E) >>",NULL,12);
  2071.                 //
  2072.                 r1.y += DTCY * 2;
  2073.                 dialogSetPos(hd,&r1);
  2074.                 //
  2075.                 dialogControlHelp(hd,67);
  2076.                 dialogControlGuide(hd,"ドット",6);
  2077.                 dialogControlUpdown(hd,8,40);
  2078.                 dialogIntXYW(hd,"ボタンサイズ(&B):",&shcfg->cxenvbuttonsize,&shcfg->cyenvbuttonsize,20,lxval);
  2079.                 
  2080.                 dialogControlHelp(hd,68);
  2081.                 if (_fwin40) dialogControlEnable(hd,FALSE);//2.99D 970402 Win95/NT4.0ではツールバーのボタン上下の余白は変更できない
  2082.                 dialogControlGuide(hd,"ドット",6);
  2083.                 dialogControlUpdown(hd,0,10);
  2084.                 dialogIntB(hd,"ボタンの上下の余白(&I):",&shcfg->cyenvtoolbarint,20,lxval);
  2085. //            dialogGroupEndGetRect(hd,&r);
  2086.             
  2087.             break;
  2088.         }
  2089.         case IPAGE_CUST_MOUSE: {
  2090.             hd = dialogbig(" マウス ");
  2091.             dialogSetGroupRight(hd,xright0);
  2092.             
  2093.             dialogHeadline(hd,"マウス",lcxHeadline);//2.99C 970327 
  2094. //            dialogGroup(hd,"マウス");
  2095.     #if 1//3.00A2 970505 
  2096.                 dialogControlHelp(hd,130);
  2097.                 dialogSelectIDB(hd,"マウスカーソルを消す(&M):",&text->fMouseNoHide,29,20,"文字入力で消す","消さない","キー入力で消す");
  2098.     #else
  2099.                 dialogControlHelp(hd,130);
  2100.                 dialogControlReverseBool(hd);
  2101.                 dialogCheckB(hd,"文字入力中に、マウスカーソルを消す(&C)",&text->fMouseNoHide);//2.00B 
  2102.     #endif
  2103.                 dialogControlHelp(hd,131);
  2104.                 dialogControlReverseBool(hd);
  2105.                 dialogCheckB(hd,"ドラッグ(&D)&&ドロップを使って、カットアンドペーストを行う",&text->fMouseNoClipDD);//2.00B 
  2106.                 dialogControlHelp(hd,69);
  2107.                 dialogCheckB(hd,"マウスクリックアクティブ時に、カーソルをクリック位置に移動する(&W)",&text->fSetLocateByMouseFocus);
  2108.                 dialogControlHelp(hd,70);
  2109.                 dialogSelectIDB(hd,"マウスポインタの形状(&M):",&text->fMouseArrow,33,16,"Iビーム","矢印");
  2110.                 dialogControlHelp(hd,71);
  2111.                 dialogSelectIDW(hd,"マウスのドラッグによるスクロールの速度(&S):",&text->iMouseScrollSpeed,33,16,"0:最低速","1:低速","2:中速","3:高速","4:最高速");
  2112.                 dialogControlHelp(hd,72);
  2113.                 dialogSelectIDW(hd,"マウスによる範囲選択のモード(&E):",&text->modeMouseClip,33,16,"Windows標準","開始方向感応","方向感応(VZライク)");
  2114. //            dialogGroupEnd(hd);
  2115.             
  2116.             break;
  2117.         }
  2118.         case IPAGE_CUST_KINSOKU: {
  2119.             hd = dialogbig(" 禁則 ");
  2120.             dialogSetGroupRight(hd,xright0);
  2121.             //
  2122.             dialogControlHelp(hd,459);
  2123.             dialogStrC(hd,"行頭禁則文字(&T):",shcfg->szKinsokuTop,16,cchof(shcfg->szKinsokuTop),40);
  2124.             dialogControlHelp(hd,460);
  2125.             dialogStrC(hd,"行末禁則文字(&E):",shcfg->szKinsokuEnd,16,cchof(shcfg->szKinsokuEnd),40);
  2126.             dialogControlHelp(hd,461);
  2127.             dialogStrC(hd,"句読点(&K):",shcfg->szKinsokuKuten,16,cchof(shcfg->szKinsokuKuten),40);
  2128.             break;
  2129.         }
  2130.         case IPAGE_CUST_COMPATI: {
  2131.             hd = dialogbig(" 互換性 ");
  2132.             dialogSetGroupRight(hd,xright0);
  2133.             //
  2134.             dialogHeadline(hd,"VZライク",lcxHeadline);//2.99C 970327 
  2135. //            dialogGroup(hd,"VZライク");
  2136.                 dialogControlHelp(hd,56);
  2137.                 dialogCheckB(hd,"テキストスタックのペースト後、カーソルを移動する(&B)",&text->fJumpTxPasteEnd);
  2138.                 dialogControlHelp(hd,119);
  2139.                 dialogCheckB(hd,"タイトルサーチを行う(&T)",&text->fSearchTitle);
  2140.                 dialogControlHelp(hd,467);
  2141.                 dialogCheckB(hd,"VZライクのタグジャンプを行う(&U)",&text->modeTagJump);
  2142.                 dialogControlHelp(hd,170);
  2143.                 dialogCheckB(hd,"ステータスバーにページングモードを表示する(&P)",&text->fDispPagingMode);
  2144. //            dialogGroupEnd(hd);
  2145.             //
  2146.             dialogHeadline(hd,"MIFESライク",lcxHeadline);//2.99C 970327 
  2147. //            dialogGroup(hd,"MIFESライク");
  2148.                 dialogControlHelp(hd,120);
  2149.                 dialogCheckB(hd,"検索文字列の取得を行う(&G)",&text->fMiTakeSearchText);
  2150. //            dialogGroupEnd(hd);
  2151.             //
  2152.             dialogHeadline(hd,"その他の互換性",lcxHeadline);//2.99C 970327 
  2153. //            dialogGroup(hd,"その他の互換性");
  2154.                 dialogControlHelp(hd,400);
  2155.                 dialogCheckB(hd,"高速オープンを無効にする(&H)",&shcfg->fNoOpenHigh);
  2156.                 dialogControlHelp(hd,468);
  2157.                 dialogCheckB(hd,"表示フォントサイズをドット単位で指定する(&D)",&shcfg->fSpecifyFontsizeByDot);
  2158. //            dialogGroupEnd(hd);
  2159.             //
  2160.             break;
  2161.         }
  2162.         case IPAGE_CUST_KEY: {
  2163.             int dtcybox = DTCYBOX + DTCYINT;
  2164.             int lxguide = 19;
  2165.             hd = dialogbig(" キー ");
  2166.             dialogSetGroupRight(hd,xright0);
  2167.             
  2168.             dialogHeadline(hd,"キー",lcxHeadline);//2.99C 970326 
  2169. //            dialogGroup(hd,"キー");
  2170.                 DTRECT r1,r2;
  2171.                 dialogGetPos(hd,&r1);
  2172.                 r1.cx = DTCX * lxguide;
  2173.                 r1.cy = DTCY;
  2174.                 dialogControlHelp(hd,62);
  2175.                 _dialogAddLtext(hd,"キー定義(&K):",&r1);
  2176.                 r2 = r1;
  2177.                 r2.x += r1.cx + DTCX;
  2178.                 r2.cx = DTCX * 23;
  2179.                 r2.cy = DTCY * 10;
  2180.                 _dialogAddCombobox(hd,IDD_KEY,&r2);
  2181.                 _dialogAddControlInfo(hd,IDD_KEY);
  2182.                 //
  2183.                 r2.x += r2.cx + DTCX;
  2184.                 dialogSetPos(hd,&r2);
  2185.                 dialogControlID(hd,IDD_CUSTKEY);
  2186.                 dialogButton(hd,"編集(&E) >>",NULL,12);
  2187.                 r1.y += dtcybox;
  2188.                 dialogSetPos(hd,&r1);
  2189.                 //2.96 970209 [互換性]-[ユーザインターフェース]を[キー]へ移動
  2190.                 dialogControlHelp(hd,421);
  2191.                 dialogSelectIDB(hd,"ユーザインターフェース(&U):",&text->modeEditor,lxguide,18,"Windows準拠","VZライク","MIFESライク");
  2192.                 //
  2193.                 dialogControlHelp(hd,63);
  2194.                 dialogSelectIDW(hd,"範囲選択(方向キー)(&S):",&text->modeKeyClip,lxguide,18,"Windows標準","開始方向感応","方向感応(VZライク)");
  2195.                 //
  2196.                 dialogControlHelp(hd,65);
  2197.                 dialogCheckB(hd,"Altキーにコマンドを割り当てる(&L)",&text->fUseMenuKey);
  2198. //            dialogGroupEnd(hd);
  2199. #if 0//2.99C 970326 カスタマイズ-[キー|カーソルの形状]は[キー|詳細]に吸収
  2200.             dialogGroup(hd,"カーソルの形状");
  2201.                 dialogControlHelp(hd,51);
  2202.                 dialogSelectIDW(hd,"挿入形状(&I):",&text->nCursorFaceInsert,13,14,"Windows標準","フル","縦半分","縦1/4","アンダーバー");
  2203.                 dialogControlHelp(hd,52);
  2204.                 dialogSelectIDW(hd,"上書形状(&O):",&text->nCursorFaceWrite,13,14,"Windows標準","フル","縦半分","縦1/4","アンダーバー");
  2205.                 dialogLFV(hd);//2.99C 970323 
  2206.                 dialogSpaceH(hd);
  2207.                 dialogCheckB(hd,"カーソルを点滅しない(&B)",&shcfg->fNoCursorBlink);//2.98 970304 
  2208.             dialogGroupEnd(hd);
  2209. #endif
  2210.             dialogSetIntXY(hd,0,0);
  2211.             dialogHeadline(hd,"詳細",lcxHeadline);//2.99C 970326 
  2212. //            dialogGroup(hd,"詳細");
  2213.             dialogSetIntXY(hd,0,0);
  2214.                 //2.99A 970321 カスタマイズ-[キー]-[日本語入力の制御] -> [キー]-[詳細]
  2215.                 dialogSetH(hd);
  2216.                 dialogControlHelp(hd,76);
  2217.                 dialogCheckB(hd,"カーソル位置で漢字変換(&C)",&text->fImeCursor);
  2218.                 #ifdef __FLAT__
  2219.                 //2.00B WZ32でATOK9を使用したときの",、、、"対策をとった
  2220.                 dialogControlHelp(hd,175);
  2221.                 dialogCheckB(hd,"ATOK9対応(&T)",&shcfg->fAtok9);//2.99 970320 ATOK->ATOK9
  2222.                 #endif
  2223.                 dialogSetV(hd);
  2224.                 dialogLF(hd);
  2225.                 dialogControlHelp(hd,75);
  2226.                 dialogCheckB(hd,"アクティブでなくなった時にIMEをOFF(&P)",&text->fImeOffKillFocus);
  2227.                 //2.99C 970323 編集ファイルを変えてもIMEのON/OFF状態を保持する設定を追加
  2228.                 dialogControlHelp(hd,427);
  2229.                 dialogCheckB(hd,"IMEのON/OFF状態を保持(&H)",&shcfg->fImeStatusHold);
  2230.                 //2.99C 970326 
  2231.                 dialogResetInt(hd);
  2232.                     dialogSetH(hd);
  2233.                     dialogControlAddY(hd,DTCYKEY - DTCY);
  2234.                     dialogCaptionDynamic(hd,"カーソル形状(&I):",12);
  2235.                     dialogControlHelp(hd,51);
  2236.                     dialogSelectIDW(hd,"挿入モード",&text->nCursorFaceInsert,8,14,"Windows標準","フル","縦半分","縦1/4","アンダーバー");
  2237.                     dialogControlHelp(hd,52);
  2238.                     dialogSelectIDW(hd,"上書モード",&text->nCursorFaceWrite,8,14,"Windows標準","フル","縦半分","縦1/4","アンダーバー");
  2239.                     dialogLFSetV(hd);
  2240.                 dialogSetIntXY(hd,0,0);
  2241.                 dialogControlHelp(hd,469);
  2242.                 dialogCheckB(hd,"カーソルを点滅しない(&B)",&shcfg->fNoCursorBlink);//2.98 970304 
  2243.                 dialogControlHelp(hd,55);
  2244.                 dialogCheckB(hd,"カーソルの横移動で、前行・次行へ移動しない(&N)",&text->fCursorNoLf);
  2245.                 //2.99C 970323 
  2246.                 dialogControlHelp(hd,428);
  2247.                 dialogCheckB(hd,"方向キーで範囲の先頭・末尾にジャンプしない(&D)",&shcfg->fNoUpDownAtClipMouse);
  2248.                 //2.00E 縦書き時にダイヤモンドカーソルの縦横入れ替えを可能にした
  2249.                 dialogControlHelp(hd,346);
  2250.                 dialogCheckB(hd,"縦書き時に、ダイヤモンドカーソルの縦横を入れ替える(&V)",&text->fTxkeyVertical);
  2251.                 //2.99A 970321 カスタマイズ-[検索]-[検索ダイアログで、WZ拡張コンボボックスを使う] -> [キー]-[詳細]-[WZ拡張コンボボックスを使う]
  2252.                 dialogControlHelp(hd,64);
  2253.                 dialogCheckB(hd,"WZ拡張コンボボックスを使う(&O)",&text->fVzTextBoxHist);
  2254.             dialogResetInt(hd);
  2255. //            dialogGroupEnd(hd);
  2256.             
  2257.             break;
  2258.         }
  2259.         case IPAGE_CUST_FILE: {
  2260.             hd = dialogbig(" ファイル ");
  2261.             dialogSetGroupRight(hd,xright0);
  2262.             
  2263.             dialogHeadline(hd,"ファイルオープン時の処理",lcxHeadline);//2.97 970224 
  2264. //            dialogGroup(hd,"ファイルオープン時の処理");
  2265.             dialogSetPosLF(hd);//2.99D 970402 
  2266.                 dialogControlHelp(hd,81);
  2267.                 dialogCheckB(hd,"新規ファイルの確認(&N)",&text->fConfirmNewFile);
  2268.                 dialogControlHelp(hd,82);
  2269.                 dialogCheckB(hd,"UNIX/MACファイルの確認(&O)",&text->fConfirmForeignFile);
  2270.                 dialogControlHelp(hd,80);
  2271.                 dialogCheckB(hd,"漢字コードを自動判別(&K)",&shcfg->fKcAuto);
  2272.                 #ifdef __FLAT__
  2273.                 // WZ32では無効。
  2274.                 // Windowsがドキュメント指向になってきているので、無意味。
  2275.                 #else
  2276.                 dialogControlHelp(hd,135);
  2277.                 dialogCheckB(hd,"デフォルト拡張子以外は他アプリで開く(&T)",&shcfg->fenvwinextap);
  2278.                 #endif
  2279.                 dialogControlHelp(hd,351);
  2280.                 dialogCheckB(hd,"[バイナリ編集を開始(&B)]",&text->fConfigBinedit);
  2281.                 
  2282.                 //2.99D 970402 ファイルプレビューをオフできるようにした
  2283.                 dialogLFV(hd);
  2284.                 dialogControlHelp(hd,490);
  2285.                 dialogCheckB(hd,"ファイルプレビュー(&V)",&shcfg->fFilePreview);
  2286.                 dialogLF(hd);
  2287. //            dialogGroupEnd(hd);
  2288.             
  2289.             dialogHeadline(hd,"ファイルの排他制御",lcxHeadline);//2.97 970224 
  2290. //            dialogGroup(hd,"ファイルの排他制御");
  2291.                 dialogControlHelp(hd,89);
  2292.                 dialogSelectIDB(hd,"排他制御(&S):",&shcfg->modeenvfileshare,16,16,"なし","上書き禁止","読み書き禁止");
  2293.                 //
  2294.                 dialogControlHelp(hd,90);
  2295.                 dialogCheckB(hd,"保存時にファイルの日付を調べる(&C)",&shcfg->fenvcheckfiletime);
  2296.                 dialogControlHelp(hd,91);
  2297.                 dialogCheckB(hd,"アクティブ時にファイルの日付を調べる(&D)",&shcfg->fCheckFiletimeActive);
  2298. //            dialogGroupEnd(hd);
  2299.             
  2300.             dialogHeadline(hd,"文書パス",lcxHeadline);//2.97 970224 
  2301. //            dialogGroup(hd,"文書パス");
  2302.                 dialogControlHelp(hd,83);
  2303.                 dialogCheckB(hd,"文書パス検索を行う(&R)",&shcfg->fenvpathsearch);
  2304.                 dialogControlHelp(hd,84);
  2305.                 dialogStrC(hd,"文書パス(&P):",shcfg->szenvpath,16,CCHENVPATH,39);
  2306.                 dialogControlHelp(hd,85);
  2307.                 dialogStrC(hd,"デフォルト拡張子(&E):",shcfg->szenvext,16,CCHENVPATH,39);
  2308. //            dialogGroupEnd(hd);
  2309.             
  2310.             break;
  2311.         }
  2312.         case IPAGE_CUST_OTHER: {
  2313.             hd = dialogbig(" その他 ");
  2314.             dialogSetGroupRight(hd,xright0);
  2315.             
  2316.             dialogHeadline(hd,"ファイルオープンダイアログ",lcxHeadline);//2.99C 970327 
  2317. //            dialogGroup(hd,"ファイルオープンダイアログ");
  2318.                 //1.01A [オープンダイアログ]に[小型]追加
  2319.                 dialogControlHelp(hd,78);
  2320.                 if (_fwin40) {
  2321.                     dialogSelectIDB(hd,"形状(&D):",&text->modeOfn,16,20,"Windows3.1タイプ","Windows95タイプ","小型(VZライク)");
  2322.                 } else {
  2323.                     dialogSelectIDB(hd,"形状(&D):",&text->modeOfn,16,20,"Windows3.1タイプ","小型(VZライク)");
  2324.                 }
  2325.                 dialogControlHelp(hd,79);
  2326.                 dialogStrC(hd,"ファイルの種類(&W):",text->szFilter,16,cchof(text->szFilter),28);
  2327. //            dialogGroupEnd(hd);
  2328.             //2.99 970313 
  2329.             dialogHeadline(hd,"フォルダ毎の漢字コード指定",lcxHeadline);//2.99C 970327 
  2330. //            dialogGroup(hd,"フォルダ毎の漢字コード指定");
  2331.             dialogSetH(hd);
  2332.             {
  2333.                 int lx = 0;
  2334.                 dialogCaption(hd,"フォルダ(&F)");lx += 33 + 1;dialogSetPosLX(hd,lx);
  2335.                 dialogCaption(hd,"漢字コード");lx += 12 + 1;dialogSetPosLX(hd,lx);
  2336.                 dialogCaptionDynamic(hd,"改行コード",9);
  2337.                 dialogLF(hd);
  2338.                 //
  2339.                 for (int i = 0;i < DIRECTORYATR_N;i++) {
  2340.                     DIRECTORYATR* da = &shcfg->tDirAtr[i];
  2341.                     dialogControlHelp(hd,415);
  2342.                     dialogStrC(hd,NULL,da->szDirectory,0,cchof(da->szDirectory),33);
  2343.                     dialogControlHelp(hd,416);
  2344.                     dialogSelectIDB(hd,NULL,&da->kc,0,12,"シフトJIS","JIS","EUC","UNICODE");
  2345.                     dialogControlHelp(hd,417);
  2346.                     dialogSelectIDB(hd,NULL,&da->cr,0,9,"CR+LF","CR","LF");
  2347.                     dialogLF(hd);
  2348.                 }
  2349.             }
  2350.             dialogSetV(hd);
  2351. //            dialogGroupEnd(hd);
  2352.             
  2353.             dialogHeadline(hd,"その他の設定",lcxHeadline);//2.99C 970327 
  2354. //            dialogGroup(hd,"その他の設定");
  2355.             dialogSetIntXY(hd,0,0);
  2356.                 // 設定ダイアログが画面からはみ出しているときにチェックしてもらうので、
  2357.                 // はみ出ない様、上部にないといけない
  2358.                 //2.99D 970330 上部にもってきた
  2359.                 if (_fwin40) {
  2360.                     //2.00E Win95では"設定ダイアログを小さなフォントで表示(&S)"の設定は無効なので無くした
  2361.                 } else {
  2362.                     dialogControlHelp(hd,73);
  2363.                     dialogCheckB(hd,"設定ダイアログを小さなフォントで表示(&S)",&shcfg->fenvsmallfont);
  2364.                     if (!_fwin40) {
  2365.                         dialogControlEnable(hd,isexist3d());
  2366.                         dialogControlHelp(hd,473);
  2367.                         dialogCheckB(hd,"ダイアログの立体表示(&3)",&shcfg->fenvctl3d);
  2368.                     }
  2369.                 }
  2370. #if 1//2.99E 970403 
  2371.                 dialogControlHelp(hd,418);
  2372.                 #ifndef __FLAT__
  2373.                 dialogControlEnable(hd,FALSE);
  2374.                 #endif
  2375.                 dialogSelectIDB(hd,"ちらつかない表示(&I):",&text->fConfigDispSilent,22,18,"OFF","ON","状況に応じてON");
  2376. #else
  2377.                 dialogControlHelp(hd,418);
  2378.                 dialogCheckB(hd,"ちらつかない表示(&I)",&text->fDispSilent);
  2379. #endif
  2380.                 //
  2381.                 dialogControlHelp(hd,88);
  2382.                 dialogCheckB(hd,"WZの常駐(&T)",&shcfg->fenvstayalways);
  2383.                 dialogControlHelp(hd,57);
  2384.                 dialogCheckB(hd,"詳細モードで、ページ番号を時々計算し直す(&P)",&text->fFlushNpageSometime);
  2385.                 int y = dialogGetPosY(hd);//3.00A5 970511 
  2386.                 dialogControlHelp(hd,77);
  2387.                 dialogCheckB(hd,"警告音を鳴らす(&B)",&text->fbeep);
  2388. #if 1//3.00A 970501 「WZ音声化マクロ」を標準搭載
  2389.                 #ifdef __FLAT__
  2390.                     //3.00A5 970511 
  2391.                     dialogSetPosLX(hd,26);
  2392.                     dialogSetPosY(hd,y);
  2393.                     //
  2394.                     dialogControlHelp(hd,500);
  2395.                     dialogCheckB(hd,"音声化(&K)",&text->fSpeak);
  2396.                     //3.00A5 970511 
  2397.                     dialogSetPosLX(hd,40);
  2398.                     dialogSetPosY(hd,y);
  2399.                     dialogControlID(hd,IDD_CUSTSPEAK);
  2400.                     dialogButton(hd,"音声化の設定(&L) >>",NULL,20);
  2401.                 #endif
  2402. #else
  2403.                 #ifdef __FLAT__
  2404.                 if (text->share->env_speak) {
  2405.                     dialogCheckB(hd,"音声化(&K)",&text->fSpeak);
  2406.                 }
  2407.                 #endif
  2408. #endif
  2409.             dialogResetInt(hd);
  2410. //            dialogGroupEnd(hd);
  2411.             break;
  2412.         }
  2413.         case IPAGE_CUST_EDIT: {
  2414.             int lxguide = 20;
  2415.             hd = dialogbig(" 編集 ");
  2416.             dialogSetGroupRight(hd,xright0);
  2417.             
  2418.             dialogHeadline(hd,"アンドゥ・世代管理",lcxHeadline);//2.99C 970327 
  2419. //            dialogGroup(hd,"アンドゥ・世代管理");
  2420.                 dialogControlHelp(hd,101);
  2421.                 dialogCheckB(hd,"一連操作をまとめる(&C)",&text->fUndoContinue);
  2422.                 dialogControlHelp(hd,99);
  2423.                 dialogCheckB(hd,"バッファサイズを制限しない(&U)",&text->fUnlimitUndoBuff);
  2424.                 dialogControlHelp(hd,100);
  2425.                 dialogControlUpdown(hd,0,999);
  2426.                 dialogControlGuide(hd,"KB",3);
  2427.                 dialogIntW(hd,"最大バッファサイズ(&S):",&text->kbUndoBuffMax,18,lxval+1);
  2428. //            dialogGroupEndGetRect(hd,&r1);
  2429.             
  2430.             dialogHeadline(hd,"カットアンドペースト",lcxHeadline);//2.99C 970327 
  2431. //            dialogGroup(hd,"カットアンドペースト");
  2432.                 dialogControlHelp(hd,348);
  2433.                 dialogSelectIDB(hd,NULL,&text->modeClipboard,0,40,"Windowsクリップボードとテキストスタック併用","Windowsクリップボードのみ使用","テキストスタックのみ使用");
  2434.                 dialogControlHelp(hd,349);
  2435.                 dialogSelectIDB(hd,"コピーとペーストの動作(&P):",&text->fClipboardWinBased,lxguide,19,"VZライク","Windows準拠","貼り付け後に選択");
  2436.                 dialogControlHelp(hd,452);
  2437.                 dialogCheckB(hd,"選択しなくても行コピー/行カットする(&L)",&text->fClipboardNoSelect);
  2438. //            dialogGroupEnd(hd);
  2439.             
  2440.             dialogHeadline(hd,"編集モード",lcxHeadline);//2.99C 970327 
  2441. //            dialogGroup(hd,"編集モード");
  2442.                 //3.00B1 970522 
  2443.                 dialogControlHelp(hd,510);
  2444.                 dialogCheckB(hd,"編集した行の表示(&N)",&shcfg->fDispLineEdit);
  2445.                 //
  2446.                 dialogControlHelp(hd,108);
  2447.                 #ifdef __FLAT__
  2448.                 dialogSelectIDB(hd,"テンポラリファイル(&M):",&text->fTempMem,lxguide,16,"ディスクに作成","作成しない");
  2449.                 #else
  2450.                 dialogSelectIDB(hd,"テンポラリファイル(&M):",&text->fTempMem,lxguide,16,"ディスクに作成","メモリに作成");
  2451.                 #endif
  2452.                 dialogControlHelp(hd,350);
  2453.                 dialogSelectIDB(hd,"[EOFコード(&E)]:",&text->fAppendEof,lxguide,16,"そのまま","付加","除去");
  2454.                 dialogControlHelp(hd,112);
  2455.                 dialogCheckB(hd,"[DDEのサーバ(&D)]",&text->fddeServer);
  2456.                 dialogControlHelp(hd,113);
  2457.                 dialogCheckB(hd,"テキストスタックフル時の警告(&W)",&text->fWarnTextStackFull);
  2458. //            dialogGroupEnd(hd);
  2459.             
  2460.             break;
  2461.         }
  2462.         case IPAGE_CUST_SEARCH: {
  2463.             hd = dialogbig(" 検索 ");
  2464.             dialogSetGroupRight(hd,xright0);
  2465.             
  2466.             dialogGroup(hd,"詳細");
  2467.                 dialogSetIntXY(hd,0,0);
  2468.                 //2.99A 970320 
  2469.                 dialogControlHelp(hd,454);
  2470.                 dialogSelectIDB(hd,"検索ダイアログのモード(&S):",&shcfg->fSearchModeless,22,10,"モーダル","モードレス");
  2471.                 //
  2472.                 dialogControlHelp(hd,54);
  2473.                 dialogCheckB(hd,"検索・ジャンプ後に、カーソルを画面中央行へ移動する(&J)",&text->fJumpCursorCenter);
  2474.                 dialogControlHelp(hd,455);
  2475.                 dialogControlReverseBool(hd);
  2476.                 dialogCheckB(hd,"単語毎に検索オプションを記憶する(&U)",&shcfg->fNoMemorySearchOption);
  2477.                 dialogControlHelp(hd,116);
  2478.                 dialogCheckB(hd,"拡張正規表現を使う(&V)",&text->fVwxwExRexp);
  2479.                 dialogControlHelp(hd,117);
  2480.                 dialogCheckB(hd,"見つけた文字列を選択する(&R)",&text->fDispSearch);
  2481.                 dialogControlHelp(hd,118);
  2482.                 dialogCheckB(hd,"見つけた文字列は置き換えない(&E)",&text->fNoReplaceSelSearch);
  2483.                 //2.97 970225 
  2484.                 dialogControlHelp(hd,456);
  2485.                 dialogCheckB(hd,"検索ダイアログの検索文字列フォントをテキストと同じにする(&F)",&shcfg->fSearchSetFont);
  2486.                 dialogControlHelp(hd,457);
  2487.                 dialogCheckB(hd,"モードレス検索ダイアログに、[上へ],[下へ]ボタンを付ける(&B)",&shcfg->fSearchButton);
  2488.                 dialogControlHelp(hd,458);
  2489.                 dialogCheckB(hd,"カーソル位置の文字列を取り込んで、検索ダイアログを開く(&I)",&shcfg->fSearchGetText);
  2490.                 //2.92 
  2491.                 dialogControlHelp(hd,114);
  2492.                 dialogSelectIDB(hd,"検索ダイアログの形状(&D):",&text->modeSearchDialog,22,10,"WZ1.0","標準","小型");
  2493.                 dialogResetInt(hd);
  2494.             dialogGroupEnd(hd);
  2495.             
  2496.             break;
  2497.         }
  2498.         case IPAGE_STYLE: {
  2499.             //2.99F 970403 WZ16 StackOver対策に6つに分割してサブダイアログにしてみたが、
  2500.             // サブダイアログが開かなかったので、分割しても意味ない。
  2501.             // 2つに分割してもだめで6つに分割したが、それでもだめだった
  2502.             int lcx = 85;
  2503.             hd = dialogbig(" スタイル ");
  2504.             dialogSetGroupRight(hd,DTCX * lcx);
  2505.             
  2506.             dialogSetH(hd);
  2507.             //
  2508.             FONTNAMES* fontnamesStd = fontnamesNew(hd);
  2509.             fontnamesStd->lfPitch = DEFAULT_PITCH;
  2510.             fontnamesStd->lfCharSet = text->lfWestern ? DEFAULT_CHARSET : SHIFTJIS_CHARSET;
  2511.             fontnamesStd->hdcPrinter = hdcPrinter;
  2512.             fontnamesStd->fPrinterFontOnly = _fPrinterFontOnly;
  2513.             fontnamesFlush(fontnamesStd);
  2514.             //
  2515.             FONTNAMES* fontnamesAnk = fontnamesNew(hd);
  2516.             fontnamesAnk->lfPitch = DEFAULT_PITCH;
  2517.             fontnamesAnk->lfCharSet = DEFAULT_CHARSET;
  2518.             fontnamesAnk->hdcPrinter = hdcPrinter;
  2519.             fontnamesAnk->fPrinterFontOnly = _fPrinterFontOnly;
  2520.             fontnamesFlush(fontnamesAnk);
  2521.             //
  2522.             SELFONTARG arg;
  2523.             memset(&arg,0,sizeof(arg));
  2524.             arg.lcxFaceName = 16;
  2525.             arg.lcxFaceSize = 7;    //2.00C 6だとWin3.1で1桁しか出ない
  2526.             FONTSTYLE* tfs = text->tFontstyle;
  2527.             if (tfs) {
  2528.                 int lxg = 16;    //2.00D 13にしても平気そう
  2529.                 
  2530.                 dialogSpaceV(hd);
  2531.                 dialogSpaceV(hd);
  2532.                 dialogSetIntXY(hd,0,0);
  2533.                 dialogSetPosLX(hd,lxg);
  2534.                 dialogCaptionDynamic(hd,"太",2);
  2535.                 dialogCaptionDynamic(hd,"下",2);
  2536.                 dialogCaptionDynamic(hd,"斜",2);
  2537.                 dialogCaptionDynamic(hd,NULL,11);
  2538.                 dialogCaptionDynamic(hd,"印刷時の",23);
  2539.                 dialogCaptionDynamic(hd,"印刷時の",23);
  2540.                 dialogCaptionDynamic(hd,"印刷時",7);
  2541.                 dialogLF(hd);
  2542.                 //
  2543.                 dialogCaptionDynamic(hd,"[+ 一覧]:",10);//2.00C 
  2544.                 dialogSetPosLX(hd,lxg);
  2545.                 dialogCaptionDynamic(hd,"字",2);
  2546.                 dialogCaptionDynamic(hd,"線",2);
  2547.                 dialogCaptionDynamic(hd,"体",2);
  2548.                 dialogCaptionDynamic(hd,"  配置",11);
  2549.                 dialogCaptionDynamic(hd,"全角フォント",23);
  2550.                 dialogCaptionDynamic(hd,"半角フォント",23);
  2551.                 dialogCaptionDynamic(hd,"行どり",7);
  2552.                 dialogLF(hd);
  2553.                 //
  2554.                 dialogSetIntXY(hd,0,DTCYINT/2);
  2555.                 for (int ifont = FONTTX_BODY;ifont <= FONTTX_H6;ifont++) {
  2556.                     FONTSTYLE* fs = tfs + ifont;
  2557.                     int i = ifont - FONTTX_BODY;
  2558.                     static mchar* tsz[] = {
  2559.                         "本文",
  2560.                         "章<H1>","節<H2>","項<H3>",
  2561.                         "中見出し<H4>","小見出し<H5>","表題<H6>",
  2562.                     };
  2563.                     int lx = 0;
  2564.                     
  2565.                     // title
  2566.                     dialogSetPosLX(hd,lx);
  2567.                     dialogCaptionDynamic(hd,tsz[i],lxg);
  2568.                     lx += lxg;
  2569.                     // checkbox
  2570.                     if (i == 0) {
  2571.                         // 本文
  2572.                         lx += 16;
  2573.                     } else {
  2574.                         dialogSetPosLX(hd,lx);
  2575.                         dialogControlHelp(hd,278);
  2576.                         dialogCheckB(hd,NULL,&context.head_tfBold[i-1]);
  2577.                         lx += 2;
  2578.                         dialogSetPosLX(hd,lx);
  2579.                         dialogControlHelp(hd,279);
  2580.                         dialogCheckB(hd,NULL,&context.head_tfUnderline[i-1]);
  2581.                         lx += 2;
  2582.                         dialogSetPosLX(hd,lx);
  2583.                         dialogControlHelp(hd,280);
  2584.                         dialogCheckB(hd,NULL,&context.head_tfItalic[i-1]);
  2585.                         lx += 2;
  2586.                         // align
  2587.                         dialogSetPosLX(hd,lx);
  2588.                         dialogControlHelp(hd,281);
  2589.                         dialogSelectIDB(
  2590.                             hd,NULL,&context.head_tmodeAlign[i-1],0,10,
  2591.                             "無指定","左揃え","中央揃え","右揃え"
  2592.                         );
  2593.                         lx += 10;
  2594.                     }
  2595.                     // font
  2596.                     dialogSetPosLX(hd,lx);
  2597.                     arg.fontnames = fontnamesStd;
  2598.                     dialogControlHelp(hd,282);
  2599.                     tidPrintFontStd[ifont] = dialogSelectFont(hd,NULL,0,
  2600.                         fs->tlfFaceName[IFONT_STD],
  2601.                         &fs->tlfHeight[IFONT_STD],
  2602.                         &arg
  2603.                     );
  2604.                     arg.lfCharSet = DEFAULT_CHARSET;
  2605.                     arg.fontnames = fontnamesAnk;
  2606.                     arg.fEnableDefaultFaceName = TRUE;
  2607.                     arg.fEnableDefaultHeight = TRUE;
  2608.                     dialogControlHelp(hd,283);
  2609.                     tidPrintFontAnk[ifont] = dialogSelectFont(hd,NULL,0,
  2610.                         fs->tlfFaceName[IFONT_ANK],
  2611.                         &fs->tlfHeight[IFONT_ANK],
  2612.                         &arg
  2613.                     );
  2614.                     //
  2615.                     if (i == 0) {
  2616.                         // 本文
  2617.                     } else {
  2618.                         dialogControlHelp(hd,284);
  2619.                         dialogSelectIDB(
  2620.                             hd,NULL,&context.head_nline[i-1],0,8,
  2621.                             "標準","1行","1.5行","2行","2.5行","3行","3.5行","4行"
  2622.                         );
  2623.                     }
  2624.                     //
  2625.                     dialogLF(hd);
  2626.                     dialogSpaceV(hd);
  2627.                 }
  2628.             }
  2629.             
  2630.             dialogLF(hd);
  2631.             if (!_fwin40) dialogSetIntXY(hd,0,0);
  2632.             //2.00B 
  2633.             dialogControlID(hd,IDD_STYLEPREVIEW);
  2634.             dialogControlHelp(hd,285);
  2635.             dialogButton(hd,"プレビュー(&V)",NULL,16);
  2636.             //2.00C 
  2637.             dialogSpaceH(hd);
  2638.             dialogControlID(hd,IDD_STYLEPREVIEWALWAYS);
  2639.             dialogControlHelp(hd,245);
  2640.             dialogCheck(hd,"常に更新(&L)",&context.fPreviewStyleAlways);
  2641.             //
  2642.             dialogSpaceH(hd);
  2643.             dialogControlID(hd,IDD_STYLERESET);
  2644.             dialogControlHelp(hd,286);
  2645.             dialogButton(hd,"リセット(&R)",NULL,16);
  2646.             //
  2647.             dialogSpaceH(hd);
  2648.             dialogControlID(hd,IDD_PRINTERFONT);
  2649.             context.fDummy1 = _fPrinterFontOnly;
  2650.             dialogControlHelp(hd,122);
  2651.             dialogCheck(hd,"プリンタフォントのみ表示(&P)",&context.fDummy1);//2.00B 
  2652.             //
  2653.             dialogLF(hd);
  2654.             dialogSpaceV(hd);
  2655.             //
  2656.             DTRECT r;
  2657.             dialogGetPos(hd,&r);
  2658.             r.cx = DTCX * (lcx - 1);
  2659.             r.cy = DTCY * (_fwin40 ? 7 : 5);
  2660.             __dialogAddItem(hd,TXWS_SZCLASS,"",IDD_PREVIEW2,&r,TXWS_TEXT|TXWS_OPENTEXT|WS_VSCROLL|WS_BORDER|WS_CHILD|WS_VISIBLE);
  2661.             
  2662.             break;
  2663.         }
  2664.         case IPAGE_CUST_MACRO: {
  2665.             int lxg = 14;
  2666.             int lx = 40;
  2667.             hd = dialogbig(" マクロ ");
  2668.             dialogSetGroupRight(hd,xright0);
  2669.             
  2670.             dialogHeadline(hd,"パス",lcxHeadline);//2.99C 970327 
  2671. //            dialogGroup(hd,"パス");
  2672.                 dialogControlHelp(hd,125);
  2673.                 dialogStrC(hd,"マクロパス(&M):",shcfg->szenvtxpath,lxg,CCHENVPATH,lx);
  2674. //            dialogGroupEnd(hd);
  2675.             
  2676.             dialogHeadline(hd,"イベントマクロ",lcxHeadline);//2.99C 970327 
  2677. //            dialogGroup(hd,"イベントマクロ");
  2678.                 dialogSetIntXY(hd,0,1);// 縦は1は空けて置かないとWZ16の2D表示が見にくい
  2679.                 dialogControlHelp(hd,142);
  2680.                 dialogStrC(hd,"オープン(&O):",text->szmacroopen,lxg,cchof(text->szmacroopen),lx);
  2681.                 dialogControlHelp(hd,142);
  2682.                 dialogStrC(hd,"オープン後(&P):",shcfg->szmacroopenpost,lxg,cchof(shcfg->szmacroopenpost),lx);
  2683.                 dialogControlHelp(hd,142);
  2684.                 dialogStrC(hd,"保存(&S):",text->szmacrosave,lxg,cchof(text->szmacrosave),lx);
  2685.                 dialogControlHelp(hd,142);
  2686.                 dialogStrC(hd,"保存後(&T):",text->szmacrosavepost,lxg,cchof(text->szmacrosavepost),lx);
  2687.                 dialogControlHelp(hd,142);
  2688.                 dialogStrC(hd,"クローズ(&C):",text->szmacroclose,lxg,cchof(text->szmacroclose),lx);
  2689.                 dialogControlHelp(hd,142);
  2690.                 dialogStrC(hd,"ビュー(&V):",text->szmacroview,lxg,cchof(text->szmacroview),lx);
  2691.                 dialogResetInt(hd);
  2692. //            dialogGroupEnd(hd);
  2693.             
  2694.             break;
  2695.         }
  2696.         case IPAGE_CUST_MACRODEV: {
  2697.             hd = dialogbig(" マクロ開発 ");
  2698.             TXCOPTION *opt = &shcfg->configTxc;
  2699.             dialogSetGroupRight(hd,xright0);
  2700.             
  2701.             dialogHeadline(hd,"パス",lcxHeadline);//2.99C 970327 
  2702. //            dialogGroup(hd,"パス(&P)");
  2703.                 #ifdef __FLAT__
  2704.                 dialogAddTxc32(hd);
  2705.                 dialogAddTxc16(hd);
  2706.                 #else
  2707.                 dialogAddTxc16(hd);
  2708.                 dialogAddTxc32(hd);
  2709.                 #endif
  2710. //            dialogGroupEnd(hd);
  2711.             
  2712.             // デフォルトではTX-C拡張機能使用可能にしておく
  2713.             // そうしないとマクロのコンパイルに支障がでる
  2714.             dialogHeadline(hd,"TX-Cコンパイルオプション",lcxHeadline);//2.99C 970327 
  2715. //            dialogGroup(hd,"TX-Cコンパイルオプション");
  2716.                     dialogSetH(hd);
  2717.                 dialogControlHelp(hd,138);
  2718.                 dialogCheckB(hd,"自動makeを行う(&M)",&opt->fautomake);
  2719.                 dialogControlReverseBool(hd);
  2720.                 dialogControlHelp(hd,139);
  2721.                 dialogCheckB(hd,"変数の自動定義を有効にする(&V)",&opt->fNoAutoDef);
  2722.                     dialogLF(hd);
  2723.                     dialogSetV(hd);
  2724.                 dialogControlHelp(hd,140);
  2725.                 dialogSelectIDB(hd,"stdoutのオープン(&O):",&opt->fstdout,20,20,"エラー発生時のみ","エラー,警告発生時","常にオープン");
  2726.                 dialogControlHelp(hd,141);
  2727.                 dialogControlUpdown(hd,1,100);
  2728.                 dialogIntW(hd,"エラーメッセージ表示数(&E):",&opt->nErrorMessage,20,lxval);
  2729. //            dialogGroupEnd(hd);
  2730.             
  2731.             dialogHeadline(hd,"TX-C警告・レポート出力",lcxHeadline);//2.99C 970327 
  2732.             dialogSetPosLF(hd);//2.99C 970327 
  2733. //            dialogGroup(hd,"TX-C警告・レポート出力");
  2734.                 dialogControlHelp(hd,143);
  2735.                 dialogCheckB(hd,"関数は呼ばれない(&N)",&opt->fWarnFuncNotCall);
  2736.                 dialogControlHelp(hd,144);
  2737.                 dialogCheckB(hd,"signed/unsignedミスマッチ(&S)",&opt->fWarnSignMismatch);
  2738.                 dialogControlHelp(hd,145);
  2739.                 dialogCheckB(hd,"小さいサイズへ代入(&L)",&opt->fWarnLoseDigit);
  2740.                     dialogLFV(hd);
  2741.                 dialogControlHelp(hd,146);
  2742.                 dialogCheckB(hd,"変数自動定義(&D)",&opt->fReportAutoDef);
  2743.                 dialogControlHelp(hd,147);
  2744.                 dialogCheckB(hd,"関数呼び出し変換(&F)",&opt->fReportTxapi);
  2745. //            dialogGroupEnd(hd);
  2746.             
  2747.             break;
  2748.         }
  2749.         case IPAGE_CUST_STATBAR: {
  2750.             hd = dialogbig(" ステータスバー ");
  2751.             dialogSetGroupRight(hd,xright0);
  2752.             
  2753.             dialogGroup(hd,"ステータスバーに表示する項目");
  2754.                 dialogControlHelp(hd,161);
  2755.                 dialogCheckB(hd,"カーソル位置(&P)",&text->fDispLocate);
  2756.                 dialogControlHelp(hd,162);
  2757.                 dialogCheckB(hd,"挿入/上書(&I)",&text->fDispOverwrite);
  2758.                 dialogControlHelp(hd,163);
  2759.                 dialogCheckB(hd,"編集(&E)",&text->fDispEdit);
  2760.                 dialogControlHelp(hd,164);
  2761.                 dialogCheckB(hd,"選択(&B)",&text->fDispSelecting);
  2762.                 dialogControlHelp(hd,165);
  2763.                 dialogCheckB(hd,"段落書式・文字装飾(&F)",&text->fDispParaCharatr);
  2764.                 dialogControlHelp(hd,166);
  2765.                 dialogCheckB(hd,"画面表示モード(&D)",&text->fDispEditmode);
  2766.                 dialogControlHelp(hd,167);
  2767.                 dialogCheckB(hd,"右端に余白(&S)",&text->fDispSL_RSPACE);
  2768.                 dialogControlHelp(hd,168);
  2769.                 dialogCheckB(hd,"2ストロークキー(&K)",&text->fDispPrekey);
  2770.                 dialogControlHelp(hd,169);
  2771.                 dialogCheckB(hd,"2ストロークキーを左側に表示(&L)",&text->fDispPrekeyLeft);
  2772.                 dialogControlHelp(hd,472);
  2773.                 dialogCheckB(hd,"インライン整形モード(&O)",&text->fDispInlineform);
  2774.             dialogGroupEnd(hd);
  2775.             
  2776.             break;
  2777.         }
  2778.         case IPAGE_CUST_WINDOW: {
  2779.             hd = dialogbig(" ウィンドウ ");
  2780.             dialogSetGroupRight(hd,xright0);
  2781.             
  2782.             dialogHeadline(hd,"余白",lcxHeadline);//2.99C 970327 
  2783. //            dialogGroup(hd,"余白(&S)");
  2784.                 dialogControlHelp(hd,150);
  2785.                 dialogControlUpdown(hd,0,20);
  2786.                 dialogControlGuide(hd,"ドット空ける",12);
  2787.                 dialogIntB(hd,"横書き時に上端を(&H)",&text->nSpaceTopH,20,lxval);
  2788.                 dialogControlHelp(hd,151);
  2789.                 dialogControlUpdown(hd,0,20);
  2790.                 dialogControlGuide(hd,"ドット空ける",12);
  2791.                 dialogIntB(hd,"縦書き時に両端を(&V)",&text->nSpaceTopV,20,lxval);
  2792.                 dialogControlHelp(hd,152);
  2793.                 dialogCheckB(hd,"左端を空ける(&L)",&text->fSpaceLeft);
  2794. //            dialogGroupEndGetRect(hd,&r1);
  2795.             
  2796.             dialogHeadline(hd,"詳細",lcxHeadline);//2.99C 970327 
  2797. //            dialogGroup(hd,"詳細");
  2798.                 dialogControlHelp(hd,127);
  2799.                 dialogCheckB(hd,"デスクトップ内に納める(&I)",&text->fWsInsideDesk);
  2800.                 dialogControlHelp(hd,126);
  2801.                 dialogCheckB(hd,"上下分割時に、ツールバーを消す(&W)",&text->fWsWideAtSplit);
  2802.                 #ifndef __FLAT__//1.91A WZ32ではファイル名の大文字/小文字表示はしない
  2803.                 dialogControlHelp(hd,153);
  2804.                 dialogCheckB(hd,"タイトルバーに、ファイル名を小文字で表示(&M)",&text->fDispPathLc);
  2805.                 #endif
  2806.                 dialogControlHelp(hd,129);
  2807.                 dialogCheckB(hd,"タイトルバーに、ファイル名をフルパスで表示(&U)",&text->fDispPathFull);
  2808. #if 0    //2.99D 970329 未完成
  2809.         // プロポーショナルスクロールバーは難しいので見送り
  2810.         // 常にnlineAllを計算するのは困難なので。
  2811.         // 代わりに文書の情報に行数表示機能を付けた。
  2812.                 if (_fwin40) {//2.99D 970329 
  2813.                     dialogControlHelp(hd,437);
  2814.                     dialogCheckB(hd,"プロポーショナルスクロールバーを使う(&P)",&shcfg->fScrollbarProp);
  2815.                 }
  2816. #endif
  2817. //            dialogGroupEnd(hd);
  2818.             break;
  2819.         }
  2820.     }
  2821.     return hd;
  2822. }
  2823.  
  2824. // hwndのidのコントロールのEnableを設定する
  2825. // idのコントロールがフォーカスを持っている時に!Enableするとキー入力が効かなくなるので、
  2826. // その場合は、idFocusのコントロールにフォーカスを移す
  2827. static void myEnableWindow(HWND hwnd,int id,BOOL fEnable,int idFocus)
  2828. {
  2829.     HWND hctrl = GetDlgItem(hwnd,id);
  2830.     if (!fEnable && GetFocus() == hctrl) {
  2831.         SetFocus(GetDlgItem(hwnd,idFocus));
  2832.     }
  2833.     EnableWindow(hctrl,fEnable);
  2834. }
  2835.  
  2836. static void FlushWidth(HWND hwnd)
  2837. {
  2838. #if 1//2.99A 970321 
  2839.     myEnableWindow(
  2840.         hwnd,
  2841.         IDD_WIDTH,
  2842.         IsDlgButtonChecked(hwnd,IDD_WIDTHMODE+0),//2.99C 970323 2->0 文字数が指定できなかった
  2843.         IDD_WIDTHMODE
  2844.     );
  2845. #else
  2846.     int id = IDD_WIDTHMODE;
  2847.     BOOL fcheck = !IsDlgButtonChecked(hwnd,id);
  2848.     myEnableWindow(hwnd,IDD_WIDTH,!fcheck,IDD_WIDTHMODE);//1.99G 
  2849. #endif
  2850. }
  2851.  
  2852. static void FlushStyle(HWND hwnd)
  2853. {
  2854.     int id = IDD_STYLE;
  2855.     HWND hctrl = GetDlgItem(hwnd,id);
  2856.     txConfigOp(text1,TXCONFIGOP_PRINTENUM,(LPVOID)hctrl);
  2857.     comboboxSelectStr(hctrl,context.text->szlpstyle);
  2858. }
  2859.  
  2860. //2.00B [設定]-[スタイル]の高速化、UI改善
  2861. static void FlushPrinter(HWND hwnd,BOOL fClicked)
  2862. {
  2863.     int id = IDD_PRINTERFONT;
  2864.     BOOL fcheck = IsDlgButtonChecked(hwnd,id);
  2865.     if (fClicked) fcheck ^= 1;
  2866.     _fPrinterFontOnly = fcheck;
  2867.     {
  2868.         HDIALOG hd = dialogFromHwndPshpage(hwnd);
  2869.         {
  2870.             FONTNAMES* fontnames = fontnamesFromId(hd,tidPrintFontStd[FONTTX_BODY]);
  2871.             if (fontnames) {
  2872.                 fontnames->fPrinterFontOnly = fcheck;
  2873.                 fontnamesFlush(fontnames);
  2874.             }
  2875.         }
  2876.         {
  2877.             FONTNAMES* fontnames = fontnamesFromId(hd,tidPrintFontAnk[FONTTX_BODY]);
  2878.             if (fontnames) {
  2879.                 fontnames->fPrinterFontOnly = fcheck;
  2880.                 fontnamesFlush(fontnames);
  2881.             }
  2882.         }
  2883.         {
  2884.             //2.00B WZ16でSetCursor(LoadCursor())はコンパイルできないので分割
  2885.             HCURSOR hcursor = LoadCursor(NULL,IDC_WAIT);
  2886.             hcursor = SetCursor(hcursor);
  2887.             {
  2888.                 int i;
  2889.                 for (i = FONTTX_BODY;i <= FONTTX_H6;i++) {
  2890.                     dialogWriteItem(hd,tidPrintFontStd[i]);
  2891.                     dialogWriteItem(hd,tidPrintFontAnk[i]);
  2892.                 }
  2893.             }
  2894.             SetCursor(hcursor);
  2895.         }
  2896.     }
  2897. }
  2898.  
  2899. static void FlushMenubar(HWND hwnd,BOOL fChange)
  2900. {
  2901.     tx* text = context.text;
  2902.     int id = IDD_MENUBAR;
  2903.     HWND hctrl = GetDlgItem(hwnd,id);
  2904.     mchar* szhead = "bar_";
  2905.     int lchHead = strlen(szhead);
  2906.     mchar* szmenu = &text->szMenu[lchHead];
  2907.     if (fChange) {
  2908.         GetWindowText(hctrl,szmenu,CCHNAME - lchHead);
  2909.     } else {
  2910.         SendMessage(hctrl,CB_RESETCONTENT,0,0);
  2911.         txmenuPickup(hctrl,PICKUP_MENUBARWZ,NULL);
  2912.         //
  2913.         comboboxSelectStr(hctrl,szmenu);
  2914.     }
  2915. }
  2916.  
  2917. static void FlushMenu(HWND hwnd,int id,BOOL fChange)
  2918. {
  2919.     tx* text = context.text;
  2920.     HWND hctrl = GetDlgItem(hwnd,id);
  2921.     mchar* szmenu = (id == IDD_MENUMOUSER) ? text->szMenuMouseR : text->szMenuMouseRClip;
  2922.     if (fChange) {
  2923.         GetWindowText(hctrl,szmenu,CCHNAME);
  2924.     } else {
  2925.         ComboBox_ResetContent(hctrl);
  2926.         txmenuPickup(hctrl,PICKUP_MENU,NULL);
  2927.         comboboxSelectStr(hctrl,szmenu);
  2928.     }
  2929. }
  2930.  
  2931. static void FlushKey(HWND hwnd,BOOL fChange)
  2932. {
  2933.     tx* text = context.text;
  2934.     int id = IDD_KEY;
  2935.     HWND hctrl = GetDlgItem(hwnd,id);
  2936.     mchar* szkey = context.shcfg.szenvkey;
  2937.     if (fChange) {
  2938.         GetWindowText(hctrl,szkey,CCHNAME);
  2939.     } else {
  2940.         ComboBox_ResetContent(hctrl);
  2941.         txmenuPickup(hctrl,PICKUP_KEYWZ,NULL);
  2942.         comboboxSelectStr(hctrl,szkey);
  2943.     }
  2944. }
  2945.  
  2946. static void FlushToolbar(HWND hwnd,BOOL fChange)
  2947. {
  2948.     tx* text = context.text;
  2949.     int id = IDD_TOOLBAR;
  2950.     HWND hctrl = GetDlgItem(hwnd,id);
  2951.     mchar* szname = text->szToolbar;
  2952.     if (fChange) {
  2953.         GetWindowText(hctrl,szname,CCHNAME);
  2954.     } else {
  2955.         ComboBox_ResetContent(hctrl);
  2956.         txmenuPickup(hctrl,PICKUP_TOOLBARWZ,NULL);
  2957.         comboboxSelectStr(hctrl,szname);
  2958.     }
  2959. }
  2960.  
  2961. static mchar _szMsMintyo[] = "MS 明朝";
  2962. static mchar _szTimesNewRoman[] = "Times New Roman";
  2963. static mchar _szMsGossick[] = "MS ゴシック";
  2964. static mchar _szArial[] = "Arial";
  2965.  
  2966. static void ResetStyle(HDIALOG hd,TX* text)
  2967. {
  2968.     dialogRead(hd);
  2969.     FONTSTYLE* tfs = text->tFontstyle;
  2970.     if (tfs) {
  2971.         int ipointBody = 12;
  2972.         // body
  2973.         FONTSTYLE* fs = tfs + FONTTX_BODY;
  2974.         strcpy(fs->tlfFaceName[IFONT_STD],_szMsMintyo);
  2975.         fs->tlfHeight[IFONT_STD] = ipointBody;
  2976.         strcpy(fs->tlfFaceName[IFONT_ANK],_szTimesNewRoman);
  2977.         fs->tlfHeight[IFONT_ANK] = ipointBody;
  2978.         // head
  2979.         int i;
  2980.         for (i = 0;i < TITLE_N;i++) {
  2981.             context.head_tfBold[i] = FALSE;
  2982.             context.head_tfUnderline[i] = FALSE;
  2983.             context.head_tfItalic[i] = FALSE;
  2984.             context.head_tmodeAlign[i] = 0;
  2985.             context.head_nline[i] = 0;
  2986.             //
  2987.             int ipoint = ipointBody + ipointBody * (TITLE_N - i - 1) / (TITLE_N - 1);
  2988.             FONTSTYLE* fs = tfs + i + FONTTX_H1;
  2989.             strcpy(fs->tlfFaceName[IFONT_STD],_szMsGossick);
  2990.             fs->tlfHeight[IFONT_STD] = ipoint;
  2991.             strcpy(fs->tlfFaceName[IFONT_ANK],_szArial);
  2992.             fs->tlfHeight[IFONT_ANK] = ipoint;
  2993.         }
  2994.     }
  2995.     dialogWrite(hd);
  2996. }
  2997.  
  2998. static void FlushConfig(HDIALOG hd)
  2999. {
  3000.     txConfigOp(context.text,TXCONFIGOP_EXTLOAD,0);
  3001.     contextFromText(context.text);//3.00A2 970506 設定ダイアログで「読み込み」をしても折り返し幅が読み込まれなかった
  3002.     dialogWrite((HDIALOG)dialogGetCustdata(hd));
  3003. }
  3004.  
  3005. static void FlushConfigList(HWND hwnd)
  3006. {
  3007.     HWND hctrl = GetDlgItem(hwnd,IDD_EXTLIST);
  3008.     int isel = SendMessage(hctrl,LB_GETCURSEL,0,0);
  3009.     txConfigOp(text,TXCONFIGOP_EXTENUMLB,(LPVOID)hctrl);
  3010.     SendMessage(hctrl,LB_SETCURSEL,isel,0);
  3011. }
  3012.  
  3013. //2.00E2 テキストの設定名を取得し、リストボックスのカレントとして表示
  3014. static void cdSetCur(HWND hwnd)
  3015. {
  3016.     HWND hctrl = GetDlgItem(hwnd,IDD_EXTLIST);
  3017.     mchar szcfgname[CCHNAME];
  3018.     txConfigOp(context.text,TXCONFIGOP_EXTGETNAME,szcfgname);
  3019.     SendMessage(hctrl,LB_SETCURSEL,
  3020.         SendMessage(hctrl,LB_FINDSTRINGEXACT,-1,(LPARAM)szcfgname),0
  3021.     );
  3022. }
  3023.  
  3024. static BOOL groupAdd(TX* text,mchar* szGroup)
  3025. {
  3026.     if (strchr(szGroup,'[') || strchr(szGroup,']')) {
  3027.         information("設定の名前に次の文字は使えません\n\t[ ]");
  3028.         return FALSE;
  3029.     }
  3030.     //
  3031.     if (!text->szfilename[0]) {
  3032.         //3.00A2 970506 「ファイル|新規作成」で作成した新規ファイルで、[文書の設定]-[読み込み]を行うと「設定名前バッファオーバーフロー」エラーになった
  3033.         if (!stricmp(szGroup,_szcfgStd)) return FALSE;    // "標準"への関連付けなら、無視
  3034.         information(
  3035.             "(無題)のファイルに、設定「%s」を関連付けることはできません。\n"
  3036.             "「%s」の設定内容を標準の設定として読み込みました。\n"
  3037.             "[文書の設定]ダイアログで[OK]すると、標準の設定が「%s」の設定内容になります。\n"
  3038.             "標準の設定を変更すると、思わぬファイルが思わぬ設定になったりしますから、気を付けてください。"
  3039.             ,szGroup,szGroup,szGroup
  3040.         );
  3041.         return FALSE;
  3042.     }
  3043.     // 基本設定名と同じならグループに登録しない
  3044.     mchar szcfgname[CCHNAME];
  3045.     txConfigOp(text,TXCONFIGOP_EXTGETNAMEPRIM,szcfgname);
  3046. //information("%s %s",szGroup,szcfgname);
  3047.     if (!stricmp(szcfgname,szGroup)) return FALSE;
  3048.     // 基本設定名がファイル名なら登録しない
  3049.     if (szcfgname[0] != '.') return FALSE;
  3050.     //
  3051.     if (txConfigOp(text,TXCONFIGOP_EXTGRP_ADD,szGroup)) {
  3052.         return TRUE;
  3053.     } else {
  3054.         information("設定の名前バッファがいっぱいで登録できません");
  3055.         return FALSE;
  3056.     }
  3057. }
  3058.  
  3059. BOOL dlgprocConfigDetail(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
  3060. {
  3061.     switch(message) {
  3062.         case WM_INITDIALOG: {
  3063.             HWND hctrl = GetDlgItem(hwnd,IDD_EXTLIST);
  3064.             txConfigOp(text,TXCONFIGOP_EXTENUMLB,(LPVOID)hctrl);
  3065. #if 1//2.00E2 
  3066.             cdSetCur(hwnd);
  3067. #else
  3068.             SendMessage(hctrl,LB_SETCURSEL,0,0);
  3069. #endif
  3070.             break;
  3071.         }
  3072.         case WM_COMMAND: {
  3073.             HDIALOG hd = dialogFromHwnd(hwnd);
  3074.             HDIALOG hd0 = hd;
  3075.             HDIALOG hdParent = (HDIALOG)dialogGetCustdata(hd0);
  3076.             int id = WM_COMMAND_GetId(wParam);
  3077.             switch(id) {
  3078.                 case IDOK:
  3079.                 case IDD_SAVE:
  3080.                 case IDD_NEW:
  3081.                 case IDD_EXTLIST:
  3082.                 case IDD_DELETE:
  3083.                 case IDD_LOAD: {
  3084.                     HWND hctrl = GetDlgItem(hwnd,IDD_EXTLIST);
  3085.                     int isel = SendMessage(hctrl,LB_GETCURSEL,0,0);
  3086.                     if (isel != LB_ERR) {
  3087.                         mchar szname[CCHWORD];
  3088.                         SendMessage(hctrl,LB_GETTEXT,isel,(LPARAM)szname);
  3089.                         switch(id) {
  3090.                             case IDOK: {//2.00E2 
  3091.                                 strcpy(context.text->szfilename,szname);
  3092.                                 FlushConfig(hd);
  3093.                                 //
  3094.                                 groupAdd(text,szname);
  3095.                                 return FALSE;
  3096.                             }
  3097.                             case IDD_EXTLIST: {
  3098.                                 EnableWindow(GetDlgItem(hwnd,IDD_DELETE),strcmp(szname,SZCFG_STD));
  3099.                                 break;
  3100.                             }
  3101.                             case IDD_DELETE: {
  3102.                                 int ret = question("ファイルタイプ「" + szname + "」の設定を削除します。よろしいですか?");
  3103.                                 if (ret == IDYES) {
  3104. #if 1//2.00E2 グルーピング化により、sznameと違う設定が削除されることがある
  3105.                                     txConfigOp(text,TXCONFIGOP_EXTNAME_DEL,szname);
  3106.                                     txConfigOp(text,TXCONFIGOP_EXTGRP_DEL,szname);
  3107.                                     FlushConfigList(hwnd);
  3108.                                     cdSetCur(hwnd);
  3109.                                     FlushConfig(hd);
  3110. #else
  3111.                                     TX text;
  3112.                                     strcpy(text.szfilename,szname);
  3113.                                     txConfigOp(&text,TXCONFIGOP_EXTDEL,0);
  3114. #endif
  3115.                                 }
  3116.                                 break;
  3117.                             }
  3118. #if 0//2.00E2 
  3119.                             case IDD_NEW: {//2.00E2 
  3120.                                 HDIALOG hd = dialog("新規登録");
  3121.                                 txstr szstr;
  3122.                                 dialogStr(hd,"名前(&N):",szstr,10,30);
  3123.                                 if (dialogOpen(hd)) {
  3124.                                     int ret = IDYES;
  3125.                                     if (txConfigOp(context.text,TXCONFIGOP_EXTNAME_SEARCH,(LPVOID)szstr)) {
  3126.                                         ret = question(szstr + "の設定は存在します。\n上書きして良いですか?");
  3127.                                     }
  3128.                                     if (ret == IDYES) {
  3129.                                         dialogRead(hdParent);
  3130.                                         groupAdd(text,szstr);
  3131.                                         txConfigOp(context.text,TXCONFIGOP_EXTNAME_SAVE,(LPVOID)szstr);
  3132.                                         FlushConfigList(hwnd);
  3133.                                         cdSetCur(hwnd);
  3134.                                     }
  3135.                                 }
  3136.                                 break;
  3137.                             }
  3138.                             case IDD_SAVE: {
  3139.                                 dialogRead(hdParent);
  3140.                                 mchar szcfgname[CCHNAME];//2.00E2 
  3141.                                 txstr szcfg = (mchar*)txConfigOp(context.text,TXCONFIGOP_EXTGETNAME,szcfgname);
  3142.                                 mchar szcfgPrim[CCHNAME];//2.00E2 
  3143.                                 txConfigOp(context.text,TXCONFIGOP_EXTGETNAMEPRIM,szcfgPrim);
  3144.                                 BOOL fNew = FALSE;
  3145.                                 if (!stricmp(szcfg,szcfgPrim)) {
  3146.                                     szcfg += "の設定は既に登録されています";
  3147.                                 } else {
  3148.                                     fNew = TRUE;
  3149.                                     szcfg = szcfgPrim;
  3150.                                     szcfg += "の設定を新しく登録しますか?";
  3151.                                 }
  3152.                                 HDIALOG hd = dialog("設定の登録");
  3153.                                 dialogCaption(hd,szcfg);
  3154.                                 dialogLFV(hd);
  3155.                                 int lcx = 14;
  3156.                                 int lcx2 = 25;
  3157.                                 dialogSetPosLF(hd);
  3158.                                 dialogSetPosLX(hd,lcx2 - lcx);
  3159.                                 if (fNew) {
  3160.                                     dialogControlID(hd,IDOK);
  3161.                                     dialogCmdDefault(hd,"はい(&Y)",lcx);
  3162.                                     dialogControlID(hd,IDCANCEL);
  3163.                                     dialogCmd(hd,"いいえ(&N)",lcx);
  3164.                                 } else {
  3165.                                     dialogOK(hd,lcx);
  3166.                                     dialogCancel(hd,lcx);
  3167.                                 }
  3168.                                 dialogSpaceV(hd);
  3169.                                 dialogSetPosLX(hd,0);
  3170.                                 dialogControlID(hd,IDD_SAVETO);
  3171.                                 dialogCmd(hd,"名前を付けて登録(&A)...",lcx2);
  3172.                                 //
  3173.                                 int ret = dialogOpen(hd);
  3174.                                 if (ret == IDOK) {
  3175.                                     if (fNew) {
  3176.                                         txConfigOp(context.text,TXCONFIGOP_EXTSAVEPRIM,0);
  3177.                                         FlushConfigList(hwnd);
  3178.                                     }
  3179.                                 } else if (ret == IDD_SAVETO) {
  3180.                                     HDIALOG hd = dialog("名前を付けて設定を登録");
  3181.                                     txstr szstr;
  3182.                                     dialogStr(hd,"名前(&N):",szstr,10,30);
  3183.                                     if (dialogOpen(hd)) {
  3184.                                         int ret = IDYES;
  3185.                                         if (txConfigOp(context.text,TXCONFIGOP_EXTNAME_SEARCH,(LPVOID)szstr)) {
  3186.                                             ret = question(szstr + "の設定は存在します。\n上書きして良いですか?");
  3187.                                         }
  3188.                                         if (ret == IDYES) {
  3189.                                             txConfigOp(context.text,TXCONFIGOP_EXTNAME_SAVE,(LPVOID)szstr);
  3190.                                             FlushConfigList(hwnd);
  3191.                                         }
  3192.                                     }
  3193.                                 }
  3194.                                 break;
  3195.                             }
  3196. #endif
  3197.                             case IDD_LOAD: {
  3198.                                 strcpy(context.text->szfilename,szname);
  3199.                                 FlushConfig(hd);
  3200.                                 break;
  3201.                             }
  3202.                         }
  3203.                     }
  3204.                     DoCaption(dialogGetBaseWindow(hdParent));//2.00E2 
  3205.                     return TRUE;
  3206.                 }
  3207.                 case IDD_UPDATEALL: {
  3208.                     txstr sz(500);
  3209.                     sz += "現在設定中の内容を全てのファイルタイプの設定として登録します。\n";
  3210.                     sz += "メニューとツールバーの種類は既定値になります。\n";
  3211.                     sz += "HTMLファイル,LOGファイル,INIファイル,Cファイルの設定は一部規定値になります。\n";
  3212.                     sz += "よろしいですか?";
  3213.                     int ret = question(sz);
  3214.                     if (ret == IDYES) {
  3215.                         dialogRead(hdParent);
  3216. //information("%s",context.text->tFontstyle[FONTTX_TEXT].tlfFaceName[IFONT_STD]);
  3217.                         txConfigOp(context.text,TXCONFIGOP_EXTSETALL,0);
  3218. //information("%s",context.text->tFontstyle[FONTTX_TEXT].tlfFaceName[IFONT_STD]);
  3219.                     }
  3220.                     DoCaption(dialogGetBaseWindow(hdParent));//2.00E2 
  3221.                     return TRUE;
  3222.                 }
  3223.                 case IDD_INIT: {
  3224.                     int ret = question("全てのファイルタイプの設定を既定値に戻します。\nよろしいですか?");
  3225.                     if (ret == IDYES) {
  3226.                         txConfigOp(text,TXCONFIGOP_CONFIGDELALL,0);
  3227.                         FlushConfig(hd);
  3228.                         FlushConfigList(hwnd);
  3229.                     }
  3230.                     DoCaption(dialogGetBaseWindow(hdParent));//2.00E2 
  3231.                     return TRUE;
  3232.                 }
  3233.             }
  3234.             break;
  3235.         }
  3236.     
  3237.     }
  3238.     return FALSE;
  3239. }
  3240.  
  3241. // プロパティーシートではdlgprocのhwndはページのウィンドウハンドルである。
  3242. // hwndからシートのhwndを得る
  3243. static HWND hwndGetSheet(HWND hwnd)
  3244. {
  3245.     if (_fpsh) return GetParent(hwnd);
  3246.     return hwnd;
  3247. }
  3248.  
  3249. static void flush(BOOL fConfigTemp);
  3250.  
  3251. static void CloseConfig(HDIALOG hd)
  3252. {
  3253. #if 1//2.00E for WZ32
  3254.     #if 1//2.00E2 WZ32で2回一時設定すると変だった
  3255.         PostMessage(dialogGetBaseWindow(hd),WM_COMMAND,IDCANCEL,0);//2.00E "一時設定"すると設定ダイアログを閉じる様にした
  3256.     #else
  3257.         EndDialog(dialogGetBaseWindow(hd),FALSE);
  3258.     #endif
  3259. #else
  3260.         PostMessage(hwnd,WM_COMMAND,IDCANCEL,0);//2.00E "一時設定"すると設定ダイアログを閉じる様にした
  3261. #endif
  3262. }
  3263.  
  3264. static BOOL IsEdit(HDIALOG hd)
  3265. {
  3266. // 設定ダイアログが編集されているかどうか返す。
  3267.     dialogRead(hd);
  3268.     if (
  3269.         memcmp(
  3270.             &context._text.configTop,
  3271.             &context._text0.configTop,
  3272.             &context._text.configEnd - &context._text.configTop
  3273.         )
  3274.     ) return TRUE;
  3275.     if (memcmp(&text->share->config,&context.shcfg,sizeof(TXCONFIGSHARE))) {
  3276.         return TRUE;
  3277.     }
  3278.     return FALSE;
  3279. }
  3280.  
  3281. static BOOL IsEditWindowsize(void)
  3282. {
  3283. // ウィンドウサイズの指定が編集されているかどうか返す。
  3284.     if (context._text.modeWs != context._text0.modeWs) return TRUE;
  3285.     if (context._text.lcxWindowDefault != context._text0.lcxWindowDefault) return TRUE;
  3286.     if (context._text.lcyWindowDefault != context._text0.lcyWindowDefault) return TRUE;
  3287.     return FALSE;
  3288. }
  3289.  
  3290. static BOOL IsClose(HDIALOG hd)
  3291. {
  3292.     if (IsEdit(hd)) {
  3293.         int ret = question(
  3294.             "カスタマイズダイアログを閉じます。\n"
  3295.             "\n"
  3296.             "設定した内容を登録しますか?"
  3297.         );
  3298.         switch(ret) {
  3299.             case IDCANCEL: return FALSE;
  3300.             case IDYES: {
  3301.                 // save config
  3302.                 PostMessage(dialogGetBaseWindow(hd),WM_COMMAND,IDOK,0);
  3303.                 return TRUE;
  3304.             }
  3305.             default: {
  3306.                 CloseConfig(hd);
  3307.                 return TRUE;
  3308.             }
  3309.         }
  3310.     }
  3311.     CloseConfig(hd);
  3312.     return TRUE;
  3313. }
  3314.  
  3315. waita
  3316. {
  3317.     #ifdef __FLAT__
  3318.     Sleep(200);
  3319.     #endif
  3320. }
  3321.  
  3322. static BOOL ToCustmize(HDIALOG hd,mchar* szmacro)
  3323. {
  3324.     if (IsClose(hd)) {
  3325.         if (_fwin40) {
  3326.             // 設定ダイアログが消えてすぐにキーカスタマイズダイアログが出て、
  3327.             // ちらつき感があるのを抑える
  3328.             callPost("\m.waita");
  3329.         }
  3330.         callPost(szmacro);
  3331.         return TRUE;
  3332.     }
  3333.     return FALSE;
  3334. }
  3335.  
  3336. extern "edit" BOOL TXAPI txuiConvertChar(TX* text,CHARCONVERT* cc,BOOL fAc);
  3337.  
  3338. static void flushMyColor(HWND hwnd,HDIALOG hd)
  3339. {
  3340.     if (!IsDlgButtonChecked(hwnd,IDD_MYCOLOR)) {
  3341.         dialogRead(hd);
  3342.         txConfigOp(context.text,TXCONFIGOP_SETMYCOLORDEFAULT,0);
  3343.         dialogWrite(hd);
  3344.     }
  3345. }
  3346.  
  3347. BOOL dlgprocConfig(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
  3348. {
  3349.     HDIALOG hd = dialogFromHwnd(hwnd);
  3350.     
  3351.     switch(message) {
  3352.         case WM_INITDIALOG: {
  3353.             if (_fWindowPos) {
  3354.                 SetWindowPos(hwndGetSheet(hwnd),NULL,_x,_y,0,0,SWP_NOSIZE);
  3355.             }
  3356.             return INITDIALOG_FALSE;
  3357.         }
  3358.         case WM_TXDIALOGPAGECHANGE: {
  3359. #if 0//2.00C 
  3360.             context.fPageChanging = TRUE;
  3361. #endif
  3362.             break;
  3363.         }
  3364.         case WM_TXDIALOGPAGECHANGED: {
  3365. #if 0//2.00C Win3.1でスタイルのプレビューができなかった。メッセージ送信のタイミングが違う様だ
  3366.             context.fPageChanging = FALSE;
  3367. #endif
  3368.             _ipageNow = wParam;
  3369.             switch(ipageLogical(wParam)) {
  3370.                 case IPAGE_FORM: {
  3371.                     FlushWidth(hwnd);
  3372.                     FlushPreview(hwnd,IDD_PREVIEW);
  3373.                     break;
  3374.                 }
  3375.                 case IPAGE_DISPLAY: {
  3376.                     FlushProp(hwnd);
  3377.                     FlushPreview(hwnd,IDD_PREVIEW);
  3378.                     break;
  3379.                 }
  3380.                 case IPAGE_STYLE: {
  3381.                     if (context.fPreviewStyleAlways) {
  3382.                         FlushPreview(hwnd,IDD_PREVIEW2);
  3383.                     }
  3384.                     break;
  3385.                 }
  3386.                 case IPAGE_COLOR: {
  3387.                     FlushPreview(hwnd,IDD_PREVIEW3);
  3388.                     break;
  3389.                 }
  3390.                 case IPAGE_CUST_COLOR: {//2.99B 970322 
  3391.                     FlushPreview(hwnd,IDD_PREVIEW);
  3392.                     break;
  3393.                 }
  3394.                 case IPAGE_CUST_MENU: {
  3395.                     FlushMenubar(hwnd,FALSE);
  3396.                     FlushMenu(hwnd,IDD_MENUMOUSER,FALSE);
  3397.                     FlushMenu(hwnd,IDD_MENUMOUSERCLIP,FALSE);
  3398.                     break;
  3399.                 }
  3400.                 case IPAGE_CUST_TOOLBAR: {
  3401.                     FlushToolbar(hwnd,FALSE);
  3402.                     break;
  3403.                 }
  3404.                 case IPAGE_CUST_KEY: {
  3405.                     FlushKey(hwnd,FALSE);
  3406.                     break;
  3407.                 }
  3408.             }
  3409.             break;
  3410.         }
  3411.         case WM_TXDIALOGCOLORSELECTED: {
  3412.             myPostMessage(hwnd,WM_TXUSER,0,0);
  3413.             break;
  3414.         }
  3415.         case WM_COMMAND: {
  3416.             HDIALOG hd0 = hd;
  3417.             int id = WM_COMMAND_GetId(wParam);
  3418.             int notify = WM_COMMAND_GetNotify(wParam,lParam);
  3419.             int iPage = ipageLogical(dialogGetPage(hd));
  3420.             
  3421.             if (IDD_TABTOP <= id && id <= IDD_TABEND) {
  3422.                 // タブは無視
  3423.                 return FALSE;
  3424.             }
  3425.             // プロパティーシートではWM_TXDIALOGENTERIDLEが来ない
  3426.             // Win3.1でもこの方式の方がENTERIDLEよりも動作が自然
  3427.             myPostMessage(hwnd,WM_TXUSER,id,0);
  3428.             //
  3429.             switch(id) {
  3430.                 case IDD_NEW: {//2.00E2 
  3431.                     HDIALOG hd;
  3432.                     BOOL fNewFile = !context.text->szfilename[0];
  3433.                     if (fNewFile) {
  3434.                         hd = dialog("新規登録 - (無題)の設定は新規登録できません");
  3435.                     } else {
  3436.                         hd = dialog("新規登録");
  3437.                     }
  3438.                     txstr szstr;
  3439.                     txConfigOp(context.text,TXCONFIGOP_EXTGETNAMEPRIM,(LPVOID)szstr);
  3440.                     if (fNewFile) dialogControlEnable(hd,FALSE);
  3441.                     dialogStr(hd,"名前(&N):",szstr,10,30);
  3442.                     dialogLFV(hd);
  3443.                     int lcx = 12;
  3444.                     if (fNewFile) dialogControlEnable(hd,FALSE);
  3445.                     dialogOK(hd,lcx);
  3446.                     dialogCancel(hd,lcx);
  3447.                     dialogSpaceV(hd);
  3448.                     dialogHelp(hd,lcx,"wz.chp 501");//3.00A2 970506 「設定|新規登録」ダイアログにヘルプを付けた
  3449.                     //
  3450.                     if (dialogOpen(hd)) {
  3451.                         int ret = IDYES;
  3452.                         if (txConfigOp(context.text,TXCONFIGOP_EXTNAME_SEARCH,(LPVOID)szstr)) {
  3453.                             ret = question(szstr + "の設定は存在します。\n上書きして良いですか?");
  3454.                         }
  3455.                         if (ret == IDYES) {
  3456.                             dialogRead(hd0);
  3457.                             groupAdd(text,szstr);
  3458.                             txConfigOp(context.text,TXCONFIGOP_EXTNAME_SAVE,(LPVOID)szstr);
  3459.                             // sh->szExtGroupはWZ.EXEが更新するので
  3460.                             strcpy(context.shcfg.szExtGroup,text->share->config.szExtGroup);
  3461.                             DoCaption(dialogGetBaseWindow(hd0));
  3462.                         }
  3463.                     }
  3464.                     return TRUE;
  3465.                 }
  3466.                 case IDD_DETAIL: {//2.00E2 グループ化対応により全面変更
  3467.                     HDIALOG hd = dialog("設定の読み込み");
  3468.                     int lcx = 16;
  3469.                     int mode = 0;
  3470.                     DTRECT r;
  3471.                     
  3472.                     dialogSetHookEx(hd,"\m.dlgprocConfigDetail");
  3473.                     dialogSetCustdata(hd,(DWORD)hd0);
  3474.                     dialogSetContexthelp(hd,TRUE);
  3475.                     
  3476.                     dialogCaption(hd,"一覧:");
  3477.                     dialogGetPos(hd,&r);
  3478.                     r.cx = DTCX * 30;
  3479.                     r.cy = DTCY * 14;
  3480.                     dialogControlHelp(hd,357);
  3481.                     __dialogAddItem(hd,"LISTBOX",NULL,IDD_EXTLIST,&r,LBS_NOTIFY|LBS_SORT|WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_TABSTOP|WS_GROUP|WS_BORDER);
  3482.                     _dialogAddControlInfo(hd,IDD_EXTLIST);
  3483.                     r.y += r.cy + DTCYINT;
  3484.                     dialogSetPos(hd,&r);
  3485.                     dialogLFV(hd);
  3486.                     
  3487. #if 1//3.00A2 970506 「設定の読み込み」ダイアログボタン名称変更。OK->読み込み,キャンセル->閉じる
  3488.                     dialogControlID(hd,IDOK);
  3489.                     dialogCmd(hd,"読み込み",lcx);
  3490.                     dialogControlID(hd,IDCANCEL);
  3491.                     dialogCmd(hd,"閉じる",lcx);
  3492.                     dialogSpaceV(hd);
  3493. #else
  3494.                     dialogOK(hd,lcx);
  3495.                     dialogCancel(hd,lcx);
  3496.                     dialogSpaceV(hd);
  3497. #endif
  3498. #if 1//2.00E2 
  3499.     #if 0//2.00E2 
  3500.                     dialogControlID(hd,IDD_NEW);
  3501.                     dialogCmd(hd,"新規(&N)...",lcx);
  3502.     #endif
  3503. #else
  3504.                     dialogControlID(hd,IDD_LOAD);
  3505.                     dialogCmd(hd,"読み込み(&L)",lcx);
  3506.                     dialogControlID(hd,IDD_SAVE);
  3507.                     dialogCmd(hd,"登録(&S)...",lcx);
  3508. #endif
  3509.                     dialogControlID(hd,IDD_DELETE);
  3510.                     dialogControlHelp(hd,354);
  3511.                     dialogCmd(hd,"削除(&D)...",lcx);
  3512.                     dialogSpaceV(hd);
  3513.                     dialogControlID(hd,IDD_UPDATEALL);
  3514.                     dialogControlHelp(hd,355);
  3515.                     dialogCmd(hd,"全て更新(&A)...",lcx);
  3516.                     dialogControlID(hd,IDD_INIT);
  3517.                     dialogControlHelp(hd,356);
  3518.                     dialogCmd(hd,"初期化(&I)...",lcx);
  3519.                     
  3520.                     //3.00A2 970506 「設定の読み込み」ダイアログにヘルプボタンを追加
  3521.                     dialogHelp(hd,lcx,"wz.chp 501");//3.00A3 970507 簡素化
  3522.                     
  3523.                     dialogOpen(hd);
  3524.                     
  3525.                     // キャプションを更新する
  3526.                     DoCaption(dialogGetBaseWindow(hd0));//2.00E2 
  3527.                     //2.00E2 sh->szExtGroupはWZ.EXEが更新するので
  3528.                     strcpy(context.shcfg.szExtGroup,text->share->config.szExtGroup);
  3529.                     return TRUE;
  3530.                 }
  3531.                 case IDD_PLUG: {
  3532.                     HDIALOG hd = dialog("テキストファイルへの設定の埋め込み");
  3533.                     dialogSwitch(hd,&context.fWzconfig,"埋め込む","埋め込まない");
  3534.                     dialogCaption(hd,"    (設定ダイアログをOKすると埋め込み/埋め込みの解除を行います)");
  3535.                     //3.00A5 970511 
  3536.                     dialogLFV(hd);
  3537.                     int lcx = 12;
  3538.                     dialogOK(hd,lcx);
  3539.                     dialogCancel(hd,lcx);
  3540.                     dialogSpaceV(hd);
  3541.                     dialogHelp(hd,lcx,"wz.chp 174");//3.00A5 970511 「設定|埋め込み」ダイアログにヘルプを付けた
  3542.                     //
  3543.                     if (dialogOpen(hd)) {
  3544.                     }
  3545.                     return TRUE;
  3546.                 }
  3547.                 case IDD_TEMP: {
  3548.                     //2.00B 設定ダイアログを閉じずにテキストに設定内容を反映する、[一時設定]ボタンを追加
  3549.                     HCURSOR hcursor = LoadCursor(NULL,IDC_WAIT);
  3550.                     hcursor = SetCursor(hcursor);
  3551.                     // 位置を覚える
  3552.                     // プロパティーシートではWM_MOVEがこないからここで覚える
  3553.                     // プロパティーシートで[更新]を使う事にtryしてみたが、うまくいかなかった
  3554.                     // [更新]を押すと[キャンセル]を押してもTRUEが返されてしまう。
  3555.                     _fWindowPos = TRUE;
  3556.                     WINDOWPLACEMENT wplace;
  3557.                     wplace.length = sizeof(WINDOWPLACEMENT);
  3558.                     GetWindowPlacement(hwndGetSheet(hwnd),(LPWINDOWPLACEMENT)&wplace);
  3559.                     _x = wplace.rcNormalPosition.left;
  3560.                     _y = wplace.rcNormalPosition.top;
  3561.                     //
  3562.                     dialogRead(hd);
  3563.                     flush(TRUE);
  3564.                     SetCursor(hcursor);
  3565.                     context.ret = TRUE;//2.00E2 uiConfigStyleExの"一時設定"対応
  3566.                     CloseConfig(hd);
  3567.                     return TRUE;
  3568.                 }
  3569.                 case IDD_HELP: {
  3570.                     int idh = 0;
  3571.                     switch(iPage) {
  3572.                         case IPAGE_FORM:idh = IDHC_FORMAT;break;
  3573.                         case IPAGE_COLOR:idh = IDHC_COLOR;break;
  3574.                         case IPAGE_CUST_SCROLL:idh = IDHC_SCROLL;break;
  3575.                         case IPAGE_CUST_KEY:idh = IDHC_INTERFACE;break;
  3576.                         case IPAGE_CUST_FILE:idh = IDHC_FILE;break;
  3577.                         case IPAGE_EDIT:idh = IDHC_EDIT;break;
  3578.                         case IPAGE_CUST_SEARCH:idh = IDHC_SEARCH;break;
  3579.                         case IPAGE_FORMDT:idh = IDHC_STRING;break;
  3580.                         case IPAGE_STYLE:idh = IDHC_STYLE;break;
  3581.                         case IPAGE_CUST_MACRO:idh = IDHC_MACRO;break;
  3582.                         case IPAGE_CUST_WINDOW:idh = IDHC_WINDOW;break;
  3583.                         case IPAGE_HELP:idh = IDHC_HELP;break;
  3584.                     }
  3585.                     if (idh) helpContext("wz",idh);
  3586.                     return TRUE;
  3587.                 }
  3588.                 case IDD_COLORPARSE: {
  3589.                     if (dialogColorParse(context.text)) {
  3590.                         myPostMessage(hwnd,WM_TXUSER,0,0);
  3591.                     }
  3592.                     return TRUE;
  3593.                 }
  3594.                 case IDD_CUST_COLOR_VIEWMODE:
  3595.                 case IDD_CUST_COLOR: {//2.99C 970326 new
  3596.                     BOOL fViewmode = (id == IDD_CUST_COLOR_VIEWMODE);
  3597.                     HDIALOG hd1 = configtxCreatePage(IPAGE_CUST_COLOR,NULL,fViewmode);
  3598.                     if (hd1) {
  3599.                         dialogSetContexthelp(hd1,TRUE);
  3600.                         dialogSetHookEx(hd1,"\m.dlgprocCustColor");
  3601.                         //
  3602.                         dialogRead(hd);
  3603.                         // backup
  3604.                         #define SIZE_COLOR    (&text->MyColorEnd - &text->fMyColor)
  3605.                         TX buff;
  3606.                         memcpy(&buff.fMyColor,&context.text->fMyColor,SIZE_COLOR);
  3607.                         //
  3608.                         if (dialogOpen(hd1)) {
  3609.                             dialogWrite(hd);
  3610. #if 0// (未完成)
  3611.                             if (fViewmode) {
  3612.                                 TXCONFIGSHARE* shcfg = &text->share->config;
  3613.                                 shcfg->viewmodeRgbText = text->rgbText;
  3614.                                 shcfg->viewmodeRgbBack = text->rgbBack;
  3615.                                 shcfg->viewmodeRgbBlockText = text->rgbBlockText;
  3616.                                 shcfg->viewmodeRgbBlock = text->rgbBlock;
  3617.                                 shcfg->viewmodeRgbNline = text->rgbNline;
  3618.                                 shcfg->viewmodeRgbUnderline = text->rgbUnderline;
  3619.                                 shcfg->viewmodeRgbControl = text->rgbControl;
  3620.                                 shcfg->viewmodeRgbURL = text->rgbURL;
  3621.                             }
  3622. #endif
  3623.                         } else {
  3624.                             // restore
  3625.                             memcpy(&context.text->fMyColor,&buff.fMyColor,SIZE_COLOR);
  3626.                         }
  3627.                     }
  3628.                     return TRUE;
  3629.                 }
  3630.                 case IDD_AUTOCORRECT: {
  3631.                     txuiConvertChar(context.text,&context.text->charconvert,TRUE);
  3632.                     return TRUE;
  3633.                 }
  3634.                 case IDD_NEWKEYWORDFILE: {
  3635.                     if (dialogEditKeyword(context.text)) {
  3636.                         dialogWrite(hd);
  3637.                     }
  3638.                     return TRUE;
  3639.                 }
  3640.                 case IDD_FORMATSTR: {
  3641.                     dialogFormatstr(context.text);
  3642.                     return TRUE;
  3643.                 }
  3644.                 case IDD_CUSTKEY: {
  3645.                     ToCustmize(hd,"custmize.key");
  3646.                     return TRUE;
  3647.                 }
  3648.                 case IDD_CUSTMENUBAR: {
  3649.                     ToCustmize(hd,"custmize.menubar");
  3650.                     return TRUE;
  3651.                 }
  3652.                 case IDD_CUSTTOOLBAR: {
  3653.                     ToCustmize(hd,"custmize.toolbar");
  3654.                     return TRUE;
  3655.                 }
  3656.                 case IDD_CUSTCONTEXTMENU: {
  3657.                     ToCustmize(hd,"custmize.menuMouseR");
  3658.                     return TRUE;
  3659.                 }
  3660.                 case IDD_CUSTCONTEXTMENUSELECT: {
  3661.                     ToCustmize(hd,"custmize.menuMouseRClip");
  3662.                     return TRUE;
  3663.                 }
  3664.                 case IDD_CUSTSPEAK: {//3.00A5 970511 
  3665.                     ToCustmize(hd,"speak.txspeakConfig");
  3666.                     return TRUE;
  3667.                 }
  3668.             }
  3669. //statprintf("%d",iPage);
  3670.             switch(iPage) {
  3671.                 case IPAGE_FORM: {
  3672.                     switch(id) {
  3673.                         case IDD_VERTICAL: {
  3674.                             return FALSE;
  3675.                         }
  3676.                     }
  3677.                     break;
  3678.                 }
  3679.                 case IPAGE_STYLE: {
  3680.                     switch(id) {
  3681.                         case IDD_STYLERESET: {
  3682.                             ResetStyle(hd,context.text);
  3683.                             return TRUE;
  3684.                         }
  3685.                         case IDD_PRINTERFONT: {
  3686.                             FlushPrinter(hwnd,TRUE);
  3687.                             return FALSE;
  3688.                         }
  3689.                         case IDD_STYLEPREVIEWALWAYS: {
  3690.                             context.fPreviewStyleAlways = !IsDlgButtonChecked(hwnd,id);
  3691.                             CheckDlgButton(hwnd,id,context.fPreviewStyleAlways);
  3692.                             return TRUE;
  3693.                         }
  3694.                         case IDD_STYLEPREVIEW: {
  3695.                             HCURSOR hcursor = LoadCursor(NULL,IDC_WAIT);
  3696.                             hcursor = SetCursor(hcursor);
  3697.                             context.fPreviewStyle = TRUE;
  3698.                             FlushPreview(hwnd,IDD_PREVIEW2);
  3699.                             SetCursor(hcursor);
  3700.                             return TRUE;
  3701.                         }
  3702.                     }
  3703.                     break;
  3704.                 }
  3705.                 case IPAGE_CUST_MENU:
  3706.                 case IPAGE_CUST_KEY:
  3707.                 case IPAGE_CUST_TOOLBAR: {
  3708.                     if (notify == CBN_SELCHANGE) {
  3709.                         switch(id) {
  3710.                             case IDD_MENUBAR: {
  3711.                                 FlushMenubar(hwnd,TRUE);
  3712.                                 break;
  3713.                             }
  3714.                             case IDD_MENUMOUSER:
  3715.                             case IDD_MENUMOUSERCLIP: {
  3716.                                 FlushMenu(hwnd,id,TRUE);
  3717.                                 break;
  3718.                             }
  3719.                             case IDD_KEY: {
  3720.                                 FlushKey(hwnd,TRUE);
  3721.                                 break;
  3722.                             }
  3723.                             case IDD_TOOLBAR: {
  3724.                                 FlushToolbar(hwnd,TRUE);
  3725.                                 break;
  3726.                             }
  3727.                         }
  3728.                     }
  3729.                     break;
  3730.                 }
  3731.             }
  3732.             return FALSE;
  3733.         }
  3734. #if 0
  3735.         case WM_PAINT: {
  3736.             int iPage = ipageLogical(dialogGetPage(hd));
  3737.             if (iPage == IPAGE_FORM) {
  3738.                 FlushPreview(hwnd);
  3739.             }
  3740.             break;
  3741.         }
  3742.         case WM_TXDIALOGENTERIDLE: {
  3743.             static DWORD wtm0;
  3744.             DWORD wtm = GetCurrentTime();
  3745.             if (wtm > wtm0 + 100) {    // たまにフラッシュする
  3746.                 wtm0 = wtm;
  3747.                 myPostMessage(hwnd,WM_TXUSER,0,0);
  3748.             }
  3749.             break;
  3750.         }
  3751. #endif
  3752.         case WM_TXUSER: {
  3753.             int idFrom = wParam;
  3754.             int id = 0;
  3755.             _fInTxuser = TRUE;
  3756.             if (idFrom == IDD_MYCOLOR) {
  3757.                 //2.99C 970326 色の設定で、「このファイルタイプに専用の指定を行う」のチェックを外したとき、標準の色に戻らなかった
  3758.                 flushMyColor(hwnd,hd);
  3759.             }
  3760.             switch(ipageLogical(dialogGetPage(hd))) {
  3761.                 case IPAGE_FORM: {
  3762.                     FlushWidth(hwnd);
  3763.                     id = IDD_PREVIEW;
  3764.                     break;
  3765.                 }
  3766.                 case IPAGE_DISPLAY: {
  3767.                     if (idFrom == IDD_PROP) FlushProp(hwnd);
  3768.                     id = IDD_PREVIEW;
  3769.                     break;
  3770.                 }
  3771.                 case IPAGE_STYLE: {
  3772.                     if (context.fPreviewStyleAlways) {
  3773.                         id = IDD_PREVIEW2;
  3774.                     }
  3775.                     break;
  3776.                 }
  3777.                 case IPAGE_COLOR: id = IDD_PREVIEW3;break;
  3778.                 case IPAGE_CUST_COLOR: id = IDD_PREVIEW;break;//2.99B 970322 
  3779.             }
  3780.             if (id) {
  3781.                 FlushPreview(hwnd,id);
  3782.             }
  3783.             _fInTxuser = FALSE;
  3784.             break;
  3785.         }
  3786.     }
  3787.     return FALSE;
  3788. }
  3789.  
  3790. //2.99C 970326 new
  3791. BOOL dlgprocCustColor(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
  3792. {
  3793.     switch(message) {
  3794.         case WM_INITDIALOG: {
  3795.             SetWindowText(hwnd,"色のカスタマイズ");
  3796.             myPostMessage(hwnd,WM_TXUSER,0,0);
  3797.             break;
  3798.         }
  3799.         case WM_COMMAND: {
  3800.             int id = WM_COMMAND_GetId(wParam);
  3801.             int notify = WM_COMMAND_GetNotify(wParam,lParam);
  3802.             myPostMessage(hwnd,WM_TXUSER,id,0);
  3803.             break;
  3804.         }
  3805.         case WM_ACTIVATE: {
  3806.             myPostMessage(hwnd,WM_TXUSER,0,0);
  3807.             break;
  3808.         }
  3809.         case WM_TXUSER: {
  3810.             int id = wParam;
  3811.             _fInTxuser = TRUE;
  3812.             if (id == IDD_MYCOLOR) {
  3813.                 flushMyColor(hwnd,dialogFromHwnd(hwnd));
  3814.             }
  3815.             FlushPreview(hwnd,IDD_PREVIEW);
  3816.             _fInTxuser = FALSE;
  3817.             break;
  3818.         }
  3819.     }
  3820.     return FALSE;
  3821. }
  3822.  
  3823. static void flush(BOOL fConfigTemp)
  3824. {
  3825.     BOOL fWsEdited = IsEditWindowsize();
  3826.     BOOL fDispFullEdited = (context._text.fDispFull != context._text0.fDispFull);
  3827.     TX* text = context.textf;//2.91 メール編集(インライン)で、一時設定ができなかった
  3828.     wzlock(LOCK_CONFIG);
  3829.     {
  3830.         text->share->config = context.shcfg;
  3831.         contextToText(text);
  3832.         // SET Vertical - Horizon
  3833.         txConfigOp(text,TXCONFIGOP_EXTSETDISPSTYLE,0);
  3834. //information("%d",text->width);
  3835. //information("%d",text->share->textBase.width);
  3836.         //1.99H setup nSpaceTop
  3837.         txConfigOp(text,TXCONFIGOP_EXTSETUPDISPSTYLE,0);
  3838.         //
  3839.         if (!fConfigTemp) {
  3840.             // 設定を保存
  3841.             if (txGetViewmode(text)) {
  3842.                 //3.00A4 970509 ビューモードの「ファイル|文書の設定」で[OK]すると、"ビューモード"の設定で保存するようにした
  3843.                 txConfigOp(text,TXCONFIGOP_EXTSAVEPRIM,"ビューモード");
  3844.             }
  3845.             if (text->fConfigsavePrim) {//3.00A 970502 Grepで設定保存すると、他の設定も一部(ステータスバーの表示など)書き換えられた
  3846.                 txConfigOp(text,TXCONFIGOP_SHARESAVE,0);
  3847.                 txConfigOp(text,TXCONFIGOP_EXTSAVE,0);
  3848.             } else if (context.fWzconfig || text->fWztext) {
  3849.                 //2.00C3 configFileは出力しない。
  3850.                 txConfigOp(text,TXCONFIGOP_CONFIGSAVE2,0);
  3851.             } else {
  3852.                 txConfigOp(text,TXCONFIGOP_CONFIGSAVE,0);
  3853.             }
  3854.         }
  3855.     }
  3856.     wzunlock(LOCK_CONFIG);
  3857.     // 設定のテキスト埋めこみ、WZ文書ファイル
  3858.     if (!fConfigTemp && !text->fEditViewMode && !text->fSemiViewMode) {
  3859.         if (text->editmode == 0) {
  3860.             if (context.fWzconfig) {
  3861.                 text->fWzconfig = context.fWzconfig;
  3862.                 txConfigOp(text,TXCONFIGOP_TEXTWRITE,0);
  3863.                 text->fEdit = TRUE;    //txConfigOpではfEditは変化しないため
  3864.             } else {
  3865.                 if (text->fWzconfig) {
  3866.                     txConfigOp(text,TXCONFIGOP_TEXTDEL,0);
  3867.                     text->fEdit = TRUE;    //txConfigOpではfEditは変化しないため
  3868.                     text->fWzconfig = FALSE;
  3869.                 }
  3870.             }
  3871.         } else {
  3872.             //1.99C 
  3873.             text->fWzconfig = context.fWzconfig;
  3874.             #if 1//2.00B 設定が保存される場合のみ(埋め込み、.WZ)編集フラグを立てる
  3875.             if (text->fWzconfig || text->fWztext) {
  3876.                 text->fEdit = TRUE;
  3877.             }
  3878.             #else
  3879.             text->fEdit = TRUE;
  3880.             #endif
  3881.         }
  3882.     }
  3883.     if (txGetViewmode(text)) {
  3884.         //1.99K 
  3885.         // viewmodeでは編集フラグを変更しない
  3886.         text->fEdit = context.fEdit;
  3887.     }
  3888.     if (_fNoFlush) {
  3889.         //2.00E2 
  3890.     } else {
  3891. #if 0    // やはりやめた方がいい。
  3892.         if (context.shcfg.fEnglish && !context.fEnglish0) {
  3893.             //2.99D 970328
  3894.             // 英語メニューは設定ダイアログで英語メニューをONにしたときに自動で作成するようにした
  3895.             call("custmize.createEnglishMenu");
  3896.         }
  3897. #endif
  3898.         // キー、メニュー、ツールバーの設定をフラッシュする
  3899.         txFlushUI(text);
  3900.         //
  3901.         if (fDispFullEdited && !textf->fDispFull) {
  3902.             call("window.FullY1");//3.00A2 970507 FullY->FullY1
  3903.         }
  3904. //information("%d",text->modeWs);
  3905.         if (txGetPageTurn(text) || fWsEdited) {
  3906.             //1.99E ページめくりモードではウィンドウサイズ変更しないと
  3907.             txFlushEx(text,TXFLUSHEX_TXFLUSHALL);
  3908.         } else {
  3909.             txFlush(text);
  3910.         }
  3911.         if (fDispFullEdited && textf->fDispFull) {
  3912.             call("window.FullY2");
  3913.         }
  3914.     }
  3915. }
  3916.  
  3917. static void contextFromText(TX* text)
  3918. {
  3919. //3.00A2 970506 new
  3920.     context.autosaveDevice = text->autosaveDevice;
  3921.     context.autosaveMode = text->autosaveMode;
  3922.     context.autosaveAtQuit = text->autosaveAtQuit;
  3923.     context.autosaveAtOpen = text->autosaveAtOpen;
  3924.     context.fAfArticleDisc = text->fAfArticleDisc;//2.98 970309 
  3925.     context.fInlineformScenario = text->fInlineformScenario;//2.99 970319 
  3926.     context.fInlineformIndentSpace = text->fInlineformIndentSpace;//2.99 970319 
  3927.     context.fInlineformQueryQuit = text->fInlineformQueryQuit;//3.00A2 970507 
  3928.     context.modeInlineformZenhanSpace = text->modeInlineformZenhanSpace;//3.00A2 970507 
  3929.     context.modeInlineformWordlap = text->modeInlineformWordlap;//3.00A2 970507 
  3930.     context.lcxInlineformIndentTogaki = text->lcxInlineformIndentTogaki;//3.00A2 970507 
  3931. #if 0//3.00A3 970508 ト書きとタブインデントサイズ共通にしたが、標準値が違う
  3932.     if (context.lcxInlineformIndentTogaki == 0) context.lcxInlineformIndentTogaki = 6;//3.00A2 970507 
  3933. #endif
  3934.     context.lcxInlineformIndentSerifu = text->lcxInlineformIndentSerifu;
  3935.     if (context.lcxInlineformIndentSerifu == 0) context.lcxInlineformIndentSerifu = 2;//3.00A2 970507 
  3936.     context.fAfTitle = text->fAfTitle;//2.98 970309 
  3937.     context.modeWidth = text->tmodeWidth[text->dispstylemode];
  3938.     context.width = text->twidth[text->dispstylemode];
  3939.     //
  3940.     if (context.text->tFontstyle) {
  3941.         memcpy(context.text->tFontstyle,text->tFontstyle,SIZE_TFONTSTYLE);
  3942.         int i;
  3943.         for (i = 0;i < TITLE_N;i++) {
  3944.             FONTSTYLE* fs = &text->tFontstyle[FONTTX_H1 + i];
  3945.             context.head_nline[i] = fs->perNline ? (fs->perNline - 50) / 50 : 0;
  3946.             context.head_tfBold[i] = fs->fBold;
  3947.             context.head_tfUnderline[i] = fs->fUnderline;
  3948.             context.head_tfItalic[i] = fs->fItalic;
  3949.             context.head_tmodeAlign[i] = fs->modeAlign;
  3950.         }
  3951.     }
  3952. }
  3953.  
  3954. // ipage:何ページを出すか(IPAGE_Nならすべて出す)
  3955. static BOOL __dialogConfig(int ipage,HDC hdcPrinter)
  3956. {
  3957.     _ipageMode = ipage;
  3958.     mchar buff[CCHPATHNAME];
  3959.     getcaption(text,buff);
  3960.     HDIALOG hd = dialogbig(buff);
  3961.     dialogSetContexthelp(hd,TRUE);
  3962. #if 0//1.99A 印刷と分離した
  3963.     // init lp
  3964.     txLpOp(text,TXLPOP_FLUSHDEVMODE);// get hDevMode
  3965. #endif
  3966.     //
  3967.     structClear(context);//2.00B 
  3968.     context.textf = text;//2.91 
  3969.     context._text = *text;
  3970.     context.text = &context._text;
  3971. #if 1//3.00A2 970506 
  3972.     context.fEnglish0 = text->share->config.fEnglish;//2.99D 970328 
  3973.     //
  3974.     context.fWzconfig = text->fWzconfig;
  3975.     context.fEdit = text->fEdit;//1.99K 
  3976.     //
  3977.     context.text->tFontstyle = NULL;
  3978.     if (text->tFontstyle) {
  3979.         context.text->tFontstyle = memAlloc(SIZE_TFONTSTYLE);
  3980.     }
  3981.     //
  3982.     contextFromText(text);
  3983. #else
  3984.     context.fEnglish0 = text->share->config.fEnglish;//2.99D 970328 
  3985.     context.autosaveDevice = text->autosaveDevice;
  3986.     context.autosaveMode = text->autosaveMode;
  3987.     context.autosaveAtQuit = text->autosaveAtQuit;
  3988.     context.autosaveAtOpen = text->autosaveAtOpen;
  3989.     context.fAfArticleDisc = text->fAfArticleDisc;//2.98 970309 
  3990.     context.fInlineformScenario = text->fInlineformScenario;//2.99 970319 
  3991.     context.fInlineformIndentSpace = text->fInlineformIndentSpace;//2.99 970319 
  3992.     context.fAfTitle = text->fAfTitle;//2.98 970309 
  3993. #if 1//2.99A 970321 
  3994.     #if 1//2.99A 970321 
  3995.     context.modeWidth = text->tmodeWidth[text->dispstylemode];
  3996.     context.width = text->twidth[text->dispstylemode];
  3997.     #else
  3998.     context.modeWidth = 2;
  3999.     if (text->fSetWidthByLp) {
  4000.         context.modeWidth = 1;
  4001.     } else if (text->fSetWidthByWindow) {
  4002.         context.modeWidth = 0;
  4003.     }
  4004.     #endif
  4005. #endif
  4006.     context.fWzconfig = text->fWzconfig;
  4007.     context.fEdit = text->fEdit;//1.99K 
  4008.     //
  4009.     context.text->tFontstyle = NULL;
  4010.     if (text->tFontstyle) {
  4011.         UINT cb = SIZE_TFONTSTYLE;
  4012.         LPVOID p = memAlloc(cb);
  4013.         if (p) {
  4014.             memcpy(p,text->tFontstyle,cb);
  4015.             context.text->tFontstyle = p;
  4016.         }
  4017.         {
  4018.             int i;
  4019.             for (i = 0;i < TITLE_N;i++) {
  4020.                 FONTSTYLE* fs = &text->tFontstyle[FONTTX_H1 + i];
  4021.                 context.head_nline[i] = fs->perNline ? (fs->perNline - 50) / 50 : 0;
  4022.                 context.head_tfBold[i] = fs->fBold;
  4023.                 context.head_tfUnderline[i] = fs->fUnderline;
  4024.                 context.head_tfItalic[i] = fs->fItalic;
  4025.                 context.head_tmodeAlign[i] = fs->modeAlign;
  4026.             }
  4027.         }
  4028.     }
  4029. #endif
  4030.     //
  4031.     searchmodeToSearchopt(text->searchmodeInit,&context.searchopt);
  4032.     {
  4033.         int i;
  4034.         for (i = 0;i < FORMAT_N;i++) {
  4035.             // strtoescによるバッファあふれを考慮
  4036.             mchar buff[CCHFORMAT * 3];
  4037.             strcpy(buff,context.text->tszformat[i]);
  4038.             strtoesc(buff);
  4039.             strcpymax(context.text->tszformat[i],buff,CCHFORMAT);
  4040.         }
  4041.         for (i = 0;i < TITLE_N;i++) {//3.00B1 970612 見出しに'\'を指定できなかった
  4042.             // strtoescによるバッファあふれを考慮
  4043.             mchar buff[CCHTITLE * 3];
  4044.             strcpy(buff,context.text->tsztitle[i]);
  4045.             strtoesc(buff);
  4046.             strcpymax(context.text->tsztitle[i],buff,CCHTITLE);
  4047.         }
  4048.     }
  4049.     //
  4050.     wzlock(LOCK_CONFIG);
  4051. #if 0// test
  4052. {
  4053. SHARE* sh = text->share;
  4054. information("%s",sh->tszfkey[0][0]);
  4055. information("%s %d",sh->context.szenvkey,(LPBYTE)&sh->config - (LPBYTE)sh);
  4056. }
  4057. #endif
  4058.     context.shcfg = text->share->config;
  4059.     wzunlock(LOCK_CONFIG);
  4060.     //
  4061.     PMACROFUNC pfunc;
  4062.     macroGetFuncAddress("dlgprocConfig",&pfunc);
  4063.     dialogSetHook(hd,&pfunc);
  4064.     //
  4065.     if (ipage == IPAGES_CONFIG) {
  4066.         int i = 0;
  4067.         int iPage;
  4068.         for (iPage = 0;iPage <= IPAGE_HELP;iPage++) {
  4069.             _tLogicalPage[i++] = iPage;
  4070.             HDIALOG hd1 = configtxCreatePage(iPage,hdcPrinter,0);
  4071.             if (hd1) dialogAddPage(hd,hd1);
  4072.         }
  4073.         if (txGetViewmode(text)) {//3.00B1 970613 
  4074.             iPage = IPAGE_VIEWMODE;
  4075.             _tLogicalPage[i++] = iPage;
  4076.             HDIALOG hd1 = configtxCreatePage(iPage,hdcPrinter,0);
  4077.             if (hd1) dialogAddPage(hd,hd1);
  4078.         }
  4079.         dialogSetStartPage(hd,_ipageConfig);
  4080.     } else if (ipage == IPAGES_CUSTMIZE) {
  4081.         int i = 0;
  4082.         int iPage;
  4083.         for (iPage = IPAGE_CUST_TOP;iPage <= IPAGE_CUST_END;iPage++) {
  4084.             _tLogicalPage[i++] = iPage;
  4085.             HDIALOG hd1 = configtxCreatePage(iPage,hdcPrinter,0);
  4086.             if (hd1) dialogAddPage(hd,hd1);
  4087.         }
  4088.         dialogSetStartPage(hd,_ipageCustmize);
  4089.     } else {
  4090.         _tLogicalPage[0] = ipage;
  4091.         HDIALOG hd1 = configtxCreatePage(ipage,hdcPrinter,0);
  4092.         if (hd1) dialogAddPage(hd,hd1);
  4093.         dialogSetStartPage(hd,0);
  4094.     }
  4095.     
  4096.     dialogAddPageComplete(hd);//1.97 
  4097.     //
  4098.     if (!_fPrint) {
  4099.         dialogControlHelp(hd,133);
  4100.         dialogAddPageButton(hd,IDD_TEMP,"一時設定(&A)",12);
  4101.         if (_ipageMode == IPAGES_CUSTMIZE) {
  4102.             //3.00B1 970610 カスタマイズダイアログでは読み込みボタンを廃止した
  4103.         } else {
  4104.             dialogControlHelp(hd,173);
  4105.             if (_fwin40) {
  4106.                 dialogAddPageButton(hd,IDD_DETAIL,"読み込み(&X)...",14);
  4107.             } else {
  4108.                 dialogAddPageButton(hd,IDD_DETAIL,"読込(&X)...",10);
  4109.             }
  4110. #if 1//3.00A5 970511 "文書の設定"と"カスタマイズ"ダイアログで、"新規登録"ボタンのコンテキストヘルプの内容を変更した
  4111.             if (_ipageMode == IPAGES_CONFIG) {
  4112.                 dialogControlHelp(hd,509);
  4113.             } else {
  4114.                 dialogControlHelp(hd,353);
  4115.             }
  4116. #else
  4117.             dialogControlHelp(hd,353);
  4118. #endif
  4119.             dialogAddPageButton(hd,IDD_NEW,"新規登録(&Q)...",14);//2.95 970127 N->Q (Nはツライので)
  4120.         }
  4121.         if (
  4122.             !text->fWztext && !text->fEditViewMode && !text->fSemiViewMode &&
  4123.             _ipageMode != IPAGES_CUSTMIZE
  4124.         ) {
  4125.             //2.00B WZ文書ファイルや、ビューモードのファイルでは、[埋め込み]ボタンを無くした
  4126.             dialogControlHelp(hd,174);
  4127.             if (_fwin40) {
  4128.                 dialogAddPageButton(hd,IDD_PLUG,"埋め込み(&Y)...",14);
  4129.             } else {
  4130.                 dialogAddPageButton(hd,IDD_PLUG,"埋込(&Y)...",10);
  4131.             }
  4132.         }
  4133. #if 0//2.00E2 WZ16で収まらないし、内容が古くなった
  4134.         dialogAddPageButton(hd,IDD_HELP,"ヘルプ(&H)",10);
  4135. #endif
  4136.     }
  4137.     //2.95 970127 
  4138.     context._text0 = *context.text;
  4139.     //
  4140.     if (dialogOpen(hd) == IDOK) {
  4141.         context.ret = TRUE;//2.00E2 
  4142.         if (_fPrint) {
  4143.             flush(TRUE);
  4144.         } else {
  4145.             flush(FALSE);
  4146.         }
  4147.         if (_ipageMode == IPAGES_CUSTMIZE) {
  4148. #if 1//2.99C 970324 設定ダイアログをOKしたときに常駐を解除しないようにした
  4149.             if (text->share->config.fenvstayalways) {
  4150.                 call("file.flushStay");
  4151.             }
  4152. #else
  4153.             //2.96 970209 
  4154.             call("file.flushStay");
  4155. #endif
  4156.         }
  4157.     }
  4158.     if (_ipageMode == IPAGES_CONFIG) {
  4159.         _ipageConfig = _ipageNow;
  4160.     } else if (_ipageMode == IPAGES_CUSTMIZE) {
  4161.         _ipageCustmize = _ipageNow;
  4162.     }
  4163.     if (context.text->tFontstyle) {
  4164.         memFree(context.text->tFontstyle);
  4165.     }
  4166.     idFontBase = 0;//2.98 970307 
  4167.     return context.ret;
  4168. }
  4169.  
  4170. //2.00B 
  4171. static BOOL _dialogConfig(int ipage)
  4172. {
  4173.     HDC hdcPrinter = txLpOp(text,TXLPOP_GETIC);
  4174. //information("%d",hdcPrinter);
  4175.     BOOL ret = __dialogConfig(ipage,hdcPrinter);
  4176.     txLpOp(text,TXLPOP_RELEASEIC);
  4177.     return ret;
  4178. }
  4179.  
  4180. uiConfigForm
  4181. {
  4182.     return _dialogConfig(IPAGE_FORM);
  4183. }
  4184.  
  4185. //2.00E2 [ツール]-[個別設定]から削除
  4186. uiConfigStyle
  4187. {
  4188.     return _dialogConfig(IPAGE_STYLE);
  4189. }
  4190.  
  4191. //2.00D 
  4192. uiConfigStylePrint
  4193. {
  4194.     BOOL ret = FALSE;
  4195.     _fPrint = TRUE;
  4196.     ret = _dialogConfig(IPAGE_STYLE);
  4197.     _fPrint = FALSE;
  4198.     return ret;
  4199. }
  4200.  
  4201. //2.00E2 
  4202. BOOL TXAPI txuiConfigStyleEx(TX* text)
  4203. {
  4204.     BOOL ret = FALSE;
  4205.     LPRINT* lp = text->lp;
  4206.     if (txGetUsePrintFontstyle(text)) {
  4207.         BYTE buff[SIZE_TFONTSTYLE];
  4208.         memcpy(buff,text->tFontstyle,SIZE_TFONTSTYLE);
  4209.         memcpy(&text->tFontstyle[FONTTX_BODY],lp->tFontstyle,sizeof(lp->tFontstyle));
  4210.         //
  4211.         ret = uiConfigStylePrint();
  4212.         //
  4213.         memcpy(lp->tFontstyle,&text->tFontstyle[FONTTX_BODY],sizeof(lp->tFontstyle));
  4214.         memcpy(text->tFontstyle,buff,SIZE_TFONTSTYLE);
  4215.     } else {
  4216.         ret = uiConfigStyle();
  4217.     }
  4218.     return ret;
  4219. }
  4220.  
  4221. //2.00E2 [ファイル]-[印刷スタイルの設定]追加
  4222. uiConfigStyleEx
  4223. {
  4224.     _fNoFlush = TRUE;
  4225.     txConfigOp(text,TXCONFIGOP_PRINTREAD,(LPVOID)text->szlpstyle);
  4226.     if (txuiConfigStyleEx(text)) {
  4227.         txConfigOp(text,TXCONFIGOP_PRINTWRITE,(LPVOID)text->szlpstyle);
  4228.         txFlush(text);
  4229.     }
  4230.     _fNoFlush = FALSE;
  4231. }
  4232.  
  4233. uiConfigColor
  4234. {
  4235.     return _dialogConfig(IPAGE_COLOR);
  4236. }
  4237.  
  4238. uiConfigScroll
  4239. {
  4240.     return _dialogConfig(IPAGE_CUST_SCROLL);
  4241. }
  4242.  
  4243. uiConfigUi
  4244. {
  4245.     return _dialogConfig(IPAGE_CUST_KEY);
  4246. }
  4247. uiConfigFile
  4248. {
  4249.     return _dialogConfig(IPAGE_CUST_FILE);
  4250. }
  4251.  
  4252. uiConfigEdit
  4253. {
  4254.     return _dialogConfig(IPAGE_EDIT);
  4255. }
  4256.  
  4257. uiConfigSearch
  4258. {
  4259.     return _dialogConfig(IPAGE_CUST_SEARCH);
  4260. }
  4261.  
  4262. uiConfigFormString
  4263. {
  4264.     return _dialogConfig(IPAGE_FORMDT);
  4265. }
  4266.  
  4267. uiConfigMacro
  4268. {
  4269.     return _dialogConfig(IPAGE_CUST_MACRO);
  4270. }
  4271.  
  4272. uiConfigWindow
  4273. {
  4274.     return _dialogConfig(IPAGE_CUST_WINDOW);
  4275. }
  4276.  
  4277. uiConfigHelp
  4278. {
  4279.     return _dialogConfig(IPAGE_HELP);
  4280. }
  4281.  
  4282. BOOL TXCMDBASE uiConfig(TX* text)
  4283. {
  4284. // 文書の設定
  4285. //{#VZ} +{F1}
  4286. //{#MI} +{F1}
  4287. //{#EMACS} +{F1}
  4288.     return _dialogConfig(IPAGES_CONFIG);
  4289. }
  4290.  
  4291. BOOL TXCMDBASE uiCustmize(TX* text)
  4292. {
  4293. // カスタマイズ
  4294.     return _dialogConfig(IPAGES_CUSTMIZE);
  4295. }
  4296.  
  4297. BOOL TXCMDBASE uiConfigNetwork(TX* text)
  4298. {
  4299. // ネットワーク版WZの共有設定
  4300.     if (
  4301.         !text->share->env_network
  4302.         && text->share->szUserName[0] == 0//2.00E7 ユーザ名が設定されている場合はOKとする for マルチコンフィグ
  4303.     ) {
  4304.         information("ネットワーク版WZでないので実行できません");
  4305.         return FALSE;
  4306.     }
  4307.     TXCONFIGSHARE* shcfg = &text->share->config;
  4308.     BOOL fNetShareMenu = shcfg->fNetShareMenu;
  4309.     BOOL fNetShareKey = shcfg->fNetShareKey;
  4310.     BOOL fNetShareToolbar = shcfg->fNetShareToolbar;
  4311.     BOOL fNetShareLpstyle = shcfg->fNetShareLpstyle;
  4312.     BOOL fNetShareInifile = shcfg->fNetShareInifile;
  4313.     txstr szCaption = "共有 - ";
  4314.     if (text->share->szUserName[0]) {
  4315.         szCaption += text->share->szUserName;
  4316.     } else {
  4317.         szCaption += "ルート";
  4318.     }
  4319.     HDIALOG hd = dialog(szCaption);
  4320.     dialogSetContexthelp(hd,TRUE);
  4321.     dialogControlHelp(hd,358);
  4322.     dialogCheck(hd,"メニュー(&M)",&fNetShareMenu);
  4323.     dialogControlHelp(hd,358);
  4324.     dialogCheck(hd,"キー(&K)",&fNetShareKey);
  4325.     dialogControlHelp(hd,358);
  4326.     dialogCheck(hd,"ツールバー(&T)",&fNetShareToolbar);
  4327.     dialogControlHelp(hd,358);
  4328.     dialogCheck(hd,"印刷スタイル(&P)",&fNetShareLpstyle);
  4329. #if 0//2.00E4 マクロ設定はユーザ毎に別々が良い
  4330.     dialogControlHelp(hd,358);
  4331.     dialogCheck(hd,"マクロ設定(&C)",&fNetShareInifile);
  4332. #endif
  4333.     if (dialogOpen(hd)) {
  4334.         shcfg->fNetShareMenu = fNetShareMenu;
  4335.         shcfg->fNetShareKey = fNetShareKey;
  4336.         shcfg->fNetShareToolbar = fNetShareToolbar;
  4337.         shcfg->fNetShareLpstyle = fNetShareLpstyle;
  4338.         shcfg->fNetShareInifile = fNetShareInifile;
  4339.         txConfigOp(text,TXCONFIGOP_SHARESAVE_NET,NULL);
  4340.         return TRUE;
  4341.     }
  4342.     return FALSE;
  4343. }
  4344.  
  4345.