unit SettingForm;
+{
+ \90Ý\92è\89æ\96Ê\81B\82»\82ê\96¢\96\9e\82Å\82à\82»\82ê\88È\8fã\82Å\82à\82È\82¢\81B
+ Pref\83I\83u\83W\83F\83N\83g\82ð\8eÀ\8dÛ\82É\91\80\8dì\82·\82é\81B
+}
+
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, ExtCtrls, BottleDef, Spin,
- CPCConfigTreeView, ColorSettingFrame, BottleChainListFrame, SakuraSeekerInstance;
+ CPCConfigTreeView, ColorSettingFrame, BottleChainListFrame, SakuraSeekerInstance,
+ ImgList, StrListEditor, SppList, Plugins, Clipbrd, SsPlayTime, StrUtils,
+ SpecialCharEditor;
type
TfrmSetting = class(TForm)
PageControl: TPageControl;
btnClose: TButton;
tstGeneral: TTabSheet;
- tstColor: TTabSheet;
+ tstDisplay: TTabSheet;
tstKeys: TTabSheet;
rgpWhenReturn: TRadioGroup;
rgpWhenShiftReturn: TRadioGroup;
rgpWhenCtrlReturn: TRadioGroup;
memDefaultScript: TMemo;
lblDefaultScript: TLabel;
- grpLocalConfirm: TGroupBox;
- cbxColorScript: TCheckBox;
- trkColorTimeLag: TTrackBar;
- trkColorSpeed: TTrackBar;
- cbxIgnoreTimeCritical: TCheckBox;
- lblColorTimeLag: TLabel;
- lblColorSpeed: TLabel;
tstReceive: TTabSheet;
- rgpTabPosition: TRadioGroup;
OpenDialog: TOpenDialog;
spnWaitScriptEnd: TSpinEdit;
lblWaitScriptEnd: TLabel;
cbxNoSendGhostList: TCheckBox;
cbxConfirmOnExit: TCheckBox;
ctvBottle: TCPCConfigTreeView;
- lblGhostDropDownCount: TLabel;
- spnGhostDropDownCount: TSpinEdit;
gbxColor: TGroupBox;
frmColorSetting: TfrmColorSetting;
tstRule: TTabSheet;
tstDetailed: TTabSheet;
lblFMOName: TLabel;
memFMOName: TMemo;
- grpProxy: TGroupBox;
- lblProxyAddress: TLabel;
- lblProxyPort: TLabel;
- edtProxyAddress: TEdit;
- edtProxyPort: TEdit;
- cbxUseHttpProxy: TCheckBox;
tstChannel: TTabSheet;
lblAutoJoinChannels: TLabel;
memAutoJoinChannels: TMemo;
cbxAutoStart: TCheckBox;
btnUseCurrentJoinChannels: TButton;
+ ImageList: TImageList;
+ tstSurfacePreview: TTabSheet;
+ lblSurfacePreview: TLabel;
+ lvwPluginList: TListView;
+ lblPluginList: TLabel;
+ ctvSurfacePreview: TCPCConfigTreeView;
+ btnVisibleGhosts: TButton;
+ cbxHideGhosts: TCheckBox;
+ cbxNoExtraSSTPHeaders: TCheckBox;
+ lblLUID: TLabel;
+ edtLUID: TEdit;
+ cbxShowRuler: TCheckBox;
+ rgpTabPosition: TRadioGroup;
+ lblGhostDropDownCount: TLabel;
+ spnGhostDropDownCount: TSpinEdit;
+ cbxIgnoreTimeCritical: TCheckBox;
+ cbxAutoClip: TCheckBox;
+ btnCopyLUID: TButton;
+ tvwCategory: TTreeView;
+ Label1: TLabel;
+ pnlHeading: TPanel;
+ cbxConfirmOnTabClose: TCheckBox;
+ tstConnection: TTabSheet;
+ grpProxy: TGroupBox;
+ lblProxyAddress: TLabel;
+ lblProxyPort: TLabel;
Label6: TLabel;
+ edtProxyAddress: TEdit;
+ edtProxyPort: TEdit;
+ cbxUseHttpProxy: TCheckBox;
+ spnReconnectWait: TSpinEdit;
+ lblReconnectWait: TLabel;
+ lblPartialConfirmFormat: TLabel;
+ edtPartialConfirmFormat: TEdit;
+ cbxAutoPartialConfirm: TCheckBox;
+ tstPlayTime: TTabSheet;
+ grpPlayTimeParams: TGroupBox;
+ lblPlayTimeProfile: TLabel;
+ cbxPlayTimeProfile: TComboBox;
+ spnCostDBChar: TSpinEdit;
+ spnCostWait: TSpinEdit;
+ spnCostSurface: TSpinEdit;
+ spnCostChar: TSpinEdit;
+ spnCostQuickChar: TSpinEdit;
+ lblCostWait: TLabel;
+ lblCostSurface: TLabel;
+ lblCostChar: TLabel;
+ lblCostDBChar: TLabel;
+ lblCostQuickChar: TLabel;
+ btnSavePlayTimeProfile: TButton;
+ lvwCostSpecials: TListView;
+ lblCostSpecials: TLabel;
+ btnPlaySpecialAdd: TButton;
+ btnPlaySpecialDelete: TButton;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure edtProxyPortKeyPress(Sender: TObject; var Key: Char);
procedure ctvBottleNodeChecked(Sender: TObject;
Node: TCPCConfigItemNode; var Allow: Boolean);
procedure tstRuleShow(Sender: TObject);
procedure btnUseCurrentJoinChannelsClick(Sender: TObject);
+ procedure btnVisibleGhostsClick(Sender: TObject);
+ procedure lvwPluginListDblClick(Sender: TObject);
+ procedure edtLUIDEnter(Sender: TObject);
+ procedure edtLUIDExit(Sender: TObject);
+ procedure btnCopyLUIDClick(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure tvwCategoryChange(Sender: TObject; Node: TTreeNode);
+ procedure tvwCategoryMouseMove(Sender: TObject; Shift: TShiftState; X,
+ Y: Integer);
+ procedure cbxPlayTimeProfileChange(Sender: TObject);
+ procedure btnSavePlayTimeProfileClick(Sender: TObject);
+ procedure spnCostWaitChange(Sender: TObject);
+ procedure btnPlaySpecialAddClick(Sender: TObject);
+ procedure btnPlaySpecialDeleteClick(Sender: TObject);
+ procedure lvwCostSpecialsDblClick(Sender: TObject);
private
{ Private \90é\8c¾ }
+ FOldLUID: String;
+ FSpinUpdateFlag: boolean;
+ procedure LoadPlayTimeProfiles;
+ procedure PlayTimeParamsToSpinControl(Params: TSsPlayTimeParams);
+ procedure SpinControlToPlayTimeParams(Params: TSsPlayTimeParams);
+ procedure UpdateSpecialChars;
public
{ Public \90é\8c¾ }
procedure Execute;
{$R *.DFM}
+const
+ SettingIcon = 4;
+
procedure TfrmSetting.Execute;
+var i: integer;
+ Node: TCPCGroupNode;
begin
PageControl.ActivePage := tstGeneral;
memDefaultScript.Text := Pref.DefaultScript;
+ cbxShowRuler.Checked := Pref.ShowRuler;
cbxIgnoreTimeCritical.Checked := Pref.IgnoreTimeCritical;
cbxNoSendGhostList.Checked := Pref.NoSendGhostList;
+ edtPartialConfirmFormat.Text := Pref.PartialConfirmFormat;
+ cbxAutoPartialConfirm.Checked := Pref.AutoPartialConfirm;
cbxConfirmOnExit.Checked := Pref.ConfirmOnExit;
+ cbxConfirmOnTabClose.Checked := Pref.ConfirmOnTabClose;
+ cbxAutoClip.Checked := Pref.AutoClip;
//
- cbxColorScript.Checked := Pref.ColorScript;
with frmColorSetting do begin
Color['H'] := Pref.TalkColorH;
Color['U'] := Pref.TalkColorU;
Color['Error'] := Pref.MarkErrorColor;
Color['Background'] := Pref.BgColor;
end;
- trkColorTimeLag.Position := Pref.ColorTimeLagValue;
- trkColorSpeed.Position := Pref.ColorSpeed;
+ //
+ cbxPlayTimeProfile.Items.Clear;
+ cbxPlayTimeProfile.Items.Add(Pref.PlayTimeParams.ProfileName);
+ cbxPlayTimeProfile.ItemIndex := 0;
+ LoadPlayTimeProfiles;
+ PlayTimeParamsToSpinControl(Pref.PlayTimeParams);
+ UpdateSpecialChars;
//
cbxAutoStart.Checked := Pref.AutoStart;
rgpTabPosition.ItemIndex := Ord(Pref.TabPosition);
(GetNodeFromKeyPath('Arrive\UrlTag\WithSelection') as TCPCRadioNode).Check;
(GetNodeFromKeyPath('Arrive\SilentWhenHidden') as TCPCCheckBoxNode).Checked := Pref.SilentWhenHidden;
(GetNodeFromKeyPath('Arrive\FixMessySurface') as TCPCCheckBoxNode).Checked := Pref.FixMessySurface;
+ (GetNodeFromKeyPath('Arrive\HUTagTo01Tag') as TCPCCheckBoxNode).Checked := Pref.HUTagTo01Tag;
(GetNodeFromKeyPath('Out\ResetIfGhostAfterSend') as TCPCCheckBoxNode).Checked := Pref.ResetIfGhostAfterSend;
(GetNodeFromKeyPath('Out\ClearAfterSend') as TCPCCheckBoxNode).Checked := Pref.ClearAfterSend;
+ (GetNodeFromKeyPath('Out\NeedConfirmBeforeSend') as TCPCCheckBoxNode).Checked := Pref.NeedConfirmBeforeSend;
(GetNodeFromKeyPath('Out\Confirm') as TCPCCheckBoxNode).Checked := not Pref.NoConfirm;
+ (GetNodeFromKeyPath('Out\Warn\ScopeChangeInSynchronize') as TCPCCheckBoxNode).Checked := Pref.WarnScopeChangeInSynchronize;
+ (GetNodeFromKeyPath('Out\Warn\YenTNotExist') as TCPCCheckBoxNode).Checked := Pref.WarnYenTNotExist;
end;
except
on E: Exception do ShowMessage(E.Message);
edtProxyAddress.Text := Pref.ProxyAddress;
edtProxyPort.Text := IntToStr(Pref.ProxyPort);
//
+ spnReconnectWait.Value := Pref.ReconnectWait;
+ //
+ edtLUID.Text := Pref.LUID;
+ //
memFMOName.Lines := Pref.FMOName;
+ cbxHideGhosts.Checked := Pref.HideGhosts;
memAutoJoinChannels.Lines := Pref.AutoJoinChannels;
+ cbxNoExtraSSTPHeaders.Checked := Pref.NoExtraSSTPHeaders;
+ //
+ with ctvSurfacePreview do
+ begin
+ (GetNodeFromKeyPath('OnHint\DoPreview') as TCPCCheckBoxNode).Checked := Pref.SurfacePreviewOnHint;
+ (GetNodeFromKeyPath('OnScriptPoint\DoPreview') as TCPCCheckBoxNode).Checked := Pref.SurfacePreviewOnScriptPoint;
+ Node := GetNodeFromKeyPath('OnScriptPoint\Position') as TCPCGroupNode;
+ (Node.Item[Ord(Pref.SurfacePreviewOnScriptPointPosition)] as TCPCRadioNode).Check;
+ end;
+ for i := 0 to Spps.Count-1 do
+ begin
+ with lvwPluginList.Items.Add do
+ begin
+ Caption := ExtractFileName(Spps.SppItem[i].ModuleName);
+ SubItems.Add(Spps.SppItem[i].PluginName);
+ end;
+ end;
//
ShowModal;
end;
procedure TfrmSetting.FormClose(Sender: TObject; var Action: TCloseAction);
+var i: integer;
+ Node: TCPCGroupNode;
begin
Pref.DefaultScript := memDefaultScript.Text;
+ Pref.ShowRuler := cbxShowRuler.Checked;
Pref.IgnoreTimeCritical := cbxIgnoreTimeCritical.Checked;
Pref.NoSendGhostList := cbxNoSendGhostList.Checked;
+ Pref.PartialConfirmFormat := edtPartialConfirmFormat.Text;
+ Pref.AutoPartialConfirm := cbxAutoPartialConfirm.Checked;
Pref.ConfirmOnExit := cbxConfirmOnExit.Checked;
+ Pref.ConfirmOnTabClose := cbxConfirmOnTabClose.Checked;
+ Pref.AutoClip := cbxAutoClip.Checked;
//
- Pref.ColorScript := cbxColorScript.Checked;
with frmColorSetting do begin
Pref.TalkColorH := Color['H'];
Pref.TalkColorU := Color['U'];
Pref.MarkErrorColor := Color['Error'];
Pref.BgColor := Color['Background'];
end;
- Pref.ColorTimeLagValue := trkColorTimeLag.Position;
- Pref.ColorSpeed := trkColorSpeed.Position;
+ //
+ Pref.PlayTimeParams.ProfileName := cbxPlayTimeProfile.Text;
+ SpinControlToPlayTimeParams(Pref.PlayTimeParams);
//
Pref.AutoStart := cbxAutoStart.Checked;
Pref.TabPosition := TTabPosition(rgpTabPosition.ItemIndex);
Pref.NoTransUrl := (GetNodeFromKeyPath('Arrive\UrlTag\NoSelection') as TCPCRadioNode).Checked;
Pref.SilentWhenHidden := (GetNodeFromKeyPath('Arrive\SilentWhenHidden') as TCPCCheckBoxNode).Checked;
Pref.FixMessySurface := (GetNodeFromKeyPath('Arrive\FixMessySurface') as TCPCCheckBoxNode).Checked;
+ Pref.HUTagTo01Tag := (GetNodeFromKeyPath('Arrive\HUTagTo01Tag') as TCPCCheckBoxNode).Checked;
Pref.ResetIfGhostAfterSend := (GetNodeFromKeyPath('Out\ResetIfGhostAfterSend') as TCPCCheckBoxNode).Checked;
Pref.ClearAfterSend := (GetNodeFromKeyPath('Out\ClearAfterSend') as TCPCCheckBoxNode).Checked;
+ Pref.NeedConfirmBeforeSend := (GetNodeFromKeyPath('Out\NeedConfirmBeforeSend') as TCPCCheckBoxNode).Checked;
Pref.NoConfirm := not (GetNodeFromKeyPath('Out\Confirm') as TCPCCheckBoxNode).Checked;
+ Pref.WarnYenTNotExist := (GetNodeFromKeyPath('Out\Warn\YenTNotExist') as TCPCCheckBoxNode).Checked;
+ Pref.WarnScopeChangeInSynchronize := (GetNodeFromKeyPath('Out\Warn\ScopeChangeInSynchronize') as TCPCCheckBoxNode).Checked;
end;
except
on E: Exception do ShowMessage(E.Message);
Pref.ProxyAddress := edtProxyAddress.Text;
Pref.ProxyPort := StrToInt(edtProxyPort.Text);
//
+ Pref.ReconnectWait := spnReconnectWait.Value;
+ //
+ Pref.LUID := edtLUID.Text;
+ //
Pref.FMOName := memFMOName.Lines;
SakuraSeeker.FileMappingTarget := Pref.FMOName;
+ Pref.HideGhosts := cbxHideGhosts.Checked;
+ Pref.NoExtraSSTPHeaders := cbxNoExtraSSTPHeaders.Checked;
//
Pref.AutoJoinChannels := memAutoJoinChannels.Lines;
+ //
+ with ctvSurfacePreview do
+ begin
+ Pref.SurfacePreviewOnHint := (GetNodeFromKeyPath('OnHint\DoPreview') as TCPCCheckBoxNode).Checked;
+ Pref.SurfacePreviewOnScriptPoint := (GetNodeFromKeyPath('OnScriptPoint\DoPreview') as TCPCCheckBoxNode).Checked;
+ Node := GetNodeFromKeyPath('OnScriptPoint\Position') as TCPCGroupNode;
+ for i := 0 to Node.Count-1 do
+ if (Node.Item[i] as TCPCRadioNode).Checked then
+ Pref.SurfacePreviewOnScriptPointPosition := TSurfacePreviewOnScriptPointPosition(i);
+ end;
end;
procedure TfrmSetting.edtProxyPortKeyPress(Sender: TObject; var Key: Char);
memAutoJoinChannels.Lines := JoinChannels;
end;
+procedure TfrmSetting.btnVisibleGhostsClick(Sender: TObject);
+var i: integer;
+ FullGhosts: TStringList;
+begin
+ FullGhosts := TStringList.Create;
+ SakuraSeeker.BeginDetect;
+ try
+ for i := 0 to SakuraSeeker.Count-1 do
+ FullGhosts.Add(SakuraSeeker[i].Name);
+ StrListEdit(Pref.VisibleGhostsList, '\83S\81[\83X\83g\82ð\8ew\92è', true, FullGhosts);
+ finally
+ FullGhosts.Free;
+ end;
+end;
+
+procedure TfrmSetting.lvwPluginListDblClick(Sender: TObject);
+var Index: integer;
+begin
+ if lvwPluginList.Selected = nil then
+ Exit;
+ Index := lvwPluginList.Selected.Index;
+ if pfConfigure in Spps.SppItem[Index].PluginFunctions then
+ Spps.SppItem[Index].Configure
+ else
+ ShowMessage('\92Ç\89Á\82Ì\90Ý\92è\8d\80\96Ú\82Í\82 \82è\82Ü\82¹\82ñ\81B');
+end;
+
+procedure TfrmSetting.edtLUIDEnter(Sender: TObject);
+begin
+ FOldLUID := edtLUID.Text;
+end;
+
+procedure TfrmSetting.edtLUIDExit(Sender: TObject);
+var TmpLUID: String;
+ i: integer;
+ Err: boolean;
+begin
+ TmpLUID := edtLUID.Text;
+ i := 1;
+ Err := false;
+ if Length(TmpLUID) <> 82 then
+ Err := true
+ else
+ while i <= Length(TmpLUID) do
+ begin
+ if not (TmpLUID[i] in ['0'..'9', 'a'..'z', 'A'..'Z', '.', ',']) then
+ begin
+ Err := true;
+ Break;
+ end;
+ Inc(i);
+ end;
+ if Err then
+ begin
+ ShowMessage('LUID\82Ì\93à\97e\82ª\95s\90³\82Å\82·');
+ edtLUID.Text := FOldLUID;
+ end;
+end;
+
+procedure TfrmSetting.btnCopyLUIDClick(Sender: TObject);
+begin
+ Clipboard.SetTextBuf(PChar(edtLUID.Text));
+end;
+
+procedure TfrmSetting.FormCreate(Sender: TObject);
+var
+ i: integer;
+ Cap: String;
+ Node: TTreeNode;
+begin
+ for i := 0 to PageControl.PageCount-1 do
+ begin
+ Cap := PageControl.Pages[i].Caption;
+ if Pos(':', Cap) > 0 then
+ Cap := Copy(Cap, 1, Pos(':', Cap)-1);
+ Node := tvwCategory.Items.Add(nil, Cap);
+ Node.ImageIndex := -1;
+ Node.SelectedIndex := SettingIcon;
+ end;
+ tvwCategoryChange(Self, tvwCategory.Items[0]);
+ tvwCategory.Items[0].Selected := true;
+end;
+
+procedure TfrmSetting.tvwCategoryChange(Sender: TObject; Node: TTreeNode);
+begin
+ PageControl.ActivePageIndex := Node.Index;
+ pnlHeading.Caption := PageControl.ActivePage.Caption;
+end;
+
+procedure TfrmSetting.tvwCategoryMouseMove(Sender: TObject;
+ Shift: TShiftState; X, Y: Integer);
+var
+ Node: TTreeNode;
+ NewHint: String;
+ CPos: TPoint;
+begin
+ Node := tvwCategory.GetNodeAt(X, Y);
+ if Node <> nil then
+ begin
+ NewHint := PageControl.Pages[Node.Index].Caption;
+ if tvwCategory.Hint <> NewHint then
+ begin
+ tvwCategory.Hint := NewHint;
+ GetCursorPos(CPos);
+ Application.ActivateHint(CPos);
+ end;
+ end else
+ begin
+ tvwCategory.Hint := '';
+ Application.HideHint;
+ end;
+end;
+
+procedure TfrmSetting.PlayTimeParamsToSpinControl(Params: TSsPlayTimeParams);
+begin
+ FSpinUpdateFlag := true;
+ with Params do
+ begin
+ spnCostWait.Value := CostWait;
+ spnCostSurface.Value := CostSurface;
+ spnCostChar.Value := CostChar;
+ spnCostDBChar.Value := CostDBChar;
+ spnCostQuickChar.Value := CostQuickChar;
+ lvwCostSpecials.Items.Clear;
+ end;
+ FSpinUpdateFlag := false;
+end;
+
+procedure TfrmSetting.SpinControlToPlayTimeParams(Params: TSsPlayTimeParams);
+begin
+ with Params do
+ begin
+ CostWait := spnCostWait.Value;
+ CostSurface := spnCostSurface.Value;
+ CostChar := spnCostChar.Value;
+ CostDBChar := spnCostDBChar.Value;
+ CostQuickChar := spnCostQuickChar.Value;
+ end;
+end;
+
+
+procedure TfrmSetting.LoadPlayTimeProfiles;
+var i: integer;
+ F: TSearchRec;
+ Path, Item: String;
+begin
+ Path := ExtractFilePath(Application.ExeName);
+ i := FindFirst(Path + 'playtime\*.txt', 0, F);
+ if i = 0 then begin
+ repeat
+ Item := ChangeFileExt(F.Name, '');
+ if cbxPlayTimeProfile.Items.IndexOf(Item) < 0 then
+ cbxPlayTimeProfile.Items.Add(ChangeFileExt(F.Name, ''));
+ i := FindNext(F);
+ until i <> 0;
+ end;
+ FindClose(F);
+end;
+
+procedure TfrmSetting.cbxPlayTimeProfileChange(Sender: TObject);
+var
+ Params: TSsPlayTimeParams;
+ Strs: TStringList;
+ Path, ProName: String;
+begin
+ try
+ Strs := TStringList.Create;
+ ProName := cbxPlayTimeProfile.Text;
+ try
+ Path := ExtractFilePath(Application.ExeName) + 'playtime\';
+ Strs.LoadFromFile(Path + ProName + '.txt');
+ Params := StringToComponent(Strs.Text) as TSsPlayTimeParams;
+ try
+ PlayTimeParamsToSpinControl(Params);
+ Pref.PlayTimeParams.Assign(Params);
+ UpdateSpecialChars;
+ finally
+ Params.Free;
+ end;
+ finally
+ Strs.Free;
+ end;
+ with cbxPlayTimeProfile do
+ begin
+ Items.Clear;
+ LoadPlayTimeProfiles;
+ ItemIndex := Items.IndexOf(ProName);
+ end;
+ except
+ ; // Do nothing
+ end;
+end;
+
+procedure TfrmSetting.btnSavePlayTimeProfileClick(Sender: TObject);
+var
+ ProfileName, Path, FileName: String;
+ Strs: TStringList;
+begin
+ ProfileName := cbxPlayTimeProfile.Text;
+ if InputQuery('\83v\83\8d\83t\83@\83C\83\8b\96¼', '\95Û\91¶\82·\82é\83v\83\8d\83t\83@\83C\83\8b\96¼', ProfileName) then
+ begin
+ try
+ Path := ExtractFilePath(Application.ExeName) + 'playtime\';
+ FileName := Path + ProfileName + '.txt';
+ if FileExists(FileName) then
+ if MessageDlg(Format('\83v\83\8d\83t\83@\83C\83\8b"%s"\82ð\8fã\8f\91\82«\82µ\82Ü\82·', [ProfileName]),
+ mtConfirmation, mbOkCancel, 0) = mrCancel then
+ Exit;
+ Strs := TStringList.Create;
+ try
+ SpinControlToPlayTimeParams(Pref.PlayTimeParams);
+ Pref.PlayTimeParams.ProfileName := ProfileName;
+ Strs.Text := ComponentToString(Pref.PlayTimeParams);
+ Strs.SaveToFile(FileName);
+ finally
+ Strs.Free;
+ end;
+ with cbxPlayTimeProfile do
+ begin
+ Items.Clear;
+ Items.Add(ProfileName);
+ ItemIndex := 0;
+ LoadPlayTimeProfiles;
+ end;
+ except
+ on E: Exception do
+ ShowMessage('\95Û\91¶\82É\8e¸\94s\82µ\82Ü\82µ\82½\81B' + E.Message);
+ end;
+ end;
+end;
+
+procedure TfrmSetting.spnCostWaitChange(Sender: TObject);
+var
+ ProName: String;
+const
+ Modified = '(\95Ï\8dX\8dÏ\82Ý)';
+begin
+ if FSpinUpdateFlag then
+ Exit;
+ if RightBStr(cbxPlayTimeProfile.Text, Length(Modified)) <> Modified then
+ begin
+ ProName := Format('%s%s', [cbxPlayTimeProfile.Text, Modified]);
+ with cbxPlayTimeProfile do
+ begin
+ Items.Clear;
+ Items.Add(ProName);
+ ItemIndex := 0;
+ LoadPlayTimeProfiles;
+ end;
+ end;
+end;
+
+procedure TfrmSetting.btnPlaySpecialAddClick(Sender: TObject);
+var
+ Item: TListItem;
+ SPChar: TSsPlayTimeSpecialChar;
+begin
+ Application.CreateForm(TfrmSpecialCharEditor, frmSpecialCharEditor);
+ try
+ with frmSpecialCharEditor do
+ begin
+ SpecialChar := '';
+ Cost := 50;
+ if Execute then
+ begin
+ SPChar := Pref.PlayTimeParams.SpecialChars.Add as TSsPlayTimeSpecialChar;
+ SPChar.Char := SpecialChar;
+ SPChar.Wait := Cost;
+ Item := lvwCostSpecials.Items.Add;
+ Item.Caption := SPChar.DisplayChar;
+ Item.SubItems.Add(IntToStr(Cost));
+ spnCostWaitChange(Self);
+ end;
+ end;
+ finally
+ frmSpecialCharEditor.Release;
+ end;
+end;
+
+procedure TfrmSetting.btnPlaySpecialDeleteClick(Sender: TObject);
+begin
+ with lvwCostSpecials do
+ if Selected <> nil then
+ begin
+ Pref.PlayTimeParams.SpecialChars.Delete(Selected.Index);
+ Selected.Delete;
+ spnCostWaitChange(Self);
+ end;
+end;
+
+procedure TfrmSetting.lvwCostSpecialsDblClick(Sender: TObject);
+var
+ Item: TListItem;
+ SPChar: TSsPlayTimeSpecialChar;
+begin
+ with lvwCostSpecials do
+ begin
+ Item := Selected;
+ if Item <> nil then
+ begin
+ Application.CreateForm(TfrmSpecialCharEditor, frmSpecialCharEditor);
+ try
+ with frmSpecialCharEditor do
+ begin
+ SPChar := Pref.PlayTimeParams.SpecialChars.Items[Item.Index] as TSsPlayTimeSpecialChar;
+ SpecialChar := SPChar.Char;
+ Cost := SPChar.Wait;
+ if Execute then
+ begin
+ SPChar.Char := SpecialChar;
+ SPChar.Wait := Cost;
+ Item.Caption := SPChar.DisplayChar;
+ Item.SubItems[0] := IntToStr(Cost);
+ spnCostWaitChange(Self);
+ end;
+ end;
+ finally
+ frmSpecialCharEditor.Release;
+ end;
+ end;
+ end;
+end;
+
+procedure TfrmSetting.UpdateSpecialChars;
+var
+ i: integer;
+ Item: TListItem;
+ SPChar: TSsPlayTimeSpecialChar;
+begin
+ with lvwCostSpecials do
+ begin
+ Items.Clear;
+ for i := 0 to Pref.PlayTimeParams.SpecialChars.Count-1 do
+ begin
+ SPChar := Pref.PlayTimeParams.SpecialChars.Items[i] as TSsPlayTimeSpecialChar;
+ Item := Items.Add;
+ Item.Caption := SPChar.DisplayChar;
+ Item.SubItems.Add(IntToStr(SPChar.Wait));
+ end;
+ end;
+end;
+
end.