object frmBottleChainList: TfrmBottleChainList
Left = 0
Top = 0
- Width = 362
- Height = 260
+ Width = 423
+ Height = 265
TabOrder = 0
DesignSize = (
- 362
- 260)
+ 423
+ 265)
object lstRules: TCheckListBox
Left = 0
Top = 0
- Width = 289
- Height = 260
+ Width = 351
+ Height = 265
OnClickCheck = lstRulesClickCheck
Align = alLeft
Anchors = [akLeft, akTop, akRight, akBottom]
OnMeasureItem = lstRulesMeasureItem
end
object btnDelete: TButton
- Left = 294
- Top = 200
+ Left = 356
+ Top = 205
Width = 65
Height = 25
+ Hint = #12523#12540#12523#12434#21066#38500
Anchors = [akRight, akBottom]
Caption = #21066#38500'(&D)'
TabOrder = 5
OnClick = btnDeleteClick
end
object btnAdd: TButton
- Left = 294
- Top = 232
+ Left = 356
+ Top = 235
Width = 65
Height = 25
+ Hint = #26032#12375#12356#12523#12540#12523#12434#36861#21152
Anchors = [akRight, akBottom]
Caption = #36861#21152'(&A)'
TabOrder = 6
OnClick = btnAddClick
end
object btnDown: TButton
- Left = 294
- Top = 96
- Width = 67
+ Left = 356
+ Top = 101
+ Width = 65
Height = 25
+ Hint = #19979#12395#31227#21205
Anchors = [akRight, akBottom]
Caption = #19979#12408'(&D)'
TabOrder = 2
OnClick = btnDownClick
end
object btnUp: TButton
- Left = 294
- Top = 64
- Width = 67
+ Left = 356
+ Top = 69
+ Width = 65
Height = 25
+ Hint = #12523#12540#12523#12434#19978#12395#31227#21205
Anchors = [akRight, akBottom]
Caption = #19978#12408'(&U)'
TabOrder = 1
OnClick = btnUpClick
end
object btnEdit: TButton
- Left = 294
- Top = 136
+ Left = 356
+ Top = 141
Width = 65
Height = 25
+ Hint = #29694#22312#12398#12523#12540#12523#12434#32232#38598
Anchors = [akRight, akBottom]
Caption = #32232#38598'(&E)'
TabOrder = 3
OnClick = EditRule
end
object btnDuplicate: TButton
- Left = 294
- Top = 168
+ Left = 356
+ Top = 173
Width = 65
Height = 25
- Hint = #12523#12540#12523#12434#35079#35069#12375#12414#12377
+ Hint = #29694#22312#12398#12523#12540#12523#12434#35079#35069
Anchors = [akRight, akBottom]
Caption = #12467#12500#12540'(&C)'
TabOrder = 4
end;
procedure TfrmConstEditor.FormCreate(Sender: TObject);
-var c: char;
- i: integer;
begin
if Application.Terminated then Exit;
//\83\81\83j\83\85\81[\8dì\90¬
- for c := 'A' to 'Z' do begin
- cbxConstShortCut.Items.Add('Ctrl+' + c);
- end;
- for c := 'A' to 'Z' do begin
- cbxConstShortCut.Items.Add('Shift+Ctrl+' + c);
- end;
- for c := 'A' to 'Z' do begin
- cbxConstShortCut.Items.Add('Alt+Ctrl+' + c);
- end;
- for i := 1 to 12 do begin
- cbxConstShortCut.Items.Add('F' + IntToStr(i));
- end;
- for i := 1 to 12 do begin
- cbxConstShortCut.Items.Add('Shift+F' + IntToStr(i));
- end;
+ BuildShortCutList(cbxConstShortCut.Items);
tvwConst.DoubleBuffered := true;
end;
TextHeight = 12
object StatusBar: TStatusBar
Left = 0
- Top = 233
+ Top = 241
Width = 526
Height = 19
Panels = <
Left = 0
Top = 46
Width = 526
- Height = 162
+ Height = 170
Align = alClient
BevelOuter = bvNone
BorderWidth = 2
TabOrder = 4
object tabChannel: TTabControl
Left = 2
- Top = 134
+ Top = 142
Width = 522
Height = 26
Align = alBottom
Left = 2
Top = 2
Width = 522
- Height = 132
+ Height = 140
Cursor = crIBeam
Align = alClient
Caret.AutoCursor = True
end
object pnlPanel: TPanel
Left = 0
- Top = 208
+ Top = 216
Width = 526
Height = 25
Align = alBottom
object actExitClient: TAction
Category = #12501#12449#12452#12523
Caption = 'Client'#32066#20102'(&X)'
- Hint = 'SSTP Bottle Client'#12398#32066#20102
+ Hint = 'Yasagure Client'#12398#32066#20102
ImageIndex = 14
OnExecute = actExitClientExecute
end
object frmReplacePresetEditor: TfrmReplacePresetEditor
- Left = 0
- Top = 0
- Width = 377
- Height = 274
- TabOrder = 0
- object tvwPresets: TTreeView
+ Left = 511
+ Top = 373
+ AutoSize = True
+ BorderStyle = bsDialog
+ Caption = #25991#23383#21015#12398#32622#25563#12503#12522#12475#12483#12488
+ ClientHeight = 391
+ ClientWidth = 377
+ Color = clBtnFace
+ Font.Charset = SHIFTJIS_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -12
+ Font.Name = #65325#65331' '#65328#12468#12471#12483#12463
+ Font.Style = []
+ OldCreateOrder = True
+ Position = poDesktopCenter
+ OnCreate = FormCreate
+ PixelsPerInch = 96
+ TextHeight = 12
+ object pnlPairsEditor: TPanel
Left = 0
Top = 0
Width = 377
- Height = 161
+ Height = 273
Align = alTop
- Indent = 19
+ BevelOuter = bvNone
+ BorderWidth = 5
TabOrder = 0
+ object lvwPairs: TListView
+ Left = 5
+ Top = 5
+ Width = 367
+ Height = 124
+ Align = alTop
+ Columns = <
+ item
+ Caption = #32622#25563#21069
+ Width = 125
+ end
+ item
+ Caption = #32622#25563#24460
+ Width = 125
+ end
+ item
+ Caption = #27491#35215#34920#29694
+ Width = 45
+ end
+ item
+ Caption = #22823#25991#23383#12539#23567#25991#23383#12398#21306#21029
+ Width = 45
+ end>
+ HideSelection = False
+ ReadOnly = True
+ RowSelect = True
+ TabOrder = 0
+ ViewStyle = vsReport
+ OnChange = lvwPairsChange
+ end
+ object btnAdd: TButton
+ Left = 77
+ Top = 136
+ Width = 67
+ Height = 25
+ Hint = #32622#25563#12527#12540#12489#12398#12506#12450#12434#36861#21152
+ Caption = #36861#21152'(&I)'
+ TabOrder = 1
+ OnClick = btnAddClick
+ end
+ object btnDelete: TButton
+ Left = 149
+ Top = 136
+ Width = 67
+ Height = 25
+ Hint = #32622#25563#12527#12540#12489#12398#12506#12450#12434#21066#38500
+ Caption = #21066#38500'(&D)'
+ TabOrder = 2
+ OnClick = btnDeleteClick
+ end
+ object btnMoveUp: TButton
+ Left = 229
+ Top = 136
+ Width = 67
+ Height = 25
+ Hint = #19978#12395#31227#21205
+ Caption = #19978#12408'(&U)'
+ TabOrder = 3
+ OnClick = btnMoveUpClick
+ end
+ object btnMoveDown: TButton
+ Left = 301
+ Top = 136
+ Width = 67
+ Height = 25
+ Hint = #19979#12395#31227#21205
+ Caption = #19979#12408'(&W)'
+ TabOrder = 4
+ OnClick = btnMoveDownClick
+ end
+ inline StrReplaceFrame: TfrmStrReplaceFrame
+ Left = 12
+ Top = 168
+ Width = 354
+ Height = 100
+ Enabled = False
+ TabOrder = 5
+ end
end
- object PageControl: TPageControl
+ object pnlPresetProperties: TPanel
Left = 0
- Top = 161
+ Top = 273
Width = 377
- Height = 113
- ActivePage = tstPreset
- Align = alClient
- Style = tsButtons
+ Height = 79
+ Align = alTop
+ BevelOuter = bvNone
+ BorderWidth = 5
TabOrder = 1
- object tstPreset: TTabSheet
- Caption = #12503#12522#12475#12483#12488
- TabVisible = False
- object Label1: TLabel
- Left = 8
- Top = 16
- Width = 54
+ Visible = False
+ object gbxPresetProperties: TGroupBox
+ Left = 5
+ Top = 5
+ Width = 367
+ Height = 69
+ Align = alClient
+ Caption = #12503#12522#12475#12483#12488#12398#35373#23450
+ TabOrder = 0
+ object lblTitle: TLabel
+ Left = 16
+ Top = 24
+ Width = 56
Height = 12
- Caption = #35373#23450#21517'(&N):'
+ Caption = #12479#12452#12488#12523'(&T):'
FocusControl = edtTitle
end
- object Label2: TLabel
- Left = 8
+ object lblShortCut: TLabel
+ Left = 16
Top = 48
Width = 83
Height = 12
Caption = #12471#12519#12540#12488#12459#12483#12488'(&S):'
FocusControl = cbxShortCut
end
- object edtTitle: TEdit
- Left = 96
- Top = 8
- Width = 265
- Height = 20
- TabOrder = 0
- end
object cbxShortCut: TComboBox
- Left = 96
+ Left = 112
Top = 40
Width = 145
Height = 20
+ Hint = #12461#12540#12508#12540#12489#12471#12519#12540#12488#12459#12483#12488#12398#35373#23450
ItemHeight = 12
+ TabOrder = 0
+ end
+ object edtTitle: TEdit
+ Left = 112
+ Top = 16
+ Width = 185
+ Height = 20
+ Hint = #12513#12491#12517#12540#12395#34920#31034#12373#12428#12427#12503#12522#12475#12483#12488#12398#12479#12452#12488#12523#12434#35373#23450
TabOrder = 1
end
end
- object tstPair: TTabSheet
- Caption = #12506#12450
- ImageIndex = 1
- TabVisible = False
- inline frmStrReplaceFrame: TfrmStrReplaceFrame
- Left = 8
- Top = 3
- Width = 354
- Height = 100
- TabOrder = 0
- end
+ end
+ object pnlOkCancelButtons: TPanel
+ Left = 0
+ Top = 352
+ Width = 377
+ Height = 39
+ Align = alTop
+ BevelOuter = bvNone
+ TabOrder = 2
+ DesignSize = (
+ 377
+ 39)
+ object btnOk: TButton
+ Left = 285
+ Top = 6
+ Width = 83
+ Height = 25
+ Hint = #22793#26356#20869#23481#12434#30906#23450#12375#12390#12480#12452#12450#12525#12464#12434#38281#12376#12427
+ Anchors = [akRight, akBottom]
+ Caption = '&OK'
+ Default = True
+ TabOrder = 0
+ OnClick = btnOkClick
+ end
+ object btnCancel: TButton
+ Left = 205
+ Top = 6
+ Width = 75
+ Height = 25
+ Hint = #22793#26356#20869#23481#12434#12461#12515#12531#12475#12523#12375#12390#12480#12452#12450#12525#12464#12434#38281#12376#12427
+ Anchors = [akRight, akBottom]
+ Cancel = True
+ Caption = #12461#12515#12531#12475#12523
+ TabOrder = 1
+ OnClick = btnCancelClick
end
end
end
interface
uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
- Dialogs, ComCtrls, StrReplaceFrame, StdCtrls, StrReplace;
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
+ Dialogs, ComCtrls, StrReplaceFrame, StdCtrls, StrReplace, ExtCtrls,
+ Menus, BottleDef;
+
+{
+ \83t\83H\81[\83\80\82ÌAutoSize = true\82É\90Ý\92è\82³\82ê\82Ä\82¢\82é\82½\82ß\81A
+ \83t\83H\81[\83\80\82Í\92\86\96¡\82É\89\9e\82¶\82Ä\8e©\93®\93I\82É\8fk\82Þ\81B
+
+ \82³\82ç\82É\81A\83t\83H\81[\83\80\82Í\81A\82·\82×\82Ä Align = alTop \82É\90Ý\92è\82³\82ê\82½3\82Â\82Ì
+ \83p\83l\83\8b\82É\82æ\82Á\82Ä\8bæ\90Ø\82ç\82ê\82Ä\82¢\82é\81B
+
+ \88ê\94Ô\8fã\82Ì\83p\83l\83\8b pnlPairsEditor \82Æ\81A
+ \88ê\94Ô\89º\82Ì\83p\83l\83\8b pnlOkCancelButtons \82Í\81A\8fí\82É\95\\8e¦\82³\82ê\82Ä\82¢\82é\82ª\81A
+ \90^\82ñ\92\86\82Ì\83p\83l\83\8b pnlPresetProperties \82Í\81AAskForTitle\83v\83\8d\83p\83e\83B\82É
+ \89\9e\82¶\82Ä\81A\95\\8e¦\82³\82ê\82½\82è\89B\82ê\82½\82è\82·\82é\81B
+ \82±\82ê\82ç\82Ì\8c\8b\89Ê\81A\83t\83H\81[\83\80\8e©\90g\82ª\8e©\93®\93I\82É\90L\82Ñ\8fk\82Ý\82·\82é\82æ\82¤\82É\82È\82Á\82Ä\82¢\82é\81B
+
+ \83t\83H\81[\83\80\82Ì\91å\82«\82³\82ð\95Ï\8dX\82µ\82½\82¢\81A\82Æ\82¢\82Á\82½\8fê\8d\87\82É\82Í\81A
+ \88ê\92U AutoSize = false \82É\82µ\82Ä\83T\83C\83Y\95Ï\8dX\82µ\82½\8cã\82Å\81A
+ \95K\82¸ AutoSize = true \82É\96ß\82µ\82Ä\82¨\82\82±\82Æ\81B
+}
type
- TfrmReplacePresetEditor = class(TFrame)
- tvwPresets: TTreeView;
- PageControl: TPageControl;
- tstPreset: TTabSheet;
- tstPair: TTabSheet;
- frmStrReplaceFrame: TfrmStrReplaceFrame;
- Label1: TLabel;
- Label2: TLabel;
- edtTitle: TEdit;
+ TfrmReplacePresetEditor = class(TForm)
+ pnlPairsEditor: TPanel;
+ lvwPairs: TListView;
+ btnAdd: TButton;
+ btnDelete: TButton;
+ btnMoveUp: TButton;
+ btnMoveDown: TButton;
+ StrReplaceFrame: TfrmStrReplaceFrame;
+ pnlPresetProperties: TPanel;
+ pnlOkCancelButtons: TPanel;
+ btnOk: TButton;
+ btnCancel: TButton;
+ gbxPresetProperties: TGroupBox;
cbxShortCut: TComboBox;
+ edtTitle: TEdit;
+ lblTitle: TLabel;
+ lblShortCut: TLabel;
+ procedure btnAddClick(Sender: TObject);
+ procedure btnDeleteClick(Sender: TObject);
+ procedure btnMoveUpClick(Sender: TObject);
+ procedure btnMoveDownClick(Sender: TObject);
+ procedure lvwPairsChange(Sender: TObject; Item: TListItem;
+ Change: TItemChange);
+ procedure btnOkClick(Sender: TObject);
+ procedure btnCancelClick(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
private
- { Private \90é\8c¾ }
+ FPairs: TReplacePairCollection;
+ procedure SetPairs(const Value: TReplacePairCollection);
+ function GetAskForTitle: Boolean;
+ function GetShortCut: TShortCut;
+ function GetTitle: string;
+ procedure SetAskForTitle(const Value: Boolean);
+ procedure SetShortCut(const Value: TShortCut);
+ procedure SetTitle(const Value: string);
+ protected
+ procedure MoveItem(const Delta: Integer);
+ procedure UpdateControls;
+ procedure UpdateListViewItem(Target: TListItem);
+ procedure FollowEdit;
+ procedure FrameUpdate(Sender: TObject);
public
- { Public \90é\8c¾ }
+ constructor Create(AOwner: TCOmponent); override;
+ destructor Destroy; override;
+ property Pairs: TReplacePairCollection read FPairs write SetPairs;
+ property Title: string read GetTitle write SetTitle;
+ property ShortCut: TShortCut read GetShortCut write SetShortCut;
+ property AskForTitle: Boolean read GetAskForTitle write SetAskForTitle;
+ function Execute: Boolean;
end;
implementation
{$R *.dfm}
+{ TfrmReplacePresetEditor }
+
+constructor TfrmReplacePresetEditor.Create(AOwner: TCOmponent);
+begin
+ inherited;
+ FPairs := TReplacePairCollection.Create(TReplacePair);
+end;
+
+destructor TfrmReplacePresetEditor.Destroy;
+begin
+ FPairs.Free;
+ inherited;
+end;
+
+procedure TfrmReplacePresetEditor.SetPairs(const Value: TReplacePairCollection);
+begin
+ FPairs.Assign(Value);
+ UpdateControls;
+end;
+
+procedure TfrmReplacePresetEditor.UpdateControls;
+var
+ i, SelectedIndex: Integer;
+begin
+ if lvwPairs.Selected <> nil then
+ SelectedIndex := lvwPairs.Selected.Index
+ else
+ SelectedIndex := -1;
+ with lvwPairs.Items do
+ begin
+ Clear;
+ BeginUpdate;
+ try
+ for i := 0 to FPairs.Count-1 do
+ begin
+ UpdateListViewItem(Add);
+ end;
+ if (SelectedIndex > -1) and (lvwPairs.Selected <> nil) then
+ if (lvwPairs.Selected.Index <> SelectedIndex) and
+ (lvwPairs.Items.Count-1 > SelectedIndex) then
+ lvwPairs.Items[SelectedIndex].Selected := true;
+ finally
+ EndUpdate;
+ end;
+ end;
+end;
+
+procedure TfrmReplacePresetEditor.btnAddClick(Sender: TObject);
+var
+ New: TListItem;
+begin
+ // \90V\82µ\82\89Á\82¦\82Ä\82»\82ê\82ð\91I\91ð
+ StrReplaceFrame.OnContentUpdate := nil;
+ try
+ StrReplaceFrame.Pair := FPairs.Add;
+ New := lvwPairs.Items.Add;
+ lvwPairs.Selected := New;
+ UpdateListViewItem(New);
+ // \83t\83H\81[\83J\83X\88Ú\93®\81A\95Ò\8fW\8aJ\8en
+ StrReplaceFrame.edtOldPattern.SetFocus;
+ finally
+ StrReplaceFrame.OnContentUpdate := FrameUpdate;
+ end;
+end;
+
+procedure TfrmReplacePresetEditor.UpdateListViewItem(Target: TListItem);
+var
+ Pair: TReplacePair;
+begin
+ with Target do
+ begin
+ lvwPairs.Items.BeginUpdate;
+ try
+ Pair := FPairs[Target.Index];
+ Caption := Pair.BeforeStr;
+ SubItems.Clear;
+ SubItems.Add(Pair.AfterStr);
+ if Pair.UseRegExp then
+ SubItems.Add('Y')
+ else
+ SubItems.Add('-');
+ if not Pair.IgnoreCase then
+ SubItems.Add('Y')
+ else
+ SubItems.Add('-');
+ finally
+ lvwPairs.Items.EndUpdate;
+ end;
+ end;
+end;
+
+procedure TfrmReplacePresetEditor.btnDeleteClick(Sender: TObject);
+var
+ TargetIndex: Integer;
+begin
+ if lvwPairs.Selected = nil then
+ Exit;
+ TargetIndex := lvwPairs.Selected.Index;
+ FPairs.Delete(TargetIndex);
+ lvwPairs.Items.Delete(TargetIndex);
+end;
+
+procedure TfrmReplacePresetEditor.btnMoveUpClick(Sender: TObject);
+begin
+ MoveItem(-1);
+end;
+
+procedure TfrmReplacePresetEditor.btnMoveDownClick(Sender: TObject);
+begin
+ MoveItem(1);
+end;
+
+procedure TfrmReplacePresetEditor.lvwPairsChange(Sender: TObject;
+ Item: TListItem; Change: TItemChange);
+begin
+ if Change <> ctState then
+ Exit;
+ with StrReplaceFrame do
+ begin
+ if lvwPairs.Selected = nil then
+ begin
+ Enabled := false;
+ end else
+ begin
+ Enabled := true;
+ Pair := FPairs[lvwPairs.Selected.Index];
+ end;
+ end;
+end;
+
+function TfrmReplacePresetEditor.Execute: Boolean;
+begin
+ UpdateControls;
+ StrReplaceFrame.OnContentUpdate := FrameUpdate;
+ if lvwPairs.Items.Count > 0 then
+ begin
+ lvwPairs.Items[0].Selected := true;
+ end;
+ Result := ShowModal = mrOk;
+end;
+
+procedure TfrmReplacePresetEditor.btnOkClick(Sender: TObject);
+var
+ i: integer;
+begin
+ if Pairs.Count = 0 then
+ begin
+ ShowMessage('\8dÅ\92á1\82Â\82Ì\92u\8a·\83\8b\81[\83\8b\82ð\90Ý\92è\82µ\82Ä\82\82¾\82³\82¢');
+ Exit;
+ end;
+ for i := 0 to Pairs.Count-1 do
+ if not Pairs[i].IsValidPair then
+ begin
+ ShowMessage(Format('%d\94Ô\96Ú\82Ì\95¶\8e\9a\97ñ\83y\83A\82É\83G\83\89\81[\82ª\82 \82è\82Ü\82·', [i+1]));
+ Exit;
+ end;
+ if AskForTitle and (Title = '') then
+ begin
+ ShowMessage('\83v\83\8a\83Z\83b\83g\82Ì\83^\83C\83g\83\8b\82ð\8ew\92è\82µ\82Ä\82\82¾\82³\82¢');
+ Exit;
+ end;
+ ModalResult := mrOk;
+end;
+
+procedure TfrmReplacePresetEditor.btnCancelClick(Sender: TObject);
+begin
+ ModalResult := mrCancel;
+end;
+
+procedure TfrmReplacePresetEditor.FollowEdit;
+var
+ CurrentPair: TReplacePair;
+begin
+ if lvwPairs.Selected <> nil then
+ begin
+ CurrentPair := FPairs[lvwPairs.Selected.Index];
+ CurrentPair.Assign(StrReplaceFrame.Pair);
+ UpdateListViewItem(lvwPairs.Selected);
+ end;
+end;
+
+procedure TfrmReplacePresetEditor.FrameUpdate(Sender: TObject);
+begin
+ FollowEdit;
+end;
+
+procedure TfrmReplacePresetEditor.MoveItem(const Delta: Integer);
+var
+ TargetIndex: Integer;
+ Item: TReplacePair;
+begin
+ if lvwPairs.Selected = nil then
+ Exit;
+ StrReplaceFrame.OnContentUpdate := nil;
+ try
+ TargetIndex := lvwPairs.Selected.Index;
+ // \94Í\88Í\83`\83F\83b\83N
+ if (Delta < 0) and (TargetIndex < -Delta) then
+ Exit;
+ if (Delta > 0) and (TargetIndex >= Pairs.Count-Delta) then
+ Exit;
+ if Delta = 0 then
+ Exit; // \88ê\89\9e
+ // \88ê\92U\83R\83\8c\83N\83V\83\87\83\93\82©\82ç\8aO\82µ\82Ä
+ Item := FPairs.Items[TargetIndex];
+ Item.Collection := nil;
+ // \90V\82µ\82INSERT\82µ\82½\90V\8bK\8d\80\96Ú\82É\91ã\93ü
+ FPairs.Insert(TargetIndex + Delta).Assign(Item);
+ UpdateControls;
+ // \83\8a\83X\83g\83r\83\85\81[\82Ì\91I\91ð\83A\83C\83e\83\80\82ð\93®\82©\82·
+ lvwPairs.Items[TargetIndex + Delta].Selected := true;
+ finally
+ StrReplaceFrame.OnContentUpdate := FrameUpdate;
+ end;
+end;
+
+function TfrmReplacePresetEditor.GetAskForTitle: Boolean;
+begin
+ Result := pnlPresetProperties.Visible;
+end;
+
+function TfrmReplacePresetEditor.GetShortCut: TShortCut;
+begin
+ Result := TextToShortCut(cbxShortCut.Text);
+end;
+
+function TfrmReplacePresetEditor.GetTitle: string;
+begin
+ Result := edtTitle.Text;
+end;
+
+procedure TfrmReplacePresetEditor.SetAskForTitle(const Value: Boolean);
+begin
+ pnlPresetProperties.Visible := Value;
+end;
+
+procedure TfrmReplacePresetEditor.SetShortCut(const Value: TShortCut);
+begin
+ cbxShortCut.Text := ShortCutToText(Value);
+end;
+
+procedure TfrmReplacePresetEditor.SetTitle(const Value: string);
+begin
+ edtTitle.Text := Value;
+end;
+
+procedure TfrmReplacePresetEditor.FormCreate(Sender: TObject);
+begin
+ BuildShortCutList(cbxShortCut.Items);
+end;
+
end.
interface
-uses Classes, SysUtils, Forms, Menus, RegexUtils;
+uses Classes, SysUtils, Forms, Menus, RegexUtils, Contnrs;
type
// \88È\89º\82Ì5\82Â\82Ì\83N\83\89\83X\82Ì\92è\8b`\82Í\81A\8f¬\82³\82¢\95û\82©\82ç\81¨\91å\82«\82¢\95û\82Ö\81A\82Æ
// \8c\9f\8dõ\8cê\82Æ\92u\8a·\8cê\82Ì\83y\83A\82Æ\82»\82Ì\83I\83v\83V\83\87\83\93\82ð\8bL\98^\82·\82é\8d\\91¢\91Ì
TReplacePairRec = record
- BeforeStr: String;
- AfterStr: String;
+ BeforeStr: string;
+ AfterStr: string;
IgnoreCase: boolean;
UseRegExp: boolean;
end;
TReplacePair = class(TCollectionItem)
private
FPairRec: TReplacePairRec;
- procedure SetAfterStr(const Value: String);
- procedure SetBeforeStr(const Value: String);
+ procedure SetAfterStr(const Value: string);
+ procedure SetBeforeStr(const Value: string);
procedure SetIgnoreCase(const Value: boolean);
procedure SetUseRegExp(const Value: boolean);
- function GetAfterStr: String;
- function GetBeforeStr: String;
+ function GetAfterStr: string;
+ function GetBeforeStr: string;
function GetIgnoreCase: boolean;
function GetUseRegExp: boolean;
public
- function ExecuteReplace(TargetStr: String): String;
+ constructor Create(Collection: TCollection); override;
+ function ExecuteReplace(TargetStr: string): string;
procedure Assign(Source: TPersistent); override;
+ procedure Clear;
+ function IsValidPair: Boolean;
published
- property BeforeStr: String read GetBeforeStr write SetBeforeStr;
- property AfterStr: String read GetAfterStr write SetAfterStr;
- property IgnoreCase: boolean read GetIgnoreCase write SetIgnoreCase;
- property UseRegExp: boolean read GetUseRegExp write SetUseRegExp;
+ property BeforeStr: string read GetBeforeStr write SetBeforeStr;
+ property AfterStr: string read GetAfterStr write SetAfterStr;
+ property IgnoreCase: boolean read GetIgnoreCase write SetIgnoreCase default false;
+ property UseRegExp: boolean read GetUseRegExp write SetUseRegExp default false;
end;
- // TReplacePair\82Ì\83R\83\8c\83N\83V\83\87\83\93\83N\83\89\83X
+ // TReplacePair\82Ì\83R\83\8c\83N\83V\83\87\83\93\83N\83\89\83X\81B
TReplacePairCollection = class(TCollection)
+ private
+ function GetItem(Index: Integer): TReplacePair;
public
- function ExecuteReplace(TargetStr: String): String;
+ function Add: TReplacePair;
+ property Items[Index: Integer]: TReplacePair read GetItem; default;
+ function ExecuteReplace(TargetStr: string): string;
+ function StringExpression: string;
end;
// TReplacePair\82Ì\83R\83\8c\83N\83V\83\87\83\93\82ð\95Û\8e\9d\82µ\81A\83^\83C\83g\83\8b\82È\82Ç\82ð\82Ü\82Æ\82ß\82Ä
// 1\82Â\82Ì\83v\83\8a\83Z\83b\83g\90Ý\92è\8d\80\96Ú\82ð\95\\8c»\82·\82é\83N\83\89\83X
TReplacePreset = class(TCollectionItem)
private
- FTitle: String;
+ FTitle: string;
FPairs: TReplacePairCollection;
FShortCut: TShortCut;
procedure SetPairs(const Value: TReplacePairCollection);
procedure SetShortCut(const Value: TShortCut);
- procedure SetTitle(const Value: String);
+ procedure SetTitle(const Value: string);
public
constructor Create(Collection: TCollection); override;
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
published
property Pairs: TReplacePairCollection read FPairs write SetPairs;
- property Title: String read FTitle write SetTitle;
+ property Title: string read FTitle write SetTitle;
property ShortCut: TShortCut read FShortCut write SetShortCut;
end;
- // \83v\83\8a\83Z\83b\83g\90Ý\92è\8d\80\96ÚTReplacePreset\82Ì\83R\83\8c\83N\83V\83\87\83\93\83N\83\89\83X
TReplacePresetCollection = class(TCollection)
+ private
+ function GetItem(Index: Integer): TReplacePreset;
+ public
+ function Add: TReplacePreset;
+ property Items[Index: Integer]: TReplacePreset read GetItem; default;
end;
// \8dÅ\8fI\93I\82É\82±\82ê\82ð\83V\83\8a\83A\83\89\83C\83Y\82·\82é
FPairRec := (Source as TReplacePair).FPairRec;
end;
-function TReplacePair.ExecuteReplace(TargetStr: String): String;
+procedure TReplacePair.Clear;
+begin
+ with FPairRec do
+ begin
+ BeforeStr := '';
+ AfterStr := '';
+ UseRegExp := false;
+ IgnoreCase := false;
+ end;
+end;
+
+constructor TReplacePair.Create(Collection: TCollection);
+begin
+ inherited;
+ IgnoreCase := true;
+end;
+
+function TReplacePair.ExecuteReplace(TargetStr: string): string;
var
Options: TReplaceFlags;
begin
Result := StringReplace(Result, BeforeStr, AfterStr, Options);
end;
-function TReplacePair.GetAfterStr: String;
+function TReplacePair.GetAfterStr: string;
begin
Result := FPairRec.AfterStr;
end;
-function TReplacePair.GetBeforeStr: String;
+function TReplacePair.GetBeforeStr: string;
begin
Result := FPairRec.BeforeStr;
end;
Result := FPairRec.UseRegExp;
end;
-procedure TReplacePair.SetAfterStr(const Value: String);
+function TReplacePair.IsValidPair: Boolean;
+begin
+ Result := true;
+ if BeforeStr = '' then
+ Result := false
+ else
+ try
+ ExecuteReplace(' ')
+ except
+ Result := false;
+ end;
+end;
+
+procedure TReplacePair.SetAfterStr(const Value: string);
begin
FPairRec.AfterStr := Value;
end;
-procedure TReplacePair.SetBeforeStr(const Value: String);
+procedure TReplacePair.SetBeforeStr(const Value: string);
begin
FPairRec.BeforeStr := Value;
end;
FShortCut := Value;
end;
-procedure TReplacePreset.SetTitle(const Value: String);
+procedure TReplacePreset.SetTitle(const Value: string);
begin
FTitle := Value;
end;
{ TReplacePresets }
procedure TReplacePresets.Assign(Source: TPersistent);
-var
- Src: TReplacePresets;
begin
if not (Source is TReplacePresets) then
inherited
else
begin
- Src := Source as TReplacePresets;
- Presets.Assign(Src.Presets);
+ FPresets.Assign((Source as TReplacePresets).FPresets);
end;
end;
{ TReplacePairCollection }
-function TReplacePairCollection.ExecuteReplace(TargetStr: String): String;
+function TReplacePairCollection.Add: TReplacePair;
+begin
+ Result := inherited Add as TReplacePair;
+end;
+
+function TReplacePairCollection.ExecuteReplace(TargetStr: string): string;
var
- i: integer;
+ i: Integer;
begin
Result := TargetStr;
for i := 0 to Count-1 do
end;
end;
+function TReplacePairCollection.GetItem(Index: Integer): TReplacePair;
+begin
+ Result := (inherited GetItem(Index)) as TReplacePair;
+end;
+
+function TReplacePairCollection.StringExpression: string;
+var
+ i: Integer;
+begin
+ Result := '';
+ for i := 0 to Count-1 do
+ begin
+ if i > 0 then
+ Result := Result + '\81A';
+ Result := Result + Format('\81u%s\81v\81¨\81u%s\81v',
+ [Items[i].BeforeStr, Items[i].AfterStr]);
+ end;
+end;
+
+{ TReplacePresetCollection }
+
+function TReplacePresetCollection.Add: TReplacePreset;
+begin
+ Result := inherited Add as TReplacePreset;
+end;
+
+function TReplacePresetCollection.GetItem(Index: Integer): TReplacePreset;
+begin
+ Result := inherited GetItem(Index) as TReplacePreset;
+end;
+
initialization
Classes.RegisterClass(TReplacePresets);
procedure btnCancelClick(Sender: TObject);
procedure btnOkClick(Sender: TObject);
private
- function GetPairRec: TReplacePairRec;
- procedure SetPairRec(const Value: TReplacePairRec);
+ function GetPair: TReplacePair;
+ procedure SetPair(const Value: TReplacePair);
{ Private \90é\8c¾ }
public
- property PairRec: TReplacePairRec read GetPairRec write SetPairRec;
+ property Pair: TReplacePair read GetPair write SetPair;
function Execute: boolean;
end;
procedure TfrmStrReplaceDialog.btnOkClick(Sender: TObject);
var
- PairRec: TReplacePairRec;
Dummy: String;
begin
- PairRec := frmStrReplaceFrame.PairRec;
- with PairRec do
+ with Pair do
begin
if UseRegExp and
(SafeAndCheckRegExpSubst(BeforeStr, AfterStr, [rfReplaceAll], Dummy) <> '') then
Result := ShowModal = mrOk;
end;
-function TfrmStrReplaceDialog.GetPairRec: TReplacePairRec;
+function TfrmStrReplaceDialog.GetPair: TReplacePair;
begin
- Result := frmStrReplaceFrame.PairRec;
+ Result := frmStrReplaceFrame.Pair;
end;
-procedure TfrmStrReplaceDialog.SetPairRec(const Value: TReplacePairRec);
+procedure TfrmStrReplaceDialog.SetPair(const Value: TReplacePair);
begin
- frmStrReplaceFrame.PairRec := Value;
+ frmStrReplaceFrame.Pair := Value;
end;
end.
Height = 20
Anchors = [akLeft, akTop, akRight]
TabOrder = 1
+ OnChange = ContentUpdate
end
object edtOldPattern: TEdit
Left = 111
Height = 20
Anchors = [akLeft, akTop, akRight]
TabOrder = 0
+ OnChange = ContentUpdate
end
object cbxUseRegExp: TCheckBox
Left = 0
Top = 56
Width = 193
Height = 17
+ Hint = #26908#32034#26465#20214#12395#27491#35215#34920#29694#12434#20351#29992#21487#33021#12395#12375#12414#12377
Caption = #27491#35215#34920#29694'(&R)'
TabOrder = 2
+ OnClick = ContentUpdate
end
object cbxDontIgnoreCase: TCheckBox
Left = 0
Top = 80
Width = 193
Height = 17
+ Hint = #26908#32034#26178#12395#22823#25991#23383#12539#23567#25991#23383#12434#21306#21029#12375#12414#12377
Caption = #22823#25991#23383#12539#23567#25991#23383#12434#21306#21029#12377#12427'(&C)'
TabOrder = 3
+ OnClick = ContentUpdate
end
end
lblNewPattern: TLabel;
cbxUseRegExp: TCheckBox;
cbxDontIgnoreCase: TCheckBox;
+ procedure ContentUpdate(Sender: TObject);
private
- FPairRec: TReplacePairRec;
- procedure SetPairRec(const Value: TReplacePairRec);
+ FPair: TReplacePair;
+ FOnContentUpdate: TNotifyEvent;
+ FUpdateCount: Integer;
+ procedure SetPairRec(const Value: TReplacePair);
procedure UpdateControls;
procedure ControlsToData;
- function GetPairRec: TReplacePairRec;
+ function GetPairRec: TReplacePair;
+ procedure SetOnContentUpdate(const Value: TNotifyEvent);
+ protected
+ procedure BeginUpdate;
+ procedure EndUpdate;
+ procedure SetEnabled(Value: boolean); override;
public
- property PairRec: TReplacePairRec read GetPairRec write SetPairRec;
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ property Pair: TReplacePair read GetPairRec write SetPairRec;
+ property OnContentUpdate: TNotifyEvent read FOnContentUpdate
+ write SetOnContentUpdate;
end;
implementation
procedure TfrmStrReplaceFrame.ControlsToData;
begin
- with FPairRec do
+ with FPair do
begin
BeforeStr := edtOldPattern.Text;
AfterStr := edtNewPattern.Text;
end;
end;
-function TfrmStrReplaceFrame.GetPairRec: TReplacePairRec;
+constructor TfrmStrReplaceFrame.Create(AOwner: TComponent);
+begin
+ inherited;
+ FPair := TReplacePair.Create(nil);
+end;
+
+destructor TfrmStrReplaceFrame.Destroy;
+begin
+ FPair.Free;
+ inherited;
+end;
+
+function TfrmStrReplaceFrame.GetPairRec: TReplacePair;
begin
ControlsToData;
- Result := FPairRec;
+ Result := FPair;
end;
-procedure TfrmStrReplaceFrame.SetPairRec(const Value: TReplacePairRec);
+procedure TfrmStrReplaceFrame.SetOnContentUpdate(const Value: TNotifyEvent);
begin
- FPairRec := Value;
+ FOnContentUpdate := Value;
+end;
+
+procedure TfrmStrReplaceFrame.SetPairRec(const Value: TReplacePair);
+begin
+ FPair.Assign(Value);
UpdateControls;
end;
procedure TfrmStrReplaceFrame.UpdateControls;
begin
- with FPairRec do
+ with FPair do
+ begin
+ BeginUpdate;
+ try
+ edtOldPattern.Text := BeforeStr;
+ edtNewPattern.Text := AfterStr;
+ cbxUseRegExp.Checked := UseRegExp;
+ cbxDontIgnoreCase.Checked := not IgnoreCase;
+ finally
+ EndUpdate;
+ end;
+ end;
+end;
+
+procedure TfrmStrReplaceFrame.ContentUpdate(Sender: TObject);
+begin
+ if Assigned(FOnContentUpdate) and (FUpdateCount = 0) then
+ FOnContentUpdate(Self);
+end;
+
+procedure TfrmStrReplaceFrame.BeginUpdate;
+begin
+ Inc(FUpdateCount);
+end;
+
+procedure TfrmStrReplaceFrame.EndUpdate;
+begin
+ Dec(FUpdateCount);
+ if FUpdateCount = 0 then
+ ContentUpdate(Self);
+end;
+
+procedure TfrmStrReplaceFrame.SetEnabled(Value: boolean);
+begin
+ if Enabled <> Value then
begin
- edtOldPattern.Text := BeforeStr;
- edtNewPattern.Text := AfterStr;
- cbxUseRegExp.Checked := UseRegExp;
- cbxDontIgnoreCase.Checked := not IgnoreCase;
+ edtOldPattern.Enabled := Value;
+ edtNewPattern.Enabled := Value;
+ cbxUseRegExp.Enabled := Value;
+ cbxDontIgnoreCase.Enabled := Value;
+ inherited SetEnabled(Value);
end;
end;