4 \90Ý
\92è
\89æ
\96Ê
\81B
\82»
\82ê
\96¢
\96\9e\82Å
\82à
\82»
\82ê
\88È
\8fã
\82Å
\82à
\82È
\82¢
\81B
5 Pref
\83I
\83u
\83W
\83F
\83N
\83g
\82ð
\8eÀ
\8dÛ
\82É
\91\80\8dì
\82·
\82é
\81B
11 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
12 ComCtrls, StdCtrls, ExtCtrls, BottleDef, Spin,
13 CPCConfigTreeView, ColorSettingFrame, BottleChainListFrame, SakuraSeekerInstance,
14 ImgList, StrListEditor, SppList, Plugins, Clipbrd, SsPlayTime, StrUtils,
15 SpecialCharEditor, ReplacePresetListFrame;
18 TfrmSetting = class(TForm)
19 PageControl: TPageControl;
21 tstGeneral: TTabSheet;
22 tstDisplay: TTabSheet;
24 rgpWhenReturn: TRadioGroup;
25 rgpWhenShiftReturn: TRadioGroup;
26 rgpWhenCtrlReturn: TRadioGroup;
27 memDefaultScript: TMemo;
28 lblDefaultScript: TLabel;
29 tstReceive: TTabSheet;
30 OpenDialog: TOpenDialog;
31 spnWaitScriptEnd: TSpinEdit;
32 lblWaitScriptEnd: TLabel;
33 cbxConfirmOnExit: TCheckBox;
34 ctvBottle: TCPCConfigTreeView;
36 frmColorSetting: TfrmColorSetting;
38 frmRuleList: TfrmBottleChainList;
39 tstDetailed: TTabSheet;
42 tstChannel: TTabSheet;
43 lblAutoJoinChannels: TLabel;
44 memAutoJoinChannels: TMemo;
45 cbxAutoStart: TCheckBox;
46 btnUseCurrentJoinChannels: TButton;
47 ImageList: TImageList;
48 tstSurfacePreview: TTabSheet;
49 lblSurfacePreview: TLabel;
50 lvwPluginList: TListView;
51 lblPluginList: TLabel;
52 ctvSurfacePreview: TCPCConfigTreeView;
53 btnVisibleGhosts: TButton;
54 cbxHideGhosts: TCheckBox;
55 cbxNoExtraSSTPHeaders: TCheckBox;
58 cbxShowRuler: TCheckBox;
59 rgpTabPosition: TRadioGroup;
60 lblGhostDropDownCount: TLabel;
61 spnGhostDropDownCount: TSpinEdit;
62 cbxIgnoreTimeCritical: TCheckBox;
63 cbxAutoClip: TCheckBox;
65 tvwCategory: TTreeView;
68 cbxConfirmOnTabClose: TCheckBox;
69 tstConnection: TTabSheet;
71 lblProxyAddress: TLabel;
74 edtProxyAddress: TEdit;
76 cbxUseHttpProxy: TCheckBox;
77 spnReconnectWait: TSpinEdit;
78 lblReconnectWait: TLabel;
79 lblPartialConfirmFormat: TLabel;
80 edtPartialConfirmFormat: TEdit;
81 cbxAutoPartialConfirm: TCheckBox;
82 tstPlayTime: TTabSheet;
83 grpPlayTimeParams: TGroupBox;
84 lblPlayTimeProfile: TLabel;
85 cbxPlayTimeProfile: TComboBox;
86 spnCostDBChar: TSpinEdit;
87 spnCostWait: TSpinEdit;
88 spnCostSurface: TSpinEdit;
89 spnCostChar: TSpinEdit;
90 spnCostQuickChar: TSpinEdit;
92 lblCostSurface: TLabel;
94 lblCostDBChar: TLabel;
95 lblCostQuickChar: TLabel;
96 btnSavePlayTimeProfile: TButton;
97 lvwCostSpecials: TListView;
98 lblCostSpecials: TLabel;
99 btnPlaySpecialAdd: TButton;
100 btnPlaySpecialDelete: TButton;
101 gbxTabWidth: TGroupBox;
102 cbxAutoTabWidth: TCheckBox;
103 spnTabWidth: TSpinEdit;
105 edtBrowserName: TEdit;
106 BrowserLocateOpenDialog: TOpenDialog;
107 btnBrowserLocate: TButton;
108 tstPresetReplace: TTabSheet;
109 ReplacePresetList: TfrmReplacePresetList;
110 cbxAskUseHttpProxy: TCheckBox;
111 cbxNoWarnOfEmptyFMO: TCheckBox;
112 procedure FormClose(Sender: TObject; var Action: TCloseAction);
113 procedure edtProxyPortKeyPress(Sender: TObject; var Key: Char);
114 procedure ctvBottleNodeChecked(Sender: TObject;
115 Node: TCPCConfigItemNode);
116 procedure ctvBottleNodeChecking(Sender: TObject;
117 Node: TCPCConfigItemNode; var Allow: Boolean);
118 procedure tstRuleShow(Sender: TObject);
119 procedure btnUseCurrentJoinChannelsClick(Sender: TObject);
120 procedure btnVisibleGhostsClick(Sender: TObject);
121 procedure lvwPluginListDblClick(Sender: TObject);
122 procedure edtLUIDEnter(Sender: TObject);
123 procedure edtLUIDExit(Sender: TObject);
124 procedure btnCopyLUIDClick(Sender: TObject);
125 procedure FormCreate(Sender: TObject);
126 procedure tvwCategoryChange(Sender: TObject; Node: TTreeNode);
127 procedure tvwCategoryMouseMove(Sender: TObject; Shift: TShiftState; X,
129 procedure cbxPlayTimeProfileChange(Sender: TObject);
130 procedure btnSavePlayTimeProfileClick(Sender: TObject);
131 procedure spnCostWaitChange(Sender: TObject);
132 procedure btnPlaySpecialAddClick(Sender: TObject);
133 procedure btnPlaySpecialDeleteClick(Sender: TObject);
134 procedure lvwCostSpecialsDblClick(Sender: TObject);
135 procedure spnTabWidthChange(Sender: TObject);
136 procedure cbxAutoTabWidthClick(Sender: TObject);
137 procedure btnBrowserLocateClick(Sender: TObject);
138 procedure tstPresetReplaceShow(Sender: TObject);
142 FSpinUpdateFlag: boolean;
143 procedure LoadPlayTimeProfiles;
144 procedure PlayTimeParamsToSpinControl(Params: TSsPlayTimeParams);
145 procedure SpinControlToPlayTimeParams(Params: TSsPlayTimeParams);
146 procedure UpdateSpecialChars;
153 frmSetting: TfrmSetting;
157 ChannelDefaultGhost = '(
\83`
\83\83\83\93\83l
\83\8b\90\84\8f§
\83S
\81[
\83X
\83g)';
159 UnCheckedBottle = 17;
168 procedure TfrmSetting.Execute;
172 PageControl.ActivePage := tstGeneral;
173 memDefaultScript.Text := Pref.DefaultScript;
174 cbxShowRuler.Checked := Pref.ShowRuler;
175 cbxIgnoreTimeCritical.Checked := Pref.IgnoreTimeCritical;
176 edtPartialConfirmFormat.Text := Pref.PartialConfirmFormat;
177 cbxAutoPartialConfirm.Checked := Pref.AutoPartialConfirm;
178 cbxConfirmOnExit.Checked := Pref.ConfirmOnExit;
179 cbxConfirmOnTabClose.Checked := Pref.ConfirmOnTabClose;
180 cbxAutoClip.Checked := Pref.AutoClip;
182 with frmColorSetting do begin
183 Color['H'] := Pref.TalkColorH;
184 Color['U'] := Pref.TalkColorU;
185 Color['Synchro'] := Pref.TalkColorS;
186 Color['Tag'] := Pref.MarkUpColor;
187 Color['Meta'] := Pref.MetaWordColor;
188 Color['Error'] := Pref.MarkErrorColor;
189 Color['Text'] := Pref.TextColor;
190 Color['Background'] := Pref.BgColor;
193 cbxPlayTimeProfile.Items.Clear;
194 cbxPlayTimeProfile.Items.Add(Pref.PlayTimeParams.ProfileName);
195 cbxPlayTimeProfile.ItemIndex := 0;
196 LoadPlayTimeProfiles;
197 PlayTimeParamsToSpinControl(Pref.PlayTimeParams);
200 cbxAutoStart.Checked := Pref.AutoStart;
201 rgpTabPosition.ItemIndex := Ord(Pref.TabPosition);
202 spnTabWidth.Value := Pref.TabWidth;
203 if Pref.TabWidth <= 0 then
204 spnTabWidth.Value := 0;
205 cbxAutoTabWidth.Checked := Pref.TabWidth <= 0;
206 spnGhostDropDownCount.Value := Pref.GhostDropDownCount;
208 with ctvBottle do begin
209 (GetNodeFromKeyPath('Arrive\NoTranslate') as TCPCCheckBoxNode).Checked := Pref.NoTranslate;
210 (GetNodeFromKeyPath('Arrive\NoDescript') as TCPCCheckBoxNode).Checked := Pref.NoDescript;
211 if Pref.NoTransUrl then
212 (GetNodeFromKeyPath('Arrive\UrlTag\NoSelection') as TCPCRadioNode).Check
214 (GetNodeFromKeyPath('Arrive\UrlTag\WithSelection') as TCPCRadioNode).Check;
215 (GetNodeFromKeyPath('Arrive\SilentWhenHidden') as TCPCCheckBoxNode).Checked := Pref.SilentWhenHidden;
216 (GetNodeFromKeyPath('Arrive\FixMessySurface') as TCPCCheckBoxNode).Checked := Pref.FixMessySurface;
217 (GetNodeFromKeyPath('Arrive\HUTagTo01Tag') as TCPCCheckBoxNode).Checked := Pref.HUTagTo01Tag;
218 (GetNodeFromKeyPath('Out\ResetIfGhostAfterSend') as TCPCCheckBoxNode).Checked := Pref.ResetIfGhostAfterSend;
219 (GetNodeFromKeyPath('Out\ClearAfterSend') as TCPCCheckBoxNode).Checked := Pref.ClearAfterSend;
220 (GetNodeFromKeyPath('Out\NeedConfirmBeforeSend') as TCPCCheckBoxNode).Checked := Pref.NeedConfirmBeforeSend;
221 (GetNodeFromKeyPath('Out\Confirm') as TCPCCheckBoxNode).Checked := not Pref.NoConfirm;
222 (GetNodeFromKeyPath('Out\Warn\ScopeChangeInSynchronize') as TCPCCheckBoxNode).Checked := Pref.WarnScopeChangeInSynchronize;
223 (GetNodeFromKeyPath('Out\Warn\YenTNotExist') as TCPCCheckBoxNode).Checked := Pref.WarnYenTNotExist;
226 on E: Exception do ShowMessage(E.Message);
228 //cbxIgnoreFrequentYenS.Checked := Pref.IgnoreFrequentYenS;
229 spnWaitScriptEnd.Value := Pref.WaitScriptEnd;
231 rgpWhenReturn.ItemIndex := Ord(Pref.WhenReturn);
232 rgpWhenShiftReturn.ItemIndex := Ord(Pref.WhenShiftReturn);
233 rgpWhenCtrlReturn.ItemIndex := Ord(Pref.WhenCtrlReturn);
235 cbxUseHttpProxy.Checked := Pref.UseHttpProxy;
236 cbxAskUseHttpProxy.Checked := Pref.AskUseHttpProxy;
237 edtProxyAddress.Text := Pref.ProxyAddress;
238 edtProxyPort.Text := IntToStr(Pref.ProxyPort);
240 spnReconnectWait.Value := Pref.ReconnectWait;
242 edtLUID.Text := Pref.LUID;
244 memFMOName.Lines := Pref.FMOName;
245 cbxHideGhosts.Checked := Pref.HideGhosts;
246 memAutoJoinChannels.Lines := Pref.AutoJoinChannels;
247 cbxNoExtraSSTPHeaders.Checked := Pref.NoExtraSSTPHeaders;
249 with ctvSurfacePreview do
251 (GetNodeFromKeyPath('OnHint\DoPreview') as TCPCCheckBoxNode).Checked := Pref.SurfacePreviewOnHint;
252 (GetNodeFromKeyPath('OnScriptPoint\DoPreview') as TCPCCheckBoxNode).Checked := Pref.SurfacePreviewOnScriptPoint;
253 Node := GetNodeFromKeyPath('OnScriptPoint\Position') as TCPCGroupNode;
254 (Node.Item[Ord(Pref.SurfacePreviewOnScriptPointPosition)] as TCPCRadioNode).Check;
256 for i := 0 to Spps.Count-1 do
258 with lvwPluginList.Items.Add do
260 Caption := ExtractFileName(Spps.SppItem[i].ModuleName);
261 SubItems.Add(Spps.SppItem[i].PluginName);
264 edtBrowserName.Text := Pref.BrowserExeName;
265 cbxNoWarnOfEmptyFMO.Checked := Pref.NoWarnOfEmptyFMO;
271 procedure TfrmSetting.FormClose(Sender: TObject; var Action: TCloseAction);
275 Pref.DefaultScript := memDefaultScript.Text;
276 Pref.ShowRuler := cbxShowRuler.Checked;
277 Pref.IgnoreTimeCritical := cbxIgnoreTimeCritical.Checked;
278 Pref.PartialConfirmFormat := edtPartialConfirmFormat.Text;
279 Pref.AutoPartialConfirm := cbxAutoPartialConfirm.Checked;
280 Pref.ConfirmOnExit := cbxConfirmOnExit.Checked;
281 Pref.ConfirmOnTabClose := cbxConfirmOnTabClose.Checked;
282 Pref.AutoClip := cbxAutoClip.Checked;
284 with frmColorSetting do begin
285 Pref.TalkColorH := Color['H'];
286 Pref.TalkColorU := Color['U'];
287 Pref.TalkColorS := Color['Synchro'];
288 Pref.MarkUpColor := Color['Tag'];
289 Pref.MetaWordColor := Color['Meta'];
290 Pref.MarkErrorColor := Color['Error'];
291 Pref.TextColor := Color['Text'];
292 Pref.BgColor := Color['Background'];
295 Pref.PlayTimeParams.ProfileName := cbxPlayTimeProfile.Text;
296 SpinControlToPlayTimeParams(Pref.PlayTimeParams);
298 Pref.AutoStart := cbxAutoStart.Checked;
299 Pref.TabPosition := TTabPosition(rgpTabPosition.ItemIndex);
300 Pref.TabWidth := spnTabWidth.Value;
301 if cbxAutoTabWidth.Checked then
303 Pref.GhostDropDownCount := spnGhostDropDownCount.Value;
305 with ctvBottle do begin
306 Pref.NoTranslate := (GetNodeFromKeyPath('Arrive\NoTranslate') as TCPCCheckBoxNode).Checked;
307 Pref.NoDescript := (GetNodeFromKeyPath('Arrive\NoDescript') as TCPCCheckBoxNode).Checked;
308 Pref.NoTransUrl := (GetNodeFromKeyPath('Arrive\UrlTag\NoSelection') as TCPCRadioNode).Checked;
309 Pref.SilentWhenHidden := (GetNodeFromKeyPath('Arrive\SilentWhenHidden') as TCPCCheckBoxNode).Checked;
310 Pref.FixMessySurface := (GetNodeFromKeyPath('Arrive\FixMessySurface') as TCPCCheckBoxNode).Checked;
311 Pref.HUTagTo01Tag := (GetNodeFromKeyPath('Arrive\HUTagTo01Tag') as TCPCCheckBoxNode).Checked;
312 Pref.ResetIfGhostAfterSend := (GetNodeFromKeyPath('Out\ResetIfGhostAfterSend') as TCPCCheckBoxNode).Checked;
313 Pref.ClearAfterSend := (GetNodeFromKeyPath('Out\ClearAfterSend') as TCPCCheckBoxNode).Checked;
314 Pref.NeedConfirmBeforeSend := (GetNodeFromKeyPath('Out\NeedConfirmBeforeSend') as TCPCCheckBoxNode).Checked;
315 Pref.NoConfirm := not (GetNodeFromKeyPath('Out\Confirm') as TCPCCheckBoxNode).Checked;
316 Pref.WarnYenTNotExist := (GetNodeFromKeyPath('Out\Warn\YenTNotExist') as TCPCCheckBoxNode).Checked;
317 Pref.WarnScopeChangeInSynchronize := (GetNodeFromKeyPath('Out\Warn\ScopeChangeInSynchronize') as TCPCCheckBoxNode).Checked;
320 on E: Exception do ShowMessage(E.Message);
322 //Pref.IgnoreFrequentYenS := cbxIgnoreFrequentYenS.Checked;
323 Pref.WaitScriptEnd := spnWaitScriptEnd.Value;
325 Pref.WhenReturn := TReturnKeyFunction(rgpWhenReturn.ItemIndex);
326 Pref.WhenShiftReturn := TReturnKeyFunction(rgpWhenShiftReturn.ItemIndex);
327 Pref.WhenCtrlReturn := TReturnKeyFunction(rgpWhenCtrlReturn.ItemIndex);
329 Pref.UseHttpProxy := cbxUseHttpProxy.Checked;
330 Pref.AskUseHttpProxy := cbxAskUseHttpProxy.Checked;
331 Pref.ProxyAddress := edtProxyAddress.Text;
332 Pref.ProxyPort := StrToInt(edtProxyPort.Text);
334 Pref.ReconnectWait := spnReconnectWait.Value;
336 Pref.LUID := edtLUID.Text;
338 Pref.FMOName := memFMOName.Lines;
339 SakuraSeeker.FileMappingTarget := Pref.FMOName;
340 Pref.HideGhosts := cbxHideGhosts.Checked;
341 Pref.NoExtraSSTPHeaders := cbxNoExtraSSTPHeaders.Checked;
343 Pref.AutoJoinChannels := memAutoJoinChannels.Lines;
345 with ctvSurfacePreview do
347 Pref.SurfacePreviewOnHint := (GetNodeFromKeyPath('OnHint\DoPreview') as TCPCCheckBoxNode).Checked;
348 Pref.SurfacePreviewOnScriptPoint := (GetNodeFromKeyPath('OnScriptPoint\DoPreview') as TCPCCheckBoxNode).Checked;
349 Node := GetNodeFromKeyPath('OnScriptPoint\Position') as TCPCGroupNode;
350 for i := 0 to Node.Count-1 do
351 if (Node.Item[i] as TCPCRadioNode).Checked then
352 Pref.SurfacePreviewOnScriptPointPosition := TSurfacePreviewOnScriptPointPosition(i);
355 Pref.BrowserExeName := edtBrowserName.Text;
356 Pref.NoWarnOfEmptyFMO := cbxNoWarnOfEmptyFMO.Checked;
359 procedure TfrmSetting.edtProxyPortKeyPress(Sender: TObject; var Key: Char);
361 if not(Key in ['0'..'9']) then Key := Char(0);
364 procedure TfrmSetting.ctvBottleNodeChecked(Sender: TObject;
365 Node: TCPCConfigItemNode);
367 //ShowMessage(ctvBottle.GetFullKeyPath(Node));
370 procedure TfrmSetting.ctvBottleNodeChecking(Sender: TObject;
371 Node: TCPCConfigItemNode; var Allow: Boolean);
373 if Node.KeyName = 'IgnoreBottle' then begin
374 MessageDlg('
\82±
\82Ì
\8b@
\94\
\82Í
\8eÀ
\91\95\82³
\82ê
\82Ä
\82¢
\82Ü
\82¹
\82ñ', mtError, [mbOk], 0);
379 procedure TfrmSetting.tstRuleShow(Sender: TObject);
381 frmRuleList.UpdateDisplay;
384 procedure TfrmSetting.btnUseCurrentJoinChannelsClick(Sender: TObject);
386 memAutoJoinChannels.Lines := JoinChannels;
389 procedure TfrmSetting.btnVisibleGhostsClick(Sender: TObject);
391 FullGhosts: TStringList;
393 FullGhosts := TStringList.Create;
394 SakuraSeeker.BeginDetect;
396 for i := 0 to SakuraSeeker.Count-1 do
397 FullGhosts.Add(SakuraSeeker[i].Name);
398 StrListEdit(Pref.VisibleGhostsList, '
\83S
\81[
\83X
\83g
\82ð
\8ew
\92è', true, FullGhosts);
404 procedure TfrmSetting.lvwPluginListDblClick(Sender: TObject);
407 if lvwPluginList.Selected = nil then
409 Index := lvwPluginList.Selected.Index;
410 if pfConfigure in Spps.SppItem[Index].PluginFunctions then
411 Spps.SppItem[Index].Configure
413 ShowMessage('
\92Ç
\89Á
\82Ì
\90Ý
\92è
\8d\80\96Ú
\82Í
\82 \82è
\82Ü
\82¹
\82ñ
\81B');
416 procedure TfrmSetting.edtLUIDEnter(Sender: TObject);
418 FOldLUID := edtLUID.Text;
421 procedure TfrmSetting.edtLUIDExit(Sender: TObject);
426 TmpLUID := edtLUID.Text;
429 if Length(TmpLUID) <> 82 then
432 while i <= Length(TmpLUID) do
434 if not (TmpLUID[i] in ['0'..'9', 'a'..'z', 'A'..'Z', '.', ',']) then
443 ShowMessage('LUID
\82Ì
\93à
\97e
\82ª
\95s
\90³
\82Å
\82·');
444 edtLUID.Text := FOldLUID;
448 procedure TfrmSetting.btnCopyLUIDClick(Sender: TObject);
450 Clipboard.SetTextBuf(PChar(edtLUID.Text));
453 procedure TfrmSetting.FormCreate(Sender: TObject);
459 for i := 0 to PageControl.PageCount-1 do
461 Cap := PageControl.Pages[i].Caption;
462 if Pos(':', Cap) > 0 then
463 Cap := Copy(Cap, 1, Pos(':', Cap)-1);
464 Node := tvwCategory.Items.Add(nil, Cap);
465 Node.ImageIndex := -1;
466 Node.SelectedIndex := SettingIcon;
468 tvwCategoryChange(Self, tvwCategory.Items[0]);
469 tvwCategory.Items[0].Selected := true;
472 procedure TfrmSetting.tvwCategoryChange(Sender: TObject; Node: TTreeNode);
474 PageControl.ActivePageIndex := Node.Index;
475 pnlHeading.Caption := PageControl.ActivePage.Caption;
478 procedure TfrmSetting.tvwCategoryMouseMove(Sender: TObject;
479 Shift: TShiftState; X, Y: Integer);
485 Node := tvwCategory.GetNodeAt(X, Y);
488 NewHint := PageControl.Pages[Node.Index].Caption;
489 if tvwCategory.Hint <> NewHint then
491 tvwCategory.Hint := NewHint;
493 Application.ActivateHint(CPos);
497 tvwCategory.Hint := '';
498 Application.HideHint;
502 procedure TfrmSetting.PlayTimeParamsToSpinControl(Params: TSsPlayTimeParams);
504 FSpinUpdateFlag := true;
507 spnCostWait.Value := CostWait;
508 spnCostSurface.Value := CostSurface;
509 spnCostChar.Value := CostChar;
510 spnCostDBChar.Value := CostDBChar;
511 spnCostQuickChar.Value := CostQuickChar;
512 lvwCostSpecials.Items.Clear;
514 FSpinUpdateFlag := false;
517 procedure TfrmSetting.SpinControlToPlayTimeParams(Params: TSsPlayTimeParams);
521 CostWait := spnCostWait.Value;
522 CostSurface := spnCostSurface.Value;
523 CostChar := spnCostChar.Value;
524 CostDBChar := spnCostDBChar.Value;
525 CostQuickChar := spnCostQuickChar.Value;
530 procedure TfrmSetting.LoadPlayTimeProfiles;
535 Path := ExtractFilePath(Application.ExeName);
536 i := FindFirst(Path + 'playtime\*.txt', 0, F);
539 Item := ChangeFileExt(F.Name, '');
540 if cbxPlayTimeProfile.Items.IndexOf(Item) < 0 then
541 cbxPlayTimeProfile.Items.Add(ChangeFileExt(F.Name, ''));
548 procedure TfrmSetting.cbxPlayTimeProfileChange(Sender: TObject);
550 Params: TSsPlayTimeParams;
552 Path, ProName: String;
555 Strs := TStringList.Create;
556 ProName := cbxPlayTimeProfile.Text;
558 Path := ExtractFilePath(Application.ExeName) + 'playtime\';
559 Strs.LoadFromFile(Path + ProName + '.txt');
560 Params := StringToComponent(Strs.Text) as TSsPlayTimeParams;
562 PlayTimeParamsToSpinControl(Params);
563 Pref.PlayTimeParams.Assign(Params);
571 with cbxPlayTimeProfile do
574 LoadPlayTimeProfiles;
575 ItemIndex := Items.IndexOf(ProName);
582 procedure TfrmSetting.btnSavePlayTimeProfileClick(Sender: TObject);
584 ProfileName, Path, FileName: String;
587 ProfileName := cbxPlayTimeProfile.Text;
588 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
591 Path := ExtractFilePath(Application.ExeName) + 'playtime\';
592 FileName := Path + ProfileName + '.txt';
593 if FileExists(FileName) then
594 if MessageDlg(Format('
\83v
\83\8d\83t
\83@
\83C
\83\8b"%s"
\82ð
\8fã
\8f\91\82«
\82µ
\82Ü
\82·', [ProfileName]),
595 mtConfirmation, mbOkCancel, 0) = mrCancel then
597 Strs := TStringList.Create;
599 SpinControlToPlayTimeParams(Pref.PlayTimeParams);
600 Pref.PlayTimeParams.ProfileName := ProfileName;
601 Strs.Text := ComponentToString(Pref.PlayTimeParams);
602 Strs.SaveToFile(FileName);
606 with cbxPlayTimeProfile do
609 Items.Add(ProfileName);
611 LoadPlayTimeProfiles;
615 ShowMessage('
\95Û
\91¶
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½
\81B' + E.Message);
620 procedure TfrmSetting.spnCostWaitChange(Sender: TObject);
624 Modified = '(
\95Ï
\8dX
\8dÏ
\82Ý)';
626 if FSpinUpdateFlag then
628 ProName := cbxPlayTimeProfile.Text;
629 if Copy(ProName, Length(ProName)-Length(Modified)+1, Length(Modified)) <> Modified then
631 ProName := Format('%s%s', [ProName, Modified]);
632 with cbxPlayTimeProfile do
637 LoadPlayTimeProfiles;
642 procedure TfrmSetting.btnPlaySpecialAddClick(Sender: TObject);
645 SPChar: TSsPlayTimeSpecialChar;
647 Application.CreateForm(TfrmSpecialCharEditor, frmSpecialCharEditor);
649 with frmSpecialCharEditor do
655 SPChar := Pref.PlayTimeParams.SpecialChars.Add as TSsPlayTimeSpecialChar;
656 SPChar.Char := SpecialChar;
658 Item := lvwCostSpecials.Items.Add;
659 Item.Caption := SPChar.DisplayChar;
660 Item.SubItems.Add(IntToStr(Cost));
661 spnCostWaitChange(Self);
665 frmSpecialCharEditor.Release;
669 procedure TfrmSetting.btnPlaySpecialDeleteClick(Sender: TObject);
671 with lvwCostSpecials do
672 if Selected <> nil then
674 Pref.PlayTimeParams.SpecialChars.Delete(Selected.Index);
676 spnCostWaitChange(Self);
680 procedure TfrmSetting.lvwCostSpecialsDblClick(Sender: TObject);
683 SPChar: TSsPlayTimeSpecialChar;
685 with lvwCostSpecials do
690 Application.CreateForm(TfrmSpecialCharEditor, frmSpecialCharEditor);
692 with frmSpecialCharEditor do
694 SPChar := Pref.PlayTimeParams.SpecialChars.Items[Item.Index] as TSsPlayTimeSpecialChar;
695 SpecialChar := SPChar.Char;
699 SPChar.Char := SpecialChar;
701 Item.Caption := SPChar.DisplayChar;
702 Item.SubItems[0] := IntToStr(Cost);
703 spnCostWaitChange(Self);
707 frmSpecialCharEditor.Release;
713 procedure TfrmSetting.UpdateSpecialChars;
717 SPChar: TSsPlayTimeSpecialChar;
719 with lvwCostSpecials do
722 for i := 0 to Pref.PlayTimeParams.SpecialChars.Count-1 do
724 SPChar := Pref.PlayTimeParams.SpecialChars.Items[i] as TSsPlayTimeSpecialChar;
726 Item.Caption := SPChar.DisplayChar;
727 Item.SubItems.Add(IntToStr(SPChar.Wait));
732 procedure TfrmSetting.spnTabWidthChange(Sender: TObject);
734 with cbxAutoTabWidth do
737 cbxAutoTabWidth.Checked := false;
738 OnClick := cbxAutoTabWidthClick;
742 procedure TfrmSetting.cbxAutoTabWidthClick(Sender: TObject);
748 if not cbxAutoTabWidth.Checked then
752 OnChange := spnTabWidthChange;
757 procedure TfrmSetting.btnBrowserLocateClick(Sender: TObject);
759 with BrowserLocateOpenDialog do
761 FileName := edtBrowserName.Text;
763 edtBrowserName.Text := FileName;
767 procedure TfrmSetting.tstPresetReplaceShow(Sender: TObject);
769 ReplacePresetList.UpdateControls;