• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
Keine Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

ギコナビ


Commit MetaInfo

Revision660fc526f34d8bb1e26f37c1f46bc3a90fd58599 (tree)
Zeit2006-08-13 07:20:16
Autorcvs2git <cvs2git>
Commitercvs2git

Log Message

This commit was manufactured by cvs2svn to create tag 'v1_54_0_678'.

Ändern Zusammenfassung

Diff

--- a/AbonUnit.pas
+++ b/AbonUnit.pas
@@ -883,8 +883,11 @@ begin
883883 Dec(ps);
884884
885885 //ƒVƒŠƒAŒêƒuƒ‰ƒNƒ‰‚Ì‚Å‚È‚¢
886- if (icode <1792) or (icode > 1871) then
887- Result := Result + Copy(AString, 1, ps - PChar(AString) + 1);
886+ if ( icode < 1758) or
887+ ((icode > 1871) and (icode < 1958)) or
888+ (icode > 1968) then begin
889+ Result := Result + Copy(AString, 1, ps - PChar(AString) + 1);
890+ end;
888891
889892 Delete(AString, 1, ps - PChar(AString) + 1);
890893 end else begin
--- a/BrowserRecord.pas
+++ b/BrowserRecord.pas
@@ -32,6 +32,7 @@ type
3232 //property Movement : string read FMovement write FMovement;
3333 procedure Move(const AName: string);
3434 procedure IDAnchorPopup(Abody :string);
35+ procedure OpenFindDialog;
3536 end;
3637 // BrowserRecord‚ɂ‚¢‚Ä‚¢‚éFBrowser‚ðŠO‚·
3738 procedure ReleaseBrowser( BRecord: TBrowserRecord);
@@ -148,6 +149,34 @@ begin
148149 end;
149150 end;
150151 end;
151-
152+{
153+\brief ŒŸõƒ_ƒCƒAƒƒOŒÄ‚яo‚µ
154+}
155+procedure TBrowserRecord.OpenFindDialog();
156+const
157+ CGID_WebBrowser: TGUID = '{ED016940-BD5B-11cf-BA4E-00C04FD70816}';
158+ HTMLID_FIND = 1;
159+var
160+ CmdTarget : IOleCommandTarget;
161+ vaIn, vaOut: OleVariant;
162+ PtrGUID: PGUID;
163+begin
164+ if (Self.Browser <> nil) and (Self.Browser.Document <> nil) then begin
165+ New(PtrGUID);
166+ PtrGUID^ := CGID_WebBrowser;
167+ try
168+ Self.Browser.Document.QueryInterface(IOleCommandTarget, CmdTarget);
169+ if CmdTarget <> nil then begin
170+ try
171+ CmdTarget.Exec(PtrGUID, HTMLID_FIND, 0, vaIn, vaOut);
172+ finally
173+ CmdTarget._Release;
174+ end;
175+ end;
176+ except
177+ end;
178+ Dispose(PtrGUID);
179+ end;
180+end;
152181
153182 end.
--- a/Giko.dfm
+++ b/Giko.dfm
@@ -159,7 +159,7 @@ object GikoForm: TGikoForm
159159 object ToolBar1: TToolBar
160160 Left = 2
161161 Top = 4
162- Width = 15
162+ Width = 16
163163 Height = 18
164164 Align = alNone
165165 AutoSize = True
@@ -971,7 +971,7 @@ object GikoForm: TGikoForm
971971 OnResize = AddressToolBarResize
972972 object AddressComboBox: TComboBox
973973 Left = 0
974- Top = 0
974+ Top = 1
975975 Width = 177
976976 Height = 20
977977 DropDownCount = 20
@@ -4520,6 +4520,12 @@ object GikoForm: TGikoForm
45204520 object N61: TMenuItem
45214521 Caption = '-'
45224522 end
4523+ object N77: TMenuItem
4524+ Action = GikoDM.StoredTaskTrayAction
4525+ end
4526+ object N78: TMenuItem
4527+ Caption = '-'
4528+ end
45234529 object ExitMenu: TMenuItem
45244530 Action = GikoDM.ExitAction
45254531 end
--- a/Giko.pas
+++ b/Giko.pas
@@ -18,7 +18,8 @@ uses
1818 Editor, RoundData, GikoPanel, Favorite, HTMLDocumentEvent,
1919 HintWindow, GikoCoolBar, GikoListView, Search, ExternalBoardManager,
2020 ExternalBoardPlugInMain, StdActns, Variants, ExtActns,IdTCPConnection,
21- IdBaseComponent, IdTCPClient, AppEvnts, BrowserRecord;
21+ IdBaseComponent, IdTCPClient, AppEvnts, BrowserRecord, MoveHistoryItem,
22+ ShellAPI;
2223
2324 const
2425 NGWORDNAME_PANEL = 3;
@@ -409,6 +410,8 @@ type
409410 DAT3: TMenuItem;
410411 N76: TMenuItem;
411412 FavoriteTreeItemNameCopyPopupMenu: TMenuItem;
413+ N77: TMenuItem;
414+ N78: TMenuItem;
412415 procedure FormCreate(Sender: TObject);
413416 procedure FormDestroy(Sender: TObject);
414417 procedure BrowserStatusTextChange(Sender: TObject;
@@ -594,6 +597,7 @@ type
594597 FOrigenCaption: String; //‚¨‹C‚É“ü‚èƒcƒŠ[‚̃AƒCƒeƒ€•ÒWŽž‚̕ҏW‘O‚Ì•¶Žš—ñ
595598 FPreviewBrowserRect: TRect; ///< ƒvƒŒƒrƒ…[‚Ì•\Ž¦ˆÊ’u‚ð‹L‰¯‚·‚é
596599 FActionListGroupIndexes: array of Integer; ///<GikoDMã‚̃AƒNƒVƒ‡ƒ“ƒŠƒXƒg‚ÌŠeƒAƒNƒVƒ‡ƒ“‚ɐݒ肳‚ꂽGroupIndex‚ð•Û‘¶‚·‚é”z—ñ
600+
597601 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
598602 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
599603 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
@@ -665,6 +669,10 @@ type
665669 procedure RefreshListView(Thread: TThreadItem);
666670 //! ƒXƒŒƒbƒhˆê——‚Ì•\Ž¦”͈͐ݒèƒ`ƒFƒbƒNƒNƒŠƒA
667671 procedure ClearThreadRengeAction;
672+ //! ƒ^ƒXƒNƒgƒŒƒC‚̃AƒCƒRƒ“íœ•ƒtƒH[ƒ€•\Ž¦
673+ procedure UnStoredTaskTray;
674+ //! ƒŒƒXƒGƒfƒBƒ^‚Ì•\Ž¦”ñ•\Ž¦
675+ procedure ShowEditors(nCmdShow: Integer);
668676 protected
669677 procedure CreateParams(var Params: TCreateParams); override;
670678 procedure WndProc(var Message: TMessage); override;
@@ -677,6 +685,7 @@ type
677685 LastRoundTime: TDateTime;
678686 BrowserNullTab: TBrowserRecord;
679687 FControlThread: TThreadControl;
688+ FIconData : TNotifyIconData;
680689 procedure MoveToURL(const inURL: string);
681690 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
682691 procedure ReloadBBS;
@@ -788,6 +797,10 @@ type
788797 //! ƒc[ƒ‹ƒo[‚ɃXƒŒiž‚݃Rƒ“ƒ{ƒ{ƒbƒNƒX‚ðÝ’è‚·‚é
789798 procedure SetSelectComboBox();
790799
800+ //! ƒ^ƒXƒNƒgƒŒƒC‚ÉŠi”[‚µ‚½ƒAƒCƒRƒ“‚ðƒNƒŠƒbƒN‚µ‚½‚Æ‚«‚̏ˆ—
801+ procedure TaskTrayIconMessage(var Msg : TMsg); message WM_USER + 2010;
802+ //! ƒ^ƒXƒNƒgƒŒƒC‚ɃAƒCƒRƒ““o˜^•ƒtƒH[ƒ€‰B‚µ
803+ procedure StoredTaskTray;
791804 published
792805 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
793806 end;
@@ -820,7 +833,7 @@ implementation
820833
821834 uses
822835 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
823- YofUtils, ShellAPI, ToolBarUtil, ToolBarSetting,
836+ YofUtils, ToolBarUtil, ToolBarSetting,
824837 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
825838 FavoriteArrange, AddressHistory, Preview, Gesture,
826839 About, Option, Round, Splash, Sort, ListSelect, Imm,
@@ -843,6 +856,7 @@ const
843856 USER_MINIMIZED = WM_USER + 2002;
844857 USER_SETLINKBAR = WM_USER + 2003;
845858 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
859+ USER_TASKTRAY = WM_USER + 2010;
846860 {$R *.DFM}
847861
848862 procedure TGikoForm.CreateParams(var Params: TCreateParams);
@@ -889,7 +903,8 @@ begin
889903 GetGroupIndex(GikoDM.GikoFormActionList);
890904 FSearchDialog := nil;
891905 CreateBrowsers(BROWSER_COUNT);
892-
906+ FIconData.uID := 0;
907+
893908 //ƒƒjƒ…[ƒtƒHƒ“ƒg
894909 SetMenuFont;
895910
@@ -1287,6 +1302,7 @@ begin
12871302
12881303 //“ü—̓AƒVƒXƒg‹@\‚̏‰Šú‰»
12891304 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1305+
12901306 end;
12911307
12921308 // CoolBar ‚̐ݒè‚ð•Ï”‚É•Û‘¶
@@ -3884,15 +3900,17 @@ var
38843900 wkIntTo: Integer;
38853901 BNum, BRes: string;
38863902 threadItem: TThreadItem;
3903+ aElement : IHTMLElement;
38873904 begin
3888-
38893905 Cancel := True;
3890- if (IHTMLDocument2(TWebBrowser(Sender).Document).activeElement <> nil) then begin
3891- Text := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.Get_outerText;
3892- Html := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.Get_outerHTML;
3906+ aElement := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement;
3907+ if ( aElement <> nil) then begin
3908+ Text := aElement.Get_outerText;
3909+ Html := aElement.Get_outerHTML;
38933910 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
38943911 or (AnsiPos('„„', Text) = 1) or (AnsiPos('„', Text) = 1) then begin
38953912 if GikoSys.Setting.ResAnchorJamp then begin
3913+
38963914 Text := ZenToHan(Trim(Text));
38973915
38983916 if(AnsiPos('>>', Text) = 1) then begin
@@ -3915,6 +3933,7 @@ begin
39153933
39163934 if wkIntSt <> 0 then begin
39173935 FActiveContent.IDAnchorPopup('');
3936+ MoveHisotryManager.pushItem(FActiveContent);
39183937 BrowserMovement(IntToStr(wkIntSt));
39193938 end;
39203939
@@ -3948,6 +3967,7 @@ begin
39483967 AddressComboBox.Items.Insert(0, URL);
39493968 end;
39503969 end;
3970+ MoveHisotryManager.pushItem(FActiveContent);
39513971 MoveToURL( URL );
39523972 end;
39533973 end;
@@ -4823,14 +4843,21 @@ begin
48234843 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
48244844 Exit;
48254845 WM_SYSCOMMAND:
4826- if Message.WParam = SC_MINIMIZE then
4846+ if Message.WParam = SC_MINIMIZE then begin
48274847 OnMinimize;
4848+ PostMessage(Handle, USER_MINIMIZED, 0, 0);
4849+ end;
48284850 USER_TREECLICK:
48294851 TreeClick( TreeView.Selected );
48304852 USER_RESIZED:
48314853 OnResized;
48324854 USER_MINIMIZED:
4833- OnMinimized;
4855+ begin
4856+ if (GikoSys.Setting.StoredTaskTray) then begin
4857+ StoredTaskTray;
4858+ end;
4859+ OnMinimized;
4860+ end;
48344861 USER_SETLINKBAR:
48354862 SetLinkBar;
48364863 USER_DOCUMENTCOMPLETE:
@@ -7696,6 +7723,69 @@ begin
76967723 end;
76977724 end;
76987725
7726+procedure TGikoForm.TaskTrayIconMessage(var Msg: TMsg);
7727+begin
7728+ // ¶ƒNƒŠƒbƒN‚È‚ç•œŒ³‚·‚é
7729+ if (Msg.wParam = WM_LBUTTONUP) then begin
7730+ UnStoredTaskTray;
7731+ end;
7732+end;
7733+//! ƒ^ƒXƒNƒgƒŒƒC‚ɃAƒCƒRƒ““o˜^•ƒtƒH[ƒ€‰B‚µ
7734+procedure TGikoForm.StoredTaskTray;
7735+begin
7736+ try
7737+ if (FIconData.uID = 0) then begin
7738+ FIconData.cbSize := SizeOf(TNotifyIconData);
7739+ FIconData.uID := Self.Handle;
7740+ FIconData.Wnd := Handle;
7741+ FIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
7742+ FIconData.uCallbackMessage := USER_TASKTRAY;
7743+ FIconData.hIcon := Application.Icon.Handle; {ƒAƒCƒRƒ“Žw’è}
7744+ FIconData.szTip := 'ƒMƒRƒiƒr'; {ƒqƒ“ƒg•¶Žš—ñ}
7745+ Shell_NotifyIcon(NIM_ADD, @FIconData);
7746+ ShowEditors(SW_HIDE);
7747+ ShowWindow(Self.Handle, SW_HIDE);
7748+ end;
7749+ except
7750+ end;
7751+end;
7752+//! ƒ^ƒXƒNƒgƒŒƒC‚̃AƒCƒRƒ“íœ•ƒtƒH[ƒ€•\Ž¦
7753+procedure TGikoForm.UnStoredTaskTray;
7754+begin
7755+ try
7756+ try
7757+ Shell_NotifyIcon(NIM_DELETE, @FIconData);
7758+ SetForegroundWindow(Application.Handle);
7759+ except
7760+ end;
7761+ finally
7762+ FIconData.uID := 0;
7763+ // Action‚©‚çŠi”[‚µ‚½‚Æ‚«‚ÍTag‚Ì’l‚Í0ˆÈŠO
7764+ if (GikoDM.StoredTaskTrayAction.Tag = 0) then begin
7765+ ShowWindow(Self.Handle, SW_RESTORE);
7766+ end else begin
7767+ ShowWindow(Self.Handle, SW_SHOW);
7768+ end;
7769+ ShowEditors(SW_SHOW);
7770+ GikoDM.StoredTaskTrayAction.Tag := 0;
7771+ end;
7772+end;
7773+{
7774+\brief ƒŒƒXƒGƒfƒBƒ^‚Ì•\Ž¦”ñ•\Ž¦
7775+\param nCmdShow Windows.ShowWindow‚É‘—‚éƒpƒ‰ƒ[ƒ^‚Æ“¯‚¶
7776+}
7777+procedure TGikoForm.ShowEditors(nCmdShow: Integer);
7778+var
7779+ i : Integer;
7780+begin
7781+ // ƒŒƒXƒGƒfƒBƒ^‚ð’T‚·
7782+ for i := 0 to Screen.CustomFormCount - 1 do begin
7783+ if TObject(Screen.CustomForms[i]) is TEditorForm then
7784+ ShowWindow(Screen.CustomForms[i].Handle, nCmdShow);
7785+
7786+ end;
7787+end;
7788+
76997789 initialization
77007790 OleInitialize(nil);
77017791 finalization
--- a/GikoDataModule.dfm
+++ b/GikoDataModule.dfm
@@ -696,7 +696,7 @@ object GikoDM: TGikoDM
696696 Hint = #24038#12398#12479#12502#12434#36984#25246#12377#12427
697697 ImageIndex = 48
698698 OnExecute = LeftTabSelectActionExecute
699- OnUpdate = LeftmostTabSelectActionUpdate
699+ OnUpdate = LeftTabSelectActionUpdate
700700 end
701701 object RightTabSelectAction: TAction
702702 Category = #12473#12524#12483#12489
@@ -712,7 +712,7 @@ object GikoDM: TGikoDM
712712 Hint = #19968#30058#21491#12398#12479#12502#12434#36984#25246#12377#12427
713713 ImageIndex = 49
714714 OnExecute = RightmostTabSelectActionExecute
715- OnUpdate = RightTabSelectActionUpdate
715+ OnUpdate = RightmostTabSelectActionUpdate
716716 end
717717 object FavoriteAddAction: TAction
718718 Category = #12362#27671#12395#20837#12426
@@ -1235,6 +1235,70 @@ object GikoDM: TGikoDM
12351235 OnExecute = CloseAllEditorActionExecute
12361236 OnUpdate = CloseAllEditorActionUpdate
12371237 end
1238+ object PrevMoveHistory: TAction
1239+ Category = #25805#20316
1240+ Caption = #12522#12531#12463#23653#27508#12434#25147#12427
1241+ Hint = #12522#12531#12463#23653#27508#12434#25147#12427
1242+ OnExecute = PrevMoveHistoryExecute
1243+ OnUpdate = PrevMoveHistoryUpdate
1244+ end
1245+ object NextMoveHistory: TAction
1246+ Category = #25805#20316
1247+ Caption = #12522#12531#12463#23653#27508#12434#36914#12416
1248+ Hint = #12522#12531#12463#23653#27508#12434#36914#12416
1249+ OnExecute = NextMoveHistoryExecute
1250+ OnUpdate = NextMoveHistoryUpdate
1251+ end
1252+ object ClickActiveElementAction: TAction
1253+ Category = #12473#12524#12483#12489
1254+ Caption = #12450#12463#12486#12451#12502#12394#35201#32032#12434#12463#12522#12483#12463#12377#12427
1255+ Hint = #12450#12463#12486#12451#12502#12394#35201#32032#12434#12463#12522#12483#12463#12377#12427
1256+ OnExecute = ClickActiveElementActionExecute
1257+ end
1258+ object VKDownAction: TAction
1259+ Category = #25805#20316
1260+ Caption = #19979#30690#21360#12461#12540#25276#19979
1261+ Hint = #19979#30690#21360#12461#12540#25276#19979
1262+ OnExecute = VKDownActionExecute
1263+ end
1264+ object VKUpAction: TAction
1265+ Category = #25805#20316
1266+ Caption = #19978#30690#21360#12461#12540#25276#19979
1267+ Hint = #19978#30690#21360#12461#12540#25276#19979
1268+ OnExecute = VKUpActionExecute
1269+ end
1270+ object VKRightAction: TAction
1271+ Category = #25805#20316
1272+ Caption = #21491#30690#21360#12461#12540#25276#19979
1273+ Hint = #21491#30690#21360#12461#12540#25276#19979
1274+ OnExecute = VKRightActionExecute
1275+ end
1276+ object VKLeftAction: TAction
1277+ Category = #25805#20316
1278+ Caption = #24038#30690#21360#12461#12540#25276#19979
1279+ Hint = #24038#30690#21360#12461#12540#25276#19979
1280+ OnExecute = VKLeftActionExecute
1281+ end
1282+ object StoredTaskTrayAction: TAction
1283+ Category = #25805#20316
1284+ Caption = #12479#12473#12463#12488#12524#12452#12395#26684#32013#12377#12427
1285+ Hint = #12479#12473#12463#12488#12524#12452#12395#26684#32013#12377#12427
1286+ OnExecute = StoredTaskTrayActionExecute
1287+ end
1288+ object AllImageLinkToClipbordAction: TAction
1289+ Category = #12473#12524#12483#12489
1290+ Caption = #12452#12513#12540#12472#12522#12531#12463'URL'#21462#24471
1291+ Hint = #34920#31034#12373#12428#12390#12356#12427#12377#12409#12390#12398#12524#12473#12363#12425#12452#12513#12540#12472#12408#12398#12522#12531#12463'URL'#12434#12463#12522#12483#12503#12508#12540#12489#12395#12467#12500#12540#12377#12427
1292+ OnExecute = AllImageLinkToClipbordActionExecute
1293+ OnUpdate = DependActiveCntentLogActionUpdate
1294+ end
1295+ object NewImageLinkToClipBoardAction: TAction
1296+ Category = #12473#12524#12483#12489
1297+ Caption = #26032#30528#12524#12473#12452#12513#12540#12472#12522#12531#12463'URL'#21462#24471
1298+ Hint = #34920#31034#12373#12428#12390#12356#12427#26032#30528#12524#12473#12363#12425#12452#12513#12540#12472#12408#12398#12522#12531#12463'URL'#12434#12463#12522#12483#12503#12508#12540#12489#12395#12467#12500#12540#12377#12427
1299+ OnExecute = NewImageLinkToClipBoardActionExecute
1300+ OnUpdate = DependActiveCntentLogActionUpdate
1301+ end
12381302 end
12391303 object ToobarImageList: TImageList
12401304 Left = 44
--- a/GikoDataModule.pas
+++ b/GikoDataModule.pas
@@ -12,7 +12,7 @@ uses
1212 MSHTML_TLB,
1313 {$IFEND}
1414 ComCtrls, BrowserRecord, Graphics, Messages, Setting, Dialogs,
15- ActiveX;
15+ ActiveX, MoveHistoryItem;
1616
1717 const
1818 CAPTION_NAME: string = 'ƒMƒRƒiƒr';
@@ -219,6 +219,16 @@ type
219219 LiveItemAction: TAction;
220220 FavoriteTreeViewItemNameCopyAction: TAction;
221221 CloseAllEditorAction: TAction;
222+ PrevMoveHistory: TAction;
223+ NextMoveHistory: TAction;
224+ ClickActiveElementAction: TAction;
225+ VKDownAction: TAction;
226+ VKUpAction: TAction;
227+ VKRightAction: TAction;
228+ VKLeftAction: TAction;
229+ StoredTaskTrayAction: TAction;
230+ AllImageLinkToClipbordAction: TAction;
231+ NewImageLinkToClipBoardAction: TAction;
222232 procedure EditNGActionExecute(Sender: TObject);
223233 procedure ReloadActionExecute(Sender: TObject);
224234 procedure GoFowardActionExecute(Sender: TObject);
@@ -406,6 +416,20 @@ type
406416 procedure FavoriteTreeViewItemNameCopyActionExecute(Sender: TObject);
407417 procedure CloseAllEditorActionExecute(Sender: TObject);
408418 procedure CloseAllEditorActionUpdate(Sender: TObject);
419+ procedure PrevMoveHistoryUpdate(Sender: TObject);
420+ procedure PrevMoveHistoryExecute(Sender: TObject);
421+ procedure NextMoveHistoryUpdate(Sender: TObject);
422+ procedure NextMoveHistoryExecute(Sender: TObject);
423+ procedure ClickActiveElementActionExecute(Sender: TObject);
424+ procedure VKDownActionExecute(Sender: TObject);
425+ procedure VKUpActionExecute(Sender: TObject);
426+ procedure VKRightActionExecute(Sender: TObject);
427+ procedure VKLeftActionExecute(Sender: TObject);
428+ procedure StoredTaskTrayActionExecute(Sender: TObject);
429+ procedure LeftTabSelectActionUpdate(Sender: TObject);
430+ procedure RightmostTabSelectActionUpdate(Sender: TObject);
431+ procedure NewImageLinkToClipBoardActionExecute(Sender: TObject);
432+ procedure AllImageLinkToClipbordActionExecute(Sender: TObject);
409433 private
410434 { Private éŒ¾ }
411435 procedure ClearResFilter;
@@ -421,6 +445,11 @@ type
421445 procedure ClearSelectComboBox;
422446 procedure ClearMailAllEditor();
423447 procedure ClearNameTextAllEditor();
448+ procedure MoveURLWithHistory(URL : String);
449+ procedure BackToHistory(item: TMoveHistoryItem);
450+ function GetActiveThreadLinks : IHTMLElementCollection;
451+ procedure GetImageLinkURLs(links : IHTMLElementCollection;
452+ URLs : TStringList; const Start: Integer);
424453 public
425454 { Public éŒ¾ }
426455 procedure RepaintStatusBar;
@@ -554,24 +583,10 @@ end;
554583 //! ƒAƒhƒŒƒXƒo[‚É•\Ž¦‚µ‚Ä‚¢‚éƒAƒhƒŒƒX‚ÖˆÚ“®‚·‚é
555584 // *************************************************************************
556585 procedure TGikoDM.MoveToActionExecute(Sender: TObject);
557-var
558- URL: string;
559- idx: Integer;
560586 begin
561587 //ƒAƒhƒŒƒXƒRƒ“ƒ{ƒ{ƒbƒNƒX‚©‚çURL‚ðŽæ“¾
562- URL := Trim(GikoForm.AddressComboBox.Text);
563588 //URL‚Ɉړ®
564- GikoForm.MoveToURL(URL);
565- //ˆÈ‰ºA—š—ð‚̏ˆ—
566- idx := GikoForm.AddressComboBox.Items.IndexOf(URL);
567- if idx = -1 then begin
568- GikoForm.AddressComboBox.Items.Insert(0, URL);
569- if GikoForm.AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
570- GikoForm.AddressComboBox.Items.Delete(GikoForm.AddressComboBox.Items.Count - 1);
571- end else begin
572- GikoForm.AddressComboBox.Items.Delete(idx);
573- GikoForm.AddressComboBox.Items.Insert(0, URL);
574- end;
589+ MoveURLWithHistory( Trim(GikoForm.AddressComboBox.Text) );
575590 end;
576591 // *************************************************************************
577592 //! ‚¨‹C‚É“ü‚è‚̒ljÁƒ_ƒCƒAƒƒO‚ðŠJ‚­
@@ -1277,6 +1292,18 @@ begin
12771292 end;
12781293 end;
12791294 // *************************************************************************
1295+//! ¶‚̃^ƒu‚ð‘I‘ð‚·‚é‚ÌUpdateƒCƒxƒ“ƒg
1296+// *************************************************************************
1297+procedure TGikoDM.LeftTabSelectActionUpdate(Sender: TObject);
1298+begin
1299+ if ( not GikoSys.Setting.LoopBrowserTabs ) then begin
1300+ LeftmostTabSelectActionUpdate(Sender);
1301+ end else begin
1302+ TAction(Sender).Enabled := (GikoForm.BrowserTab.Tabs.Count > 1);
1303+ end;
1304+end;
1305+
1306+// *************************************************************************
12801307 //! ƒ^ƒu‚̐”‚ª‚PˆÈã‚ŁAƒ^ƒu‚̃Cƒ“ƒfƒbƒNƒX‚ª‚OˆÈŠO‚Å—LŒø‚É‚È‚éUpdateƒCƒxƒ“ƒg
12811308 // *************************************************************************
12821309 procedure TGikoDM.LeftmostTabSelectActionUpdate(Sender: TObject);
@@ -1296,7 +1323,13 @@ begin
12961323 end else if GikoForm.BrowserTab.TabIndex > 0 then begin
12971324 GikoForm.BrowserTab.TabIndex := GikoForm.BrowserTab.TabIndex - 1;
12981325 GikoForm.BrowserTab.OnChange(nil);
1299- end;
1326+ end else begin
1327+ if (GikoSys.Setting.LoopBrowserTabs) and
1328+ (GikoForm.BrowserTab.TabIndex = 0) then begin
1329+ GikoForm.BrowserTab.TabIndex := GikoForm.BrowserTab.Tabs.Count - 1;
1330+ GikoForm.BrowserTab.OnChange(nil);
1331+ end;
1332+ end;
13001333 end;
13011334 end;
13021335 // *************************************************************************
@@ -1311,17 +1344,27 @@ begin
13111344 end else if GikoForm.BrowserTab.TabIndex < (GikoForm.BrowserTab.Tabs.Count - 1) then begin
13121345 GikoForm.BrowserTab.TabIndex := GikoForm.BrowserTab.TabIndex + 1;
13131346 GikoForm.BrowserTab.OnChange(nil);
1314- end;
1347+ end else begin
1348+ if (GikoSys.Setting.LoopBrowserTabs) and
1349+ (GikoForm.BrowserTab.TabIndex = (GikoForm.BrowserTab.Tabs.Count - 1)) then begin
1350+ GikoForm.BrowserTab.TabIndex := 0;
1351+ GikoForm.BrowserTab.OnChange(nil);
1352+ end;
1353+ end;
13151354 end;
13161355 end;
13171356 // *************************************************************************
1318-//! ƒ^ƒu‚̐”‚ª‚PˆÈã‚ŁAƒ^ƒu‚ª‰E’[ˆÈŠO‚Å—LŒø‚É‚È‚éUpdateƒCƒxƒ“ƒg
1357+//! ‰E‚̃^ƒu‚ð‘I‘ð‚·‚éUpdateƒCƒxƒ“ƒg
13191358 // *************************************************************************
13201359 procedure TGikoDM.RightTabSelectActionUpdate(Sender: TObject);
13211360 begin
1322- TAction(Sender).Enabled := (GikoForm.BrowserTab.Tabs.Count > 0)
1323- and (GikoForm.BrowserTab.TabIndex <> GikoForm.BrowserTab.Tabs.Count - 1);
1361+ if ( not GikoSys.Setting.LoopBrowserTabs ) then begin
1362+ RightmostTabSelectActionUpdate(Sender);
1363+ end else begin
1364+ TAction(Sender).Enabled := (GikoForm.BrowserTab.Tabs.Count > 1);
1365+ end;
13241366 end;
1367+
13251368 // *************************************************************************
13261369 //! ˆê”Ô‰E‚̃^ƒu‚ð‘I‘ð‚·‚é
13271370 // *************************************************************************
@@ -1333,6 +1376,15 @@ begin
13331376 end;
13341377 end;
13351378 // *************************************************************************
1379+//! ˆê”Ô‰E‚̃^ƒu‚ð‘I‘ð‚·‚é‚ÌUpdateƒCƒxƒ“ƒg
1380+// *************************************************************************
1381+procedure TGikoDM.RightmostTabSelectActionUpdate(Sender: TObject);
1382+begin
1383+ TAction(Sender).Enabled := (GikoForm.BrowserTab.Tabs.Count > 0)
1384+ and (GikoForm.BrowserTab.TabIndex <> GikoForm.BrowserTab.Tabs.Count - 1);
1385+
1386+end;
1387+// *************************************************************************
13361388 //! ‘I‘ð‚³‚ê‚Ä‚¢‚éƒXƒŒƒbƒh‚ð‚¨‹C‚É“ü‚è‚ɒljÁ
13371389 // *************************************************************************
13381390 procedure TGikoDM.ThreadFavoriteAddActionExecute(Sender: TObject);
@@ -2235,7 +2287,8 @@ begin
22352287 URLs.Free;
22362288 end;
22372289
2238- if (GikoForm.BrowserTab.Tabs.Count = 0) then begin
2290+ if (GikoForm.BrowserTab.Tabs.Count = 0) and
2291+ (TabsOpenAction.Tag <> 1) then begin
22392292 ShowMessage('•\Ž¦‚·‚éƒ^ƒu‚ª‚ ‚è‚Ü‚¹‚ñB');
22402293 end;
22412294 end;
@@ -3685,7 +3738,7 @@ end;
36853738 // *************************************************************************
36863739 procedure TGikoDM.SetFocusForBrowserActionExecute(Sender: TObject);
36873740 begin
3688- GikoForm.ActiveContent.Browser.SetFocus;
3741+ GikoForm.ActiveContent.Browser.SetFocus;
36893742 end;
36903743 // *************************************************************************
36913744 //! ƒuƒ‰ƒEƒU‚ɃtƒH[ƒJƒX‚ð“–‚Ä‚éUpdateƒCƒxƒ“ƒg
@@ -3919,42 +3972,12 @@ begin
39193972 end;
39203973 end;
39213974 // *************************************************************************
3922-//! WebBrowser‚ÌŒŸõƒ_ƒCƒAƒƒO‚ðŒÄ‚яo‚·
3923-// *************************************************************************
3924-procedure OpenFindDialog(Browser: TWebbrowser);
3925-const
3926- CGID_WebBrowser: TGUID = '{ED016940-BD5B-11cf-BA4E-00C04FD70816}';
3927- HTMLID_FIND = 1;
3928-var
3929- CmdTarget : IOleCommandTarget;
3930- vaIn, vaOut: OleVariant;
3931- PtrGUID: PGUID;
3932-begin
3933- if Browser.Document <> nil then begin
3934- New(PtrGUID);
3935- PtrGUID^ := CGID_WebBrowser;
3936- try
3937- Browser.Document.QueryInterface(IOleCommandTarget, CmdTarget);
3938- if CmdTarget <> nil then begin
3939- try
3940- CmdTarget.Exec(PtrGUID, HTMLID_FIND, 0, vaIn, vaOut);
3941- finally
3942- CmdTarget._Release;
3943- end;
3944- end;
3945- except
3946- end;
3947- Dispose(PtrGUID);
3948- end;
3949-end;
3950-
3951-// *************************************************************************
39523975 //! Œ»Ý•\Ž¦‚µ‚Ä‚¢‚éƒXƒŒƒbƒh‚ÌŒŸõƒ_ƒCƒAƒƒO‚ð•\Ž¦‚·‚é
39533976 // *************************************************************************
39543977 procedure TGikoDM.OpenFindDialogActionExecute(Sender: TObject);
39553978 begin
39563979 if( GikoForm.ActiveContent <> nil) and (GikoForm.ActiveContent.Browser <> nil) then begin
3957- OpenFindDialog(GikoForm.ActiveContent.Browser);
3980+ GikoForm.ActiveContent.OpenFindDialog;
39583981 end;
39593982 end;
39603983
@@ -4038,5 +4061,246 @@ begin
40384061 end;
40394062 end;
40404063
4064+// *************************************************************************
4065+//! ƒŠƒ“ƒN—š—ð‚ð–ß‚é‚̍XVˆ—
4066+// *************************************************************************
4067+procedure TGikoDM.PrevMoveHistoryUpdate(Sender: TObject);
4068+begin
4069+ PrevMoveHistory.Enabled :=
4070+ (MoveHisotryManager.HisotryIndex > 0)
4071+end;
4072+// *************************************************************************
4073+//! ƒŠƒ“ƒN—š—ð‚ð–ß‚é
4074+// *************************************************************************
4075+procedure TGikoDM.PrevMoveHistoryExecute(Sender: TObject);
4076+begin
4077+ if ( GikoForm.BrowserTab.TabIndex >= 0 ) then begin
4078+ BackToHistory(MoveHisotryManager.getPrevItem
4079+ (TBrowserRecord(GikoForm.BrowserTab.Tabs
4080+ .Objects[GikoForm.BrowserTab.TabIndex])));
4081+ end else begin
4082+ BackToHistory(MoveHisotryManager.getPrevItem( nil ) );
4083+ end;
4084+end;
4085+//! ƒŠƒ“ƒN—š—ðˆ—
4086+procedure TGikoDM.BackToHistory(item: TMoveHistoryItem);
4087+var
4088+ browser : TWebBrowser;
4089+ doc : OleVariant;
4090+begin
4091+ if ( item <> nil ) then begin
4092+ if ( GikoForm.GetActiveContent = item.ThreadItem ) then begin
4093+ browser := TBrowserRecord(GikoForm.BrowserTab.Tabs
4094+ .Objects[GikoForm.BrowserTab.TabIndex]).Browser;
4095+ if (browser <> nil) then begin
4096+ try
4097+ doc := Idispatch( olevariant(browser.ControlInterface).Document) as IHTMLDocument2;
4098+ doc.Body.ScrollTop := item.ScrollTop;
4099+ except
4100+ end;
4101+ end;
4102+ end else begin
4103+ //URL‚Ɉړ®
4104+ MoveURLWithHistory(item.ThreadItem.URL);
4105+ end;
4106+ end;
4107+end;
4108+//! —š—ðˆ—‚‚«URLˆÚ“®
4109+procedure TGikoDM.MoveURLWithHistory(URL : String);
4110+var
4111+ idx : Integer;
4112+begin
4113+ //URL‚Ɉړ®
4114+ GikoForm.MoveToURL(URL);
4115+ //ˆÈ‰ºA—š—ð‚̏ˆ—
4116+ idx := GikoForm.AddressComboBox.Items.IndexOf(URL);
4117+ if idx = -1 then begin
4118+ GikoForm.AddressComboBox.Items.Insert(0, URL);
4119+ if GikoForm.AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
4120+ GikoForm.AddressComboBox.Items.Delete(GikoForm.AddressComboBox.Items.Count - 1);
4121+ end else begin
4122+ GikoForm.AddressComboBox.Items.Delete(idx);
4123+ GikoForm.AddressComboBox.Items.Insert(0, URL);
4124+ end;
4125+end;
4126+// *************************************************************************
4127+//! ƒŠƒ“ƒN—š—ð‚ði‚ނ̍XVˆ—
4128+// *************************************************************************
4129+procedure TGikoDM.NextMoveHistoryUpdate(Sender: TObject);
4130+begin
4131+ NextMoveHistory.Enabled :=
4132+ (MoveHisotryManager.HisotryIndex < MoveHisotryManager.Count - 1);
4133+end;
4134+// *************************************************************************
4135+//! ƒŠƒ“ƒN—š—ð‚ði‚Þ
4136+// *************************************************************************
4137+procedure TGikoDM.NextMoveHistoryExecute(Sender: TObject);
4138+begin
4139+ BackToHistory(MoveHisotryManager.getNextItem);
4140+end;
4141+// *************************************************************************
4142+//! ƒAƒNƒeƒBƒu—v‘f‚̃NƒŠƒbƒN
4143+// *************************************************************************
4144+procedure TGikoDM.ClickActiveElementActionExecute(Sender: TObject);
4145+var
4146+ browser : TWebBrowser;
4147+ elem : IHTMLElement;
4148+begin
4149+ if (GikoForm.GetActiveContent <> nil) then begin
4150+ if (GikoForm.BrowserTab.Tabs.Count > 0) and
4151+ (GikoForm.BrowserTab.TabIndex >= 0) then begin
4152+ browser := TBrowserRecord(GikoForm.BrowserTab.Tabs
4153+ .Objects[GikoForm.BrowserTab.TabIndex]).Browser;
4154+ if (browser <> nil) then begin
4155+ try
4156+ elem := IHTMLDocument2(browser.Document).activeElement;
4157+ elem.click;
4158+ except
4159+ end;
4160+ end;
4161+
4162+ end;
4163+ end;
4164+end;
4165+//! «ƒL[‚̃Gƒ~ƒ…ƒŒ[ƒgƒAƒNƒVƒ‡ƒ“
4166+procedure TGikoDM.VKDownActionExecute(Sender: TObject);
4167+begin
4168+ keybd_event(VK_DOWN, 0, KEYEVENTF_EXTENDEDKEY, 0);
4169+ keybd_event(VK_DOWN, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
4170+end;
4171+//! ªƒL[‚̃Gƒ~ƒ…ƒŒ[ƒgƒAƒNƒVƒ‡ƒ“
4172+procedure TGikoDM.VKUpActionExecute(Sender: TObject);
4173+begin
4174+ keybd_event(VK_UP, 0, KEYEVENTF_EXTENDEDKEY, 0);
4175+ keybd_event(VK_UP, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
4176+end;
4177+//! ¨ƒL[‚̃Gƒ~ƒ…ƒŒ[ƒgƒAƒNƒVƒ‡ƒ“
4178+procedure TGikoDM.VKRightActionExecute(Sender: TObject);
4179+begin
4180+ keybd_event(VK_RIGHT, 0, KEYEVENTF_EXTENDEDKEY, 0);
4181+ keybd_event(VK_RIGHT, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
4182+end;
4183+//! ©ƒL[‚̃Gƒ~ƒ…ƒŒ[ƒgƒAƒNƒVƒ‡ƒ“
4184+procedure TGikoDM.VKLeftActionExecute(Sender: TObject);
4185+begin
4186+ keybd_event(VK_LEFT, 0, KEYEVENTF_EXTENDEDKEY, 0);
4187+ keybd_event(VK_LEFT, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
4188+end;
4189+//! ƒ^ƒXƒNƒgƒŒƒC‚ÉŠi”[‚·‚é
4190+procedure TGikoDM.StoredTaskTrayActionExecute(Sender: TObject);
4191+begin
4192+ GikoForm.StoredTaskTray;
4193+ StoredTaskTrayAction.Tag := -1;
4194+end;
4195+
4196+{
4197+\breif ƒŠƒ“ƒNƒCƒ[ƒWŽæ“¾
4198+ƒCƒ[ƒW‚́C*.jpg, *.jpeg, *.gif, *.png
4199+}
4200+procedure TGikoDM.AllImageLinkToClipbordActionExecute(Sender: TObject);
4201+var
4202+ links : IHTMLElementCollection;
4203+ urls : TStringList;
4204+begin
4205+ links := GetActiveThreadLinks;
4206+ if (links <> nil) then begin
4207+ urls := TStringList.Create;
4208+ try
4209+ GetImageLinkURLs(links, urls, 0);
4210+ Clipboard.SetTextBuf(urls.GetText);
4211+ finally
4212+ urls.Free;
4213+ end;
4214+ end;
4215+end;
4216+
4217+{
4218+\breif V’…ƒŒƒX‚̃Šƒ“ƒNƒCƒ[ƒWŽæ“¾
4219+ƒCƒ[ƒW‚́C*.jpg, *.jpeg, *.gif, *.png
4220+}
4221+procedure TGikoDM.NewImageLinkToClipBoardActionExecute(Sender: TObject);
4222+var
4223+ links : IHTMLElementCollection;
4224+ urls : TStringList;
4225+ ThreadItem : TThreadItem;
4226+begin
4227+ ThreadItem := GikoForm.GetActiveContent;
4228+ links := GetActiveThreadLinks;
4229+ if (ThreadItem <> nil) and (links <> nil) then begin
4230+ urls := TStringList.Create;
4231+ try
4232+ GetImageLinkURLs(links, urls,
4233+ (ThreadItem.Count - ThreadItem.NewResCount + 1) );
4234+ Clipboard.SetTextBuf(urls.GetText);
4235+ finally
4236+ urls.Free;
4237+ end;
4238+ end;
4239+end;
4240+{
4241+\brief Œ»Ý•\Ž¦‚µ‚Ä‚¢‚éƒXƒŒƒbƒh‚Ì‚·‚ׂẴŠƒ“ƒN‚ðŽæ“¾‚·‚éB
4242+\return IHTMLElementCollection ƒŠƒ“ƒN‚̃RƒŒƒNƒVƒ‡ƒ“
4243+}
4244+function TGikoDM.GetActiveThreadLinks : IHTMLElementCollection;
4245+var
4246+ browser : TWebBrowser;
4247+begin
4248+ Result := nil;
4249+ if (GikoForm.GetActiveContent <> nil) then begin
4250+ if (GikoForm.BrowserTab.Tabs.Count > 0) and
4251+ (GikoForm.BrowserTab.TabIndex >= 0) then begin
4252+ browser := TBrowserRecord(GikoForm.BrowserTab.Tabs
4253+ .Objects[GikoForm.BrowserTab.TabIndex]).Browser;
4254+ if (browser <> nil) then begin
4255+ try
4256+ Result := IHTMLDocument2(browser.Document).links;
4257+ except
4258+ Result := nil;
4259+ end;
4260+ end;
4261+
4262+ end;
4263+ end;
4264+end;
4265+{
4266+\brief ƒCƒ[ƒW‚ւ̃Šƒ“ƒN‚ÌURL‚ðŽæ“¾‚·‚é
4267+\param links Žæ“¾‚·‚郊ƒ“ƒN‚Ì‘S‘̂̃RƒŒƒNƒVƒ‡ƒ“
4268+\param URLs Žæ“¾‚µ‚½URL‚Ì•Û‘¶æ
4269+\param Start Ý’肵‚½ƒŒƒX”ԍ†ˆÈ~‚ðŽæ“¾( > 0)
4270+}
4271+procedure TGikoDM.GetImageLinkURLs(links : IHTMLElementCollection;
4272+ URLs : TStringList; const Start: Integer);
4273+var
4274+ index ,i : Integer;
4275+ item : IHTMLElement;
4276+ url, ext : string;
4277+begin
4278+ if (links <> nil) then begin
4279+ index := 0;
4280+ for i := 0 to links.length - 1 do begin
4281+ item := links.item(i, 0) as IHTMLElement;
4282+ if (item <> nil) then begin
4283+ url := item.getAttribute('href', 0);
4284+ // ƒŒƒX‚̔ԍ†‚ðXV
4285+ if (Pos('menu:', url) > 0) then begin
4286+ index := StrToInt64Def(
4287+ Copy(url, 5, Length(url)), index + 1
4288+ );
4289+ end else begin
4290+ // ŠJŽnƒŒƒX”ԍ†ˆÈ~‚©ƒ`ƒFƒbƒN
4291+ if (index >= Start) then begin
4292+ ext := ExtractFileExt( AnsiLowerCase(url) );
4293+ // jpg,jpeg,gif,png‚ðƒ`ƒFƒbƒN
4294+ if (ext = '.jpg') or (ext = '.jpeg') or
4295+ (ext = '.gif') or (ext = '.png') then begin
4296+ urls.Add(url)
4297+ end;
4298+ end;
4299+ end;
4300+ end;
4301+ end;
4302+ end;
4303+end;
4304+
40414305 end.
40424306
--- a/GikoSystem.pas
+++ b/GikoSystem.pas
@@ -114,6 +114,8 @@ type
114114 FGikoMessage: TGikoMessage;
115115 //! ‚ ‚éƒZƒpƒŒ[ƒ^‚Å‹æØ‚ç‚ꂽ•¶Žš—ñ‚©‚ç‚Ž”Ô–Ú‚Ì•¶Žš—ñ‚ðŽæ‚èo‚·
116116 function ChooseString(const Text, Separator: string; Index: integer): string;
117+ //! ˆêŽžƒtƒ@ƒCƒ‹‚©‚ç‚Ì•œ‹Œ
118+ procedure RestoreThreadData(Board: TBoard);
117119 public
118120 { Public éŒ¾ }
119121 FAbon : TAbon;
@@ -256,7 +258,7 @@ const
256258 ZERO_DATE: Integer = 25569;
257259 BETA_VERSION_NAME_E = 'beta';
258260 BETA_VERSION_NAME_J = 'ÊÞÀ';
259- BETA_VERSION = 53;
261+ BETA_VERSION = 54;
260262 BETA_VERSION_BUILD = ''; //!< debug”Å‚È‚Ç
261263 APP_NAME = 'gikoNavi';
262264 BE_PHP_URL = 'http://be.2ch.net/test/p.php?i=';
@@ -554,24 +556,17 @@ var
554556 ThreadItem: TThreadItem;
555557 FileName: string;
556558 FileList: TStringList;
557- TmpFileList: TStringList;
558559 Index: Integer;
559560 sl: TStringList;
560561 i: Integer;
561562 Rec: TIndexRec;
562563 UnRead: Integer;
563- ini: TMemIniFile;
564564 ResRec: TResRec;
565-// RoundItem: TRoundItem;
566-// idx: Integer;
567565 usePlugIn : Boolean;
568- tmpStr: string;
569566 BoardPath : String;
570567 server : String;
571568 islog : Boolean;
572569 urlHead: String;
573- //protocol, host, path, document, port, bookmark : string;
574- //is2ch : Boolean;
575570 {*
576571 FavoThreadItem : TFavoriteThreadItem;
577572 Node: TTreeNode;
@@ -581,25 +576,17 @@ begin
581576 Exit;
582577 Board.Clear;
583578 UnRead := 0;
584- //is2ch := false;
585579 usePlugIn := Board.IsBoardPlugInAvailable;
586580 server := UrlToServer( Board.URL );
587- //is2ch := Is2chHost(server);
588581
589582 FileName := Board.GetFolderIndexFileName;
590583
591584 FileList := TStringList.Create;
592585 FileList.Sorted := True;
593586 FileList.BeginUpdate;
594- TmpFileList := TStringList.Create;
595- TmpFileList.Sorted := True;
596- TmpFileList.BeginUpdate;
597587 //IsLogFile—pDATƒtƒ@ƒCƒ‹ƒŠƒXƒg
598588 GetFileList(ExtractFileDir(Board.GetFolderIndexFileName), '*.dat', FileList, False);
599589 FileList.EndUpdate;
600- //‘O‰ñˆÙíI—¹Žž—pTmpƒtƒ@ƒCƒ‹ƒŠƒXƒg
601- GetFileList(ExtractFileDir(Board.GetFolderIndexFileName), '*.tmp', TmpFileList, False);
602- TmpFileList.EndUpdate;
603590
604591 // d•¡‚ð–h‚®
605592 Board.BeginUpdate;
@@ -650,8 +637,7 @@ begin
650637
651638 ThreadItem.No := Rec.FNo;
652639 ThreadItem.FileName := Rec.FFileName;
653- ThreadItem.Title := Rec.FTitle;
654- //ThreadItem.ShortTitle := CustomStringReplace(ZenToHan(ThreadItem.Title), ' ', '');
640+ ThreadItem.Title := MojuUtils.UnSanitize(Rec.FTitle);
655641 ThreadItem.Count := Rec.FCount;
656642 ThreadItem.Size := Rec.FSize;
657643 ThreadItem.RoundDate := Rec.FRoundDate;
@@ -724,50 +710,12 @@ begin
724710 Board.Add(ThreadItem);
725711 end;
726712 Board.EndUpdate;
727-
728- //‘O‰ñˆÙíI—¹Žžƒ`ƒFƒbƒN
729- for i := TmpFileList.Count - 1 downto 0 do begin
730- //if TmpFileList.Count <> 0 then begin
731- ThreadItem := Board.FindThreadFromFileName(ChangeFileExt(TmpFileList[i], '.dat'));
732- if ThreadItem <> nil then begin
733- //if TmpFileList.Find(ChangeFileExt(ThreadItem.FileName, '.tmp'), Index) then begin
734- ini := TMemIniFile.Create(Boardpath + TmpFileList[i]);
735- try
736- tmpStr := ini.ReadString('Setting', 'RoundDate', DateTimeToStr(ZERO_DATE));
737- ThreadItem.RoundDate := ConvertDateTimeString(tmpStr);
738-
739- tmpStr := ini.ReadString('Setting', 'LastModified', DateTimeToStr(ZERO_DATE));
740- ThreadItem.LastModified := ConvertDateTimeString(tmpStr);
741- ThreadItem.Count := ini.ReadInteger('Setting', 'Count', 0);
742- ThreadItem.NewReceive := ini.ReadInteger('Setting', 'NewReceive', 0);
743-
744- ThreadItem.Size := ini.ReadInteger('Setting', 'Size', 0);
745- if(ThreadItem.Size = 0) and (FileExists(ThreadItem.GetThreadFileName)) then begin
746- try
747- ThreadItem.Size := GetFileSize(ThreadItem.GetThreadFileName) - ThreadItem.Count;
748- except
749- end;
750- end;
751-
752- //„‰ñ‚̐ݒè‚ÍRoundData‚Ì•û‚ª‚â‚é‚©‚珟Žè‚ɐݒ肵‚Ă̓_ƒI@by ‚à‚¶‚ã
753- //ThreadItem.Round := ini.ReadBool('Setting', 'Round', False);
754- //ThreadItem.RoundName := ini.ReadString('Setting', 'RoundName', ThreadItem.RoundName);
755- ThreadItem.UnRead := False;//ini.ReadBool('Setting', 'UnRead', False);
756- ThreadItem.ScrollTop := ini.ReadInteger('Setting', 'ScrollTop', 0);
757- ThreadItem.AllResCount := ini.ReadInteger('Setting', 'AllResCount', ThreadItem.Count);
758- ThreadItem.NewResCount := ini.ReadInteger('Setting', 'NewResCount', 0);
759- ThreadItem.AgeSage := TGikoAgeSage(ini.ReadInteger('Setting', 'AgeSage', Ord(gasNone)));
760- finally
761- ini.Free;
762- end;
763- DeleteFile(Boardpath + TmpFileList[i]);
764- end;
765- end;
766-
713+
714+ //‘O‰ñˆÙíI—¹Žžƒ`ƒFƒbƒN
715+ RestoreThreadData( Board );
767716 finally
768717 sl.Free;
769718 FileList.Free;
770- TmpFileList.Free;
771719 Board.Sorted := False;
772720 end;
773721 Board.IsThreadDatRead := True;
@@ -824,7 +772,7 @@ begin
824772 '%s'#1'%x'#1'%x'#1'%x'#1'%x'#1'%x',
825773 [cnt, //”ԍ†
826774 Rec.FFileName, //ƒtƒ@ƒCƒ‹–¼
827- Rec.FTitle, //ƒ^ƒCƒgƒ‹
775+ MojuUtils.Sanitize(Rec.FTitle), //ƒ^ƒCƒgƒ‹
828776 Rec.FCount, //ƒJƒEƒ“ƒg
829777 0, //size
830778 0, //RoundDate
@@ -894,7 +842,7 @@ begin
894842 '%s'#1'%x'#1'%x'#1'%x'#1'%x'#1'%x',
895843 [Board.Items[i].No, //”ԍ†
896844 Board.Items[i].FileName, //ƒtƒ@ƒCƒ‹–¼
897- Board.Items[i].Title, //ƒ^ƒCƒgƒ‹
845+ MojuUtils.Sanitize(Board.Items[i].Title), //ƒ^ƒCƒgƒ‹
898846 Board.Items[i].Count, //ƒJƒEƒ“ƒg
899847 Board.Items[i].Size, //size
900848 DateTimeToInt(Board.Items[i].RoundDate), //RoundDate
@@ -933,7 +881,7 @@ function TGikoSys.ParseIndexLine(Line: string): TIndexRec;
933881 begin
934882 Result.FNo := StrToIntDef('$' + RemoveToken(Line, #1), 0);
935883 Result.FFileName := RemoveToken(Line, #1);
936- Result.FTitle := RemoveToken(Line, #1);
884+ Result.FTitle := MojuUtils.UnSanitize(RemoveToken(Line, #1));
937885 Result.FCount := StrToIntDef('$' + RemoveToken(Line, #1), 0);
938886 Result.FSize := StrToIntDef('$' + RemoveToken(Line, #1), 0);
939887 Result.FRoundDate := IntToDateTime(StrToIntDef('$' + RemoveToken(Line, #1), ZERO_DATE));
@@ -3306,6 +3254,67 @@ begin
33063254 p := AnsiPos(Separator, S);
33073255 if (p > 0) then Result := Copy(S, 1, p - 1) else Result := S;
33083256 end;
3257+//! ˆêŽžƒtƒ@ƒCƒ‹‚©‚ç‚Ì•œ‹Œ
3258+procedure TGikoSys.RestoreThreadData(Board : TBoard);
3259+const
3260+ SECTION = 'Setting';
3261+var
3262+ TmpFileList : TStringList;
3263+ i : Integer;
3264+ ini : TMemIniFile;
3265+ ThreadItem : TThreadItem;
3266+ Boardpath, tmpStr : string;
3267+begin
3268+ Boardpath := ExtractFilePath(Board.GetFolderIndexFileName);
3269+
3270+ TmpFileList := TStringList.Create;
3271+ TmpFileList.Sorted := True;
3272+ TmpFileList.BeginUpdate;
3273+ try
3274+ //‘O‰ñˆÙíI—¹Žž—pTmpƒtƒ@ƒCƒ‹ƒŠƒXƒg
3275+ GetFileList(Boardpath, '*.tmp', TmpFileList, False);
3276+ TmpFileList.EndUpdate;
3277+ //‘O‰ñˆÙíI—¹Žžƒ`ƒFƒbƒN
3278+ for i := TmpFileList.Count - 1 downto 0 do begin
3279+ ThreadItem := Board.FindThreadFromFileName(ChangeFileExt(TmpFileList[i], '.dat'));
3280+ if ThreadItem <> nil then begin
3281+ ini := TMemIniFile.Create(Boardpath + TmpFileList[i]);
3282+ try
3283+ tmpStr := ini.ReadString(SECTION, 'RoundDate', DateTimeToStr(ZERO_DATE));
3284+ ThreadItem.RoundDate := ConvertDateTimeString(tmpStr);
3285+
3286+ tmpStr := ini.ReadString(SECTION, 'LastModified', DateTimeToStr(ZERO_DATE));
3287+ ThreadItem.LastModified := ConvertDateTimeString(tmpStr);
3288+ ThreadItem.Count := ini.ReadInteger(SECTION, 'Count', 0);
3289+ ThreadItem.NewReceive := ini.ReadInteger(SECTION, 'NewReceive', 0);
3290+
3291+ ThreadItem.Size := ini.ReadInteger(SECTION, 'Size', 0);
3292+ if(ThreadItem.Size = 0) and (FileExists(ThreadItem.GetThreadFileName)) then begin
3293+ try
3294+ ThreadItem.Size := GetFileSize(ThreadItem.GetThreadFileName) - ThreadItem.Count;
3295+ except
3296+ end;
3297+ end;
3298+
3299+ //„‰ñ‚̐ݒè‚ÍRoundData‚Ì•û‚ª‚â‚é‚©‚珟Žè‚ɐݒ肵‚Ă̓_ƒI@by ‚à‚¶‚ã
3300+ //ThreadItem.Round := ini.ReadBool('Setting', 'Round', False);
3301+ //ThreadItem.RoundName := ini.ReadString('Setting', 'RoundName', ThreadItem.RoundName);
3302+ ThreadItem.UnRead := False;//ini.ReadBool('Setting', 'UnRead', False);
3303+ ThreadItem.ScrollTop := ini.ReadInteger(SECTION, 'ScrollTop', 0);
3304+ ThreadItem.AllResCount := ini.ReadInteger(SECTION, 'AllResCount', ThreadItem.Count);
3305+ ThreadItem.NewResCount := ini.ReadInteger(SECTION, 'NewResCount', 0);
3306+ ThreadItem.AgeSage := TGikoAgeSage(ini.ReadInteger(SECTION, 'AgeSage', Ord(gasNone)));
3307+ finally
3308+ ini.Free;
3309+ end;
3310+ DeleteFile(Boardpath + TmpFileList[i]);
3311+ end;
3312+ end;
3313+ finally
3314+ TmpFileList.Clear;
3315+ TmpFileList.Free;
3316+ end;
3317+end;
33093318
33103319 initialization
33113320 GikoSys := TGikoSys.Create;
--- a/ItemDownload.pas
+++ b/ItemDownload.pas
@@ -1089,6 +1089,7 @@ begin
10891089 end;
10901090 //ƒŠƒXƒg(subject.txt)‚ð•Û‘¶
10911091 GikoSys.ForceDirectoriesEx(ExtractFilePath(Board.GetSubjectFileName));
1092+ Body.Text := MojuUtils.Sanitize(Body.Text);
10921093 Body.SaveToFile(Board.GetSubjectFileName);
10931094 end;
10941095 finally
--- a/KuroutSetting.dfm
+++ b/KuroutSetting.dfm
@@ -395,6 +395,35 @@ object KuroutOption: TKuroutOption
395395 TabOrder = 0
396396 end
397397 end
398+ object GroupBox3: TGroupBox
399+ Left = 16
400+ Top = 126
401+ Width = 473
402+ Height = 51
403+ Caption = #12522#12531#12463#31227#21205#23653#27508
404+ TabOrder = 1
405+ object Label10: TLabel
406+ Left = 8
407+ Top = 20
408+ Width = 84
409+ Height = 12
410+ Caption = #23653#27508#26368#22823#20445#25345#25968
411+ end
412+ object Label11: TLabel
413+ Left = 227
414+ Top = 20
415+ Width = 158
416+ Height = 12
417+ Caption = #65288#12487#12501#12457#12523#12488'=20 '#20877#36215#21205#24460#26377#21177#65289
418+ end
419+ object MoveHistoryMaxEdit: TEdit
420+ Left = 112
421+ Top = 16
422+ Width = 105
423+ Height = 20
424+ TabOrder = 0
425+ end
426+ end
398427 end
399428 end
400429 object OkBotton: TButton
--- a/KuroutSetting.pas
+++ b/KuroutSetting.pas
@@ -61,6 +61,10 @@ type
6161 Label8: TLabel;
6262 FixedCookieEdit: TEdit;
6363 Label9: TLabel;
64+ GroupBox3: TGroupBox;
65+ Label10: TLabel;
66+ MoveHistoryMaxEdit: TEdit;
67+ Label11: TLabel;
6468 procedure OkBottonClick(Sender: TObject);
6569 procedure FormCreate(Sender: TObject);
6670 procedure CDeleteButtonClick(Sender: TObject);
@@ -123,6 +127,8 @@ begin
123127 RemoteTrapAtt.Checked := GikoSys.Setting.RemoteTrapAtt;
124128 // Cookie
125129 FixedCookieEdit.Text := GikoSys.Setting.FixedCookie;
130+ // ƒŠƒ“ƒNˆÚ“®—š—ð
131+ MoveHistoryMaxEdit.Text := IntToStr( GikoSys.Setting.MoveHistorySize );
126132 end;
127133
128134 procedure TKuroutOption.SaveSetting;
@@ -150,6 +156,9 @@ begin
150156 // Cookie
151157 GikoSys.Setting.FixedCookie := FixedCookieEdit.Text;
152158
159+ // ƒŠƒ“ƒNˆÚ“®—š—ð
160+ GikoSys.Setting.MoveHistorySize :=
161+ StrToIntDef( MoveHistoryMaxEdit.Text, 20 );
153162
154163 GikoSys.Setting.KuroutSettingTabIndex := PageControl1.ActivePageIndex;
155164 end;
--- /dev/null
+++ b/MoveHistoryItem.pas
@@ -0,0 +1,182 @@
1+unit MoveHistoryItem;
2+
3+interface
4+
5+uses
6+ SysUtils, Classes, BoardGroup, BrowserRecord,
7+{$IF Defined(DELPRO) }
8+ SHDocVw,
9+ MSHTML,
10+{$ELSE}
11+ SHDocVw_TLB,
12+ MSHTML_TLB,
13+{$IFEND}
14+ OleCtrls, ActiveX;
15+type
16+
17+ TMoveHistoryItem = class(TObject)
18+ private
19+ FThreadItem : TThreadItem;
20+ FScrollTop : Integer;
21+ public
22+ property ThreadItem : TThreadItem read FThreadItem write FThreadItem;
23+ property ScrollTop : Integer read FScrollTop write FScrollTop;
24+ end;
25+
26+ TMoveHistory = class(TList)
27+ private
28+ FHistoryMax : Integer;
29+ FIndex : Integer;
30+ {
31+ \brief ƒŠƒ“ƒNˆÚ“®—š—ðÅ‘å•ÛŽ”‚ðÝ’è‚·‚éB
32+ \param AVal •ÛŽ”
33+ }
34+ procedure SetHistoryMax(AVal: Integer);
35+ {
36+ \brief ƒŠƒ“ƒNˆÚ“®—š—ðÅ‘å•ÛŽ”‚ðŽæ“¾‚·‚éB
37+ \return •ÛŽ”( > 0 )
38+ }
39+ function GetHistoryMax: Integer;
40+ public
41+ constructor Create( max : Integer ); overload;
42+ function pushItem( item: TMoveHistoryItem): Integer; overload;
43+ function pushItem( item: TBrowserRecord): Integer; overload;
44+ function getPrevItem( item: TBrowserRecord): TMoveHistoryItem;
45+ function getNextItem: TMoveHistoryItem;
46+ procedure clear; override;
47+ property HistoryMax : Integer read GetHistoryMax write SetHistoryMax;
48+ property HisotryIndex: Integer read FIndex;
49+ end;
50+
51+var
52+ MoveHisotryManager : TMoveHistory;
53+
54+implementation
55+
56+uses
57+ GikoSystem;
58+
59+
60+//! ƒRƒ“ƒXƒgƒ‰ƒNƒ^
61+constructor TMoveHistory.Create( max : Integer );
62+begin
63+ inherited Create;
64+
65+ FIndex := 0;
66+
67+ SetHistoryMax( GikoSys.Setting.MoveHistorySize );
68+end;
69+//! ˆÚ“®—š—ð‚̃AƒCƒeƒ€’ljÁ
70+function TMoveHistory.pushItem( item: TMoveHistoryItem): Integer;
71+var
72+ i : Integer;
73+ top: TMoveHistoryItem;
74+begin
75+ Result := -1;
76+ if (Self.Count > 0) then begin
77+ top := TMoveHistoryItem( Self.Items[Self.Count - 1] );
78+ if (top.FThreadItem = item.FThreadItem) and
79+ (top.FScrollTop = item.FScrollTop) then begin
80+ Exit;
81+ end;
82+ end;
83+ // •ÛŽ”‚̍őå’l‚ð’´‚¦‚éê‡æ“ª‚ðíœ
84+ if (FIndex + 1 > FHistoryMax) then begin
85+ if ( Self.Items[0] <> nil ) then begin
86+ TMoveHistoryItem( Self.Items[0] ).Free;
87+ end;
88+ Self.Delete(0);
89+ Dec(Findex);
90+ end;
91+ // FIndex‚æ‚èŒã‚ë‚̃AƒCƒeƒ€‚ðíœ‚·‚é
92+ for i := Self.Count - 1 downto Findex do begin
93+ if (Self.Items [i] <> nil) then begin
94+ TMoveHistoryItem( Self.Items[i] ).Free;
95+ end;
96+ Self.Delete(i);
97+ end;
98+ Inc(FIndex);
99+ Result := Self.Add( item );
100+end;
101+//! ˆÚ“®—š—ð‚̃AƒCƒeƒ€’ljÁ
102+function TMoveHistory.pushItem( item: TBrowserRecord): Integer;
103+var
104+ history : TMoveHistoryItem;
105+ doc : OleVariant;
106+begin
107+ Result := -1;
108+ if ( item <> nil ) and ( item.Thread <> nil )
109+ and ( item.Browser <> nil) then begin
110+ history := TMoveHistoryItem.Create;
111+ history.FThreadItem := item.Thread;
112+ doc := Idispatch( olevariant(item.Browser.ControlInterface).Document) as IHTMLDocument2;
113+ history.ScrollTop := doc.Body.ScrollTop;
114+
115+ Result := pushItem( history );
116+ end;
117+end;
118+//! ˆê‚‘O‚Ì—š—ðƒAƒCƒeƒ€Žæ“¾
119+function TMoveHistory.getPrevItem(item: TBrowserRecord): TMoveHistoryItem;
120+begin
121+ Result := nil;
122+ if (FIndex = Self.Count) and (item <> nil) then begin
123+ pushItem( item );
124+ Dec(FIndex);
125+ end;
126+ if ( FIndex > 0 ) then begin
127+ Dec( FIndex );
128+ Result := TMoveHistoryItem( Self.items[ FIndex ] );
129+ end;
130+end;
131+//! ˆê‚ÂŒã‚ë‚Ì—š—ðƒAƒCƒeƒ€Žæ“¾
132+function TMoveHistory.getNextItem: TMoveHistoryItem;
133+begin
134+ Result := nil;
135+ if ( FIndex < Self.Count - 1 ) then begin
136+ Inc( FIndex );
137+ Result := TMoveHistoryItem( Self.items[ FIndex ] );
138+ end;
139+end;
140+//! —š—ð‚Ì‘SÁ‹Ž
141+procedure TMoveHistory.clear;
142+var
143+ i : Integer;
144+begin
145+ // ƒAƒCƒeƒ€‚ðíœ‚·‚é
146+ for i := Self.Count - 1 downto 0 do begin
147+ if (Self.Items [i] <> nil) then begin
148+ TMoveHistoryItem( Self.Items[i] ).Free;
149+ end;
150+ Self.Delete(i);
151+ end;
152+ Self.Capacity := 0;
153+ FIndex := 0;
154+ inherited;
155+end;
156+
157+procedure TMoveHistory.SetHistoryMax(AVal: Integer);
158+begin
159+ // —š—ð‚̃TƒCƒY‚Í0‚æ‚è‘å‚«‚­‚È‚¢‚Æ‚¢‚¯‚È‚¢
160+ if ( AVal > 0 ) then begin
161+ if ((AVal + 1) <> FHistoryMax) then begin
162+ Self.clear;
163+ // ˆÚ“®‚µ‚½Û‚ɁA–߂郊ƒ“ƒN‚ð1‚‘«‚·‚Ì‚Å
164+ FHistoryMax := AVal + 1;
165+ end;
166+ end;
167+end;
168+function TMoveHistory.GetHistoryMax: Integer;
169+begin
170+ // ˆÚ“®‚µ‚½Û‚ɁA–߂郊ƒ“ƒN‚ð1‚‘«‚·‚Ì‚Å
171+ Result := FHistoryMax - 1;
172+end;
173+initialization
174+ MoveHisotryManager := TMoveHistory.Create( 20 );
175+
176+finalization
177+ if MoveHisotryManager <> nil then begin
178+ MoveHisotryManager.clear;
179+ MoveHisotryManager.Free;
180+ MoveHisotryManager := nil;
181+ end;
182+end.
--- a/Option.dfm
+++ b/Option.dfm
@@ -61,9 +61,9 @@ object OptionDialog: TOptionDialog
6161 Top = 4
6262 Width = 509
6363 Height = 389
64- ActivePage = TabSheet3
64+ ActivePage = TabSheet4
6565 MultiLine = True
66- TabIndex = 3
66+ TabIndex = 7
6767 TabOrder = 3
6868 OnChange = OptionTabChange
6969 object ConnectSheet: TTabSheet
@@ -1207,9 +1207,9 @@ object OptionDialog: TOptionDialog
12071207 end
12081208 end
12091209 object GroupBox19: TGroupBox
1210- Left = 11
1210+ Left = 12
12111211 Top = 74
1212- Width = 465
1212+ Width = 473
12131213 Height = 49
12141214 Caption = #23653#27508
12151215 TabOrder = 1
@@ -1238,6 +1238,38 @@ object OptionDialog: TOptionDialog
12381238 OnExit = MaxRecordCountEditExit
12391239 end
12401240 end
1241+ object GroupBox21: TGroupBox
1242+ Left = 11
1243+ Top = 133
1244+ Width = 473
1245+ Height = 52
1246+ Caption = #26368#23567#21270#26178#12479#12473#12463#12488#12524#12452
1247+ TabOrder = 2
1248+ object StoredTaskTrayCB: TCheckBox
1249+ Left = 11
1250+ Top = 24
1251+ Width = 118
1252+ Height = 17
1253+ Caption = #26377#21177#12395#12377#12427
1254+ TabOrder = 0
1255+ end
1256+ end
1257+ object GroupBox22: TGroupBox
1258+ Left = 12
1259+ Top = 200
1260+ Width = 473
1261+ Height = 52
1262+ Caption = #12502#12521#12454#12470#12479#12502
1263+ TabOrder = 3
1264+ object LoopBrowserTabsCB: TCheckBox
1265+ Left = 11
1266+ Top = 24
1267+ Width = 134
1268+ Height = 17
1269+ Caption = #12523#12540#12503#12375#12390#31227#21205#12377#12427
1270+ TabOrder = 0
1271+ end
1272+ end
12411273 end
12421274 object SoundSheet: TTabSheet
12431275 Caption = #12469#12454#12531#12489
--- a/Option.pas
+++ b/Option.pas
@@ -205,6 +205,10 @@ type
205205 GroupBox20: TGroupBox;
206206 AutoSortCheckBox: TCheckBox;
207207 Label24: TLabel;
208+ GroupBox21: TGroupBox;
209+ StoredTaskTrayCB: TCheckBox;
210+ GroupBox22: TGroupBox;
211+ LoopBrowserTabsCB: TCheckBox;
208212 procedure FormCreate(Sender: TObject);
209213 procedure FormDestroy(Sender: TObject);
210214 procedure ApplyButtonClick(Sender: TObject);
@@ -864,6 +868,10 @@ begin
864868 BeAutoLoginCheckBox.Checked := GikoSys.Setting.BeAutoLogin;
865869 //—š—ð‚̍őå•Û‘¶”
866870 MaxRecordCountEdit.Text := IntToStr(GikoSys.Setting.MaxRecordCount);
871+ // Å¬‰»Žž‚Ƀ^ƒXƒNƒgƒŒƒC‚ÉŠi”[‚·‚é‚©
872+ StoredTaskTrayCB.Checked := GikoSys.Setting.StoredTaskTray;
873+ // ƒuƒ‰ƒEƒUƒ^ƒu‚̈ړ®‚Ń‹[ƒv‚ð‹–‰Â‚·‚é‚©
874+ LoopBrowserTabsCB.Checked := GikoSys.Setting.LoopBrowserTabs;
867875 end;
868876
869877 procedure TOptionDialog.SaveSetting;
@@ -1151,6 +1159,9 @@ begin
11511159 GikoSys.Setting.BeAutoLogin := BeAutoLoginCheckBox.Checked;
11521160 //—š—ð‚̍őå•Û‘¶”
11531161 GikoSys.Setting.MaxRecordCount := Max(StrToInt64Def(MaxRecordCountEdit.Text,100),1);
1162+ GikoSys.Setting.StoredTaskTray := StoredTaskTrayCB.Checked;
1163+ GikoSys.Setting.LoopBrowserTabs := LoopBrowserTabsCB.Checked;
1164+
11541165 end;
11551166
11561167 procedure TOptionDialog.SettingApply;
--- a/Setting.pas
+++ b/Setting.pas
@@ -5,7 +5,7 @@ interface
55
66 uses
77 SysUtils, Classes, Graphics, Forms, {Math, IniFiles, UCryptAuto, UBase64,}
8- ComCtrls, GestureModel;
8+ ComCtrls, GestureModel, IniFiles;
99
1010 const
1111 MAIN_COOLBAND_COUNT = 4; //ƒƒCƒ“CoolBand‚̐”
@@ -430,9 +430,14 @@ type
430430 FInputAssistFormWidth: Integer;
431431 FInputAssistFormHeight: Integer;
432432
433- // Cookie‚É•t‰Á‚·‚éŒÅ’èƒR[ƒh
433+ //! Cookie‚É•t‰Á‚·‚éŒÅ’èƒR[ƒh
434434 FFixedCookie: String;
435-
435+ //! ƒŠƒ“ƒNˆÚ“®—š—ð‚Ì•ÛŽ”
436+ FMoveHistorySize : Integer;
437+ //! Å¬‰»‚µ‚½‚Æ‚«‚Ƀ^ƒXƒNƒgƒŒƒC‚ÉŠi”[‚·‚é‚©
438+ FStoredTaskTray : Boolean;
439+ //! ƒ^ƒu‚̈ړ®‚Ń‹[ƒv‚ð‹–‰Â‚·‚é
440+ FLoopBrowserTabs : Boolean;
436441 function GetMainCoolSet(Index: Integer): TCoolSet;
437442 function GetBoardCoolSet(Index: Integer): TCoolSet;
438443 function GetBrowserCoolSet(Index: Integer): TCoolSet;
@@ -458,6 +463,16 @@ type
458463
459464 procedure SetUseCSS( value: Boolean );
460465 procedure SetCSSFileName( fileName: string );
466+ //! ƒvƒƒLƒVÝ’è“ǂݍž‚Ý
467+ procedure ReadProxySettings(memIni: TMemIniFile);
468+ //! ŠeŽíƒEƒBƒ“ƒhƒEÝ’è“ǂݍž‚Ý
469+ procedure ReadWindowSettings(memIni: TMemIniFile);
470+ //! “ü—Í—š—ð“ǂݍž‚݁iŒŸõ{ƒ[ƒ‹—“{–¼‘Oj
471+ procedure ReadInputHisotrys(memIni: TMemIniFile);
472+ //! ƒŠƒXƒgƒJƒ‰ƒ€•“ǂݍž‚Ý
473+ procedure ReadListColumnWidth(memIni: TMemIniFile);
474+ //! ƒJƒeƒSƒŠƒŠƒXƒgƒJƒ‰ƒ€‡˜“ǂݍž‚Ý
475+ procedure ReadOrdColumn(memIni: TMemIniFile);
461476 protected
462477
463478 public
@@ -503,6 +518,11 @@ type
503518 function GetEditorKeyFileName: String;
504519 procedure WriteLogFolder(AVal : String);
505520 function GetInputAssistFileName : String;
521+ {
522+ \brief ƒŠƒ“ƒN—š—ð‚Ì•ÛŽƒTƒCƒY‚Ìsetter
523+ \param AVal Ý’è‚·‚éƒTƒCƒY( >0)
524+ }
525+ procedure SetMoveHistorySize(AVal : Integer);
506526 //ŽóMƒoƒbƒtƒ@ƒTƒCƒY
507527 property RecvBufferSize: Integer read FRecvBufferSize write FRecvBufferSize;
508528 //HTTP1.1Žg—p
@@ -758,7 +778,12 @@ type
758778 property InputAssistFormHeight: Integer read FInputAssistFormHeight write FInputAssistFormHeight;
759779 //! Cookie‚É•t‰Á‚·‚éŒÅ’èƒR[ƒh
760780 property FixedCookie: String read FFixedCookie write FFixedCookie;
761-
781+ //! ƒŠƒ“ƒNˆÚ“®—š—ð‚Ì•ÛŽ”
782+ property MoveHistorySize : Integer read FMoveHistorySize write SetMoveHistorySize;
783+ //! Å¬‰»Žž‚Ƀ^ƒXƒNƒgƒŒƒC‚ÉŠi”[‚·‚é‚©
784+ property StoredTaskTray : Boolean read FStoredTaskTray write FStoredTaskTray;
785+ //! ƒuƒ‰ƒEƒUƒ^ƒu‚̃‹[ƒv‚ð‹–‰Â‚·‚é
786+ property LoopBrowserTabs : Boolean read FLoopBrowserTabs write FLoopBrowserTabs;
762787 end;
763788
764789
@@ -800,7 +825,7 @@ const
800825 implementation
801826
802827 uses
803- Math, IniFiles, UCryptAuto, UBase64;
828+ Math, UCryptAuto, UBase64;
804829
805830 type
806831 TSoundName = record
@@ -953,20 +978,11 @@ end;
953978
954979 //Ý’èƒtƒ@ƒCƒ‹“Ǎž
955980 procedure TSetting.ReadSettingFile();
956-const
957- DEFAULT_BBS_WIDTH: array[0..0] of Integer = (140);
958- DEFAULT_CATEGORY_WIDTH: array[0..2] of Integer = (150, 80, 130);
959- DEFAULT_BOARD_WIDTH: array[0..10] of Integer = (350, 60, 60, 60, 60, 60, 80, 130, 130, 130, 60);
960- MAX_WIDTH: Integer = 2000;
961981 var
962982 ini: TMemIniFile;
963983 i: Integer;
964- id, code : Integer;
965- wkList: TStringList;
966- wkStr: string;
967984 Exists: Boolean;
968985 s: string;
969-// id: Integer;
970986 CoolSet: TCoolSet;
971987 begin
972988 Exists := FileExists(GetFileName);
@@ -979,60 +995,11 @@ begin
979995 //ƒvƒƒLƒVÚ‘±HTTP1.1Žg—p
980996 FProxyProtocol := ini.ReadBool('HTTP', 'ProxyProtocol', False);
981997
982- FReadProxy := ini.ReadBool('ReadProxy', 'Proxy', false);
983- FReadProxyAddress := ini.ReadString('ReadProxy', 'Address', '');
984- FReadProxyPort := ini.ReadInteger('ReadProxy', 'Port', 0);
985- FReadProxyUserID := ini.ReadString('ReadProxy', 'UserID', '');
986- FReadProxyPassword := ini.ReadString('ReadProxy', 'Password', '');
987-
988- FWriteProxy := ini.ReadBool('WriteProxy', 'Proxy', false);
989- FWriteProxyAddress := ini.ReadString('WriteProxy', 'Address', '');
990- FWriteProxyPort := ini.ReadInteger('WriteProxy', 'Port', 0);
991- FWriteProxyUserID := ini.ReadString('WriteProxy', 'UserID', '');
992- FWriteProxyPassword := ini.ReadString('WriteProxy', 'Password', '');
993-
994- FBrowserFontName := ini.ReadString('Window', 'BrowserFontName', '');
995- FBrowserFontSize := ini.ReadInteger('Window', 'BrowserFontSize', 0);
996- FBrowserFontBold := ini.ReadInteger('Window', 'BrowserFontBold', 0);
997- FBrowserFontItalic := ini.ReadInteger('Window', 'BrowserFontItalic', 0);
998- FBrowserFontColor := ini.ReadInteger('Window', 'BrowserFontColor', -1);
999- FBrowserBackColor := ini.ReadInteger('Window', 'BrowserBackColor', -1);
1000-
1001- FCabinetFontName := ini.ReadString('Window', 'CabinetFontName', DEFAULT_FONT_NAME);
1002- FCabinetFontSize := ini.ReadInteger('Window', 'CabinetFontSize', DEFAULT_FONT_SIZE);
1003- FCabinetFontBold := ini.ReadBool('Window', 'CabinetFontBold', False);
1004- FCabinetFontItalic := ini.ReadBool('Window', 'CabinetFontItalic', False);
1005- FCabinetFontColor := StringToColor(ini.ReadString('Window', 'CabinetFontColor', DEFAULT_FONT_COLOR));
1006- FCabinetBackColor := StringToColor(ini.ReadString('Window', 'CabinetBackColor', DEFAULT_WINDOW_COLOR));
1007-
1008- FListFontName := ini.ReadString('Window', 'ListFontName', DEFAULT_FONT_NAME);
1009- FListFontSize := ini.ReadInteger('Window', 'ListFontSize', DEFAULT_FONT_SIZE);
1010- FListFontBold := ini.ReadBool('Window', 'ListFontBold', False);
1011- FListFontItalic := ini.ReadBool('Window', 'ListFontItalic', False);
1012- FListFontColor := StringToColor(ini.ReadString('Window', 'ListFontColor', DEFAULT_FONT_COLOR));
1013- FListBackColor := StringToColor(ini.ReadString('Window', 'ListBackColor', DEFAULT_WINDOW_COLOR));
1014- FUseOddColorOddResNum := ini.ReadBool('Window','UseOddColor', False);
1015- FOddColor := StringToColor(ini.ReadString('Window', 'OddColor', DEFAULT_WINDOW_COLOR));
1016- FUnFocusedBold := ini.ReadBool('Window','UnFocusedBold', False);
1017-
1018- FEditorFontName := ini.ReadString('Window', 'EditorFontName', DEFAULT_FONT_NAME);
1019- FEditorFontSize := ini.ReadInteger('Window', 'EditorFontSize', DEFAULT_FONT_SIZE);
1020- FEditorFontBold := ini.ReadBool('Window', 'EditorFontBold', False);
1021- FEditorFontItalic := ini.ReadBool('Window', 'EditorFontItalic', False);
1022- FEditorFontColor := StringToColor(ini.ReadString('Window', 'EditorFontColor', DEFAULT_FONT_COLOR));
1023- FEditorBackColor := StringToColor(ini.ReadString('Window', 'EditorBackColor', DEFAULT_WINDOW_COLOR));
1024-
1025- FBrowserTabFontName := ini.ReadString('Window', 'BrowserTabFontName', DEFAULT_TAB_FONT_NAME);
1026- FBrowserTabFontSize := ini.ReadInteger('Window', 'BrowserTabFontSize', DEFAULT_TAB_FONT_SIZE);
1027- FBrowserTabFontBold := ini.ReadBool('Window', 'BrowserTabFontBold', False);
1028- FBrowserTabFontItalic := ini.ReadBool('Window', 'BrowserTabFontItalic', False);
1029-
1030- FHintFontName := ini.ReadString('Window', 'HintFontName', Screen.HintFont.Name);
1031- FHintFontSize := ini.ReadInteger('Window', 'HintFontSize', Screen.HintFont.Size);
1032- //FHintFontBold := ini.ReadBool('Window', 'HintFontBold', False);
1033- //FHintFontItalic := ini.ReadBool('Window', 'HintFontItalic', False);
1034- FHintFontColor := StringToColor(ini.ReadString('Window', 'HintFontColor', DEFAULT_FONT_COLOR));
1035- FHintBackColor := StringToColor(ini.ReadString('Window', 'HintBackColor', 'clInfoBk'));
998+ // ƒvƒƒLƒVÝ’è“ǂݍž‚Ý
999+ ReadProxySettings( ini );
1000+
1001+ // ŠeŽíƒEƒBƒ“ƒhƒE‚̐ݒè“ǂݍž‚Ý
1002+ ReadWindowSettings( ini );
10361003
10371004 FWindowTop := ini.ReadInteger('WindowSize', 'Top', -1);
10381005 FWindowLeft := ini.ReadInteger('WindowSize', 'Left', -1);
@@ -1089,112 +1056,14 @@ begin
10891056 // FListHeightMax := ini.ReadBool('List', 'HeightMax', False);
10901057 // FListWidthMax := ini.ReadBool('List', 'WidthMax', False);
10911058
1092- wkList := TStringList.Create;
1093- try
1094- ini.ReadSection('Name', wkList);
1095- for i := 0 to wkList.Count - 1 do begin
1096- wkStr := ini.ReadString('Name', wkList[i], '');
1097- if (wkStr <> '') and (FNameList.IndexOf(wkStr) = -1) then
1098- FNameList.Add(wkStr);
1099- end;
1100- ini.ReadSection('Mail', wkList);
1101- for i := 0 to wkList.Count - 1 do begin
1102- wkStr := ini.ReadString('Mail', wkList[i], '');
1103- if (wkStr <> '') and (FMailList.IndexOf(wkStr) = -1) then
1104- FMailList.Add(wkStr);
1105- end;
1106- ini.ReadSection('SelectText', wkList);
1107- for i := 0 to wkList.Count - 1 do begin
1108- wkStr := ini.ReadString('SelectText', wkList[i], '');
1109- if (wkStr <> '') and (FSelectTextList.IndexOf(wkStr) = -1) then
1110- FSelectTextList.Add(wkStr);
1111- end;
1112- finally
1113- wkList.Free;
1114- end;
1059+ // “ü—͍€–Ú‚Ì—š—ð‚ð“ǂݍž‚Þ
1060+ ReadInputHisotrys( ini );
11151061
11161062 // ƒŠƒXƒgƒJƒ‰ƒ€•
1117- wkList := TStringList.Create;
1118- try
1119- ini.ReadSection('BBSColumnWidth', wkList);
1120- if Length(FBBSColumnWidth) <> wkList.Count then begin
1121- ini.EraseSection('BBSColumnWidth');
1122- end;
1123- for i := 0 to Length(FBBSColumnWidth) - 1 do begin
1124- BBSColumnWidth[i] := ini.ReadInteger('BBSColumnWidth', 'ID' + IntToStr(i), DEFAULT_BBS_WIDTH[i]);
1125- if BBSColumnWidth[i] > MAX_WIDTH then
1126- BBSColumnWidth[i] := DEFAULT_BBS_WIDTH[i];
1127- end;
1128- ini.ReadSection('CategoryColumnWidth', wkList);
1129- if Length(FCategoryColumnWidth) <> wkList.Count then begin
1130- ini.EraseSection('CategoryColumnWidth');
1131- end;
1132- for i := 0 to Length(FCategoryColumnWidth) - 1 do begin
1133- CategoryColumnWidth[i] := ini.ReadInteger('CategoryColumnWidth', 'ID' + IntToStr(i), DEFAULT_CATEGORY_WIDTH[i]);
1134- if CategoryColumnWidth[i] > MAX_WIDTH then
1135- CategoryColumnWidth[i] := DEFAULT_CATEGORY_WIDTH[i];
1136- end;
1137- ini.ReadSection('BoardColumnWidth', wkList);
1138- if Length(FBoardColumnWidth) <> wkList.Count then begin
1139- ini.EraseSection('BoardColumnWidth');
1140- end;
1141- for i := 0 to Length(FBoardColumnWidth) - 1 do begin
1142- BoardColumnWidth[i] := ini.ReadInteger('BoardColumnWidth', 'ID' + IntToStr(i), DEFAULT_BOARD_WIDTH[i]);
1143- if BoardColumnWidth[i] > MAX_WIDTH then
1144- BoardColumnWidth[i] := DEFAULT_BOARD_WIDTH[i];
1145- end;
1146- finally
1147- wkList.Free;
1148- end;
1063+ ReadListColumnWidth( ini );
11491064
11501065 // ƒJƒeƒSƒŠƒŠƒXƒgƒJƒ‰ƒ€‡˜
1151- wkList := TStringList.Create;
1152- try
1153- ini.ReadSection( 'BBSColumnOrder', wkList );
1154- for i := 0 to wkList.Count - 1 do begin
1155- wkStr := ini.ReadString( 'BBSColumnOrder', 'ID' + IntToStr( i ), '' );
1156- Val( wkStr, id, code );
1157- if code = 0 then
1158- FBBSColumnOrder.Add( TGikoBBSColumnID( id ) );
1159- end;
1160- if FBBSColumnOrder.Count = 0 then begin
1161- // Ý’肪–³‚¢‚̂ō쐬
1162- for i := 0 to Integer( High( TGikoBBSColumnID ) ) do
1163- FBBSColumnOrder.Add( TGikoBBSColumnID( i ) );
1164- end;
1165-
1166- ini.ReadSection( 'CategoryColumnOrder', wkList );
1167- for i := 0 to wkList.Count - 1 do begin
1168- wkStr := ini.ReadString( 'CategoryColumnOrder', 'ID' + IntToStr( i ), '' );
1169- Val( wkStr, id, code );
1170- if code = 0 then
1171- FCategoryColumnOrder.Add( TGikoCategoryColumnID( id ) );
1172- end;
1173- if FCategoryColumnOrder.Count = 0 then begin
1174- // Ý’肪–³‚¢‚̂ō쐬
1175- for i := 0 to Integer( High( TGikoCategoryColumnID ) ) do
1176- FCategoryColumnOrder.Add( TGikoCategoryColumnID( i ) );
1177- end;
1178-
1179- ini.ReadSection( 'BoardColumnOrder', wkList );
1180- for i := 0 to wkList.Count - 1 do begin
1181- wkStr := ini.ReadString( 'BoardColumnOrder', 'ID' + IntToStr( i ), '' );
1182- Val( wkStr, id, code );
1183- if code = 0 then
1184- FBoardColumnOrder.Add( TGikoBoardColumnID( id ) );
1185- end;
1186- if FBoardColumnOrder.Count = 0 then begin
1187- // Ý’肪–³‚¢‚̂ō쐬
1188- for i := 0 to Integer( High( TGikoBoardColumnID ) ) do begin
1189- // ¨‚¢‚̃Jƒ‰ƒ€‚̓fƒtƒHƒ‹ƒg‚Å”ñ•\Ž¦‚É‚·‚é
1190- if ( i <> Ord(gbcVigor) ) then begin
1191- FBoardColumnOrder.Add( TGikoBoardColumnID( i ) );
1192- end;
1193- end;
1194- end;
1195- finally
1196- wkList.Free;
1197- end;
1066+ ReadOrdColumn( ini );
11981067
11991068 //ƒŠƒXƒg”ԍ†
12001069 FListViewNo := ini.ReadBool('Function', 'ListViewNo', True);
@@ -1381,6 +1250,12 @@ begin
13811250 // Cookie‚É•t‰Á‚·‚éŒÅ’èƒR[ƒh
13821251 FFixedCookie := ini.ReadString('Cookie', 'fixedString', FIXED_COOKIE);
13831252
1253+ // ƒŠƒ“ƒNˆÚ“®—š—ð‚̍őå•ÛŽ”
1254+ FMoveHistorySize := ini.ReadInteger('MoveHisotry', 'Max', 20);
1255+
1256+ FStoredTaskTray := ini.ReadBool('Function', 'StroedTaskTray', false);
1257+ FLoopBrowserTabs := ini.ReadBool('Function', 'LoopBrowserTabs', false);
1258+
13841259 ini.UpdateFile;
13851260 finally
13861261 ini.Free;
@@ -1752,6 +1627,11 @@ begin
17521627 // ŒÅ’è‚ÌCookie•¶Žš—ñ
17531628 ini.WriteString('Cookie', 'fixedString', FFixedCookie);
17541629
1630+ // ƒŠƒ“ƒNˆÚ“®—š—ð‚̍őå•ÛŽ”
1631+ ini.WriteInteger('MoveHisotry', 'Max', FMoveHistorySize);
1632+
1633+ ini.WriteBool('Function', 'StroedTaskTray', FStoredTaskTray);
1634+ ini.WriteBool('Function', 'LoopBrowserTabs', FLoopBrowserTabs);
17551635 ini.UpdateFile;
17561636 finally
17571637 ini.Free;
@@ -2225,7 +2105,238 @@ function TSetting.GetInputAssistFileName : String;
22252105 begin
22262106 Result := GetConfigDir + INPUTASSIST_FILE_NAME;
22272107 end;
2108+procedure TSetting.SetMoveHistorySize(AVal : Integer);
2109+begin
2110+ if (AVal > 0) then begin
2111+ FMoveHistorySize := AVal;
2112+ end;
2113+end;
2114+{
2115+\brief ƒvƒƒLƒVÝ’è“ǂݍž‚Ý
2116+\param memIni iniƒtƒ@ƒCƒ‹
2117+}
2118+procedure TSetting.ReadProxySettings(memIni: TMemIniFile);
2119+const
2120+ READ_SECTION = 'ReadProxy';
2121+ WRITE_SECTION= 'WriteProxy';
2122+ PROXY_KEY = 'Proxy';
2123+ ADDRE_KEY = 'Address';
2124+ PORT_KEY = 'Port';
2125+ UID_KEY = 'UserID';
2126+ PASS_KEY = 'Password';
2127+begin
2128+ if (memIni <> nil) then begin
2129+ FReadProxy := memIni.ReadBool(READ_SECTION, PROXY_KEY, false);
2130+ FReadProxyAddress := memIni.ReadString(READ_SECTION, ADDRE_KEY, '');
2131+ FReadProxyPort := memIni.ReadInteger(READ_SECTION, PORT_KEY, 0);
2132+ FReadProxyUserID := memIni.ReadString(READ_SECTION, UID_KEY, '');
2133+ FReadProxyPassword := memIni.ReadString(READ_SECTION, PASS_KEY, '');
2134+
2135+ FWriteProxy := memIni.ReadBool(WRITE_SECTION, PROXY_KEY, false);
2136+ FWriteProxyAddress := memIni.ReadString(WRITE_SECTION, ADDRE_KEY, '');
2137+ FWriteProxyPort := memIni.ReadInteger(WRITE_SECTION, PORT_KEY, 0);
2138+ FWriteProxyUserID := memIni.ReadString(WRITE_SECTION, UID_KEY, '');
2139+ FWriteProxyPassword := memIni.ReadString(WRITE_SECTION, PASS_KEY, '');
2140+ end;
2141+end;
2142+{
2143+\brief ŠeŽíƒEƒBƒ“ƒhƒEÝ’è“ǂݍž‚Ý
2144+\param menIni iniƒtƒ@ƒCƒ‹
2145+}
2146+procedure TSetting.ReadWindowSettings(memIni: TMemIniFile);
2147+const
2148+ WINDOW_SECTION = 'Window';
2149+begin
2150+ if (memIni <> nil) then begin
2151+ FBrowserFontName := memIni.ReadString(WINDOW_SECTION, 'BrowserFontName', '');
2152+ FBrowserFontSize := memIni.ReadInteger(WINDOW_SECTION, 'BrowserFontSize', 0);
2153+ FBrowserFontBold := memIni.ReadInteger(WINDOW_SECTION, 'BrowserFontBold', 0);
2154+ FBrowserFontItalic := memIni.ReadInteger(WINDOW_SECTION, 'BrowserFontItalic', 0);
2155+ FBrowserFontColor := memIni.ReadInteger(WINDOW_SECTION, 'BrowserFontColor', -1);
2156+ FBrowserBackColor := memIni.ReadInteger(WINDOW_SECTION, 'BrowserBackColor', -1);
2157+
2158+ FCabinetFontName := memIni.ReadString(WINDOW_SECTION, 'CabinetFontName', DEFAULT_FONT_NAME);
2159+ FCabinetFontSize := memIni.ReadInteger(WINDOW_SECTION, 'CabinetFontSize', DEFAULT_FONT_SIZE);
2160+ FCabinetFontBold := memIni.ReadBool(WINDOW_SECTION, 'CabinetFontBold', False);
2161+ FCabinetFontItalic := memIni.ReadBool(WINDOW_SECTION, 'CabinetFontItalic', False);
2162+ FCabinetFontColor := StringToColor(memIni.ReadString(WINDOW_SECTION, 'CabinetFontColor', DEFAULT_FONT_COLOR));
2163+ FCabinetBackColor := StringToColor(memIni.ReadString(WINDOW_SECTION, 'CabinetBackColor', DEFAULT_WINDOW_COLOR));
2164+
2165+ FListFontName := memIni.ReadString(WINDOW_SECTION, 'ListFontName', DEFAULT_FONT_NAME);
2166+ FListFontSize := memIni.ReadInteger(WINDOW_SECTION, 'ListFontSize', DEFAULT_FONT_SIZE);
2167+ FListFontBold := memIni.ReadBool(WINDOW_SECTION, 'ListFontBold', False);
2168+ FListFontItalic := memIni.ReadBool(WINDOW_SECTION, 'ListFontItalic', False);
2169+ FListFontColor := StringToColor(memIni.ReadString(WINDOW_SECTION, 'ListFontColor', DEFAULT_FONT_COLOR));
2170+ FListBackColor := StringToColor(memIni.ReadString(WINDOW_SECTION, 'ListBackColor', DEFAULT_WINDOW_COLOR));
2171+ FUseOddColorOddResNum := memIni.ReadBool(WINDOW_SECTION,'UseOddColor', False);
2172+ FOddColor := StringToColor(memIni.ReadString(WINDOW_SECTION, 'OddColor', DEFAULT_WINDOW_COLOR));
2173+ FUnFocusedBold := memIni.ReadBool(WINDOW_SECTION,'UnFocusedBold', False);
2174+
2175+ FEditorFontName := memIni.ReadString(WINDOW_SECTION, 'EditorFontName', DEFAULT_FONT_NAME);
2176+ FEditorFontSize := memIni.ReadInteger(WINDOW_SECTION, 'EditorFontSize', DEFAULT_FONT_SIZE);
2177+ FEditorFontBold := memIni.ReadBool(WINDOW_SECTION, 'EditorFontBold', False);
2178+ FEditorFontItalic := memIni.ReadBool(WINDOW_SECTION, 'EditorFontItalic', False);
2179+ FEditorFontColor := StringToColor(memIni.ReadString(WINDOW_SECTION, 'EditorFontColor', DEFAULT_FONT_COLOR));
2180+ FEditorBackColor := StringToColor(memIni.ReadString(WINDOW_SECTION, 'EditorBackColor', DEFAULT_WINDOW_COLOR));
2181+
2182+ FBrowserTabFontName := memIni.ReadString(WINDOW_SECTION, 'BrowserTabFontName', DEFAULT_TAB_FONT_NAME);
2183+ FBrowserTabFontSize := memIni.ReadInteger(WINDOW_SECTION, 'BrowserTabFontSize', DEFAULT_TAB_FONT_SIZE);
2184+ FBrowserTabFontBold := memIni.ReadBool(WINDOW_SECTION, 'BrowserTabFontBold', False);
2185+ FBrowserTabFontItalic := memIni.ReadBool(WINDOW_SECTION, 'BrowserTabFontItalic', False);
2186+
2187+ FHintFontName := memIni.ReadString(WINDOW_SECTION, 'HintFontName', Screen.HintFont.Name);
2188+ FHintFontSize := memIni.ReadInteger(WINDOW_SECTION, 'HintFontSize', Screen.HintFont.Size);
2189+ //FHintFontBold := memIni.ReadBool(WINDOW_SECTION, 'HintFontBold', False);
2190+ //FHintFontItalic := memIni.ReadBool(WINDOW_SECTION, 'HintFontItalic', False);
2191+ FHintFontColor := StringToColor(memIni.ReadString(WINDOW_SECTION, 'HintFontColor', DEFAULT_FONT_COLOR));
2192+ FHintBackColor := StringToColor(memIni.ReadString(WINDOW_SECTION, 'HintBackColor', 'clInfoBk'));
2193+ end;
2194+end;
2195+{
2196+\brief “ü—Í—š—ð“ǂݍž‚݁iŒŸõ{ƒ[ƒ‹—“{–¼‘Oj
2197+\param memIni iniƒtƒ@ƒCƒ‹
2198+}
2199+procedure TSetting.ReadInputHisotrys(memIni: TMemIniFile);
2200+const
2201+ SECTIONS : array[0..2] of string = ('Name', 'Mail', 'SelectText');
2202+var
2203+ wkList : TStringList;
2204+ wkStr : string;
2205+ i, j : Integer;
2206+ listArray : array[0..2] of TStringList;
2207+begin
2208+ if (memIni <> nil) then begin
2209+ listArray[0] := FNameList;
2210+ listArray[1] := FMailList;
2211+ listArray[2] := FSelectTextList;
2212+ wkList := TStringList.Create;
2213+ try
2214+ for i := 0 to High(listArray) do begin
2215+ memIni.ReadSection(SECTIONS[i], wkList);
2216+ for j := 0 to wkList.Count -1 do begin
2217+ wkStr := memIni.ReadString(SECTIONS[i], wkList[j], '');
2218+ if (wkStr <> '') and
2219+ (listArray[i].IndexOf(wkStr) = -1) then begin
2220+ listArray[i].Add(wkStr);
2221+ end;
2222+ end;
2223+ end;
2224+ finally
2225+ wkList.Free;
2226+ end;
2227+ end;
2228+end;
2229+{
2230+\breif ƒŠƒXƒgƒJƒ‰ƒ€•“ǂݍž‚Ý
2231+\param memIni iniƒtƒ@ƒCƒ‹
2232+}
2233+procedure TSetting.ReadListColumnWidth(memIni: TMemIniFile);
2234+const
2235+ SECTIONS : array[0..2] of string =
2236+ ('BBSColumnWidth', 'CategoryColumnWidth', 'BoardColumnWidth');
2237+ DEFAULT_BBS_WIDTH: array[0..0] of Integer = (140);
2238+ DEFAULT_CATEGORY_WIDTH: array[0..2] of Integer = (150, 80, 130);
2239+ DEFAULT_BOARD_WIDTH: array[0..10] of Integer = (350, 60, 60, 60, 60, 60, 80, 130, 130, 130, 60);
2240+ MAX_WIDTH: Integer = 2000;
2241+var
2242+ wkList : TStringList;
2243+ i : Integer;
2244+begin
2245+ if (memIni <> nil) then begin
2246+ // ƒŠƒXƒgƒJƒ‰ƒ€•
2247+ wkList := TStringList.Create;
2248+ try
2249+ memIni.ReadSection(SECTIONS[0], wkList);
2250+ if Length(FBBSColumnWidth) <> wkList.Count then begin
2251+ memIni.EraseSection(SECTIONS[0]);
2252+ end;
2253+ for i := 0 to High(FBBSColumnWidth) do begin
2254+ BBSColumnWidth[i] := memIni.ReadInteger(SECTIONS[0],
2255+ 'ID' + IntToStr(i), DEFAULT_BBS_WIDTH[i]);
2256+ if BBSColumnWidth[i] > MAX_WIDTH then
2257+ BBSColumnWidth[i] := DEFAULT_BBS_WIDTH[i];
2258+ end;
2259+ memIni.ReadSection(SECTIONS[1], wkList);
2260+ if Length(FCategoryColumnWidth) <> wkList.Count then begin
2261+ memIni.EraseSection(SECTIONS[1]);
2262+ end;
2263+ for i := 0 to High(FCategoryColumnWidth) do begin
2264+ CategoryColumnWidth[i] := memIni.ReadInteger(SECTIONS[1],
2265+ 'ID' + IntToStr(i), DEFAULT_CATEGORY_WIDTH[i]);
2266+ if CategoryColumnWidth[i] > MAX_WIDTH then
2267+ CategoryColumnWidth[i] := DEFAULT_CATEGORY_WIDTH[i];
2268+ end;
2269+ memIni.ReadSection(SECTIONS[2], wkList);
2270+ if Length(FBoardColumnWidth) <> wkList.Count then begin
2271+ memIni.EraseSection(SECTIONS[2]);
2272+ end;
2273+ for i := 0 to High(FBoardColumnWidth) do begin
2274+ BoardColumnWidth[i] := memIni.ReadInteger(SECTIONS[2],
2275+ 'ID' + IntToStr(i), DEFAULT_BOARD_WIDTH[i]);
2276+ if BoardColumnWidth[i] > MAX_WIDTH then
2277+ BoardColumnWidth[i] := DEFAULT_BOARD_WIDTH[i];
2278+ end;
2279+ finally
2280+ wkList.Free;
2281+ end;
2282+ end;
2283+end;
2284+//! ƒJƒeƒSƒŠƒŠƒXƒgƒJƒ‰ƒ€‡˜“ǂݍž‚Ý
2285+procedure TSetting.ReadOrdColumn(memIni: TMemIniFile);
2286+var
2287+ wkList : TStringList;
2288+ wkStr : string;
2289+ i, id, code : Integer;
2290+begin
2291+ if (memIni <> nil) then begin
2292+ wkList := TStringList.Create;
2293+ try
2294+ memIni.ReadSection( 'BBSColumnOrder', wkList );
2295+ for i := 0 to wkList.Count - 1 do begin
2296+ wkStr := memIni.ReadString( 'BBSColumnOrder', 'ID' + IntToStr( i ), '' );
2297+ Val( wkStr, id, code );
2298+ if code = 0 then
2299+ FBBSColumnOrder.Add( TGikoBBSColumnID( id ) );
2300+ end;
2301+ if FBBSColumnOrder.Count = 0 then begin
2302+ // Ý’肪–³‚¢‚̂ō쐬
2303+ for i := 0 to Integer( High( TGikoBBSColumnID ) ) do
2304+ FBBSColumnOrder.Add( TGikoBBSColumnID( i ) );
2305+ end;
22282306
2229-end.
2307+ memIni.ReadSection( 'CategoryColumnOrder', wkList );
2308+ for i := 0 to wkList.Count - 1 do begin
2309+ wkStr := memIni.ReadString( 'CategoryColumnOrder', 'ID' + IntToStr( i ), '' );
2310+ Val( wkStr, id, code );
2311+ if code = 0 then
2312+ FCategoryColumnOrder.Add( TGikoCategoryColumnID( id ) );
2313+ end;
2314+ if FCategoryColumnOrder.Count = 0 then begin
2315+ // Ý’肪–³‚¢‚̂ō쐬
2316+ for i := 0 to Integer( High( TGikoCategoryColumnID ) ) do
2317+ FCategoryColumnOrder.Add( TGikoCategoryColumnID( i ) );
2318+ end;
22302319
2320+ memIni.ReadSection( 'BoardColumnOrder', wkList );
2321+ for i := 0 to wkList.Count - 1 do begin
2322+ wkStr := memIni.ReadString( 'BoardColumnOrder', 'ID' + IntToStr( i ), '' );
2323+ Val( wkStr, id, code );
2324+ if code = 0 then
2325+ FBoardColumnOrder.Add( TGikoBoardColumnID( id ) );
2326+ end;
2327+ if FBoardColumnOrder.Count = 0 then begin
2328+ // Ý’肪–³‚¢‚̂ō쐬
2329+ for i := 0 to Integer( High( TGikoBoardColumnID ) ) do begin
2330+ // ¨‚¢‚̃Jƒ‰ƒ€‚̓fƒtƒHƒ‹ƒg‚Å”ñ•\Ž¦‚É‚·‚é
2331+ if ( i <> Ord(gbcVigor) ) then begin
2332+ FBoardColumnOrder.Add( TGikoBoardColumnID( i ) );
2333+ end;
2334+ end;
2335+ end;
2336+ finally
2337+ wkList.Free;
2338+ end;
2339+ end;
2340+end;
2341+end.
22312342
--- a/Trip.pas
+++ b/Trip.pas
@@ -33,6 +33,16 @@ function get_2ch_trip(
3333 const pw : PChar
3434 ) : string;
3535
36+{!
37+\brief ƒgƒŠƒbƒv‚̐¶¬‚É•K—v‚Èsalt‚̐¶¬
38+\parm pw salt‚ÌŒ³‚É‚È‚éƒpƒXƒ[ƒh
39+\param salt ¶¬‚µ‚½salt‚ªŠi”[‚³‚ê‚é (array[0..2] of char)
40+}
41+procedure get_salt(
42+ const pw : PChar;
43+ salt : PChar
44+);
45+
3646 const
3747 kCryptInitialTr : CryptOrdering = ( o_data: (
3848 #58,#50,#42,#34,#26,#18,#10, #2,#60,#52,#44,#36,#28,#20,#12, #4,
@@ -413,18 +423,30 @@ function get_2ch_trip(
413423 var
414424 s : CryptData;
415425 salt : array [0..2] of char;
416-
417- i : Integer;
418- len : Integer;
419426 begin
420427
421- salt[ 0 ] := #0;
422428 if pw[ 0 ] = #0 then
423429 begin
424430 Result := '';
425431 Exit;
426432 end;
427433
434+ get_salt( pw, salt );
435+
436+
437+ Result := Copy( crypt_r( pw, salt, s ), 4, 100 );
438+
439+end;
440+
441+procedure get_salt(
442+ const pw : PChar;
443+ salt : PChar
444+);
445+var
446+ i, len : Integer;
447+begin
448+ salt[ 0 ] := #0;
449+
428450 if pw[ 1 ] <> #0 then
429451 begin
430452 if pw[ 2 ] <> #0 then
@@ -438,8 +460,11 @@ begin
438460 else
439461 salt[ i ] := '.';
440462
441- if Pos( salt[ i ], ':;<=>?@[\\]^_`' ) > 0 then
442- salt[ i ] := Char( Integer( salt[ i ] ) + 7 );
463+ if Pos ( salt[ i ], ':;<=>?@' ) > 0 then begin
464+ salt[ i ] := Char( Integer( salt[ i ] ) + 7 );
465+ end else if Pos( salt[ i ], '[\\]^_`' ) > 0 then begin
466+ salt[ i ] := Char( Integer( salt[ i ] ) + 6 );
467+ end;
443468 end;
444469 if len = 1 then
445470 salt[ 1 ] := 'H';
@@ -448,9 +473,6 @@ begin
448473 salt[ 0 ] := 'H';
449474 salt[ 1 ] := '.';
450475 end;
451-
452- Result := Copy( crypt_r( pw, salt, s ), 4, 100 );
453-
454476 end;
455477
456478 end.
--- a/gikoNavi.dpr
+++ b/gikoNavi.dpr
@@ -72,7 +72,8 @@ uses
7272 GikoMessage in 'GikoMessage.pas',
7373 InputAssist in 'InputAssist.pas' {InputAssistForm},
7474 InputAssistDataModule in 'InputAssistDataModule.pas' {InputAssistDM: TDataModule},
75- DefaultFileManager in 'DefaultFileManager.pas';
75+ DefaultFileManager in 'DefaultFileManager.pas',
76+ MoveHistoryItem in 'MoveHistoryItem.pas';
7677
7778 {$R *.RES}
7879 {$R gikoResource.res}
Binary files a/gikoNavi.res and b/gikoNavi.res differ
--- a/readme/readme.txt
+++ b/readme/readme.txt
@@ -1,4 +1,4 @@
1-¡ƒMƒRƒiƒr Version1.00 ÊÞÀ53 Readme.txt
1+¡ƒMƒRƒiƒr Version1.00 ÊÞÀ54 Readme.txt
22
33
44 ------------------------------
@@ -50,7 +50,7 @@
5050 ------------------------------
5151 ƒoƒO‚â—v–]‚́AƒMƒRƒiƒrƒXƒŒƒbƒh‚Ŏ󂯕t‚¯‚Ä‚¨‚è‚Ü‚·B
5252 ƒMƒRƒiƒrƒTƒCƒgFhttp://gikonavi.sourceforge.jp/
53-ƒMƒRƒiƒrƒXƒŒFhttp://pc7.2ch.net/test/read.cgi/software/1149268313/l50
53+ƒMƒRƒiƒrƒXƒŒFhttp://pc7.2ch.net/test/read.cgi/software/1151728347/l50
5454
5555 ------------------------------
5656 “]Ú‚ɂ‚¢‚Ä
@@ -107,7 +107,12 @@ LICENSE
107107 ------------------------------
108108 —š—ð
109109 ------------------------------
110-2006/XX/XX
110+2006/12/XX
111+ Version ÊÞÀ54
112+@ƒXƒŒƒbƒh“à‚ł̃Šƒ“ƒN‚ňړ®‚µ‚½‚Æ‚«‚Ì—š—ð‚ð’H‚ê‚é‹@”\‚ð’ljÁ
113+@ƒ^ƒXƒNƒgƒŒƒC‚ÉŠi”[‚·‚é‹@”\‚ð’ljÁiƒIƒvƒVƒ‡ƒ“‚ōŏ¬‰»Žž‚àj
114+
115+2006/08/07
111116 Version ÊÞÀ53
112117 @IE7(beta)‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚é‚ƃŒƒXƒAƒ“ƒJ[‚̃|ƒbƒvƒAƒbƒv‚Å•\Ž¦‚³‚ê‚È‚¢•s‹ï‡‚̏C³
113118 @‚µ‚½‚ç‚ÎJBBS”XV‚ªA“®ì‚µ‚È‚¢•s‹ï‡‚̏C³
@@ -116,8 +121,8 @@ LICENSE
116121 @„‰ñ—\–ñ–¼‚̕ύX‚ª”½‰f‚³‚ê‚È‚¢•s‹ï‡‚̏C³
117122 @—š—ðíœ‚É”º‚¤•s‹ï‡‚̏C³
118123 @ƒJƒ“ƒ}‚ŘA‘±‚·‚郌ƒXƒAƒ“ƒJ[‚ɃŠƒ“ƒN‚ªÝ’肳‚ê‚È‚¢•s‹ï‡‚̏C³
119-@
120-
124+@ƒfƒtƒHƒ‹ƒg‚̐ݒèƒtƒ@ƒCƒ‹‚̈µ‚¢‚𓝈ê
125+@ƒŒƒXƒGƒfƒBƒ^‚̃vƒŒƒrƒ…[‚Å•\Ž¦‚³‚ê‚éƒgƒŠƒbƒvƒL[‚ÆŽÀÛ‚̃gƒŠƒbƒvƒL[‚ªˆÙ‚È‚é•s‹ï‡‚̏C³
121126
122127 2006/06/18
123128 Version ÊÞÀ52
--- a/res/default/Samba.default
+++ b/res/default/Samba.default
@@ -3,15 +3,14 @@ aa5=30
33 academy4=30
44 anime=45
55 book3=30
6-bubble4=120
6+bubble4=30
77 comic6=30
88 etc3=30
99 etc4=30
1010 ex9=15
1111 ex11=15
12-ex12=15
13-ex13=15
14-ex14=15
12+ex13=120
13+ex16=15
1514 food6=30
1615 game9=30
1716 game10=30
@@ -22,29 +21,31 @@ life7=30
2221 live14=10
2322 live19=10
2423 live22x=10
24+live23=10
2525 love3=30
2626 money4=30
27-music4=30
2827 music5=30
28+music6=30
2929 news18=30
3030 news19=120
31+news20=120
3132 off3=30
3233 pc7=30
3334 pc8=30
3435 qa=30
35-qb5=30
36+qb5=120
3637 qb6=30
3738 school5=30
3839 science4=30
3940 society3=30
4041 sports9=60
4142 that4=30
42-tmp5=45
43-travel2=30
43+tmp6=45
44+travel2=120
4445 tv7=30
45-tv8=60
46-pie=30
46+tv8=120
4747 idol=30
48+pie=30
4849 sakura01=30
4950 sakura02=30
50-sakura03=30
51+sakura03=120