OSDN Git Service

MainForm.pas <1.181
authorE01 <e01@users.sourceforge.jp>
Sun, 21 Mar 2004 06:02:50 +0000 (06:02 +0000)
committerE01 <e01@users.sourceforge.jp>
Sun, 21 Mar 2004 06:02:50 +0000 (06:02 +0000)
MainForm.dfm <1.93
SettingForm.pas <1.62
SettingForm.dfm <1.80
SstpBottle.dpr <1.43
BottleDef.pas <1.139
それぞれマージ

bottleclient/BottleDef.pas
bottleclient/MainForm.dfm
bottleclient/MainForm.pas
bottleclient/SettingForm.dfm
bottleclient/SettingForm.pas
bottleclient/SstpBottle.dpr

index 7ddbb64..aa5f4f5 100755 (executable)
@@ -7,7 +7,7 @@ unit BottleDef;
 interface
 
 uses Windows, IniFiles, BRegExp, Graphics, SysUtils, Forms, Dialogs, Classes,
-  ComCtrls, Contnrs, SsPlayTime;
+  ComCtrls, Contnrs, SsPlayTime, StrReplace;
 
 type
   TReturnKeyFunction = (kfYenN, kfReturn, kfYenNReturn, kfConstText);
@@ -96,6 +96,7 @@ type
     FBottleServer: String;
     FTabWidth: integer;
     FBrowserExeName: string;
+    FReplacePresets: TReplacePresets;
     //\82â\82³\82®\82ê\95ª
     FSendAction: boolean;
     FLogAction: boolean;
@@ -280,6 +281,8 @@ type
     property PlayTimeParams: TSsPlayTimeParams read FPlayTimeParams write SetPlayTimeParams;
     //URL\83I\81[\83v\83\93\8e\9e\82É\8eg\82¤\83u\83\89\83E\83U\82Ì\8eÀ\8ds\83t\83@\83C\83\8b\96¼
     property BrowserExeName: string read FBrowserExeName write SetBrowserExeName;
+    //\8e©\93®\92u\8a·\83v\83\8a\83Z\83b\83g
+    property ReplacePresets: TReplacePresets read FReplacePresets;
     //\82â\82³\82®\82ê\95ª
     property SendAction: boolean read FSendAction write SetSendACtion;
     property LogAction: boolean read FLogAction write SetLogAction;
@@ -345,7 +348,6 @@ type
   TScriptTransOptions = set of TScriptTransOption;
 
 var
-  RegExp: TBRegExp;
   Pref: TBottlePrefs;
   ChannelList: TChannelList; //\83`\83\83\83\93\83l\83\8b\83\8a\83X\83g\82ð\95Û\8e\9d\82·\82é
   //JoinChannels: TStringList; // \8c»\8dÝ\8eQ\89Á\82µ\82Ä\82¢\82é\83`\83\83\83\93\83l\83\8b
@@ -386,14 +388,9 @@ function SafeFileName(From: String; ChangePathDelimiters: boolean = true): Strin
 function ComponentToString(Component: TComponent): string;
 function StringToComponent(Value: string): TComponent;
 
-// m//k \82È\82Ç\82Å\88Í\82Ü\82ê\82Ä\82¢\82È\82¢\90³\8bK\95\\8c»\82ð\90³\82µ\82­\88Í\82ñ\82Å
-// BRegExp\83G\83\89\81[\82Ì\94­\90\82ð\96h\82®
-function SafeAndCheckRegExp(var ioStrExpression: String): String;
-
-// \8fã\82Ì\8aÖ\90\94\82Å\8e©\93®\93I\82É\88Í\82ñ\82¾\95\8e\9a\97ñ\82ð\82»\82Ì\82Ü\82Ü\95\\8e¦\82·\82é\82Æ\95Ï\82È\82Ì\82Å
-// \8dÄ\93x\83t\83B\83\8b\83^\82µ\82Ä\8en\96\96\82·\82é\82½\82ß\82Ì\8aÖ\90\94
-function FilterAutoRegExp(const Expression: String): String;
+function ReplacePresetFileName: string;
 
+procedure BuildShortCutList(Target: TStrings);
 
 implementation
 
@@ -510,36 +507,34 @@ begin
   end;
 end;
 
-//\90³\8bK\95\\8c»\83`\83F\83b\83N\82Æ\95Ï\8dX
-//\96ß\82è\92l\81\81\83G\83\89\81[\83\81\83b\83Z\81[\83W\81i\90³\8fí\8e\9e\82Í\8bó\81j
-function SafeAndCheckRegExp(var ioStrExpression: String): String;
+function ReplacePresetFileName: string;
 begin
-  Result := '';
-  try
-    RegExp.Match(ioStrExpression,' ');
-  except
-    on EBRegExpError do begin
-      ioStrExpression := 'm'#255 + ioStrExpression + #255'k';
-      try
-        RegExp.Match(ioStrExpression,' ');
-      except
-        on E: EBRegExpError do
-          Result := E.Message;
-      end;
-    end;
-  end;
+  Result := ExtractFilePath(Application.ExeName) + 'replace.txt';
 end;
 
-//\8e©\93®\91}\93ü\82µ\82½\90³\8bK\95\\8c»\8ew\8e¦ m[0xFF][0xFF]k \82Ì\8f\9c\8b\8e
-function FilterAutoRegExp(const Expression: String): String;
+procedure BuildShortCutList(Target: TStrings);
+var
+  c: Char;
+  i: Integer;
 begin
-  Result := Expression;
-  try
-    if RegExp.Match('m/m'#255'(.*)'#255'k/k',Result) then begin
-      Result := Copy(Result, 3, Length(Result) - 4);
+  // \83V\83\87\81[\83g\83J\83b\83g\83\8a\83X\83g\82Ì\91I\91ð\8e\88\82ð\8dì\90¬
+  with Target do
+  begin
+    BeginUpdate;
+    try
+      for c := 'A' to 'Z' do
+        Add('Ctrl+' + c);
+      for c := 'A' to 'Z' do
+        Add('Shift+Ctrl+' + c);
+      for c := 'A' to 'Z' do
+        Add('Alt+Ctrl+' + c);
+      for i := 1 to 12 do
+        Add('F' + IntToStr(i));
+      for i := 1 to 12 do
+        Add('Shift+F' + IntToStr(i));
+    finally
+      EndUpdate;
     end;
-  except
-    on EBRegExpError do ; //NOOP
   end;
 end;
 
@@ -711,6 +706,24 @@ begin
 
     //URL\82ð\8aJ\82­\83u\83\89\83E\83U
     FBrowserExeName:= FIni.ReadString('System', 'BrowserExeName', '');
+    //\8e©\93®\92u\8a·\83v\83\8a\83Z\83b\83g
+    if FileExists(ReplacePresetFileName) then
+    begin
+      try
+        Strs := TStringList.Create;
+        try
+          Strs.LoadFromFile(ReplacePresetFileName);
+          FReplacePresets := StringToComponent(Strs.Text) as TReplacePresets;
+        finally
+          Strs.Free;
+        end;
+      except
+        ShowMessage('Replace.txt\93Ç\82Ý\8d\9e\82Ý\92\86\82Ì\83G\83\89\81[\81B'#13#10+
+          '\83t\83@\83C\83\8b\82ª\94j\91¹\82µ\82Ä\82¢\82é\8fê\8d\87\82Í\81A\82±\82Ì\83t\83@\83C\83\8b\82ð\8dí\8f\9c\82µ\82Ä\8dÄ\8bN\93®\82µ\82Ä\82­\82¾\82³\82¢');
+        raise;
+      end;
+    end else
+      FReplacePresets := TReplacePresets.Create(nil);
     //\82â\82³\82®\82ê\95ª
     SendAction := FIni2.ReadBool('System', 'SendAction', false);
     LogAction := FIni2.ReadBool('System', 'LogAction', false);
@@ -723,8 +736,11 @@ begin
     GhostChList.CommaText := FIni2.ReadString('System', 'GhostChList', '');
 
   except
-    ShowMessage('INI\83t\83@\83C\83\8b\93Ç\82Ý\8d\9e\82Ý\83G\83\89\81[');
-    Application.Terminate;
+    on E: Exception do
+    begin
+      ShowMessage('\90Ý\92è\93Ç\82Ý\8d\9e\82Ý\83G\83\89\81['#13#10 + E.Message);
+      Application.Terminate;
+    end;
   end;
 end;
 
@@ -732,6 +748,8 @@ destructor TBottlePrefs.Destroy;
 begin
   inherited;
   SaveSettings;
+  if FReplacePresets <> nil then
+    FReplacePresets.Free;
   if FIni <> nil then
     FIni.Free;
   if FIni2 <> nil then
@@ -1057,6 +1075,15 @@ begin
   FIni.WriteInteger('System', 'SurfacePreviewOnScriptPointPosition', Ord(SurfacePreviewOnScriptPointPosition));
 
   FIni.WriteString('System', 'BrowserExeName', FBrowserExeName);
+
+  Strs := TStringList.Create;
+  try
+    Strs.Text := ComponentToString(FReplacePresets);
+    Strs.SaveToFile(ReplacePresetFileName);
+  finally
+    Strs.Free;
+  end;  
+
   //\82â\82³\82®\82ê\95ª
   FIni2.WriteBool('System', 'SendAction', SendAction);
   FIni2.WriteBool('System', 'LogAction', LogAction);
@@ -1316,7 +1343,6 @@ ChannelList := TChannelList.Create;
 finalization
 
 Pref.Free;
-RegExp.Free;
 ChannelList.Clear;
 //JoinChannels.Free;
 ChannelList.Free;
index ed990e8..99e4d8d 100755 (executable)
@@ -27,7 +27,7 @@ object frmSender: TfrmSender
   TextHeight = 12
   object StatusBar: TStatusBar
     Left = 0
-    Top = 241
+    Top = 233
     Width = 526
     Height = 19
     Panels = <
@@ -170,14 +170,14 @@ object frmSender: TfrmSender
     Left = 0
     Top = 46
     Width = 526
-    Height = 170
+    Height = 162
     Align = alClient
     BevelOuter = bvNone
     BorderWidth = 2
     TabOrder = 4
     object tabChannel: TTabControl
       Left = 2
-      Top = 142
+      Top = 134
       Width = 522
       Height = 26
       Align = alBottom
@@ -201,7 +201,7 @@ object frmSender: TfrmSender
       Left = 2
       Top = 2
       Width = 522
-      Height = 140
+      Height = 132
       Cursor = crIBeam
       Align = alClient
       Caret.AutoCursor = True
@@ -338,7 +338,7 @@ object frmSender: TfrmSender
   end
   object pnlPanel: TPanel
     Left = 0
-    Top = 216
+    Top = 208
     Width = 526
     Height = 25
     Align = alBottom
@@ -433,7 +433,6 @@ object frmSender: TfrmSender
       end
       object mnExit: TMenuItem
         Action = actExitClient
-        Hint = 'Yasagure Client'#12398#32066#20102
       end
     end
     object mnEdit: TMenuItem
@@ -471,6 +470,9 @@ object frmSender: TfrmSender
       object mnReplace: TMenuItem
         Action = actReplace
       end
+      object mnPresetReplaceRoot: TMenuItem
+        Caption = #12503#12522#12475#12483#12488#32622#25563'(&S)'
+      end
       object N10: TMenuItem
         Caption = '-'
       end
index b5e6055..33a22a6 100755 (executable)
@@ -19,8 +19,7 @@ uses
   ScriptConsts, DateUtils, BottleChainRule, BottleChainEvent,
   SakuraSeekerInstance, HEditor, HTSearch, heClasses, heFountain,
   SakuraScriptFountain, SppList, SurfacePreview, XDOM_2_3_J3, SsPlayTime,
-  RegexUtils, StrReplace, StrReplaceDialog;
-//  IdAntiFreezeBase;
+  RegexUtils, StrReplace, StrReplaceDialog, ReplacePresetEditor;
 
 type
   TSurfacePreviewType = (spHint, spEditor);
@@ -176,6 +175,7 @@ type
     mnRedo: TMenuItem;
     N9: TMenuItem;
     ScriptBackUp: TTimer;
+    mnPresetReplaceRoot: TMenuItem;
     procedure actConfirmExecute(Sender: TObject);
     procedure FormCreate(Sender: TObject);
     procedure FormDestroy(Sender: TObject);
@@ -324,6 +324,7 @@ type
 //    procedure SetAdded(const Value: boolean);
     procedure mnConstClick(Sender: TObject);
     procedure mnConstGroupClick(Sender: TObject);
+    procedure mnPresetReplaceClick(Sender: TObject);
 //    property Added: boolean read FAdded write SetAdded;
     property Sleeping: boolean read FSleeping write SetSleeping;
 //    property StatusText: String read FStatusText write SetStatusText;
@@ -343,6 +344,7 @@ type
     procedure UpdateIfGhostBox;
     function BuildMenuConditionCheck(const IfGhost, Ghost: String): boolean;
     procedure BuildMenu(Root: TMenuItem; Simple: boolean);
+    procedure BuildReplaceMenu(Root: TMenuItem);
     procedure PlaySound(const FileName: String);
     //TBottleSstp\8aÖ\8cW\83C\83x\83\93\83g\83n\83\93\83h\83\89
     procedure BottleSstpResendCountChange(Sender: TObject);
@@ -550,6 +552,7 @@ begin
   FSppDir := ExtractFileDir(Application.ExeName)+'\spp';
   Spps.LoadFromDirectory(FSppDir);
   ConstructMenu(false);
+  BuildReplaceMenu(mnPresetReplaceRoot);
 
   Str := TStringList.Create;
   try
@@ -561,7 +564,7 @@ begin
         Str.LoadFromFile(ExtractFilePath(Application.ExeName)+'defrule.txt');
         BottleChainRuleList := StringToComponent(Str.Text) as TBottleChainRuleList;
       except
-        Showmessage('defrule.txt\93Ç\82Ý\8d\9e\82Ý\92\86\82É\92v\96½\93I\83G\83\89\81[\82ª\94­\90\82µ\82Ü\82µ\82½\81Bdefrule.txt\82ð\8dÄ\83C\83\93\83X\83g\81[\83\8b\82µ\82Ä\82­\82¾\82³\82¢\81B');
+        ShowMessage('defrule.txt\93Ç\82Ý\8d\9e\82Ý\92\86\82É\92v\96½\93I\83G\83\89\81[\82ª\94­\90\82µ\82Ü\82µ\82½\81Bdefrule.txt\82ð\8dÄ\83C\83\93\83X\83g\81[\83\8b\82µ\82Ä\82­\82¾\82³\82¢\81B');
         Application.Terminate;
         Application.ProcessMessages;
         Exit;
@@ -1551,6 +1554,7 @@ begin
     frmSetting := nil;
   end;
   //
+  BuildReplaceMenu(mnPresetReplaceRoot);
   UpdateLayout;
   tabChannel.Repaint;
   frmLog.UpdateWindow;
@@ -2501,12 +2505,9 @@ begin
       if ScriptConstList.GetMenuByID(Root.Items[i].Tag).IfGhost <> '' then
         Root.Items[i].Free;
     end;
-  end else begin
+  end else
     // \91S\95\94\8dí\8f\9c
-    for i := Root.Count-1 downto 0 do begin
-      Root.Items[i].Free;
-    end;
-  end;
+    Root.Clear;
 
   count := -1;
   for i := 0 to ScriptConstList.Count-1 do begin
@@ -2521,11 +2522,14 @@ begin
         end;
 
       Menu1 := TMenuItem.Create(Root);
-      Menu1.Caption := ScriptConstList[i][j].Caption;
-      Menu1.Hint    := ScriptConstList[i][j].Caption;
-      Menu1.AutoHotkeys := maManual;
-      Menu1.Tag := ScriptConstList[i][j].ID;
-      Menu1.OnClick := mnConstGroupClick;
+      with Menu1 do
+      begin
+        Caption := ScriptConstList[i][j].Caption;
+        Hint    := ScriptConstList[i][j].Caption;
+        AutoHotkeys := maManual;
+        Tag := ScriptConstList[i][j].ID;
+        OnClick := mnConstGroupClick;
+      end;
 
       if not Simple then begin
         Root.Add(Menu1);
@@ -3015,15 +3019,13 @@ procedure TfrmSender.actReplaceExecute(Sender: TObject);
 var
   Form: TfrmStrReplaceDialog;
   Lines: String;
-  Pair: TReplacePairRec;
   Options: TReplaceFlags;
 begin
   Application.CreateForm(TfrmStrReplaceDialog, Form);
   try
     if Form.Execute then
     begin
-      Pair := Form.PairRec;
-      with Pair do
+      with Form.Pair do
       begin
         Lines := memScript.Lines.Text;
         Options := [rfReplaceAll];
@@ -3455,4 +3457,45 @@ begin
 end;
 
 
+procedure TfrmSender.BuildReplaceMenu(Root: TMenuItem);
+var
+  i: integer;
+  Presets: TReplacePresetCollection;
+  NewItem: TMenuItem;
+begin
+  Root.Clear;
+  Presets := Pref.ReplacePresets.Presets;
+  for i := 0 to Presets.Count-1 do
+  begin
+    NewItem := TMenuItem.Create(Root);
+    with NewItem do
+    begin
+      Caption := Presets[i].Title;
+      ShortCut := Presets[i].ShortCut;
+      AutoHotkeys := maManual;
+      Hint := Presets[i].Pairs.StringExpression;
+      Tag := i;
+      OnClick := mnPresetReplaceClick;
+    end;
+    Root.Add(NewItem);
+  end;
+  Root.Enabled := Presets.Count > 0;
+end;
+
+procedure TfrmSender.mnPresetReplaceClick(Sender: TObject);
+var
+  Preset: TReplacePreset;
+  Lines, New: string;
+begin
+  // \83v\83\8a\83Z\83b\83g\92u\8a·\82ð\8eÀ\8ds
+  Preset := Pref.ReplacePresets.Presets[(Sender as TMenuItem).Tag];
+  Lines := memScript.Lines.Text;
+  New := Preset.Pairs.ExecuteReplace(Lines);
+  if New <> Lines then
+  begin
+    memScript.SelectAll;
+    memScript.SelText := New;
+  end;
+end;
+
 end.
index f6d9087..89901b3 100755 (executable)
@@ -36,7 +36,7 @@ object frmSetting: TfrmSetting
     Top = 32
     Width = 440
     Height = 291
-    ActivePage = tstYclientSet2
+    ActivePage = tstPresetReplace
     Anchors = [akLeft, akTop, akRight, akBottom]
     MultiLine = True
     TabOrder = 0
@@ -443,40 +443,25 @@ object frmSetting: TfrmSetting
       inline frmRuleList: TfrmBottleChainList
         Left = 4
         Top = 7
-        Width = 421
-        Height = 260
+        Width = 423
+        Height = 265
+        TabOrder = 0
+      end
+    end
+    object tstPresetReplace: TTabSheet
+      Caption = #12503#12522#12475#12483#12488#32622#25563': '#12513#12491#12517#12540#12363#12425#21628#12403#20986#12379#12427#25991#23383#21015#32622#25563#12398#35373#23450
+      ImageIndex = 10
+      TabVisible = False
+      OnShow = tstPresetReplaceShow
+      inline ReplacePresetList: TfrmReplacePresetList
+        Left = 4
+        Top = 7
+        Width = 423
+        Height = 265
         TabOrder = 0
         DesignSize = (
-          421
-          260)
-        inherited lstRules: TCheckListBox
-          Width = 345
-        end
-        inherited btnDelete: TButton
-          Left = 350
-          Hint = #12523#12540#12523#12434#21066#38500
-        end
-        inherited btnAdd: TButton
-          Left = 350
-          Hint = #26032#12375#12356#12523#12540#12523#12434#36861#21152
-          Caption = #36861#21152'(&I)'
-        end
-        inherited btnDown: TButton
-          Left = 350
-          Hint = #19979#12395#31227#21205
-          Caption = #19979#12408'(&O)'
-        end
-        inherited btnUp: TButton
-          Left = 350
-          Hint = #19978#12395#31227#21205
-        end
-        inherited btnEdit: TButton
-          Left = 350
-          Hint = #29694#22312#12398#12523#12540#12523#12434#32232#38598
-        end
-        inherited btnDuplicate: TButton
-          Left = 350
-        end
+          423
+          265)
       end
     end
     object tstPlayTime: TTabSheet
index 9a46a97..32feec5 100755 (executable)
@@ -12,7 +12,7 @@ uses
   ComCtrls, StdCtrls, ExtCtrls, BottleDef, Spin,
   CPCConfigTreeView, ColorSettingFrame, BottleChainListFrame, SakuraSeekerInstance,
   ImgList, StrListEditor, SppList, Plugins, Clipbrd, SsPlayTime, StrUtils,
-  SpecialCharEditor, GhostChEditor;
+  SpecialCharEditor, ReplacePresetListFrame, GhostChEditor;
 
 type
   TfrmSetting = class(TForm)
@@ -105,6 +105,8 @@ type
     edtBrowserName: TEdit;
     BrowserLocateOpenDialog: TOpenDialog;
     btnBrowserLocate: TButton;
+    tstPresetReplace: TTabSheet;
+    ReplacePresetList: TfrmReplacePresetList;
     tstYclientSet: TTabSheet;
     cbxSendAction: TCheckBox;
     cbxLogAction: TCheckBox;
@@ -146,6 +148,7 @@ type
     procedure spnTabWidthChange(Sender: TObject);
     procedure cbxAutoTabWidthClick(Sender: TObject);
     procedure btnBrowserLocateClick(Sender: TObject);
+    procedure tstPresetReplaceShow(Sender: TObject);
     procedure btnGhostChDeleteClick(Sender: TObject);
     procedure btnGhostChAddClick(Sender: TObject);
   private
@@ -801,6 +804,11 @@ begin
   end;
 end;
 
+procedure TfrmSetting.tstPresetReplaceShow(Sender: TObject);
+begin
+  ReplacePresetList.UpdateControls;
+end;
+
 procedure TfrmSetting.btnGhostChDeleteClick(Sender: TObject);
 var
   i: integer;
index a474ee8..26c1a7c 100755 (executable)
@@ -65,6 +65,7 @@ uses
   StrReplaceFrame in 'StrReplaceFrame.pas' {frmStrReplaceFrame: TFrame},
   StrReplaceDialog in 'StrReplaceDialog.pas' {frmStrReplaceDialog},
   ReplacePresetEditor in 'ReplacePresetEditor.pas' {frmReplacePresetEditor: TFrame},
+  ReplacePresetListFrame in 'ReplacePresetListFrame.pas' {frmReplacePresetList: TFrame},
   GhostChEditor in 'GhostChEditor.pas' {frmGhostChEditor};
 
 // \8c^\95t\82«\92è\90\94\82ð\95Ï\8dX\82Å\82«\82é\82æ\82¤\82É\82·\82é\83R\83\93\83p\83C\83\89\83I\83v\83V\83\87\83\93