home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2001 June / VPR0106A.BIN / OLS / FSC202 / fsc202.lzh / LtHand.fxl < prev    next >
Text File  |  2001-03-25  |  25KB  |  1,104 lines

  1. //----------------------------------------------------
  2. //
  3. // Light Hand  Script Source Code
  4. //
  5. //                              2000.12.22 by y.Fuji
  6. //  http://free01.plala.or.jp/~yfuji/
  7. //----------------------------------------------------
  8. //このファイル最後にFXLの特に解りにくい点を解説しています
  9.  
  10. //================================================
  11. //起動時処理
  12. //================================================
  13. Str_version="Light Hand v2.02";
  14. sys.AddAccKey("CTR","F");
  15.  
  16.     if (sys.usedll("lhd.dll")=="true") {
  17.         USE_LHD="on";
  18.         if (lhdsys.ckstay(arg.pos())==true) {
  19.             return;
  20.         }
  21.         lhdsys.maketray();
  22.     }
  23.     MakeEditWinList();
  24.     main(EditWinList).popup.add("新規作成","NewEditWin();main.visible=true;");
  25.     main.popup.add("ファイルを開く","OpenFile();");
  26.     main.popup.add("-","-");
  27.     main.popup.add("最近開いたファイル","ShowRecentWinList();");
  28.     main.popup.add("編集ウィンドウ一覧","ShowEditWinList();");
  29.     main.popup.add("-","-");
  30.     main.popup.add("終了","end();");
  31.     
  32.     Edit_Name="";
  33.  
  34. deffunc.set(macro.body);    //このファイルをアプリケーションに登録
  35.                             //これによりファイル中のサブルーチンが使用可能になる
  36.  
  37. //前回終了時にウィンドウ状態を記憶していたか確認
  38.     //通常起動
  39.     if (arg.length==0) {
  40.         //コマンドラインオプションがないので空ウィンドウをオープン
  41.         if (USE_LHD != "On") {
  42.             NewEditWin();
  43.         } else {
  44.             MakeRecentWinList();
  45.         }
  46.         main.visible="true";
  47.     } else {
  48.         //コマンドラインのウィンドウをオープン
  49.         OpenFile(arg(1));
  50.     }
  51.     return;
  52. }
  53.  
  54. //=====================================================
  55. //アプリケーション登録関数
  56. //=====================================================
  57. //----------------------------------------------------
  58. //基本編集のコマンド
  59. //----------------------------------------------------
  60. //フォームにファイルがDropされたとき
  61. function OnDrop()
  62. {
  63.     OpenFile(arg(1));
  64.     main.setfocus();
  65. }
  66. //他のLightHandからの受信
  67. function MessFromOther()
  68. {
  69.     arg.top();
  70.     OpenFile(arg.line);
  71.     main.SetForeground();
  72. }
  73.  
  74. //ファイルオープン 引数が無い場合はダイアログ表示
  75. function OpenFile()
  76. {
  77.     //以前開いたファイルか確認
  78.     if (USE_LHD=="on") {
  79.         a = lhdhist.ckhist(sys.ToLongName(arg(1)));
  80.         if (a != "") {
  81.             arg.set(a);        //以前のウィンドウサイズを復元
  82.         }
  83.     }
  84.     arg.replace("/","\\r\\n");
  85.  
  86.     //ファイルが既に開かれているか確認
  87.     w.set(main.getwinlist());
  88.     w.topline();
  89.     while (w.take()=="true") {
  90.         id = main(w.line).id;    //スコープを変更
  91.         if (edit_name == arg(1)) {
  92.             main.SetForeground();
  93.             return;
  94.         }
  95.     }
  96.  
  97.     //LZHファイルか確認
  98.     if (file.ext(arg(1))==".lzh") {
  99.         Open_LZH(sys.ToLongName(arg(1)));
  100.         return;
  101.     }
  102.  
  103.     //Dropされたウィンドウがエディタでなかったら新しいウィンドウをオープン
  104.     if (editor != "on") {
  105.         NewEditWin();
  106.     }
  107.     //さらにウィンドウが空でなかったら新しいウィンドウをオープン
  108.     if (main.fxedit(1).lines.length()!=0) {
  109.         NewEditWin();
  110.     }
  111.     if (arg(1)=="") {
  112.         arg.set(sys.fileselect("ファイルを開く",file.path(Edit_Name)));
  113.     }
  114.     if (arg(1)=="") {
  115.         return;
  116.     }
  117.  
  118.     //検索文字列の設定
  119.     main.fxedit.ed(str("SetFind:",FindStr));
  120.  
  121.     //タイプ別の初期化プログラムの呼び出し
  122.     edit_name=sys.ToLongName(arg(1));
  123.     Edit_Name = edit_name;
  124.     EditWindow = main.id;
  125.     main.fxedit(1).ed("OFF");
  126.     ext = str(file.ext(edit_name),".");
  127.  
  128.     w.set(".cpp.c.h.hpp.fxl.");
  129.     if (w.search(ext)!=-1) {
  130.         ext=".cpp.";
  131.     }
  132.  
  133.     w.set("doevent(\"Format");
  134.     w.add(ext);
  135.     w.add("\");");
  136.     w.replace(".","_");
  137.     macro.str(w.pos());
  138.     main.fxedit.ed(str("Load,",edit_name));
  139.     main.fxedit.ed("ON");
  140.     main.caption = edit_name;
  141.  
  142.     //以前のカーソル位置を復元
  143.     w.set(arg(2));
  144.     if (w.replace("j","")==1) {
  145.         main.fxedit.ed(str("Jp#",w.pos()));
  146.     }
  147.  
  148.     //以前のサイズを復元
  149.     w.set(arg(3));
  150.     if (w.replace("p","") ==1) {
  151.         w.replace(",","\\r\\n");
  152.         main.left = w(1);
  153.         main.top = w(2);
  154.         main.width = w(3);
  155.         main.height = w(4);
  156.     }
  157.  
  158.     main.visible="true";
  159.  
  160.     //履歴の記憶
  161.     SaveHist();
  162.  
  163. }
  164. //履歴の記憶
  165. function SaveHist()
  166. {
  167.     if (USE_LHD=="on") {
  168.         //アクティブウィンドウが最大化されていたら元に戻す
  169.         lhdsys.window_res();    
  170.  
  171.         if (edit_name != "edit_name") {
  172.             w.set(edit_name);
  173.             w.add(" /j");
  174.             w.add(main.fxedit(1).ed("Get,CursorLine"));
  175.             w.add(" /p");
  176.             w.add(main.left);
  177.             w.add(",");
  178.             w.add(main.top);
  179.             w.add(",");
  180.             w.add(main.width);
  181.             w.add(",");
  182.             w.add(main.height);
  183.             lhdhist.addhist(w.pos());
  184.         }
  185.     }
  186. }
  187. //ファイルの保存
  188. function SaveFile()
  189. {
  190.  
  191.     if (main.fxedit(1).ed("Save")=="true") {
  192.         main.caption = edit_name;
  193.     }
  194. }
  195. //名前をつけてファイルの保存
  196. function SaveAs()
  197. {
  198.     a = sys.FileSelect("保存ファイル名の指定");
  199.     if (a != "") {
  200.         if (main.fxedit(1).ed(str("SaveAs:",a))=="true") {
  201.             edit_name = a;
  202.             main.caption = edit_name;
  203.         }
  204.     }
  205. }
  206. //HTML出力
  207. function ToHTML()
  208. {
  209.     x.clear();
  210.     x.addline("<html><head><title>");
  211.     x.addline(edit_name);
  212.     x.addline("</title></head><body>");
  213.     x.addline("<font face=\"MS ゴシック\">");
  214.     x.addline("<pre>");
  215.  
  216.     main.fxedit(1).ed("CopyToSub");
  217.     if (main.fxedit.subtext.length()>0) {
  218.         y.set(main.fxedit.subtext.pos());
  219.     } else {
  220.         y.set(main.fxedit.lines.pos());
  221.     }
  222.  
  223.     y.replace("<","<");
  224.     y.replace(">",">");
  225.     x.add(y.pos());
  226.  
  227.     x.addline("</pre></font></body></html>");
  228.  
  229.     //tmpファイルに保存
  230.     a = 1;
  231.     while ("true") {
  232.         y.set(str(sys.instpath,"\\tmp",a,".htm"));
  233.         if (file.type(y.pos()) == "false") {
  234.             break;
  235.         }
  236.         eval("a=a+1");
  237.         if (a > "20") {
  238.             a="0";
  239.             break;
  240.         }
  241.     }
  242.  
  243.     if (x.savefile(y.pos()) == "false") {
  244.         alert("保存に失敗しました",y.pos());
  245.         return;
  246.     }
  247.     
  248.     //HTMLファイルを実行
  249.     shell(y.pos());
  250.  
  251. }
  252. //再読み込み
  253. function Reopen()
  254. {
  255.     main.fxedit(1).ed("Reload");
  256.     main.fxedit(1).ed("Clear Undo");
  257.     main.caption = edit_name;
  258. }
  259. //エディタフォームの作成
  260. function NewEditWin()
  261. {
  262.  
  263.     //メインフォーム作成
  264.     main.add(0,0,700,500,,,1);
  265.     main.icon="<r0:icon2>";
  266.     main.taskbar=true;
  267.     main.caption=Str_version;
  268.  
  269.     //エディタ部品貼り付け
  270.     main.fxedit.add();
  271.     main.fxedit.align="alClient";
  272.     CreateEditBase();
  273.  
  274.     //ツールバー作成
  275.     w.set(sys.getstring("ToolbarString",deffunc.pos()));
  276.     w.replace(",","\\r\\n");
  277.     main.toolbar.add(16,16,w.pos());
  278.  
  279.     //メインメニュー作成
  280.     w.set(sys.getstring("MenuString",deffunc.pos()));
  281.     w.replace(",","\\r\\n");
  282.     w.replace("\\t","    ");
  283.     main.menu.add(w.pos());
  284.  
  285.     //エディタのPOPUP
  286.     w.set(sys.getstring("PopupString",deffunc.pos()));
  287.     w.replace(",","\\r\\n");
  288.     w.replace("\\t","    ");
  289.     main.fxedit.popup.add(w.pos());
  290.  
  291.     //追加のポップアップメニュー
  292.     w.set(sys.getinitcmd("PopupString"));
  293.     w.replace(",","\\r\\n");
  294.     w.replace("\\t","    ");
  295.     if (w.length()>0) {
  296.         main.fxedit.popup.add(w.pos());
  297.     }
  298.  
  299.     //メインフォーム表示
  300.     main.move("center","/step=0");
  301.     doevent("CreateEdit");
  302.     
  303.     //インディケータ(検索ウィンドウなどと区別するために使用)
  304.     editor="on";
  305.     
  306. }
  307. //FxEditの内容が変更された場合のイベント
  308. function OnFxEditInfoChange1()
  309. {
  310.     if (arg(1) == "ModFlag") {
  311.         main.caption = str(main.caption," (変更)");
  312.     }
  313. }
  314. //クリッカブルURLイベント
  315. function OnFxEditClick1()
  316. {
  317.     if (arg(1) == "http") {
  318.         shell(arg(2));
  319.     }
  320.     if (arg(1) == "mailto") {
  321.         shell(str("mailto:",arg(2)));
  322.     }
  323. }
  324. //フォームにフォーカスが来た場合の処理
  325. function OnSetFocus()
  326. {
  327.     if (editor=="on") {
  328.         EditWindow=main.id;
  329.         main.fxedit(1).setfocus();
  330.     }
  331. }
  332. //CPPファイルの読み込み時実行
  333. function Format_CPP_()
  334. {
  335.     w.set("AddKeyWord=");
  336.     w.add(sys.getstring("CPPKeyWord",deffunc.pos()));
  337.     main.fxedit(1).ed(w.pos());
  338.  
  339.     main.fxedit.ed("ShowKey=On")
  340.     main.fxedit.ed("TabSize#4")
  341.     main.fxedit.ed("ShowC=On")
  342.     ShowMkColorClick();
  343.     main.fxedit.ed("ShowString=On")
  344.     //main.fxedit.modcheck=true;
  345.     ShowNumClick();
  346.  
  347. }
  348. //編集画面のデフォルト作成
  349. function CreateEditBase()
  350. {
  351.     main.fxedit(1).ed("AddAlias:%CT+S%=Post:SaveFile()");
  352.     //main.fxedit.ed("AddAlias:%CT+F%=Post:ShowFindWin()");  -> AccKeyに変更
  353.     main.fxedit.ed("AddAlias:%CT+L%=Post:SetFindStr()");
  354.     main.fxedit.ed("AddAlias:PutOne:    =Post:PutTab()");
  355.     w.set(sys.getinitcmd("KeyWord"));
  356.     if (w.length() > 0) {
  357.         w.set("AddKeyWord=");
  358.         w.add(sys.getinitcmd("KeyWord"));
  359.         main.fxedit.ed(w.pos());
  360.     }
  361.     w.set(sys.getinitcmd("KeyUserWord"));
  362.     if (w.length() > 0) {
  363.         w.set("AddUserWord=");
  364.         w.add(sys.getinitcmd("KeyUserWord"));
  365.         main.fxedit.ed(w.pos());
  366.     }
  367.     main.fxedit(1).ed("ModMark=On");
  368.     main.fxedit.ed("Show2Spc=On")
  369. }
  370. //クリッカブルURL ON/OFF
  371. function ChgClick()
  372. {
  373.     id=main.menu.getid("クリッカブルURL(&U)");
  374.     if (id == "") {
  375.         return;
  376.     }
  377.     if (main.menu.checked(id) == "true") {
  378.         main.fxedit(1).ed("ShowURL=Off");
  379.         main.menu.checked(id,"false");
  380.     } else {
  381.         main.fxedit(1).ed("ShowURL=On");
  382.         main.menu.checked(id,"true");
  383.     }
  384.     main.fxedit(1).ed("Paint");
  385. }
  386. //行番号 ON/OFF
  387. function ShowNumClick()
  388. {
  389.     id=main.menu.getid("行番号表示(&N)");
  390.     if (id == "") {
  391.         return;
  392.     }
  393.     if (main.menu.checked(id) == "true") {
  394.         main.fxedit(1).ed("ShowNum=Off");
  395.         main.menu.checked(id,"false");
  396.     } else {
  397.         main.fxedit(1).ed("ShowNum=On");
  398.         main.menu.checked(id,"true");
  399.     }
  400.     main.fxedit(1).ed("Paint");
  401. }
  402. //マーク行の色分け ON/OFF
  403. function ShowMkColorClick()
  404. {
  405.     id=main.menu.getid("マーク行色分表示(&M)");
  406.     if (id == "") {
  407.         return;
  408.     }
  409.     if (main.menu.checked(id) == "true") {
  410.         main.fxedit(1).ed("ShowMarkLine=Off");
  411.         main.menu.checked(id,"false");
  412.     } else {
  413.         main.fxedit(1).ed("ShowMarkLine=On");
  414.         main.menu.checked(id,"true");
  415.     }
  416.     main.fxedit(1).ed("Paint");
  417. }
  418. //TABの挿入
  419. function PutTab()
  420. {
  421.     if (USE_LHD=="on") {
  422.         w.set(main.fxedit(1).lhd.puttab());
  423.         if (w.length()>0) {
  424.             w.insert(0,"sPutStr:");
  425.             main.fxedit(1).ed(w.pos());
  426.         } else {
  427.             main.fxedit(1).ed("PutStr:    ");
  428.         }
  429.     } else {
  430.         main.fxedit(1).ed("PutStr:    ");
  431.     }
  432. }
  433. function OnAccKey()
  434. {
  435.     //検索ウィンドウ表示
  436.     if (arg.pos()=="1") {
  437.         ShowFindWin();
  438.         return;
  439.     }
  440. }
  441. //----------------------------------------------------
  442. //検索ウインドウ表示処理
  443. //----------------------------------------------------
  444. function SetFindStr()
  445. {
  446.     EditWindow = main.id;
  447.     main.fxedit(1).ed(str("GetFind"));
  448.     FindStr = main.fxedit(1).ed("Get,Find");
  449.     if (editor=="on") {
  450.         x.set(main.getwinlist());
  451.         x.topline();
  452.         while (x.take()=="true") {
  453.             a = main(x.line).caption;    //スコープの変更
  454.             if (editor=="on") {
  455.                 main.fxedit(1).ed(str("SetFind:",FindStr));
  456.             }
  457.         }
  458.     }
  459.     a=main(EditWindow).fxedit(1).ed("Update");    //スコープの変更
  460.                       //^^^fxeditのオブジェクトポインタを再設定するため必要
  461. }
  462. function ShowFindWin()
  463. {
  464.     if (editor=="on") {
  465.         EditWindow = main.id;
  466.         FindStr = main.fxedit(1).ed("Get,Find");
  467.         FindCase = main.fxedit.ed("Get,FindCase");
  468.         FindWord = main.fxedit.ed("Get,FindWord");
  469.         w.set(main.fxedit.ed("Get,SelText"));
  470.         SelWord = w(1);
  471.     }
  472.  
  473.     if (FindWindow!="FindWindow") {
  474.         main(FindWindow).visible=true;
  475.         main.setfocus();
  476.         main.combobox(1).text=FindStr;
  477.         main.combobox.setfocus();
  478.         if (SelWord != "") {
  479.             main.combobox(1).text=SelWord;
  480.         }
  481.         return;
  482.     }
  483.  
  484.     FindWindow = main.add(0,0,493,110,,,2);
  485.     main.icon="<r0:icon4>";
  486.     main.caption="検索文字列設定";
  487.     main.taskbar=true;
  488.  
  489.     main.combobox.add("22","10","325","20");    //object
  490.     main.combobox.setfocus();
  491.     main.combobox.text=FindStr;
  492.  
  493.     main.btn.add("371","10","100","21");    //object
  494.     main.btn.caption="上検索 Ctrl+↑";
  495.  
  496.     main.btn.add("370","50","100","22");    //object
  497.     main.btn.caption="下検索 Ctrl+↓";
  498.  
  499.     main.btn.add("277","50","80","22");    //object
  500.     main.btn.caption="取込 Ctrl+L";
  501.  
  502.     main.checkbox.add("36","50","97","17");    //object
  503.     main.checkbox.caption="ワード検索";
  504.     if (FindWord==true) {
  505.         main.checkbox.checked=true;
  506.     }
  507.  
  508.     main.checkbox.add("144","50","120","17");    //object
  509.     main.checkbox.caption="大小文字同一視";
  510.     if (FindCase==true) {
  511.         main.checkbox.checked=true;
  512.     }
  513.  
  514.     if (SelWord != "") {
  515.         main.combobox(1).text=SelWord;
  516.     }
  517.  
  518.     main.combobox.setfocus();
  519.     main.deffunc.set(macro.body);
  520.     main.move("center","/step=0");
  521.     main.visible="true";
  522.  
  523.     //deffunc登録
  524.     main.deffunc.set(sys.getstring("FindWinFunction",deffunc.pos()));
  525.     
  526. }
  527.  
  528. //上検索
  529. function FindUp()
  530. {
  531.     if (main(EditWindow).fxedit(1).ed("FindUp")=="false") {
  532.         alert("検索文字は見つかりません");
  533.     }
  534. }
  535. //下検索
  536. function FindDown()
  537. {
  538.     if (main(EditWindow).fxedit(1).ed("FindDown")=="false") {
  539.         alert("検索文字は見つかりません");
  540.     }
  541. }
  542.  
  543. //検索ウインドウの調整
  544. function SetFindWindow()
  545. {
  546.     if (FindWindow=="FindWindow") {
  547.         return;
  548.     }
  549.     if (EditWindow=="EditWindow") {
  550.         return;
  551.     }
  552.     FindStr = main(FindWindow).combobox(1).text;
  553.     FindWord = main(FindWindow).checkbox(1).checked;
  554.     FindCase = main(FindWindow).checkbox(2).checked;
  555.     FindStr=main(EditWindow).fxedit(1).ed(str("SetFind:",FindStr));
  556.     
  557.     w.set(main(FindWindow).combobox(1).items);
  558.     w.insline(FindStr);
  559.     w.topline();
  560.     w.take();
  561.     while (w.take()=="true") {
  562.         if (w.line == FindStr) {
  563.             w.delline();
  564.         }
  565.     }
  566.     main(FindWindow).combobox(1).items=w.pos();
  567.     main(FindWindow).combobox(1).text=FindStr;
  568. }
  569. //----------------------------------------------------
  570. //編集ウィンドウ表示処理
  571. //----------------------------------------------------
  572. function MakeEditWinList()
  573. {
  574.     if (EditWinList!="EditWinList") {
  575.         return;
  576.     }
  577.     EditWinList = main.add(0,0,400,105,,,3);
  578.     main.icon="<r0:icon6>";
  579.     main.caption="編集ウィンドウ一覧";
  580.     main.taskbar=true;
  581.     main.listbox.add();
  582.     main.listbox.align="alClient";
  583.     main.move("center","/step=0");
  584.  
  585.     //deffunc登録
  586.     main.deffunc.set(sys.getstring("EditWinListFunction",macro.body));
  587.  
  588. }
  589. function ShowEditWinList()
  590. {
  591.     EditWindow = main.id;
  592.     if (EditWinList!="EditWinList") {
  593.         main(EditWinList).visible=true;
  594.         main.setfocus();
  595.     } else {
  596.         MakeEditWinList();
  597.     }
  598.     RedrawEditWinList();
  599. }
  600. function RedrawEditWinList()
  601. {
  602.     main(EditWinList).listbox(1).text="";
  603.     x.set(main.getwinlist());
  604.     x.topline();
  605.     x.take();    //id=1のウィンドウは必ずウンドウ一覧(最初に作られるため)
  606.     while (x.take()=="true") {
  607.         main(EditWinList).listbox(1).additem(str(x.line," ",main(x.line).caption));
  608.     }
  609. }
  610.  
  611. //----------------------------------------------------
  612. //最近開いたファイルウィンドウ表示処理
  613. //----------------------------------------------------
  614. function MakeRecentWinList()
  615. {
  616.     if (RecentList!="RecentList") {
  617.         return;
  618.     }
  619.     RecentList = main.add(0,0,400,200,,,4);
  620.     main.icon="<r0:icon6>";
  621.     main.caption="最近開いたファイル";
  622.     main.taskbar=true;
  623.     main.listview.add();
  624.     main.listview.align="alClient";
  625.     main.listview.Columns("名前",100,"種類",50,"フルパス",200);
  626.     main.move("center","/step=0");
  627.     main.deffunc.add("function OnListViewDblClick1()");
  628.     main.deffunc.add("{");
  629.     main.deffunc.add("x.set(main.listview(1).selected)");
  630.     main.deffunc.add("OpenFile(x(3))");
  631.     main.deffunc.add("}");
  632.     main.deffunc.add("function OnFormCloseQuery(){main.visible=false;}");
  633.     main.deffunc.add("function OnSetFocus(){RedrawRecentWinList();}");
  634.  
  635. }
  636. function ShowRecentWinList()
  637. {
  638.     if (RecentList!="RecentList") {
  639.         main(RecentList).visible=true;
  640.         main.setfocus();
  641.     } else {
  642.         MakeRecentWinList();
  643.         main.visible=true;
  644.     }
  645.     RedrawRecentWinList();
  646. }
  647. function RedrawRecentWinList()
  648. {
  649.     main(RecentList).listview(1).items="";
  650.     main.listview.items=lhdhist.gethist();
  651.                     //lhdhist.gethist()は
  652.                     //ファイル名
  653.                     //拡張子
  654.                     //フルパスの順に文字列を作る
  655. }
  656. //----------------------------------------------------
  657. //アウトライン表示処理
  658. //----------------------------------------------------
  659. function ShowOutlineList()
  660. {
  661.     if (USE_LHD != "on") {
  662.         alert("LHD.DLLがインストールされていません");
  663.         return;
  664.     }
  665.     if (editor!="on") {
  666.         return;
  667.     }
  668.     if (outline!="on") {
  669.         main.listview.add(0,0,0,0);
  670.         main.listview.align="alLeft";
  671.         main.listview.visible=true;
  672.         main.listview.Columns("名前",120,"情報",50,"コマンド",0);
  673.         main.splitter.add();
  674.         main.splitter.align=alLeft;
  675.         outline="on";
  676.         outline_now="off";
  677.     }
  678.  
  679.     if (outline_now == "on") {
  680.         outline_now="off";
  681.         main.listview(1).visible=false;
  682.         main.splitter(1).visible=false;
  683.         main.listview.width=0;
  684.         main.splitter.width=0;
  685.         main.repaint();
  686.         return;
  687.  
  688.     } else {
  689.         outline_now="on";
  690.  
  691.     }
  692.  
  693.     main.listview(1).visible=true;
  694.     main.listview.width=170;
  695.     main.splitter(1).visible=true;
  696.     main.splitter.active();
  697.     main.repaint();
  698.     w.set(main.fxedit.lhd.getoutline(edit_name));
  699.     main.listview.items=w.pos();
  700. }
  701. function OnListViewDblClick1()
  702. {
  703.     w.set(main.listview(1).selected);
  704.     main.fxedit(1).ed(str("Jp#",w(3)));
  705.     main.fxedit(1).setfocus();
  706. }
  707. //----------------------------------------------------
  708. //終了時関数
  709. //----------------------------------------------------
  710. //フォームを閉じるとき
  711. function OnFormCloseQuery()
  712. {
  713.     if (editor=="on") {
  714.  
  715.         //履歴の記憶
  716.         SaveHist();
  717.  
  718.         if (main.fxedit(1).ed("Get,ModFlag")=="true") {
  719.             a = confirm(3,"ファイルは変更されています。保存しますか?");
  720.             if (a == "Cancel") {
  721.                 a=false;
  722.                 return;
  723.             }
  724.             if (a == "Yes") {
  725.                 if (main.fxedit(1).ed("Save")!="true") {
  726.                     a=false;
  727.                     return;
  728.                 }
  729.             }
  730.         }
  731.     }
  732.     a=true;
  733. }
  734. //アプリケーション終了
  735. function AllQuit()
  736. {
  737.     now_edit=false;
  738.     x.set(main.getwinlist());
  739.     x.topline();
  740.     while (x.take()=="true") {
  741.         a = main(x.line).caption;    //スコープの変更
  742.         if (editor=="on") {
  743.             if (main.fxedit(1).ed("Get,ModFlag")=="true") {
  744.                 now_edit=true;
  745.             }
  746.         }
  747.     }
  748.     if (now_edit=="true") {
  749.         a = confirm(4,"編集中のテキストがあります強制\r\n終了しますか?");
  750.         if (a == "No") {
  751.             a=false;
  752.             return;
  753.         }
  754.     }
  755.     end();
  756. }
  757. //タスクトレイイベント
  758. function OnTrayRBClick()
  759. {
  760.     main(EditWinList).popup.popup();
  761. }
  762. function OnTrayLBClick()
  763. {
  764.     main(EditWinList).popup.popup();
  765. }
  766. //----------------------------------------------------
  767. //LZHファイル内容表示ウィンドウ
  768. //----------------------------------------------------
  769. function Open_LZH()
  770. {
  771.     main.add();
  772.     main.taskbar=true;
  773.  
  774.     main.width="337";
  775.     main.height="345";
  776.  
  777.     main.listbox.add("17","38","294","154");    //ext object
  778.  
  779.     main.label.add("17","15","65","12");    //object
  780.     main.label.caption="ファイル一覧";
  781.  
  782.     main.btn.add("20","263","52","24");    //object
  783.     main.btn.caption="解凍";
  784.  
  785.     main.btn.add("75","263","52","24");    //object
  786.     main.btn.caption="削除";
  787.  
  788.     main.btn.add("130","263","52","24");    //object
  789.     main.btn.caption="編集";
  790.  
  791.     main.editbox.add("17","228","294","20");    //object
  792.  
  793.     main.label.add("27","211","79","12");    //object
  794.     main.label.caption="解凍先フォルダ";
  795.  
  796.     main.editbox.caption=str(sys.winpath,"\\デスクトップ");
  797.     main.deffunc.set(sys.getstring("LZH_FormEvent",deffunc.pos()));
  798.     main.move("center","/step=0");
  799.     main.visible="true";
  800.     main.setfocus();
  801.     base_fullname = arg(1);
  802.     base_path = file.path(arg(1));
  803.     base_name = file.name(arg(1));
  804.     main.caption=base_fullname;
  805.     y.set(base_fullname);
  806.     len = y.length();
  807.     x.readdir(arg(1),"*.*",true,true);
  808.     main.listbox.text="";
  809.     x.topline();
  810.     while (x.take()=="true") {
  811.         z.set(x.line);
  812.         main.listbox.additem(z.pos(len));
  813.     }
  814. }
  815.  
  816. //================================================
  817. //文字登録
  818. //================================================
  819. StringResource MenuString()
  820. {
  821. ファイル(&F)\新規(&N),NewEditWin();main.visible=true;
  822. ファイル(&F)\開く(&O),OpenFile();
  823. ファイル(&F)\上書き保存(&S),SaveFile();
  824. ファイル(&F)\名前をつけて保存(&A),SaveAs();
  825. ファイル(&F)\再読み込み(&R),Reopen();
  826. ファイル(&F)\-,-
  827. ファイル(&F)\選択部分をブラウザで表示(&P),ToHTML();
  828. ファイル(&F)\-,-
  829. ファイル(&F)\終了(&Q),AllQuit();
  830. 編集(&E)\元に戻す(&U),main.fxedit(1).ed("Undo");
  831. 編集(&E)\やり直し(&R),main.fxedit(1).ed("Redo");
  832. 編集(&E)\-,-
  833. 編集(&E)\切り取り(&T),main.fxedit(1).ed("{OneOn}{OFF}{Copy}{Del}{ON}{OneOff}");
  834. 編集(&E)\コピー,main.fxedit(1).ed("Copy");
  835. 編集(&E)\貼り付け(&P),main.fxedit(1).ed("Paste");
  836. 編集(&E)\削除(&D),main.fxedit(1).ed("Del");
  837. 編集(&E)\-,-
  838. 編集(&E)\全て選択,main.fxedit(1).ed("SelAll");
  839. 編集(&E)\-,-
  840. 編集(&E)\マーク解除(&X),main.fxedit(1).ed("Clear Mark");
  841. 検索(&S)\検索文字列設定(&F)\tCtrl+F,ShowFindWin();
  842. 検索(&S)\検索文字列の取込(&L)\tCtrl+L,main.fxedit(1).ed("SetFind");
  843. 検索(&S)\上検索(&P)\tCtrl+↑,main.fxedit(1).ed("FindUp");
  844. 検索(&S)\下検索(&N)\tCtrl+↓,main.fxedit(1).ed("FindDown");
  845. 表示(&V)\クリッカブルURL(&U),ChgClick();
  846. 表示(&V)\行番号表示(&N),ShowNumClick();
  847. 表示(&V)\マーク行色分表示(&M),ShowMkColorClick();
  848. 表示(&V)\-,-
  849. 表示(&V)\編集中ウィンドウ一覧(&R),ShowEditWinList();
  850. 表示(&V)\アウトライン表示(&O),ShowOutlineList();
  851. ヘルプ(&H)\オンラインヘルプ/最新版の確認(&O),shell("http://free01.plala.or.jp/~yfuji/Lthand/Lthand05.htm");
  852. }
  853.  
  854. StringResource PopupString()
  855. {
  856. 切り取り(&T),main.fxedit(1).ed("{OneOn}{OFF}{Copy}{Del}{ON}{OneOff}");
  857. コピー(&C),main.fxedit(1).ed("Copy");
  858. 貼り付け(&P),main.fxedit(1).ed("Paste");
  859. -,-
  860. 全て選択(&A),main.fxedit(1).ed("SelAll");
  861. -,-
  862. 検索文字列の取込(&L)\tCtrl+L,main.fxedit(1).ed("SetFind");
  863. 上検索(&P)\tCtrl+↑,main.fxedit(1).ed("FindUp");
  864. 下検索(&N)\tCtrl+↓,main.fxedit(1).ed("FindDown");
  865. }
  866.  
  867. StringResource ToolbarString()
  868. {
  869. <c6>,新規作成,NewEditWin();main.visible=true;
  870. <c7>,開く,OpenFile();
  871. <c8>,保存,SaveFile();
  872. -,,
  873. <c0>,切り取り,main.fxedit(1).ed("{OneOn}{OFF}{Copy}{Del}{ON}{OneOff}");
  874. <c1>,コピー,main.fxedit(1).ed("Copy");
  875. <c2>,貼り付け,main.fxedit(1).ed("Paste");
  876. -,,
  877. <c3>,元に戻す,main.fxedit(1).ed("Undo");
  878. <c4>,やり直し,main.fxedit(1).ed("Redo");
  879. -,,
  880. <r0:icon4>,検索設定,ShowFindWin();
  881. <c22>,マーク下検索,if(main.fxedit(1).ed("MarkDown")!=true) {main.fxedit(1).ed("FileTop")};
  882. }
  883. //<c10>,設定,-
  884.  
  885.  
  886. StringResource CPPKeyWord()
  887. {
  888. #define
  889. #else
  890. #endif
  891. #if
  892. #ifdef
  893. #ifndef
  894. #include
  895. #pragma
  896. #undef
  897. __declspec
  898. auto
  899. break
  900. bool
  901. BOOL
  902. true
  903. TRUE
  904. false
  905. FALSE
  906. case
  907. catch
  908. char
  909. class
  910. const
  911. continue
  912. default
  913. define
  914. delete
  915. do
  916. double
  917. else
  918. endif
  919. enum
  920. extern
  921. float
  922. for
  923. friend
  924. goto
  925. if
  926. ifdef
  927. include
  928. inline
  929. int
  930. line
  931. long
  932. new
  933. private
  934. protected
  935. public
  936. return
  937. short
  938. signed
  939. sizeof
  940. static
  941. struct
  942. switch
  943. template
  944. this
  945. throw
  946. try
  947. typedef
  948. unsigned
  949. virtual
  950. void
  951. while
  952. }
  953.  
  954. StringResource LZH_FormEvent()
  955. {
  956. function OnBtnClick1()
  957. {
  958.     if (main.listbox(1).selected=="") {
  959.         alert("ファイルを選択してください");
  960.         return;
  961.     }
  962.     x.set(main.listbox.selected);
  963.     x.topline();
  964.     y.set(main.editbox.caption);
  965.     y.trimr("*.\\");
  966.     y.add("\\");
  967.     y.add(base_name);
  968.     while (x.take()=="true") {
  969.         f = str(base_fullname, x.line);
  970.         z.set(x.line);
  971.         z.replace("\\","\\r\\n");
  972.         if (file.copy(f, str(y.pos(),"\\",z(2)))!="true") {
  973.             alert("コピーできませんでした");
  974.             return;
  975.         }
  976.     }
  977.     shell(y.pos());
  978. }
  979.  
  980. function OnBtnClick2()
  981. {
  982.     if (main.listbox(1).selected=="") {
  983.         alert("ファイルを選択してください");
  984.         return;
  985.     }
  986.     x.set(main.listbox.selected);
  987.     if (confirm(x.pos(),"を削除しますか?") != "Yes") {
  988.         return;
  989.     }
  990.     x.topline();
  991.     y.clear();
  992.     while (x.take()=="true") {
  993.         f = str(base_fullname, x.line);
  994.         if (file.delete(f)!="true") {
  995.             y.addline(f);
  996.         }
  997.     }
  998.     if (y.length() > 0) {
  999.         alert(y.pos(),"は削除できませんでした");
  1000.     }
  1001.     OnDrop(base_fullname);
  1002. }
  1003.  
  1004. function OnBtnClick3()
  1005. {
  1006.     if (main.listbox(1).selected=="") {
  1007.         alert("ファイルを選択してください");
  1008.         return;
  1009.     }
  1010.     x.set(main.listbox.selected);
  1011.     x.topline();
  1012.     if (x.take()=="true") {
  1013.         OpenFile(str(base_fullname, x.line));
  1014.         return;
  1015.     }
  1016. }
  1017. }
  1018.  
  1019. StringResource FindWinFunction()
  1020. {
  1021. function OnBtnClick1()
  1022. {
  1023.     SetFindWindow();
  1024.     FindUp();
  1025. }
  1026. function OnBtnClick2()
  1027. {
  1028.     SetFindWindow();
  1029.     FindDown();
  1030. }
  1031. function OnComboBoxEnter1()
  1032. {
  1033.     SetFindWindow();
  1034.     FindDown();
  1035. }
  1036. function OnBtnClick3()
  1037. {
  1038.     FindStr=main(EditWindow).fxedit(1).ed("SetFind");
  1039.     main(FindWindow).combobox(1).text=FindStr;
  1040.     SetFindWindow();
  1041. }
  1042. function OnFormCloseQuery()
  1043. {
  1044.     main.visible=false;
  1045. }
  1046.  
  1047. }
  1048.  
  1049. StringResource EditWinListFunction()
  1050. {
  1051.  
  1052. function OnListDblClick1(){
  1053.     x.set(main.listbox(1).selected);
  1054.     a = x.search(" ");
  1055.     x.length=a;
  1056.     a = x.pos();
  1057.     main(a).visible=true;
  1058.     main.setfocus();
  1059. }
  1060.  
  1061. function OnFormCloseQuery(){
  1062.     main.visible=false;
  1063. }
  1064. function OnSetFocus(){
  1065.     RedrawEditWinList();
  1066. }
  1067.  
  1068. }
  1069.  
  1070. // ======== FXLコードの注意点 ========================================
  1071. //
  1072. //  以下の点は特に間違えやすいので注意してください
  1073. //
  1074. //  1. while文、if文は必ず{}でくくること(省略不可)
  1075. //
  1076. //  2. FXLのスコープ概念はわかりにくいので注意!
  1077. //
  1078. //     x,y,zオブジェクト等と、大文字で始まる変数などはグローバル
  1079. //     小文字で始まる変数はローカル
  1080. //     ローカルとは各ウインドウ単位(mainオブジェクト毎)に存在し、
  1081. //     main(???).オブジェクト名
  1082. //     というように、メインオブジェクトを指定するか
  1083. //     main.add();
  1084. //     でメインオブジェクトを生成した時点でスコープが切り替わる
  1085. //
  1086. //  3. イベント発生時には、メインオブジェクト以下のオブジェクトID指定を
  1087. //     忘れずに。(メインオブジェクト以外は自動設定されないため)
  1088. //
  1089. //     例
  1090. //     1. NG 例
  1091. //     OnFormClose()
  1092. //     {
  1093. //         main.listbox.items="aaaa";
  1094. //     }
  1095. //     2. OK 例
  1096. //     OnFormClose()
  1097. //     {
  1098. //         main.listbox(1).items="aaaa";
  1099. //     }
  1100. //
  1101. // ===================================================================
  1102.  
  1103.  
  1104.