interface
uses Windows, IniFiles, BRegExp, Graphics, SysUtils, Forms, Dialogs, Classes,
- ComCtrls, Contnrs, SsPlayTime;
+ ComCtrls, Contnrs, SsPlayTime, StrReplace;
type
TReturnKeyFunction = (kfYenN, kfReturn, kfYenNReturn, kfConstText);
FBottleServer: String;
FTabWidth: integer;
FBrowserExeName: string;
+ FReplacePresets: TReplacePresets;
//\82â\82³\82®\82ê\95ª
FSendAction: boolean;
FLogAction: boolean;
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;
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
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
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;
//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);
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;
begin
inherited;
SaveSettings;
+ if FReplacePresets <> nil then
+ FReplacePresets.Free;
if FIni <> nil then
FIni.Free;
if FIni2 <> nil then
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);
finalization
Pref.Free;
-RegExp.Free;
ChannelList.Clear;
//JoinChannels.Free;
ChannelList.Free;
TextHeight = 12
object StatusBar: TStatusBar
Left = 0
- Top = 241
+ Top = 233
Width = 526
Height = 19
Panels = <
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
Left = 2
Top = 2
Width = 522
- Height = 140
+ Height = 132
Cursor = crIBeam
Align = alClient
Caret.AutoCursor = True
end
object pnlPanel: TPanel
Left = 0
- Top = 216
+ Top = 208
Width = 526
Height = 25
Align = alBottom
end
object mnExit: TMenuItem
Action = actExitClient
- Hint = 'Yasagure Client'#12398#32066#20102
end
end
object mnEdit: TMenuItem
object mnReplace: TMenuItem
Action = actReplace
end
+ object mnPresetReplaceRoot: TMenuItem
+ Caption = #12503#12522#12475#12483#12488#32622#25563'(&S)'
+ end
object N10: TMenuItem
Caption = '-'
end
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);
mnRedo: TMenuItem;
N9: TMenuItem;
ScriptBackUp: TTimer;
+ mnPresetReplaceRoot: TMenuItem;
procedure actConfirmExecute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
// 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;
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);
FSppDir := ExtractFileDir(Application.ExeName)+'\spp';
Spps.LoadFromDirectory(FSppDir);
ConstructMenu(false);
+ BuildReplaceMenu(mnPresetReplaceRoot);
Str := TStringList.Create;
try
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;
frmSetting := nil;
end;
//
+ BuildReplaceMenu(mnPresetReplaceRoot);
UpdateLayout;
tabChannel.Repaint;
frmLog.UpdateWindow;
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
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);
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];
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.
Top = 32
Width = 440
Height = 291
- ActivePage = tstYclientSet2
+ ActivePage = tstPresetReplace
Anchors = [akLeft, akTop, akRight, akBottom]
MultiLine = True
TabOrder = 0
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
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)
edtBrowserName: TEdit;
BrowserLocateOpenDialog: TOpenDialog;
btnBrowserLocate: TButton;
+ tstPresetReplace: TTabSheet;
+ ReplacePresetList: TfrmReplacePresetList;
tstYclientSet: TTabSheet;
cbxSendAction: TCheckBox;
cbxLogAction: TCheckBox;
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
end;
end;
+procedure TfrmSetting.tstPresetReplaceShow(Sender: TObject);
+begin
+ ReplacePresetList.UpdateControls;
+end;
+
procedure TfrmSetting.btnGhostChDeleteClick(Sender: TObject);
var
i: integer;
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