OSDN Git Service

挿入文字列だけ変更して適用できない不具合の修正
[gikonavigoeson/gikonavi.git] / Giko.pas
index 56858d1..7af88cd 100644 (file)
--- a/Giko.pas
+++ b/Giko.pas
@@ -16,12 +16,17 @@ uses
        ToolWin, Buttons, IdComponent, UrlMon, Tabs, IdGlobal, StrUtils,
        CommCtrl, Dialogs, GikoSystem, Setting, BoardGroup, ThreadControl, ItemDownload,
        Editor, RoundData, GikoPanel, Favorite, HTMLDocumentEvent,
-       HintWindow, GikoCoolBar, GikoListView, Search, ExternalBoardManager,
+       {HintWindow,} GikoCoolBar, GikoListView, Search, ExternalBoardManager,
        ExternalBoardPlugInMain, StdActns, Variants, ExtActns,IdTCPConnection,
-       IdBaseComponent, IdTCPClient, AppEvnts, BrowserRecord;
+       IdBaseComponent, IdTCPClient, AppEvnts, BrowserRecord, MoveHistoryItem,
+    ShellAPI,Preview, HistoryList, ResPopupBrowser;
 
+const
+       NGWORDNAME_PANEL = 3;
+       THREADSIZE_PANEL = 2;
+       
 type
-       TGikoTreeType = (gttNone, gtt2ch, gttHistory, gttFavorite);
+
        TToolBarSettingSenderType = (tssNone, tssMain, tssList, tssBrowser);
        TMinimizeType = (mtNone, mtMinimizing, mtMinimized);
        TResizeType = (rtNone, rtResizing);
@@ -279,7 +284,7 @@ type
                SelectItemNameCopyAction1: TMenuItem;
                B6: TMenuItem;
                T9: TMenuItem;
-               C2: TMenuItem;
+    NameCopyPMenu: TMenuItem;
                SelectComboBox: TComboBox;
                MainCoolBarPopupMenu: TPopupMenu;
                StdToolBarVisiblePMenu: TMenuItem;
@@ -354,7 +359,7 @@ type
        N63: TMenuItem;
     N64: TMenuItem;
     dummy1: TMenuItem;
-    TreeSelectLogDeletePopupMenu: TMenuItem;
+       TreeSelectLogDeletePopupMenu: TMenuItem;
        N65: TMenuItem;
     BBSSelectPopupMenu: TPopupMenu;
                PlugInMenu: TMenuItem;
@@ -374,7 +379,7 @@ type
     ResRangeKokoPMenuItem: TMenuItem;
     ResRangeNewPMenuItem: TMenuItem;
     ResRangeAllPMenuItem: TMenuItem;
-    BrowsBoradHeadAction1: TMenuItem;
+       BrowsBoradHeadAction1: TMenuItem;
     ThreadRangePopupMenu: TPopupMenu;
     A15: TMenuItem;
     L8: TMenuItem;
@@ -394,10 +399,26 @@ type
     N73: TMenuItem;
     SelectComboBoxPanel: TPanel;
     SelectComboBoxSplitter: TImage;
-    ToolButton1: TToolButton;
+       ToolButton1: TToolButton;
     N74: TMenuItem;
     WikiFAQ: TMenuItem;
     GikoApplicationEvents: TApplicationEvents;
+    N22: TMenuItem;
+    N42: TMenuItem;
+    DAT2: TMenuItem;
+    N75: TMenuItem;
+    DAT3: TMenuItem;
+    N76: TMenuItem;
+    FavoriteTreeItemNameCopyPopupMenu: TMenuItem;
+    N77: TMenuItem;
+    N78: TMenuItem;
+    SaveThreadFile: TMenuItem;
+    N79: TMenuItem;
+    HTML1: TMenuItem;
+    DAT4: TMenuItem;
+    N80: TMenuItem;
+    SameBoardThreadItem: TMenuItem;
+    N81: TMenuItem;
                                procedure FormCreate(Sender: TObject);
                procedure FormDestroy(Sender: TObject);
                procedure BrowserStatusTextChange(Sender: TObject;
@@ -419,7 +440,6 @@ type
                procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
                        Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
                procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
-               procedure TreeViewDblClick(Sender: TObject);
                procedure ListViewCustomDraw(Sender: TCustomListView;
                        const ARect: TRect; var DefaultDraw: Boolean);
                procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
@@ -491,7 +511,6 @@ type
                procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
                        Shift: TShiftState);
                procedure FavoriteTreePopupMenuPopup(Sender: TObject);
-               procedure FavoriteTreeViewDblClick(Sender: TObject);
                procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
                procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
                        Shift: TShiftState; X, Y: Integer);
@@ -499,26 +518,17 @@ type
                        State: TDragState; var Accept: Boolean);
                procedure FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
                        Y: Integer);
-               procedure ListCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
-                       var Handled: Boolean);
-               procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
-                       var Handled: Boolean);
-               procedure BrowserCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
-                       var Handled: Boolean);
                procedure FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
     procedure BrowserTabContextPopup(Sender: TObject; MousePos: TPoint;
       var Handled: Boolean);
     procedure BrowserTabPopupMenuPopup(Sender: TObject);
     procedure BrowserTabResize(Sender: TObject);
-       procedure TreeViewClick(Sender: TObject);
     procedure TreeViewKeyDown(Sender: TObject; var Key: Word;
       Shift: TShiftState);
     procedure FavoriteTreeViewMouseDown(Sender: TObject;
                        Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
     procedure MessagePanelResize(Sender: TObject);
                procedure OnResized;
-    procedure FavoriteTreeViewMouseUp(Sender: TObject;
-         Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
        procedure SelectTimerTimer(Sender: TObject);
                procedure ListViewColumnRightClick(Sender: TObject;
       Column: TListColumn; Point: TPoint);
@@ -534,32 +544,23 @@ type
          Shift: TShiftState);
     procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
       var AllowEdit: Boolean);
-    procedure CabinetCloseSpeedButtonClick(Sender: TObject);
+       procedure CabinetCloseSpeedButtonClick(Sender: TObject);
     procedure FavoriteArrangeToolButtonClick(Sender: TObject);
     procedure GikoApplicationEventsMessage(var Msg: tagMSG;
          var Handled: Boolean);
     procedure GikoApplicationEventsDeactivate(Sender: TObject);
     procedure GikoApplicationEventsException(Sender: TObject; E: Exception);
-    procedure FavoriteTreeViewClick(Sender: TObject);
-    procedure FavoriteTreeViewCollapsing(Sender: TObject; Node: TTreeNode;
-      var AllowCollapse: Boolean);
-    procedure FavoriteTreeViewExpanding(Sender: TObject; Node: TTreeNode;
-      var AllowExpansion: Boolean);
-    procedure TreeViewCollapsing(Sender: TObject; Node: TTreeNode;
-      var AllowCollapse: Boolean);
-    procedure TreeViewExpanding(Sender: TObject; Node: TTreeNode;
-      var AllowExpansion: Boolean);
-    procedure TreeViewMouseUp(Sender: TObject; Button: TMouseButton;
+    procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
       Shift: TShiftState; X, Y: Integer);
+    procedure GetResURLMenuClick(Sender: TObject);
+    procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
+      var Handled: Boolean);
        private
                { Private \90é\8c¾ }
-               FSortIndex: Integer;
-               FSortOrder: Boolean;
                FEnabledCloseButton: Boolean;
                FClickNode: TTreeNode;
                FHttpState: Boolean;
-               FHint: TResPopup;
-               FPreviewBrowser: TWebBrowser;
+               FPreviewBrowser: TPreviewBrowser;
                FPreviewURL: string;
                FBrowserSizeHeight: Integer;
                FBrowserSizeWidth: Integer;
@@ -570,7 +571,7 @@ type
                FActiveList: TObject;
                FActiveContent: TBrowserRecord; //
                FActiveBBS : TBBS;
-               FHistoryList: TList;                                    //\83q\83X\83g\83\8a\83\8a\83X\83g
+               FHistoryList: THistoryList;                                     //\83q\83X\83g\83\8a\83\8a\83X\83g
                FTreeType: TGikoTreeType;
                FWorkCount: Integer;
                FNameCookie: string;
@@ -600,6 +601,9 @@ type
                FIsHandledWheel : Boolean;                      ///< \8aù\82É\8eó\82¯\8eæ\82Á\82½ WM_MOUSEWHEEL \82©\82Ç\82¤\82©
                                DiffComp: Boolean;                      //Add by Genyakun \83X\83\8c\82ª\8dX\90V\82³\82ê\82½\82Æ\82«\82ÉTrue\82É\82È\82é
                FOrigenCaption: String;                         //\82¨\8bC\82É\93ü\82è\83c\83\8a\81[\82Ì\83A\83C\83e\83\80\95Ò\8fW\8e\9e\82Ì\95Ò\8fW\91O\82Ì\95\8e\9a\97ñ
+               FPreviewBrowserRect: TRect;                     ///< \83v\83\8c\83r\83\85\81[\82Ì\95\\8e¦\88Ê\92u\82ð\8bL\89¯\82·\82é
+               FActionListGroupIndexes: array of Integer;      ///<GikoDM\8fã\82Ì\83A\83N\83V\83\87\83\93\83\8a\83X\83g\82Ì\8ae\83A\83N\83V\83\87\83\93\82É\90Ý\92è\82³\82ê\82½GroupIndex\82ð\95Û\91\82·\82é\94z\97ñ
+        FResPopupBrowser: TResPopupBrowser;
                procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
                procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
                procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
@@ -615,7 +619,6 @@ type
                procedure FavoriteClick(Sender: TObject); overload;
                procedure FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
                function OnDocumentContextMenu(Sender: TObject): WordBool;
-               procedure ShowTextPopup;
                function GetWidthAllToolButton(ToolBar: TToolBar): Integer;
                procedure MenuBarChevronMenu;
                procedure LinkBarChevronMenu;
@@ -649,8 +652,6 @@ type
                procedure TreeDoubleClick( Node : TTreeNode );
                /// \8ae\8f\8a\82É\82 \82é\83L\83\83\83r\83l\83b\83g\81E BBS \83\81\83j\83\85\81[\82ð\83Z\83b\83g\81^\8dX\90V
                procedure SetBBSMenu;
-               /// \83^\83u\8eæ\93¾
-               function GetTabURLs(AStringList: TStringList) : Boolean;
                /// ListColumnPopupMenu \83A\83C\83e\83\80\82Ì\83N\83\8a\83b\83N\83C\83x\83\93\83g
                procedure       ListColumnPopupMenuOnClick( Sender : TObject );
                //! \8di\82è\8d\9e\82Ý\95\8e\9a\97ñ\90Ý\92è
@@ -659,12 +660,32 @@ type
                function GetScreenCursor(): TCursor;
                //\83J\81[\83\\83\8b\82ð\90Ý\92è\82·\82é
                procedure SetScreenCursor(Cursor : TCursor);
-               //! \83A\83N\83V\83\87\83\93\82Ì\83`\83F\83b\83N\8fó\91Ô\82Ì\8f\89\8aú\89»
-               procedure InitActionChecked();
                //! \83_\83E\83\93\83\8d\81[\83h\83R\83\93\83g\83\8d\81[\83\8b\83X\83\8c\83b\83h\82Ì\90\90¬
                procedure CreateControlThread();
                //! \83u\83\89\83E\83U\82Ì\90\90¬
                procedure CreateBrowsers(count: Integer);
+               //! ActionList\82ÌGroupIndex\82Ì\95Û\91
+               procedure GetGroupIndex(ActionList: TActionList);
+               //! ActionList\82ÌGroupIndex\82Ì\90Ý\92è
+               procedure SetGroupIndex(ActionList: TActionList);
+               //! \8ew\92è\82³\82ê\82½\83X\83\8c\83b\83h\82ð\8aJ\82­(\83\8d\83O\82ª\96³\82¢\82Æ\82« or \8ew\92èJUMP\82Ü\82Å\91«\82è\82È\82¢\82Æ\82«\82ÍDL\82·\82é)
+               procedure OpenThreadItem(Thread: TThreadItem; URL: String);
+               //! ListView\81i\83X\83\8c\83b\83h\88ê\97\97\81j\82ð\8dX\90V\82·\82é
+               procedure RefreshListView(Thread: TThreadItem);
+               //! \83X\83\8c\83b\83h\88ê\97\97\82Ì\95\\8e¦\94Í\88Í\90Ý\92è\83`\83F\83b\83N\83N\83\8a\83A
+               procedure ClearThreadRengeAction;
+        //! \83^\83X\83N\83g\83\8c\83C\82Ì\83A\83C\83R\83\93\8dí\8f\9c\81\95\83t\83H\81[\83\80\95\\8e¦
+        procedure UnStoredTaskTray;
+        //! \83\8c\83X\83G\83f\83B\83^\82Ì\95\\8e¦\94ñ\95\\8e¦
+        procedure ShowEditors(nCmdShow: Integer);
+        //! \82à\82Á\82Æ\82à\8cÃ\82¢Browser\82Ì\8aJ\95ú
+        procedure ReleaseOldestBrowser;
+        //! \83A\83N\83e\83B\83u\82È\83^\83u\82Æ\93¯\82\94Â\82Ì\8aJ\82¢\82Ä\82¢\82é\83X\83\8c\83b\83h\82ð\83\81\83j\83\85\81[\83A\83C\83e\83\80\82É\92Ç\89Á
+        procedure AddMenuSameBoardThread;
+        //!  \83A\83N\83e\83B\83u\82È\83^\83u\82Æ\93¯\82\94Â\82Ì\8aJ\82¢\82Ä\82¢\82é\83X\83\8c\83b\83h\83N\83\8a\83b\83N\83C\83x\83\93\83g
+        procedure SameBoardThreadSubItemOnClick(Sender: TObject);
+        //! \83|\83b\83v\83A\83b\83v\83u\83\89\83E\83U\8dì\90¬
+        procedure CreateResPopupBrowser;
        protected
                procedure CreateParams(var Params: TCreateParams); override;
                procedure WndProc(var Message: TMessage); override;
@@ -677,6 +698,7 @@ type
                LastRoundTime: TDateTime;
                BrowserNullTab: TBrowserRecord;
                FControlThread: TThreadControl;
+        FIconData : TNotifyIconData;
                procedure MoveToURL(const inURL: string);
                function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
                procedure ReloadBBS;
@@ -700,25 +722,18 @@ type
                property ToolBarSettingSender : TToolBarSettingSenderType
                                                 read FToolBarSettingSender write FToolBarSettingSender;
                property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
-               property SortIndex: Integer read FSortIndex write FSortIndex;
-               property SortOrder: Boolean read FSortOrder write FSortOrder;
                property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
                property WorkCount: Integer read FWorkCount write FWorkCount;
                procedure SetContent(inThread: TBrowserRecord);
-               function GetActiveContent: TThreadItem;
+               function GetActiveContent(popup :Boolean = false): TThreadItem;
                function GetActiveList: TObject;
 
                procedure SetListViewType(AViewType: TGikoViewType); overload;
                procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
                procedure PlaySound(SoundEventName: string);
-               function AddHistory( FavItem: TFavoriteThreadItem ): Boolean;
-               procedure ClearHistory;
-               procedure       SaveHistory;
-               procedure       LoadHistory;
                procedure ShowBBSTree( inBBS : TBBS );
                procedure ShowBBSTreeOld( inBBS : TBBS );
                procedure ShowHistoryTree;
-               procedure SetHistoryTreeNode;
                procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
                procedure SetBrowserTabState;
                procedure SetToolBarPopup;
@@ -752,11 +767,16 @@ type
                procedure DownloadList(Board: TBoard; ForceDownload: Boolean = False);
                //\97\9a\97ð\82©\82ç\8dí\8f\9c
                procedure DeleteHistory( threadItem: TThreadItem );
-               //\83^\83u\82ð\8dí\8f\9c
+               //\83^\83u\82ð\8dí\8f\9c \83X\83\8c\83b\83h\8ew\92è
                procedure DeleteTab(ThreadItem: TThreadItem); overload;
+               //\83^\83u\82ð\8dí\8f\9c \83u\83\89\83E\83U\83\8c\83R\81[\83h\81i\83^\83u\81j\8ew\92è
                procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
+        // \83^\83u\8dí\8f\9c\81i\8eÀ\91\95\95\94\81j
+        procedure DeleteTab(index, selectIndex: Integer); overload;
                //\8c»\8dÝ\95\\8e¦\82µ\82Ä\82¢\82é\83X\83\8c\83b\83h\82ð\83X\83N\83\8d\81[\83\8b
-               procedure BrowserMovement(const AName: string);
+               procedure BrowserMovement(const AName: string); overload;
+               //\8c»\8dÝ\95\\8e¦\82µ\82Ä\82¢\82é\83X\83\8c\83b\83h\82ð\83X\83N\83\8d\81[\83\8b
+               procedure BrowserMovement(scroll: Integer); overload;
                //Application\82ÌMainForm\82ð\8eæ\93¾\82·\82é
                function GetMainForm(): TComponent;
                procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
@@ -768,18 +788,8 @@ type
                procedure OnGestureEnd(Sender: TObject);
                /// \83o\83\93\83h\95\9d\82ð\8dÄ\8cv\8eZ\81E\8dÄ\90Ý\92è\82·\82é
                procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
-               //\83X\83N\83\8a\81[\83\93\8fã\82ÉEditorForm\82ª\82¢\82é\82©
-               function EditorFormExists(): boolean;
-               //\83X\83N\83\8a\81[\83\93\8fã\82É\82¢\82é\82·\82×\82Ä\82ÌEditorForm\82©\82ç\96¼\91O\97\9a\97ð\82ð\8dí\8f\9c\82·\82é
-               procedure AllEditroFormNameTextClearClear();
-               //\83X\83N\83\8a\81[\83\93\8fã\82É\82¢\82é\82·\82×\82Ä\82ÌEditorForm\82©\82ç\83\81\81[\83\8b\97\9a\97ð\82ð\8dí\8f\9c\82·\82é
-               procedure AllEditroFormMailTextClearClear();
                //ListView\82Å\91I\91ð\82³\82ê\82Ä\82¢\82é\83A\83C\83e\83\80\82ð\8eæ\93¾\82·\82é
                procedure SelectListItem(List: TList);
-               /// \83^\83u\95Û\91
-               function SaveTabURLs : Boolean;
-               /// \83^\83u\93Ç\82Ý\8fo\82µ
-               function LoadTabURLs : Boolean;
                //\8ew\92è\82µ\82½\83\8c\83X\82ð\83R\83s\81[\82·\82é
                procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
                //
@@ -796,6 +806,11 @@ type
                function WebBrowserClick(Sender: TObject): WordBool;
                //! \83c\81[\83\8b\83o\81[\82É\83X\83\8c\8di\8d\9e\82Ý\83R\83\93\83{\83{\83b\83N\83X\82ð\90Ý\92è\82·\82é
                procedure SetSelectComboBox();
+
+        //! \83^\83X\83N\83g\83\8c\83C\82É\8ai\94[\82µ\82½\83A\83C\83R\83\93\82ð\83N\83\8a\83b\83N\82µ\82½\82Æ\82«\82Ì\8f\88\97\9d
+        procedure TaskTrayIconMessage(var Msg : TMsg); message WM_USER + 2010;
+        //! \83^\83X\83N\83g\83\8c\83C\82É\83A\83C\83R\83\93\93o\98^\81\95\83t\83H\81[\83\80\89B\82µ
+        procedure StoredTaskTray;
        published
                property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
        end;
@@ -828,42 +843,28 @@ implementation
 
 uses
        GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
-       YofUtils, ShellAPI, ToolBarUtil, ToolBarSetting,
+       YofUtils, ToolBarUtil, ToolBarSetting,
        GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
-       FavoriteArrange, AddressHistory, Preview, Gesture,
+       FavoriteArrange, AddressHistory, Gesture,
        About, Option, Round, Splash, Sort, ListSelect, Imm,
        NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
-       HTMLCreate, ListViewUtils, GikoDataModule;
+       HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
+  InputAssistDataModule, Types, ReplaceDataModule;
 
 const
-       CAPTION_NAME: string = '\83M\83R\83i\83r';
        BLANK_HTML: string = 'about:blank';
        BROWSER_COUNT           = 5;    //\83u\83\89\83E\83U\82Ì\90\94
        //D&D臒l
        DandD_THRESHOLD = 5;    //D&D\82Ìè\87\92l\81ipixcel)
        //\83v\83\8c\83r\83\85\81[\83t\83@\83C\83\8b\96¼
        HTML_FILE_NAME  = 'temp_preview.html';
-       //\83X\83\8c\83b\83h\8di\8d\9e\82Ý\83{\83b\83N\83X
-       SELECTCOMBOBOX_NAME: string = ''; // '\83X\83\8c\83b\83h\8di\8d\9e\8c\9f\8dõ';
-       SELECTCOMBOBOX_COLOR: TColor = clWindow;
-       //\83c\81[\83\8b\83o\81[\83A\83C\83R\83\93
-       TOOL_ICON_HEIGHT_MAX            = 16;           //\8d\82\82³\8dÅ\91å\83A\83C\83R\83\93
-       TOOL_ICON_HEIGHT_MIN            = 17;           //\8d\82\82³\8dÅ\8f¬\83A\83C\83R\83\93
-       TOOL_ICON_HEIGHT_NORMAL = 18;           //\8d\82\82³\95W\8f\80\83A\83C\83R\83\93
-       TOOL_ICON_WIDTH_MAX             = 19;           //\95\9d\8dÅ\91å\83A\83C\83R\83\93
-       TOOL_ICON_WIDTH_MIN             = 20;           //\95\9d\8dÅ\8f¬\83A\83C\83R\83\93
-       TOOL_ICON_WIDTH_NORMAL  = 21;           //\95\9d\95W\8f\80\83A\83C\83R\83\93
-       ITEM_ICON_THREADLOG1            = 6;            //\83X\83\8c\83A\83C\83R\83\93\81i\83\8d\83O\82 \82è\81j
-       ITEM_ICON_THREADLOG2            = 7;            //\83X\83\8c\83A\83C\83R\83\93\81i\83\8d\83O\82 \82è\81j
-       TOOL_ICON_FAV_FOLDER            = 30;           //\82¨\8bC\82É\93ü\82è\83t\83H\83\8b\83_\83A\83C\83R\83\93
-       TOOL_ICON_FAV_BOARD                     = 31;           //\82¨\8bC\82É\93ü\82è\94Â\83A\83C\83R\83\93
-       TOOL_ICON_FAV_THREAD            = 32;           //\82¨\8bC\82É\93ü\82è\83X\83\8c\83A\83C\83R\83\93
        //\83\81\83b\83Z\81[\83WID
        USER_TREECLICK                                  = WM_USER + 2000;
        USER_RESIZED            = WM_USER + 2001;
        USER_MINIMIZED                                  = WM_USER + 2002;
        USER_SETLINKBAR                                 = WM_USER + 2003;
        USER_DOCUMENTCOMPLETE           = WM_USER + 2004;       ///< wParam : TWebBrowser
+    USER_TASKTRAY               = WM_USER + 2010;
 {$R *.DFM}
 
 procedure TGikoForm.CreateParams(var Params: TCreateParams);
@@ -886,7 +887,6 @@ var
        msg: string;
        i: Integer;
        wp: TWindowPlacement;
-       s: string;
 begin
 {$IFDEF DEBUG}
        AllocConsole;
@@ -897,14 +897,22 @@ begin
        Writeln(' \8fI\97¹\8e\9e\82Í\81A\83M\83R\83i\83r\83E\83B\83\93\83h\83E\82ð\95Â\82\82Ä\82­\82¾\82³\82¢');
        Writeln('============================================================');
 {$ENDIF}
+//try
+       Sort.SetSortDate(Now());
+       
        FTreeType := gttNone;
        // \8bN\93®\8e\9e\82É\95Û\91\82³\82ê\82Ä\82µ\82Ü\82¤\91Î\8dô
        FStartUp := true;
        Application.HookMainWindow(Hook);
        FIsIgnoreResize := rtResizing;
-
+       //ActionList\82ÌGuoupIndex\82ð\95Û\91\82µ\82Ä\81A0\82É\83N\83\8a\83A\82·\82é\81B
+       //(\8bN\93®\8e\9e\82É\83c\81[\83\8b\83{\83^\83\93\82ÌDown\83v\83\8d\83p\83e\83B\82ð\94½\89f\82³\82¹\82é\93s\8d\87\8fãGroupIndex\82Í\90Ý\92è\82Å\82«\82È\82¢)
+       //\82±\82ê\88È\8cãSet\81`\82Å\8dÄ\90Ý\92è\82·\82é\82Ü\82Å\81AAction\82ÌChecked\82ð\82¢\82\82é\82Æ\82«\82Í\92\8d\88Ó\81I
+       GetGroupIndex(GikoDM.GikoFormActionList);
        FSearchDialog := nil;
+    FResPopupBrowser := nil;
        CreateBrowsers(BROWSER_COUNT);
+    FIconData.uID := 0;
 
        //\83\81\83j\83\85\81[\83t\83H\83\93\83g
        SetMenuFont;
@@ -913,7 +921,6 @@ begin
        Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
 
        //\83A\83h\83\8c\83X\97\9a\97ð\93Ç\82Ý\8d\9e\82Ý
-       //AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.AddressHistoryCount);
        AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
 
        EnabledCloseButton := True;
@@ -973,6 +980,59 @@ begin
        //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
        GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
 
+       //\83~\83\85\81[\83g\82Ì\8fó\91Ô\82ð\90Ý\92è
+       GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
+
+       // \83\8c\83X\95\\8e¦\94Í\88Í
+       FResRangeMenuSelect := GikoSys.ResRange;
+       case GikoSys.ResRange of
+       Ord( grrAll ):
+               begin
+                       GikoDM.AllResAction.Execute;
+               end;
+       Ord( grrSelect ):
+               begin
+                       SelectComboBox.Text := SelectComboBox.Items[ 1 ];
+                       GikoDM.SelectResAction.Checked := True;
+               end;
+       else
+               case FResRangeMenuSelect of
+               Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked        := True;
+               Ord( grrNew ):  GikoDM.OnlyNewResAction.Checked := True;
+               100:                    GikoDM.OnlyAHundredResAction.Checked            := True;
+               end;
+       end;
+
+       // \83X\83\8c\83b\83h\88ê\97\97\95\\8e¦\94Í\88Í
+       case GikoSys.Setting.ThreadRange of
+       gtrAll:
+               begin
+                       GikoDM.AllItemAction.Checked := True;
+                       ViewType := gvtAll;
+               end;
+       gtrLog:
+               begin
+                       GikoDM.LogItemAction.Checked := True;
+                       ViewType := gvtLog;
+               end;
+       gtrNew:
+               begin
+                       GikoDM.NewItemAction.Checked := True;
+                       ViewType := gvtNew;
+               end;
+       gtrLive:
+               begin
+                       GikoDM.LiveItemAction.Checked := True;
+                       ViewType := gvtLive;
+               end;
+       gtrArch:
+               begin
+                       GikoDM.ArchiveItemAction.Checked := True;
+                       ViewType := gvtArch;
+               end;
+       end;
+
+
        //\83u\83\89\83E\83U\83^\83u\83t\83H\83\93\83g
        BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
        BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
@@ -981,9 +1041,27 @@ begin
                BrowserTab.Font.Style := [fsBold];
        if GikoSys.Setting.BrowserTabFontItalic then
                BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
+       BrowserTab.DoubleBuffered := True;
        FDragWFirst := false;
        SetContent(BrowserNullTab);                                                                                                     //\83u\83\89\83E\83U\82ð\8bó\94\92\95\\8e¦
 
+       //\83u\83\89\83E\83U\83^\83u
+       GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
+
+       if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
+               GikoDM.BrowserTabTopAction.Checked := True;
+       end else begin
+               GikoDM.BrowserTabBottomAction.Checked := True;
+       end;
+
+       if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
+               GikoDM.BrowserTabTabStyleAction.Checked := True;
+       end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
+               GikoDM.BrowserTabButtonStyleAction.Checked := True;
+       end else begin
+               GikoDM.BrowserTabFlatStyleAction.Checked := True;
+       end;
+
        //\83v\83\8d\83O\83\8c\83X\83o\81[\82Ì\8f\89\8aú\89»
        ProgressBar.Parent := StatusBar;
        ProgressBar.Top := 2;
@@ -997,10 +1075,14 @@ begin
 
        // \83{\81[\83h\83t\83@\83C\83\8b\97ñ\8b\93(ReadFavorite \82æ\82è\90æ\82É\8ds\82¤\82±\82Æ)
        GikoSys.ListBoardFile;
-
+       //\81@\98A\91±\8bN\93®\8e\9e\82É\83X\83v\83\89\83b\83V\83\85\83E\83B\83\93\83h\83E\82Ì\83\81\83\82\83\8a\82ª\95s\92è\82É
+       try
        // \83X\83v\83\89\83b\83V\83\85\83E\83B\83\93\83h\83E\82Ì\83v\83\8d\83O\83\8c\83X\83o\81[\82Ì\90Ý\92è
-       SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
-
+               if (SplashWindow <> nil) then begin
+                       SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
+               end;
+       except
+       end;
        // \82·\82×\82Ä\82ÌBBS\82ð\93Ç\82Ý\8d\9e\82ñ\82Å\82¨\82­
        for i := Length(BBSs) - 1 downto 0 do begin
                if not BBSs[i].IsBoardFileRead then
@@ -1011,6 +1093,7 @@ begin
                        SplashWindow.Update;
                end;
        end;
+
        //\8f\84\89ñ\83f\81[\83^\93Ç\82Ý\8d\9e\82Ý
        RoundList := TRoundList.Create;
        RoundList.LoadRoundBoardFile;
@@ -1060,10 +1143,11 @@ begin
 
 
        // \83q\83X\83g\83\8a\83\8a\83X\83g(LoadHistory \82æ\82è\82à\90æ\82É\8ds\82¤\82±\82Æ)
-       FHistoryList := TList.Create;
+       FHistoryList := THistoryList.Create;
 
        // \97\9a\97ð\93Ç\82Ý\8d\9e\82Ý
-       LoadHistory;
+       FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
+        TreeView, FTreeType);
 
        //\82¨\8bC\82É\93ü\82è\93Ç\82Ý\8d\9e\82Ý
        FavoriteDM.SetFavTreeView(FavoriteTreeView);
@@ -1076,36 +1160,36 @@ begin
                case GikoSys.Setting.ListWidthState of
                        glsMax: begin
                                ViewPanel.Width := 1;
-                               GikoDM.BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
-                               GikoDM.BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
+                               GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
+                               GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
                        end;
                        glsMin: begin
                                ViewPanel.Width := GikoSys.Setting.ListWidth;
-                               GikoDM.BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
-                               GikoDM.BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
+                               GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
+                               GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
                        end;
                        else begin
                                ViewPanel.Width := GikoSys.Setting.ListWidth;
-                               GikoDM.BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
-                               GikoDM.BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
+                               GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
+                               GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
                        end;
                end;
        end else begin
                case GikoSys.Setting.ListHeightState of
                        glsMax: begin
                                ViewPanel.Height := 1;
-                               GikoDM.BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_NORMAL;
-                               GikoDM.BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
+                               GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
+                               GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
                        end;
                        glsMin: begin
                                ViewPanel.Height := GikoSys.Setting.ListHeight;
-                               GikoDM.BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
-                               GikoDM.BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_NORMAL;
+                               GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
+                               GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
                        end;
                        else begin
                                ViewPanel.Height := GikoSys.Setting.ListHeight;
-                               GikoDM.BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
-                               GikoDM.BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
+                               GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
+                               GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
                        end;
                end;
        end;
@@ -1156,14 +1240,11 @@ begin
        end;
 
        //\83L\81[\90Ý\92è\93Ç\82Ý\8d\9e\82Ý
-       GikoSys.LoadKeySetting(GikoDM.GikoFormActionList);
+       GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
 
        //\8dÅ\8fI\8f\84\89ñ\8e\9e\8aÔ
 //     FLastRoundTime := 0;
 
-       //ResHint
-       FHint := TResPopup.Create(Self);
-
        ListView.OnData := TListViewUtils.ListViewData;
 
        // \8dÅ\8cã\82É\91I\91ð\82³\82ê\82½\83L\83\83\83r\83l\83b\83g\82Ì\95\9c\8c³
@@ -1191,17 +1272,12 @@ begin
                MoveToURL(ParamStr(i));
        end;
 
-       s := GikoSys.FAbon.NGwordname;
-       StatusBar.Panels[2].Text := s;
-       StatusBar.Panels[2].Width := Max(StatusBar.Canvas.TextWidth(s), 100);
+       GikoDM.RepaintStatusBar;
        StatusBarResize(Sender);
 
        dummy1.Caption  := ItemReservPMenu.Caption;
        dummy1.Hint     := ItemReservPMenu.Hint;
 
-       //Samba24\82Ì\83t\83@\83C\83\8b\83`\83F\83b\83N
-       GikoSys.SambaFileExists();
-
 {$IFDEF SPAM_FILTER_ENABLED}
        // \83X\83p\83\80\83t\83B\83\8b\83^\8aw\8fK\97\9a\97ð
        GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
@@ -1219,7 +1295,7 @@ begin
                MouseGesture.SetHook( Handle );
 
        //2ch\8c¾\8cê\93Ç\82Ý\8fo\82µ
-       GikoSys.Setting.SetMessages;
+       GikoSys.SetGikoMessage;
 
        //\83I\81[\83g\83\8d\83O\83C\83\93
        if GikoSys.Setting.AutoLogin then
@@ -1231,6 +1307,11 @@ begin
        FavoriteAddToolButton.Caption := '\92Ç\89Á...';
        AntiIndivAbonMenuItem.Caption := '\8cÂ\95Ê\82 \82Ú\81`\82ñ\89ð\8f\9c';
 
+       //\93ü\97Í\83A\83V\83X\83g\8b@\8d\\82Ì\8f\89\8aú\89»
+       InputAssistDM.Init(GikoSys.GetInputAssistFileName);
+
+    //\92u\8a·\90Ý\92è\83t\83@\83C\83\8b\82Ì\93Ç\82Ý\8d\9e\82Ý
+    ReplaceDM.LoadFromFile(GikoSys.GetReplaceFileName);
 end;
 
 // CoolBar \82Ì\90Ý\92è\82ð\95Ï\90\94\82É\95Û\91
@@ -1350,6 +1431,8 @@ begin
 end;
 //
 procedure TGikoForm.FormShow(Sender: TObject);
+var
+       item        : TThreadItem;
 begin
        if FStartUp then begin
                ShowWindow(Application.Handle, SW_HIDE);
@@ -1371,52 +1454,30 @@ begin
                GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
                GikoDM.BrowserNameBarVisibleActionExecute( nil );
 
-               //\83u\83\89\83E\83U\83^\83u
-               GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
-               GikoDM.BrowserTabVisibleActionExecute(nil);
-
-               if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
-                       GikoDM.BrowserTabTopAction.Checked := True;
-                       GikoDM.BrowserTabTopActionExecute(nil);
-               end else begin
-                       GikoDM.BrowserTabBottomAction.Checked := True;
-                       GikoDM.BrowserTabBottomActionExecute(nil);
-               end;
-
-               if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
-                       GikoDM.BrowserTabTabStyleAction.Checked := True;
-                       GikoDM.BrowserTabTabStyleActionExecute(nil);
-               end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
-                       GikoDM.BrowserTabButtonStyleAction.Checked := True;
-                       GikoDM.BrowserTabButtonStyleActionExecute(nil);
-               end else begin
-                       GikoDM.BrowserTabFlatStyleAction.Checked := True;
-                       GikoDM.BrowserTabFlatStyleActionExecute(nil);
-               end;
-
-               // ListView \82Ì\83w\83b\83_\83h\83\89\83b\83O
-//             ListView.FullDrag := True;
-
                // CoolBar \95\9c\8c³
                LoadCoolBarSettings;
 
                //\8fd\97v\81@\82±\82ê\82ª\82È\82¢\82Æ\83c\81[\83\8b\83{\83^\83\93\82Ì\8dX\90V\82ª\82¨\82©\82µ\82­\82È\82é
 //             ResetBandInfo( ListCoolBar, ListToolBar );
                FIsIgnoreResize := rtNone;
-               //\83c\81[\83\8b\83o\81[\82Ì\8dX\90V\82ð\8fI\82¦\82½\8cã\82É\82â\82ç\82È\82¢\82Æ\82¢\82¯\82È\82¢\82Ì\82©\82à
-               //\83A\83N\83V\83\87\83\93\82Ì\83`\83F\83b\83N\8fó\91Ô\82ð\8f\89\8aú\89»
-               InitActionChecked();
 
                //FormCrete\82©\82ç\88Ú\93®\81B
                if GikoSys.Setting.TabAutoLoadSave then begin
-                       GikoDM.TabAutoLoadAction.Execute;
-               end;
-               //\82É\82¿\82á\82ñ\8cê\88Ä\93à\83T\83|\81[\83g\8b@\94\
-               if GikoSys.Setting.GengoSupport then begin
-               //\97\\92è\92n
-               //Test\8cü\82¯
+            GikoDM.TabsOpenAction.Tag := 1;
+                       GikoDM.TabsOpenAction.Execute;
+            GikoDM.TabsOpenAction.Tag := 0;
+            if (GikoSys.Setting.LastCloseTabURL <> '') then begin
+                item := BBSsFindThreadFromURL( GikoSys.Setting.LastCloseTabURL );
+                if (item <> nil) and (item.IsLogFile) then begin
+                    OpenThreadItem(item, item.URL);
+                end;
+                GikoSys.Setting.LastCloseTabURL := '';
+            end;
                end;
 
+        //ActionList\82ÌGroupIndex\82ð\8c³\82É\96ß\82·
+               SetGroupIndex(GikoDM.GikoFormActionList);
+
                FStartUp := false;
        end;
 end;
@@ -1425,21 +1486,36 @@ procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
 begin
 //     if GikoForm.WindowState <> wsMinimized then
 //             SaveCoolBarSettings;
+       CanClose := True;
        if ( GikoSys.Setting.ShowDialogForEnd ) and
                        (MessageDlg('\83M\83R\83i\83r\82ð\8fI\97¹\82µ\82Ä\82æ\82ë\82µ\82¢\82Å\82·\82©\81H', mtConfirmation,[mbOk, mbCancel], 0) = mrCancel ) then begin
                CanClose := false;
                        Exit;
-       end else begin
-               CanClose := True;
-               if GikoSys.Setting.TabAutoLoadSave then begin
-                       GikoDM.TabAutoSaveAction.Execute;
-               end;
        end;
-    {    //2ch\8c¾\8cȩ̂²ÙFree
-               if GikoSys.Setting.Gengo <> nil then begin
-                               GikoSys.Setting.Gengo.Free;
+
+    GikoSys.Setting.LastCloseTabURL := '';
+       if GikoSys.Setting.TabAutoLoadSave then begin
+               GikoDM.TabsSaveAction.Execute;
+        if (GetActiveContent <> nil) and
+            (GetActiveContent.IsLogFile) then begin
+            GikoSys.Setting.LastCloseTabURL := GetActiveContent.URL;
         end;
-    }
+       end;
+
+       if (SearchDialog <> nil) then begin
+               if (SearchDialog.Visible) then begin
+                       SearchDialog.Close;
+                       try
+                               SearchDialog.Release;
+                       except
+                       end;
+                       SearchDialog := nil;
+               end;
+       end;
+
+       //\83X\83N\83\8a\81[\83\93\8fã\82Ì\91S\82Ä\82Ì\83t\83H\81[\83\80\82©\82ç\81AEditorForm\82ð\95Â\82\82é
+    GikoDM.CloseAllEditorAction.Execute;
+
        Application.UnhookMainWindow(Hook);
        Application.Terminate;
 end;
@@ -1504,6 +1580,8 @@ begin
        // CoolBar \95Û\91
        //if (GikoForm.WindowState <> wsMinimized) and (GikoForm.WindowState <> wsMaximized) then
 
+       //\93ü\97Í\83A\83V\83X\83g\8b@\8d\\82Ì\90Ý\92è\82Ì\95Û\91
+       InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
 
        //\82¨\8bC\82É\93ü\82è\95Û\91
        try
@@ -1551,19 +1629,18 @@ begin
        //\83A\83h\83\8c\83X\97\9a\97ð\95Û\91
        try
                //AddressHistoryDM\82Í\8e©\93®\90\90¬\83t\83H\81[\83\80\82È\82Ì\82Å\81A\89ð\95ú\82Í\8e©\93®\93I\82É\82³\82ê\82é\81B
-               //AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.AddressHistoryCount);
                AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
        except
        end;
 
        //\83q\83X\83g\83\8a\83\8a\83X\83g\95Û\91
        try
-               SaveHistory;
+               FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
        except
        end;
        try
                try
-                       ClearHistory;
+                       FHistoryList.Clear;
                except
                end;
        finally
@@ -1593,6 +1670,12 @@ begin
        finally
                FControlThread.Free;
        end;
+    // \83v\83\89\83O\83C\83\93\82É\82æ\82Á\82Ä\92Ç\89Á\82³\82ê\82½\83\81\83j\83\85\81[\82ð\8aJ\95ú\82·\82é
+    for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
+               GikoForm.PlugInMenu.items[i].Free;
+       end;
+    GikoForm.PlugInMenu.Clear;
+
 
        // TBBS \82Í\95Û\8e\9d\82µ\82Ä\82¢\82é TCategory, TBoard, TThreadItem \82·\82×\82Ä\82ð\8aJ\95ú\82·\82é
        // TBoard, TThreadItem \82Ì\83f\83X\83g\83\89\83N\83^\82Í\83v\83\89\83O\83C\83\93\82É\94j\8aü\82ð\93`\82¦\82é\82Ì\82Å
@@ -1615,14 +1698,17 @@ begin
                if FEvent <> nil then
                        FEvent.Free;
 
-               //Hint\94j\8aü
-               if FHint <> nil then begin
-                       FHint.ReleaseHandle;
-                       FHint.Free;
-                       FHint := nil;
-               end;
+        // TODO \83\8c\83X\83|\83b\83v\83A\83b\83v\82Ì\94j\8aü
+        try
+            if FResPopupBrowser <> nil then  begin
+                TOleControl(FResPopupBrowser).Parent := nil;
+                FResPopupBrowser.Free;
+            end;
+
+        except
+        end;
                //Preview\94j\8aü
-               if TPreviewBrowser <> nil then begin
+               if FPreviewBrowser <> nil then begin
                        FPreviewBrowser.Free;
                        FPreviewBrowser := nil;
                end;
@@ -1686,7 +1772,6 @@ begin
        GikoSys.Setting.ShowDialogForAllTabClose := false;
        GikoDM.AllTabCloseAction.Execute;
        GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
-
        SetContent(BrowserNullTab);
        //TreeView\83N\83\8a\83A\81iBBS2ch.Free\82Ì\8cã\82É\83N\83\8a\83A\82·\82é\82ÆXP\83X\83^\83C\83\8b\8e\9e\82É\83G\83\89\81[\8fo\82é\81j
        TreeView.Items.Clear;
@@ -1704,8 +1789,8 @@ begin
 
        //\97\9a\97ð\82Ì\95Û\91\82Æ\94j\8aü
        try
-               SaveHistory;
-               ClearHistory;
+               FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
+               FHistoryList.Clear;
        except
        end;
 
@@ -1756,7 +1841,8 @@ begin
        ShowBBSTree( BBSs[ 0 ] );
 
        // \97\9a\97ð\93Ç\82Ý\8d\9e\82Ý
-       LoadHistory;
+    FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
+        TreeView, FTreeType);
 
        //\82¨\8bC\82É\93ü\82è\93Ç\82Ý\8d\9e\82Ý
        FavoriteDM.ReadFavorite;
@@ -1768,11 +1854,13 @@ begin
        RoundList.LoadRoundThreadFile;
 
        LockWindowUpdate(0);
-       //
-       GikoDM.TabsOpenAction.Execute;
 end;
 
-
+{!
+\todo \89½\8cÌ IE 7 \82Å\82Í about:.. \82É\82È\82é\82Ì\82©
+      (IE 7 \82ª about:.. \82ð\92Ç\89Á\82µ\82Ä\82¢\82é\82Ì\82©\81A\83M\83R\83i\83r\82ª\92Ç\89Á\82µ\82Ä\82¢\82é\82Ì\82©)
+      \92²\8d¸\82·\82é\82±\82Æ
+}
 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
 var
        p: TPoint;
@@ -1792,7 +1880,15 @@ var
        e: IHTMLElement;
        Ext: string;
        PathRec: TPathRec;
-begin
+  Text2: string;
+    cResPopup: TResPopupBrowser;
+begin
+       // \83M\83R\83i\83r\82Í\83\8c\83X\83A\83\93\83J\81[\82ª about:blank.. \82Å\8en\82Ü\82é\82±\82Æ\82ð\8aú\91Ò\82µ\82Ä\82¢\82é\82ª
+  // IE 7 \82Å\82Í about:blank.. \82Å\82Í\82È\82­ about:.. \82É\82È\82é\82Ì\82Å\81A\92u\8a·\82·\82é(\93\8a\82°\82â\82è)
+       if Pos('about:..', Text) = 1 then
+       Text2 := 'about:blank..' + Copy( Text, Length('about:..')+1, Length(Text) )
+  else
+       Text2 := Text;
        if not( TObject(Sender) is TWebBrowser )then
                Exit;
        try
@@ -1818,26 +1914,49 @@ begin
                FActiveContent := nil;
                Exit;
        end;
+    // \91O\89ñ\82Æ\93¯\82\8fê\8d\87\8fI\97¹
+    if (StatusBar.Panels[1].Text = Text2) then begin
+        if Text2 = '' then begin
+            if FResPopupBrowser <> nil then begin
+                if not(Sender is TResPopupBrowser) then
+                    FResPopupBrowser.Clear
+                else begin
+                    TResPopupBrowser(Sender).ChildClear;
+                end;
+            end;
+        end;
+        Exit;
+    end;
+       StatusBar.Panels[1].Text := Text2;
 
-       StatusBar.Panels[1].Text := Text;
 
-       if FHint <> nil then begin
-               FHint.ReleaseHandle;
-               FHint.ClearAllRes;
-       end;
        if FPreviewBrowser <> nil then
                ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
 
-       if not GikoSys.Setting.UnActivePopup then
-               if not GikoForm.Active then
-                       Exit;
+    if FResPopupBrowser <> nil then begin
+        if not(Sender is TResPopupBrowser) then begin
+            if (FResPopupBrowser.Visible) then begin
+                FResPopupBrowser.Clear;
+            end;
+        end else begin
+            TResPopupBrowser(Sender).ChildClear;
+        end;
+    end;
+    cResPopup := nil;
+    
+    if not(Sender is TResPopupBrowser) then
+       if not GikoSys.Setting.UnActivePopup then
+               if not GikoForm.Active then
+                       Exit;
+
+
 
 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
 
        s := '';
-       Ext := AnsiLowerCase(ExtractFileExt(Text));
-       if (Pos('http://', Text) = 1) and (GikoSys.Setting.PreviewVisible) and
+       Ext := AnsiLowerCase(ExtractFileExt(Text2));
+       if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
                        ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) then begin
                if FPreviewBrowser = nil then begin
                        FPreviewBrowser := TPreviewBrowser.Create(Self);
@@ -1845,34 +1964,35 @@ begin
                        TOleControl(FPreviewBrowser).Parent := nil;
                end;
                FPreviewBrowser.Navigate(BLANK_HTML);//\91O\89ñ\82Ì\83v\83\8c\83r\83\85\81[\89æ\91\9c\8fÁ\8b\8e\97p
-               FPreviewURL := Text;
+               FPreviewURL := Text2;
                PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
                PreviewTimer.Enabled := True;
-       end else if (Pos('about:blank', Text) = 1) or (Pos('http://', Text) = 1) or (Pos('mailto:', Text) = 1) then begin
-               if Pos('mailto:', Text) = 1 then begin
-                       s := StringReplace(Text, 'mailto:', '', [rfIgnoreCase]);
+       end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
+               if Pos('mailto:', Text2) = 1 then begin
+                       s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
                        //\83M\83R\83i\83r\83X\83\8c \83p\81[\83g3\82Ì466\8e\81\82É\8a´\8eÓ
                        GetCursorPos(p);
                        p.x := p.x - TWebBrowser(Sender).ClientOrigin.x;
                        p.y := p.y - TWebBrowser(Sender).ClientOrigin.y;
                        e := IHTMLDocument2(TWebBrowser(Sender).Document).elementFromPoint(p.x, p.y);
                        if (Assigned(e)) then begin
+                CreateResPopupBrowser;
+                cResPopup := FResPopupBrowser.CreateNewBrowser;
                                tmp2 := ZenToHan(e.Get_outerText);
                                if (GikoSys.IsNumeric(tmp2)) then begin
                                        //\82\93\82Í\83\8c\83X\94Ô\8d\86\82Á\82Û\82¢\82Á\82·\81B
-                                       wkIntSt := StrToInt(tmp2);
-                                       wkIntTo := StrToInt(tmp2);
-                                               //s := GetThreadText(wkBBS, wkKey, wkIntSt, wkIntTo, False, False);
-                                       FHint.PopupType := gptThread;
-                                       HTMLCreater.SetResPopupText(FHint, GetActiveContent, wkIntSt, wkIntTo, False, False);
+                                       wkIntSt := StrToInt64(tmp2);
+                                       wkIntTo := StrToInt64(tmp2);
+                    cResPopup.PopupType := gptThread;
+                                       HTMLCreater.SetResPopupText(cResPopup, GetActiveContent(true), wkIntSt, wkIntTo, False, False);
                                end else begin
-                                       FHint.PopupType := gptRaw;
-                                       FHint.Caption := s;
+                    cResPopup.PopupType := gptRaw;
+                    cResPopup.Title := s;
                                end;
                        end;
                end else begin
-                       threadItem := GetActiveContent;
-                       URL := THTMLCreate.GetRespopupURL(Text, threadItem.URL);
+                       threadItem := GetActiveContent(true);
+                       URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
                        PathRec := Gikosys.Parse2chURL2(URL);
                        if (PathRec.FNoParam) then begin
                                PathRec.FSt := 1;
@@ -1923,19 +2043,26 @@ begin
                                                wkIntSt := 1;
                                                wkIntTo := 1;
                                        end;
-                                       FHint.PopupType := gptThread;
-                                       HTMLCreater.SetResPopupText(FHint, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
+                    CreateResPopupBrowser;
+                    cResPopup := FResPopupBrowser.CreateNewBrowser;
+                    cResPopup.PopupType := gptThread;
+                                       HTMLCreater.SetResPopupText(cResPopup, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
                                end;
                        end;
                end;
-
-               if FHint.PopupType = gptRaw then begin
-                       if FHint.Caption <> '' then
-                               ShowTextPopup;
-               end else begin
-                       if (FHint.ResCount <> 0) or (FHint.Title <> '') then
-                               ShowTextPopup;
-               end;
+        if (cResPopup <> nil) then begin
+            if cResPopup.PopupType = gptRaw then begin
+                if cResPopup.Title <> '' then begin
+                    cResPopup.TitlePopup;
+                end;
+            end else begin
+                if cResPopup.RawDocument <> '' then begin
+                    cResPopup.Popup;
+                end else if cResPopup.Title <> '' then begin
+                    cResPopup.TitlePopup;
+                end;
+            end;
+        end;
        end;
 end;
 
@@ -2017,27 +2144,35 @@ procedure TGikoForm.ListViewColumnClick(Sender: TObject;
 var
        id, idx                 : Integer;
        orderList               : TList;
+       vSortIndex              : Integer;
+       vSortOrder              : Boolean;
 begin
        idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
-
-       if TObject( FActiveList ) is TBBS then
-               orderList := GikoSys.Setting.BBSColumnOrder
-       else if TObject( FActiveList ) is TCategory then
-               orderList := GikoSys.Setting.CategoryColumnOrder
-       else if TObject( FActiveList ) is TBoard then
-               orderList := GikoSys.Setting.BoardColumnOrder
-       else
+       if TObject( FActiveList ) is TBBS then begin
+               orderList := GikoSys.Setting.BBSColumnOrder;
+               vSortIndex := GikoSys.Setting.BBSSortIndex;
+               vSortOrder := GikoSys.Setting.BBSSortOrder;
+       end else if TObject( FActiveList ) is TCategory then begin
+               orderList := GikoSys.Setting.CategoryColumnOrder;
+               vSortIndex := GikoSys.Setting.CategorySortIndex;
+               vSortOrder := GikoSys.Setting.CategorySortOrder;
+       end else if TObject( FActiveList ) is TBoard then begin
+               orderList := GikoSys.Setting.BoardColumnOrder;
+               vSortIndex := GikoSys.Setting.BoardSortIndex;
+               vSortOrder := GikoSys.Setting.BoardSortOrder;
+       end else
                Exit;
 
        id := Integer( orderList[ idx ] );
 
-       if FSortIndex = id then
-               FSortOrder := not FSortOrder
+
+       if vSortIndex = id then
+               vSortOrder := not vSortOrder
        else begin
-               FSortOrder := id = 0;
+               vSortOrder := id = 0;
        end;
 
-       TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, FSortOrder, FSortIndex );
+       TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
 end;
 
 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
@@ -2085,7 +2220,9 @@ var
 const
        kMenuName: string = 'menu:';
 begin
-
+{$IFDEF DEBUG}
+       Writeln(URL);
+{$ENDIF}
        if Pos(kMenuName, URL) <> 0 then begin
                sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
                
@@ -2093,6 +2230,9 @@ begin
 
                Cancel := True;
                GetCursorpos(p);
+        KokoPopupMenu.PopupComponent := nil;
+        if (Sender is TComponent) then
+            KokoPopupMenu.PopupComponent := TComponent(Sender);
                KokoPopupMenu.Tag := StrToInt(sNo);
                KokoPopupMenu.Popup(p.x, p.y);
        end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
@@ -2236,38 +2376,19 @@ begin
        ListView.SetFocus;
        ListView.SelectAll;
 end;
-// *************************************************************************
-//! \83c\83\8a\81[\83r\83\85\81[\82Ì\83_\83u\83\8b\83N\83\8a\83b\83N\83C\83x\83\93\83g
-// *************************************************************************
-procedure TGikoForm.TreeViewDblClick(Sender: TObject);
-var
-       pos : TPoint;
-       rect: TRect;
-begin
-       pos := FMouseDownPos;
-       if (FClickNode <> nil) and (FClickNode = TreeView.GetNodeAt(pos.X, pos.Y)) then begin
-               //\83}\83E\83X\82ªnode\82Ì\8fã\82É\82¢\82é\82©
-               rect := FClickNode.DisplayRect(true);
-               if ((rect.Left <= pos.X) and (rect.Right >= pos.X)) and
-                       ((rect.Bottom >= pos.Y) and (rect.Top <= pos.Y)) then begin
-                       TreeDoubleClick( FClickNode );
-                       FClickNode := nil;
-               end;
-       end;
-end;
-
 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
 begin
        AddMessageList(Msg, nil, Icon);
 end;
-
+// *************************************************************************
+//! \83_\83E\83\93\83\8d\81[\83h\82ª\8a®\97¹\82µ\82½\82Æ\82«\82É\94­\90\82·\82é\83C\83x\83\93\83g
+// *************************************************************************
 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
 var
        ATitle: string;
        s: string;
        boardPlugIn : TBoardPlugIn;
        i: Integer;
-       browserRec      : TBrowserRecord;
        Res : TResRec;
 begin
        try
@@ -2276,21 +2397,28 @@ begin
                else
                        ATitle := Item.ThreadItem.Title;
                if ATitle = '' then
-                       ATitle := GikoSys.Setting.GetMessage(Ord(gmUnKnown));
+                       ATitle := GikoSys.GetGikoMessage(gmUnKnown);
 
                if Item.State in [gdsComplete, gdsDiffComplete] then begin
                        //\90³\8fí\8fI\97¹
                        if Item.DownType = gdtBoard then begin
                                //\94Â
                                Item.SaveListFile;
-                               AddMessageList(ATitle + ' ' + GikoSys.Setting.GetMessage(Ord(gmSureItiran)), nil, gmiOK);
+                               AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
                                if GetActiveList = Item.Board then begin
                                        FActiveList := nil;
+                                       //\8e©\93®\83\\81[\83g\82Ì\8fê\8d\87\94Â\88ê\97\97\82Ì\83\\81[\83g\8f\87\82ð\83N\83\8a\83A\82·\82é
+                                       if (GikoSys.Setting.AutoSortThreadList) then begin
+                                               GikoSys.Setting.BoardSortIndex := 0;
+                                               GikoSys.Setting.BoardSortOrder := True;
+                                       end;
+                                       Sort.SetSortDate(Now());
                                        SetActiveList(Item.Board);
                                end;
                                Item.Board.Modified := True;
                                Item.Board.IsThreadDatRead := True;
                                PlaySound('New');
+                               ListView.Refresh;
                        end else if Item.DownType = gdtThread then begin
                                //\83X\83\8c
                                Item.SaveItemFile;
@@ -2314,15 +2442,12 @@ begin
                                end;
                                if GikoSys.Setting.BrowserTabVisible then begin
                                        if GetActiveContent = Item.ThreadItem then
-                                               browserRec := InsertBrowserTab(Item.ThreadItem)
+                                               InsertBrowserTab(Item.ThreadItem)
                                        else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
-                                               browserRec := InsertBrowserTab(Item.ThreadItem, True)
+                                               InsertBrowserTab(Item.ThreadItem, True)
                                        else
-                                               browserRec := InsertBrowserTab(Item.ThreadItem, False);
-                                       if browserRec.Thread = BrowserNullTab.Thread then begin
-                                               browserRec.Movement := BrowserNullTab.Movement;
-                                               BrowserNullTab.Movement := '';
-                                       end;
+                                               InsertBrowserTab(Item.ThreadItem, False);
+
                                end else begin
                                        if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
                                                                                                InsertBrowserTab(Item.ThreadItem);
@@ -2332,12 +2457,12 @@ begin
 
                                if Item.State = gdsComplete then begin
                                        PlaySound('New');
-                                                                               AddMessageList(ATitle + ' ' + GikoSys.Setting.GetMessage(Ord(gmSureSyutoku)), nil, gmiOK);
+                                                                               AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
                                                                                //Add by Genyakun
                                                                                DiffComp := True;
                                end else begin
                                        PlaySound('NewDiff');
-                                                                               AddMessageList(ATitle + ' ' + GikoSys.Setting.GetMessage(Ord(gmSureDiff)), nil, gmiOK);
+                                                                               AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
                                                                                //Add by Genyakun
                                                                                DiffComp := True;
                                end;
@@ -2359,29 +2484,32 @@ begin
                                                gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
                                                gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
                                                gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
+                                               gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
+                                               gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
                                                gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
                                        end;
                                end;
+                               RefreshListView(Item.ThreadItem);
                        end;
-                       ListView.Refresh;
+
                end else if Item.State = gdsNotModify then begin
                        //\95Ï\8dX\83i\83V
 {                      if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
                                //SetContent(Item.ThreadItem);
                                InsertBrowserTab(Item.ThreadItem);
                        end;}
-                                               AddMessageList(ATitle + ' ' + GikoSys.Setting.GetMessage(Ord(gmNotMod)), nil, gmiSAD);
+                                               AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
                        PlaySound('NoChange');
                        Screen.Cursor := crDefault;
                end else if Item.State = gdsAbort then begin
                        //\92\86\92f
-                                               AddMessageList(ATitle + ' ' + GikoSys.Setting.GetMessage(Ord(gmAbort)), nil, gmiOK);
+                                               AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
                end else if Item.State = gdsError then begin
                        //\83G\83\89\81[
                        s := Item.ErrText;
                        if s <> '' then
                                s := ':' + s;
-                        AddMessageList(ATitle + ' ' + GikoSys.Setting.GetMessage(Ord(gmError)) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
+                        AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
 //                     if Item.ResponseCode = 302 then
 //                             AddMessageList('\94Â\82ª\88Ú\93]\82µ\82½\82©\82à\82µ\82ê\82È\82¢\82Ì\82Å\94Â\8dX\90V\82ð\8ds\82Á\82Ä\82­\82¾\82³\82¢\81B', nil, gmiNG);
                        PlaySound('Error');
@@ -2447,6 +2575,19 @@ begin
        end;
 end;
 
+//! \82à\82Á\82Æ\82à\8cÃ\82¢Browser\82Ì\8aJ\95ú
+procedure TGikoForm.ReleaseOldestBrowser;
+var
+    i: Integer;
+begin
+    for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
+        if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
+                TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
+            ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
+            break;
+        end;
+    end;
+end;
 
 function TGikoForm.InsertBrowserTab(
        ThreadItem      : TThreadItem;
@@ -2456,6 +2597,7 @@ var
        i, j, idx               : Integer;
        favItem                 : TFavoriteThreadItem;
        newBrowser      : TBrowserRecord;
+    ins : Integer;
 begin
 
        Result := nil;
@@ -2471,7 +2613,7 @@ begin
                                FBrowsers.Move(BROWSER_COUNT - 1, 0);
                end;
                favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
-               if not AddHistory( favItem ) then
+               if not FHistoryList.AddHistory( favItem, TreeView, FTreeType ) then
                        favItem.Free;
 
                for i := 0 to BrowserTab.Tabs.Count - 1 do begin
@@ -2479,12 +2621,8 @@ begin
                                if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
                                        Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
                                        if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
-                                               for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
-                                                       if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
-                                                               ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
-                                                               break;
-                                                       end;
-                                               end;
+                        //\88ê\94Ô\8cÃ\82¢\83u\83\89\83E\83U\82ð\8aJ\95ú\82·\82é
+                        ReleaseOldestBrowser;
                                                TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
                                                TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
                                                FBrowsers.Move(BROWSER_COUNT - 1, 0);
@@ -2499,21 +2637,15 @@ begin
                        end;
                end;
                idx := BrowserTab.TabIndex;
-               if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
-                       newBrowser := TBrowserRecord.Create;
-                       for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
-                               if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
-                                       ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
-                                       break;
-                               end;
-                       end;
-                       newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
-                       FBrowsers.Move(BROWSER_COUNT - 1, 0);
-                       //newBrowser.Browser.Navigate(BLANK_HTML);
-                       newBrowser.thread := ThreadItem;
-                       newBrowser.Repaint := true;
-//                     newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
+        newBrowser := TBrowserRecord.Create;
+        // \88ê\94Ô\8cÃ\82¢\83u\83\89\83E\83U\82ð\8aJ\95ú\82·\82é
+        ReleaseOldestBrowser;
+        newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
+        FBrowsers.Move(BROWSER_COUNT - 1, 0);
+        newBrowser.thread := ThreadItem;
+        newBrowser.Repaint := true;
 
+               if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
                        BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
                        if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
                                DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
@@ -2523,22 +2655,7 @@ begin
                        if ActiveTab then begin
                                BrowserTab.TabIndex := 0;
                        end;
-
-               end else begin
-                       newBrowser := TBrowserRecord.Create;
-                       for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
-                               if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
-                                       ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
-                                       break;
-                               end;
-                       end;
-                       newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
-                       FBrowsers.Move(BROWSER_COUNT - 1, 0);
-                       //newBrowser.Browser.Navigate(BLANK_HTML);
-                       newBrowser.thread := ThreadItem;
-//                     newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
-                       newBrowser.Repaint := true;
-
+               end else if GikoSys.Setting.BrowserTabAppend = gtaLast then begin
                        i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
                        if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
                                DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
@@ -2551,7 +2668,40 @@ begin
                                else
                                        BrowserTab.TabIndex := i;
                        end;
-               end;
+               end else begin
+            // \83^\83u\88Ê\92u\82ð\8eæ\93¾
+            ins := -1;
+            for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
+            if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
+                    TWebBrowser(FBrowsers[1]) then begin
+                    ins := i;
+                    break;
+                end;
+            end;
+            if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
+                Inc(ins);
+                   end;
+            // \83^\83u\82ª\96³\82¢\82Æ\82«\82È\82Ç\91Î\8dô
+            if (ins < 0) then begin
+                ins := 0;
+            end;
+                       BrowserTab.Tabs.InsertObject(ins, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
+                       if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
+                if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
+                               DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
+                end else begin
+                    DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
+                end;
+                       end;
+                       //end;
+                       BrowserTab.Repaint;
+                       if ActiveTab then begin
+                               if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
+                                       BrowserTab.TabIndex := 0
+                               else
+                                       BrowserTab.TabIndex := ins;
+                       end;
+        end;
                Result := newBrowser;
                if(ActiveTab) or (idx = -1) then begin
                        BrowserTab.OnChange(nil);
@@ -2561,6 +2711,9 @@ begin
                        BrowserNullTab := TBrowserRecord.Create;
                        BrowserNullTab.Browser := Browser;
                end;
+//             if BrowserNullTab.thread <> ThreadItem then begin
+//                     BrowserNullTab.Movement := '';
+//             end;
                BrowserNullTab.thread := ThreadItem;
                Result := BrowserNullTab;
                BrowserTab.TabIndex := -1;
@@ -2577,9 +2730,8 @@ var
        BBSID: string;
        FileName: string;
        sTitle: string;
-       doc:  Variant;
+       doc: Variant;
        s: string;
-       i: Integer;
        idx: Integer;
        ThreadItem: TThreadItem;
        Thread: TBrowserRecord;
@@ -2588,12 +2740,13 @@ var
 begin
        Thread := inThread;
        idx := BrowserTab.TabIndex;
-       if (FActiveContent <> nil) and
+       if  (not FStartUp) and
+        (FActiveContent <> nil) and
                (FActiveContent.Thread <> Thread.Thread) and
+               (FActiveContent.Browser <> nil) and
                (Assigned(FActiveContent.Browser.Document)) then begin
                try
                try
-                       Sleep(1);
                        FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document).Body).ScrollTop;
                except
                        on E: Exception do
@@ -2608,7 +2761,7 @@ begin
                ItemBoardImage.Picture := nil;
                BrowserNameLabel.Caption := '';
                ItemImage.Picture := nil;
-               BrowserNullTab.Thread := nil;
+        BrowserNullTab.Thread := nil;
                //TOleControl(BrowserNullTab.Browser).Visible := true;
                ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
                FActiveContent := nil;
@@ -2616,12 +2769,8 @@ begin
        end     else if Thread.Browser = nil then begin
                if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
                        FBrowsers.Move(BROWSER_COUNT - 1, 0);
-               for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
-                       if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
-                               ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
-                               break;
-                       end;
-               end;
+        // \88ê\94Ô\8cÃ\82¢\83u\83\89\83E\83U\82ð\8aJ\95ú\82·\82é
+        ReleaseOldestBrowser;
                Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
                FBrowsers.Move(BROWSER_COUNT - 1, 0);
        end;
@@ -2651,7 +2800,6 @@ begin
                if (not Assigned(Thread.Browser.Document)) then begin
                        Thread.Browser.Navigate('about:blank');
                end;
-
                while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
                                (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
                        Application.ProcessMessages;
@@ -2660,12 +2808,32 @@ begin
                        end;
                end;
 
+               if (Thread <> nil) and (ThreadItem <>nil) then begin
+                       BrowserBoardNameLabel.Caption := ThreadPTitle;
+                       ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
+                       BrowserNameLabel.Caption := ThreadTitle;
+                       ItemImage.Picture := nil;
+                       if ThreadIsLog then
+                               if ThreadNewArraical then
+                                       ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
+                               else
+                                       ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
+                       else
+                               ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
+
+                       ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
+                       BrowserNameLabel.Left := ItemImage.Left + 20;
+
+               end;
                //ActiveContent\81@\82Ì\8dX\90V
                FActiveContent := Thread;
 
                if not ThreadIsLog then begin
-                       Self.Caption := CAPTION_NAME ;
+                       Self.Caption := GikoDataModule.CAPTION_NAME ;
+                       //\83X\83e\81[\83^\83X\83o\81[\82É\95\\8e¦\82µ\82Ä\82¢\82é\83X\83\8c\82Ì\97e\97Ê\82ð\8fÁ\8b\8e
+                       StatusBar.Panels[THREADSIZE_PANEL].Text := '';
                        try
+                               Thread.Browser.BringToFront;
                                s := '<HTML><BODY><CENTER>\82±\82Ì\83X\83\8c\83b\83h\82Í\8eæ\93¾\82µ\82Ä\82¢\82Ü\82¹\82ñ</CENTER></BODY></HTML>';
                                doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
                                doc.open;
@@ -2673,62 +2841,44 @@ begin
                                doc.Write(s);
                                doc.Close;
                        finally
+                               
                        end;
                end else begin
-                       Self.Caption := CAPTION_NAME + ' - [' + ThreadTitle + ']';
+                       Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
+                       //\83X\83e\81[\83^\83X\83o\81[\82É\95\\8e¦\82µ\82Ä\82¢\82é\83X\83\8c\82Ì\97e\97Ê\82ð\95\\8e¦
+                       StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
+                       StatusBar.Panels[THREADSIZE_PANEL].Width :=
+                               Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
                        //Thread.Repaint\82Í\81A\83X\83L\83\93\93\99\82Ì\90Ý\92è\82ð\95Ï\8dX\82µ\82½\82Æ\82«\81AThread\82ð\83_\83E\83\93\83\8d\81[\83h\82µ\82½\82Æ\82«
                        //\90V\8bK\82ÉThread\82ð\8aJ\82¢\82½\82Æ\82«\82É\90^\82É\82È\82Á\82Ä\82¢\82é\81B
                        if Thread.Repaint then begin
                                Thread.Repaint := false;
 
                                Thread.Browser.OnStatusTextChange := nil;
-                               doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
-
-                               //GikoSys.CreateHTML2(doc, ThreadItem, sTitle);
-                               HTMLCreater.CreateHTML2(doc, ThreadItem, sTitle);
+                               LockWindowUpdate(Thread.Browser.ParentWindow);
+                               HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
                                Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
-                               
-                               if ThreadItem = nil then begin
-                                       FActiveContent := nil;
-                                       BrowserTab.Repaint;
-                                       Exit;
-                               end;
                                PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
                        end;
                end;
-               if (Thread <> nil) and (ThreadItem <>nil) then begin
-                       BrowserBoardNameLabel.Caption := ThreadPTitle;
-                       ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
-                       BrowserNameLabel.Caption := ThreadTitle;
-                       ItemImage.Picture := nil;
-                       if ThreadIsLog then
-                               if ThreadNewArraical then
-                                       ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
-                               else
-                                       ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
-                       else
-                               ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
-
-                       ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
-                       BrowserNameLabel.Left := ItemImage.Left + 20;
 
-                       //Thread\82Ì\94Â\82Æ\95\\8e¦\82µ\82Ä\82¢\82é\94Â\82ª\93¯\82\82È\82ç\95`\89æ\82ð\8dX\90V\82·\82é
-                       if (FActiveList is TBoard) and (TBoard(ActiveList) = ThreadItem.ParentBoard) then
-                               ListView.Refresh;
-               end else begin
-                       FActiveContent := nil;
-               end;
+               RefreshListView(ThreadItem);
        finally
                Screen.Cursor := crDefault;
        end;
 end;
 
-function TGikoForm.GetActiveContent: TThreadItem;
+function TGikoForm.GetActiveContent(popup :Boolean = false): TThreadItem;
 begin
        try
-               if FActiveContent <> nil then
-                       Result := FActiveContent.Thread
-               else
+               if FActiveContent <> nil then begin
+                       Result := FActiveContent.Thread;
+            if (popup) and
+                (FResPopupBrowser <> nil) and (FResPopupBrowser.CurrentBrowser.Visible = True) then
+                if (FResPopupBrowser.CurrentBrowser.Thread <> nil) then begin
+                    Result := FResPopupBrowser.CurrentBrowser.Thread;
+                end;
+               end else
                        Result := nil;
        except
                Result := nil;
@@ -2755,10 +2905,20 @@ begin
                ListView.Selected := nil;
 //     ListView.Columns.Clear;
                if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
-                       and (FActiveContent.Thread.IsLogFile) then
-                       Self.Caption := CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
-               else
-                       Self.Caption := CAPTION_NAME;
+                       and (FActiveContent.Thread.IsLogFile) then begin
+                       try
+                               Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
+                       except
+                               on E: Exception do begin
+                                       //\83X\83\8c\88ê\97\97DL\8cã\82È\82Ç\82ÉFActiveContent\82Ì\8e\9d\82ÂThread\82ª
+                                       //\8dí\8f\9c\82³\82ê\82Ä\82¢\82é\8fê\8d\87\82ª\82 \82é\82Ì\82Å\82±\82±\82Ä\8f\88\97\9d\82·\82é
+                                       ReleaseBrowser(FActiveContent);
+                                       FActiveContent.Thread := nil;
+                                       Self.Caption := GikoDataModule.CAPTION_NAME;
+                               end;
+                       end;
+               end else
+                       Self.Caption := GikoDataModule.CAPTION_NAME;
                //Application.Title := CAPTION_NAME;
 
 //             ActiveListColumnSave;
@@ -2766,14 +2926,11 @@ begin
                Screen.Cursor := crHourGlass;
                try
                        if Obj is TBBS then begin
-                               TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked,
-                                                               FSortIndex, FSortOrder);
+                               TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
                        end else if Obj is TCategory then begin
-                               TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked,
-                                                               FSortIndex, FSortOrder);
+                               TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
                        end else if Obj is TBoard then begin
-                               TListViewUtils.SetThreadListItem(TBoard(Obj), ListView,  GikoDM.ListNumberVisibleAction.Checked,
-                                                               FSortIndex, FSortOrder);
+                               TListViewUtils.SetThreadListItem(TBoard(Obj), ListView,  GikoDM.ListNumberVisibleAction.Checked);
                        end;
                finally
                        Screen.Cursor := crDefault;
@@ -2817,7 +2974,10 @@ begin
                        //gvtAll: ListView.Items.Count := Board.Count;
                        gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
                        gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
+                       gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
+                       gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
                        gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
+
                end;
 
                SetActiveList(Board);
@@ -2849,6 +3009,14 @@ begin
                                ListView.Canvas.Font.Color := clGreen;
                                s := '\82±\82Ì\83r\83\85\81[\82É\82Í\90V\92\85\83A\83C\83e\83\80\82ª\82 \82è\82Ü\82¹\82ñ\81B';
                        end;
+                       gvtArch: begin
+                               ListView.Canvas.Font.Color := clFuchsia;
+                               s := '\82±\82Ì\83r\83\85\81[\82É\82ÍDAT\97\8e\82¿\83A\83C\83e\83\80\82ª\82 \82è\82Ü\82¹\82ñ\81B';
+                       end;
+                       gvtLive: begin
+                               ListView.Canvas.Font.Color := clMaroon;
+                               s := '\82±\82Ì\83r\83\85\81[\82É\82Í\90\91\83A\83C\83e\83\80\82ª\82 \82è\82Ü\82¹\82ñ\81B';
+                       end;
                        gvtUser: begin
                                ListView.Canvas.Font.Color := clNavy;
                                s := '\82±\82Ì\83r\83\85\81[\82É\82Í\83^\83C\83g\83\8b\82ª\81u%s\81v\82ð\8aÜ\82Þ\83A\83C\83e\83\80\82ª\82 \82è\82Ü\82¹\82ñ\81B';
@@ -2934,185 +3102,11 @@ begin
        end;
 end;
 
-function TGikoForm.AddHistory( favItem : TFavoriteThreadItem ): Boolean;
-var
-       i: Integer;
-       Item: TFavoriteThreadItem;
-       Node: TTreeNode;
+//\97\9a\97ð\82©\82ç\8dí\8f\9c
+procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
 begin
-//     Result := False;
-//     if (GetActiveContent = ThreadItem) and
-//                     (ThreadItem.Count <= ThreadItem.Kokomade) then
-//             Exit;
-//     if GetActiveContent = ThreadItem then
-//             Exit;
-
-       Result := True;
-       if FTreeType = gttHistory then
-       TreeView.Selected := nil;
-
-       for i := 0 to FHistoryList.Count - 1 do begin
-               if TObject(FHistoryList[i]) is TFavoriteThreadItem then begin
-                       Item := TFavoriteThreadItem(FHistoryList[i]);
-                       if Item.URL = favItem.URL then begin
-//                             SetContent(ThreadItem);
-                               FHistoryList.Move(i, 0);
-                               if FTreeType = gttHistory then
-                                       if TreeView.Items.GetFirstNode <> TreeView.Items[ i ] then
-                                               TreeView.Items[ i ].MoveTo( TreeView.Items.GetFirstNode, naInsert );
-                                                               Result := false;
-                               Exit;
-                       end;
-               end;
-       end;
-
-       if FHistoryList.Count > 0 then
-               FHistoryList.Insert( 0, favItem )
-       else
-               FHistoryList.Add( favItem );
-//     SetContent(ThreadItem);
-//     while GikoSys.Setting.AddressHistoryCount < FHistoryList.Count do begin
-       while GikoSys.Setting.MaxRecordCount < FHistoryList.Count do begin
-               i := FHistoryList.Count - 1;
-               TObject( FHistoryList.Items[ i ] ).Free;
-               FHistoryList.Delete( i );
-       end;
-
-       if FTreeType = gttHistory then begin
-               Node := TreeView.Items.Add( nil, favItem.Title );
-               Node.MoveTo( TreeView.Items.GetFirstNode, naInsert );
-               {
-               if favItem.NewArrival then begin
-                       Node.ImageIndex := ITEM_ICON_THREADNEW1;
-                       Node.SelectedIndex := ITEM_ICON_THREADNEW2;
-               end else begin
-                       Node.ImageIndex := ITEM_ICON_THREADLOG1;
-                       Node.SelectedIndex := ITEM_ICON_THREADLOG2;
-               end;
-               }
-               // \95\89\89×\82ð\82©\82¯\82½\82­\82È\82¢\82Ì\82Å NewArrival \82Ì\83`\83F\83b\83N\82ð\8ds\82í\82È\82¢
-               // \81¦favItem.Item \83v\83\8d\83p\83e\83B\82Í dat \82Ì\93Ç\82Ý\8d\9e\82Ý\82ð\95K\97v\82Æ\82·\82é
-               Node.ImageIndex := ITEM_ICON_THREADLOG1;
-               Node.SelectedIndex := ITEM_ICON_THREADLOG2;
-               Node.Data := favItem;
-               //while GikoSys.Setting.AddressHistoryCount < TreeView.Items.Count do begin
-               while GikoSys.Setting.MaxRecordCount < TreeView.Items.Count do begin
-                       i := TreeView.Items.Count - 1;
-                       TreeView.Items.Item[ i ].Delete;
-               end;
-       end;
-end;
-
-procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
-var
-       i: Integer;
-begin
-       for i := 0 to FHistoryList.Count - 1 do begin
-               if threadItem.URL = TFavoriteThreadItem( FHistoryList.Items[i] ).URL then begin
-                       TFavoriteThreadItem( FHistoryList.Items[ i ] ).Free;
-                       FHistoryList.Delete(i);
-            FHistoryList.Capacity := FHistoryList.Count;
-                       Break;
-               end;
-       end;
-end;
-
-procedure TGikoForm.ClearHistory;
-var
-       i : Integer;
-begin
-       //FHistoryList.Clear;
-
-       try
-               for i := FHistoryList.Count - 1 downto 0 do begin
-                       if TObject(FHistoryList[ i ]) is TFavoriteThreadItem then
-               TFavoriteThreadItem(FHistoryList[ i ]).Free
-            else if TObject(FHistoryList[ i ]) is TFavoriteBoardItem then
-                TFavoriteBoardItem(FHistoryList[ i ]).Free;
-
-                       //FHistoryList.Delete(i);
-        end;
-       except
-       end;
-
-       FHistoryList.Clear;
-    FHistoryList.Capacity := FHistoryList.Count;
-
-end;
-
-procedure TGikoForm.SaveHistory;
-var
-       i, bound        : Integer;
-       saveList        : TstringList;
-begin
-
-       saveList := TStringList.Create;
-       try
-               FHistoryList.Pack;
-        FHistoryList.Capacity := FHistoryList.Count;
-               saveList.Add('<?xml version="1.0" encoding="Shift_JIS" standalone="yes"?>');
-               saveList.Add('<address>');
-               bound := FHistoryList.Count - 1;
-               for i := bound downto 0 do begin
-                       // title \82Í\8d¡\82Ì\82Æ\82±\82ë\8eg\82Á\82Ä\82¢\82È\82¢
-                       saveList.Add(
-                               '<history url="' + HtmlEncode( TFavoriteThreadItem( FHistoryList[ i ] ).URL ) + '"' +
-                               ' title="' + HtmlEncode( TFavoriteThreadItem( FHistoryList[ i ] ).Title ) + '"/>');
-               end;
-               saveList.Add('</address>');
-               saveList.SaveToFile( GikoSys.GetConfigDir + 'History.xml' );
-       finally
-               saveList.Free;
-       end;
-
-end;
-
-procedure TGikoForm.LoadHistory;
-var
-       i, bound                : Integer;
-       fileName                : string;
-       XMLDoc                  : IXMLDocument;
-       XMLNode                 : IXMLNode;
-       HistoryNode     : IXMLNode;
-       s                                               : string;
-       favItem                 : TFavoriteThreadItem;
-begin
-
-       fileName := GikoSys.GetConfigDir + 'History.xml';
-
-       if FileExists( fileName ) then begin
-               try
-            XMLDoc := IXMLDocument.Create;
-                       //XMLDoc := LoadXMLDocument(FileName);
-            LoadXMLDocument(FileName, XMLDoc);
-                       try
-                               XMLNode := XMLDoc.DocumentElement;
-
-                               if XMLNode.NodeName = 'address' then begin
-                                       bound := XMLNode.ChildNodes.Count - 1;
-                                       for i := 0 to bound do begin
-                                               HistoryNode := XMLNode.ChildNodes[i];
-                                               if HistoryNode.NodeName = 'history' then begin
-                                                       //if FReadCount >= sl.Count then begin
-                                                               s := Trim(HistoryNode.Attributes['url']);
-                                                               if s <> '' then begin
-                                                                       favItem := TFavoriteThreadItem.Create(
-                                                                               s, HistoryNode.Attributes[ 'title' ] );
-                                                                       if not AddHistory( favItem ) then
-                                       favItem.Free;
-                                                               end;
-                                                       //end;
-                                               end;
-                                       end;
-                               end;
-                       finally
-                               XMLDoc.Free;
-                       end;
-               except
-               end;
-       end;
-
-end;
+    FHistoryList.DeleteHistory( threadItem, TreeView, TreeType );
+end;
 
 procedure TGikoForm.ShowBBSTreeOld(
        inBBS : TBBS
@@ -3273,43 +3267,11 @@ begin
                FTreeType := gttHistory;
                HistoryToolBar.Show;
                FavoriteToolBar.Hide;
-               SetHistoryTreeNode;
+        FHistoryList.SetTreeNode( TreeView );
                CabinetSelectToolButton.Caption := '\97\9a\97ð\83\8a\83X\83g';
        end;
 end;
 
-procedure TGikoForm.SetHistoryTreeNode;
-var
-       i: Integer;
-       Node: TTreeNode;
-       Item: TFavoriteThreadItem;
-begin
-       TreeView.Items.BeginUpdate;
-       try
-               TreeView.Items.Clear;
-               for i := 0 to FHistoryList.Count - 1 do begin
-                       Item := TFavoriteThreadItem(FHistoryList[i]);
-                       Node := TreeView.Items.Add(nil, Item.Title);
-                       {
-                       if Item.Item.NewArrival then begin
-                               Node.ImageIndex := ITEM_ICON_THREADNEW1;
-                               Node.SelectedIndex := ITEM_ICON_THREADNEW2;
-                       end else begin
-                               Node.ImageIndex := ITEM_ICON_THREADLOG1;
-                               Node.SelectedIndex := ITEM_ICON_THREADLOG2;
-                       end;
-                       }
-                       // \95\89\89×\82ð\82©\82¯\82½\82­\82È\82¢\82Ì\82Å NewArrival \82Ì\83`\83F\83b\83N\82ð\8ds\82í\82È\82¢
-                       // \81¦Item.Item \83v\83\8d\83p\83e\83B\82Í dat \82Ì\93Ç\82Ý\8d\9e\82Ý\82ð\95K\97v\82Æ\82·\82é
-                       Node.ImageIndex := ITEM_ICON_THREADLOG1;
-                       Node.SelectedIndex := ITEM_ICON_THREADLOG2;
-                       Node.Data := Item;
-               end;
-       finally
-               TreeView.Items.EndUpdate;
-       end;
-end;
-
 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
 var
        ChangeEvent: TTVChangedEvent;
@@ -3358,7 +3320,6 @@ begin
        end else begin
                if Item <> FActiveList then begin
                        ActiveListColumnSave;
-
                        if (Item is TBBS) or (Item is TCategory) then begin
                                ListView.Columns.Clear;
                                SetActiveList( Item );
@@ -3372,6 +3333,7 @@ begin
                                                Screen.Cursor := crDefault;
                                        end;
                                end;
+                               Sort.SetSortDate(Now());
                                SetActiveList( Item );
                        end;
                end;
@@ -3507,7 +3469,14 @@ begin
                FActiveContent.Move(AName);
        end;
 end;
-
+//\8c»\8dÝ\95\\8e¦\82µ\82Ä\82¢\82é\83X\83\8c\83b\83h\82ð\83X\83N\83\8d\81[\83\8b
+procedure TGikoForm.BrowserMovement(scroll: Integer);
+begin
+       if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
+               and (FActiveContent <> nil) then begin
+               FActiveContent.Move(scroll);
+       end;
+end;
 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
 begin
        if TObject(Node.Data) is TBBS then begin
@@ -3517,6 +3486,9 @@ begin
        end else if TObject(Node.Data) is TBoard then begin
                TBoard(Node.Data).NodeExpand := False;
        end;
+       if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
+       TreeClick(TreeView.Selected);
+       end;
 end;
 
 procedure TGikoForm.MessageListViewResize(Sender: TObject);
@@ -3570,123 +3542,87 @@ end;
 
 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
 var
-       i, j, idx: Integer;
-       doc: Variant;
+       i: Integer;
 begin
-       idx := BrowserTab.TabIndex;
        FTabHintIndex := -1;
        for i := 0 to BrowserTab.Tabs.Count - 1 do begin
                if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
-                       BrowserTab.Tabs.BeginUpdate;
-                       try
-                               if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
-                                       doc := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser.Document;
-                                       TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ScrollTop := doc.Body.ScrollTop;
-                               end;
-                       except
-                               TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ScrollTop := 0;
-                       end;
-                       if( FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[i]) ) then
-                               FActiveContent := nil;
-                       if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
-                               j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser);
-                               if j <> -1 then
-                                       FBrowsers.Move(j, BROWSER_COUNT - 1);
-                       end;
-                       TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
-                       BrowserTab.Tabs.Delete(i);
-                       if idx > i then begin
-                               BrowserTab.TabIndex := idx - 1;
-                       end else begin
-                               if BrowserTab.Tabs.Count -1 >= idx then
-                                       BrowserTab.TabIndex := idx
-                               else
-                                       BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
-                       end;
-                       if BrowserTab.Tabs.Count = 0 then begin
-                               BrowserNullTab.Thread := nil;
-                       end;
-                       if(BrowserTab.TabIndex <> -1) and
-                               ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
-                               for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
-                                       if(TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser
-                                                = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) )then
-                                       begin
-                                               ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
-                                               break;
-                                       end;
-                               end;
-                               TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
-                                        :=  TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
-                               TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
-                               FBrowsers.Move(BROWSER_COUNT - 1, 0);
-                       end;
-                       BrowserTab.Tabs.EndUpdate;
-                       if( FActiveContent = nil) then
-                               BrowserTab.OnChange(nil);
-                       Exit;
+            DeleteTab(i, BrowserTab.TabIndex);
+                       Break;
                end;
        end;
 end;
 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
 var
-       i, j, idx: Integer;
-       doc: Variant;
+       i: Integer;
 begin
-       idx := BrowserTab.TabIndex;
        FTabHintIndex := -1;
        for i := 0 to BrowserTab.Tabs.Count - 1 do begin
                if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
-                       BrowserTab.Tabs.BeginUpdate;
-                       try
-                               if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
-                                       doc := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser.Document;
-                                       TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ScrollTop := doc.Body.ScrollTop;
-
-                               end;
-                       except
-                               TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ScrollTop := 0;
-                       end;
-                       if(FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[i])) then
-                               FActiveContent := nil;
-                       if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
-                               j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser);
-                               if j <> -1 then
-                                       FBrowsers.Move(j, BROWSER_COUNT - 1);
-                       end;
-                       TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
-                       BrowserTab.Tabs.Delete(i);
-                       if idx > i then begin
-                               BrowserTab.TabIndex := idx - 1;
-                       end else begin
-                               if BrowserTab.Tabs.Count -1 >= idx then
-                                       BrowserTab.TabIndex := idx
-                               else
-                                       BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
-                       end;
-                       if(BrowserTab.TabIndex <> -1) and
-                               ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
-                               for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
-                                       if(TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser
-                                                = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) )then
-                                       begin
-                                               ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
-                                               break;
-                                       end;
-                               end;
-                               TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
-                                        :=  TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
-                               TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
-                               FBrowsers.Move(BROWSER_COUNT - 1, 0);
-                       end;
-
-                       BrowserTab.Tabs.EndUpdate;
-                       if( FActiveContent = nil) then
-                               BrowserTab.OnChange(nil);
-                       Exit;
+            DeleteTab(i, BrowserTab.TabIndex);
+                       Break;
                end;
        end;
 end;
+procedure TGikoForm.DeleteTab(index, selectIndex: Integer);
+var
+    doc: Variant;
+    j: Integer;
+begin
+    try
+        if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
+            doc := TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser.Document;
+            TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := doc.Body.ScrollTop;
+        end;
+    except
+        TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := 0;
+    end;
+    if(FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[index])) then
+        FActiveContent := nil;
+    if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
+        j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser);
+        if j <> -1 then
+            FBrowsers.Move(j, BROWSER_COUNT - 1);
+    end;
+    BrowserTab.Tabs.BeginUpdate;
+    try
+        GikoSys.Setting.LastCloseTabURL :=
+            TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.URL;
+        TBrowserRecord(BrowserTab.Tabs.Objects[index]).Free;
+        if ( BrowserTab.Tabs.Count - 1 = index ) and
+            ( BrowserTab.TabRect(index).Left
+                <= BrowserTab.DisplayRect.Left ) then begin
+            BrowserTab.ScrollTabs(-1);
+        end;
+        BrowserTab.Tabs.Delete(index);
+        if selectIndex > index then begin
+            BrowserTab.TabIndex := selectIndex - 1;
+        end else begin
+            if BrowserTab.Tabs.Count -1 >= selectIndex then
+                BrowserTab.TabIndex := selectIndex
+            else
+                BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
+        end;
+    finally
+        BrowserTab.Tabs.EndUpdate;
+    end;
+    if BrowserTab.Tabs.Count = 0 then begin
+        BrowserNullTab.Thread := nil;
+    end;
+    if(BrowserTab.TabIndex <> -1) and
+        ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
+        // \88ê\94Ô\8cÃ\82¢\83u\83\89\83E\83U\82ð\8aJ\95ú\82·\82é
+        ReleaseOldestBrowser;
+
+        TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
+             :=  TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
+        TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
+        FBrowsers.Move(BROWSER_COUNT - 1, 0);
+    end;
+
+    if( FActiveContent = nil) then
+        BrowserTab.OnChange(nil);
+end;
 function TGikoForm.Hook(var Message: TMessage): Boolean;
 begin
        //\83T\83u\83t\83H\81[\83\80\82ª\83\81\83C\83\93\83\81\83j\83\85\81[\82ð\8e\9d\82½\82È\82¢\82Æ\82«\82É\81A\83\81\83C\83\93\83t\83H\81[\83\80\82Ì
@@ -3701,30 +3637,32 @@ begin
 end;
 
 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
-begin
-       ItemRoundPMenu.Visible := (GetActiveList is TBoard);
-       ItemReservPMenu.Visible := (GetActiveList is TBoard);
-       LPMSep01.Visible := (GetActiveList is TBoard);
-       ListRoundPMenu.Visible := (GetActiveList is TCategory);// or (GetActiveList is TBoard);
-       ListReservPMenu.Visible := (GetActiveList is TCategory);// or (GetActiveList is TBoard);
-       LPMSep02.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
-       KidokuPMenu.Visible := (GetActiveList is TBoard);
-       MidokuPMenu.Visible := (GetActiveList is TBoard);
-       UrlCopyPMenu.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
-       NameUrlCopyPMenu.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
-       AllSelectPMenu.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
-       LPMSep05.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
-       DeletePMenu.Visible := (GetActiveList is TBoard);
-       LPMSep06.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
-       BoardFavoriteAddMenu.Visible := (GetActiveList is TCategory);
-       ThreadFavoriteAddMenu.Visible := (GetActiveList is TBoard);
-
+var
+    bBoard, bCategory : Boolean;
+begin
+    bBoard := (GetActiveList is TBoard);
+    bCategory := (GetActiveList is TCategory);
+       ItemRoundPMenu.Visible := bBoard;
+       ItemReservPMenu.Visible := bBoard;
+       LPMSep01.Visible := bBoard;
+       ListRoundPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
+       ListReservPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
+       LPMSep02.Visible := bCategory or bBoard;
+       KidokuPMenu.Visible := bBoard;
+       MidokuPMenu.Visible := bBoard;
+       UrlCopyPMenu.Visible := bCategory or bBoard;
+       NameUrlCopyPMenu.Visible := bCategory or bBoard;
+       AllSelectPMenu.Visible := bCategory or bBoard;
+       LPMSep05.Visible := bCategory or bBoard;
+       DeletePMenu.Visible := bBoard;
+       LPMSep06.Visible := bCategory or bBoard;
+       BoardFavoriteAddMenu.Visible := bCategory;
+       ThreadFavoriteAddMenu.Visible := bBoard;
+    SaveThreadFile.Visible := bBoard;
        AddRoundNameMenu(ItemReservPMenu);
        AddRoundNameMenu(ListReservPMenu);
 end;
 
-
-//ActiveList\82ªTBoard\82©TCategory\82Å\83X\83\8c\88ê\97\97\82Å\82P\82Â\88È\8fã\91I\91ð\82µ\82Ä\82¢\82é\82Æ\97L\8cø\82É\82È\82éActionde\8b¤\92Ê
 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
 begin
        FClickNode := TreeView.Selected;
@@ -3820,18 +3758,22 @@ var
        idx: Integer;
        wkIntSt: Integer;
        wkIntTo: Integer;
-       document: IHTMLDocument2;
     BNum, BRes: string;
     threadItem: TThreadItem;
+    aElement : IHTMLElement;
 begin
-
+{$IFDEF DEBUG}
+       Writeln(IntToStr(Integer(ppDisp)));
+{$ENDIF}
        Cancel := True;
-       if (IHTMLDocument2(TWebBrowser(Sender).Document).activeElement <> nil) then begin
-               Text := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.Get_outerText;
-               Html := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.Get_outerHTML;
+    aElement := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement;
+       if ( aElement <> nil) then begin
+               Text := aElement.Get_outerText;
+               Html := aElement.Get_outerHTML;
                if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
                        or (AnsiPos('\81\84\81\84', Text) = 1) or (AnsiPos('\81\84', Text) = 1) then begin
                        if GikoSys.Setting.ResAnchorJamp then begin
+
                                Text := ZenToHan(Trim(Text));
 
                                if(AnsiPos('>>', Text) = 1) then begin
@@ -3853,11 +3795,18 @@ begin
                                end;
 
                                if wkIntSt <> 0 then begin
-                                       FActiveContent.IDAnchorPopup('');
-                                       BrowserMovement(IntToStr(wkIntSt));
-                               end;
-
-
+                       FActiveContent.IDAnchorPopup('');
+                    MoveHisotryManager.pushItem(FActiveContent);
+                    if (Sender is TResPopupBrowser) then begin
+                        TResPopupBrowser(Sender).ChildClear;
+                        OpenThreadItem(
+                            GetActiveContent(true),
+                            GetActiveContent(true).URL + '&st=' +
+                                 IntToStr(wkIntSt) + '&to=' + IntToStr(wkIntSt));
+                    end else begin
+                                       BrowserMovement(IntToStr(wkIntSt));
+                    end;
+                end;
                        end;
                end else begin
             ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
@@ -3887,10 +3836,15 @@ begin
                                                AddressComboBox.Items.Insert(0, URL);
                                        end;
                                end;
+                if (Sender is TResPopupBrowser) then begin
+                    TResPopupBrowser(Sender).ChildClear
+                end;
+
+                MoveHisotryManager.pushItem(FActiveContent);
                                MoveToURL( URL );
                        end;
                end;
-       end;
+    end;
 
 end;
 
@@ -3908,31 +3862,31 @@ begin
        if GikoSys.Setting.ListOrientation = gloHorizontal then begin
                if ViewPanel.Width < 2 then begin
                        ViewPanel.Width := 1;
-                       GikoDM.BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
-                       GikoDM.BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
+                       GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
+                       GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
                        GikoSys.Setting.ListWidthState := glsMax;
                end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
-                       GikoDM.BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
-                       GikoDM.BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
+                       GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
+                       GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
                        GikoSys.Setting.ListWidthState := glsMin;
                end else begin
-                       GikoDM.BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
-                       GikoDM.BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
+                       GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
+                       GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
                        GikoSys.Setting.ListWidthState := glsNormal;
                end;
        end else begin
                if ViewPanel.Height < 2 then begin
                        ViewPanel.Height := 1;
-                       GikoDM.BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_NORMAL;
-                       GikoDM.BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
+                       GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
+                       GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
                        GikoSys.Setting.ListHeightState := glsMax;
                end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
-                       GikoDM.BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
-                       GikoDM.BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_NORMAL;
+                       GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
+                       GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
                        GikoSys.Setting.ListHeightState := glsMin;
                end else begin
-                       GikoDM.BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
-                       GikoDM.BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
+                       GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
+                       GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
                        GikoSys.Setting.ListHeightState := glsNormal;
                end;
        end;
@@ -3944,60 +3898,53 @@ end;
 
 procedure TGikoForm.BrowserTabChange(Sender: TObject);
 var
-       i, j: Integer;
+       j: Integer;
        idx: Integer;
 begin
+       BrowserTab.Tabs.BeginUpdate;
+       try
+               if not BrowserTab.Dragging then begin
+                       FTabHintIndex := -1;
+                       BrowserTab.Hint := '';
+                       idx := BrowserTab.TabIndex;
+                       if idx = -1 then begin
+                               SetContent(BrowserNullTab);
+
+                       end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
+                               if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
+                                       j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
+                                       if j <> -1 then
+                                               FBrowsers.Move(j ,0);
+                               end else begin
+                                       if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
+                                               (FActiveContent.Browser <> BrowserNullTab.Browser) and
+                                               (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
+                                               FBrowsers.Move(BROWSER_COUNT - 1, 0);
 
-//     if NewTab = -1 then
-//     ThreadItem := nil;
-       if not BrowserTab.Dragging then begin
-               FTabHintIndex := -1;
-               BrowserTab.Hint := '';
-               idx := BrowserTab.TabIndex;
-               if idx = -1 then begin
-                       BrowserNullTab.Thread := nil;
-                       SetContent(BrowserNullTab);
-
-               end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
-                       if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
-                               j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
-                               if j <> -1 then
-                                       FBrowsers.Move(j ,0);
-                       end else begin
-                               if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
-                                       (FActiveContent.Browser <> BrowserNullTab.Browser) and
-                                       (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
-                                       FBrowsers.Move(BROWSER_COUNT - 1, 0);
+                    // \88ê\94Ô\8cÃ\82¢\83u\83\89\83E\83U\82ð\8aJ\95ú\82·\82é
+                    ReleaseOldestBrowser;
 
-                               for i := 0 to BrowserTab.Tabs.Count - 1 do begin
-                                       if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
-                                               ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
-                                               break;
-                                       end;
+                                       TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
+                                       TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
+                                       FBrowsers.Move(BROWSER_COUNT - 1, 0);
                                end;
-                               TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
-                               TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
-                               FBrowsers.Move(BROWSER_COUNT - 1, 0);
-                       end;
-                       MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
-                       TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
-//                     GikoSys.OnlyAHundredRes := TBrowserRecord(BrowserTab.Tabs.Objects[idx]).OnlyHundred;
-//                     OnlyAHundredRes.Checked := TBrowserRecord(BrowserTab.Tabs.Objects[idx]).OnlyHundred;
-                       SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
-
-                       if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
-                               AddressComboBox.Text := GetActiveContent.URL;
+                               MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
+                               TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
+                               SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
 
-                       if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
-                               (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
-                       then
-                       else
-                               GikoDM.SetFocusForBrowserAction.Execute;
+                               if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
+                                       AddressComboBox.Text := GetActiveContent.URL;
 
+                               if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
+                                       (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
+                               then
+                               else
+                                       GikoDM.SetFocusForBrowserAction.Execute;
+                       end;
                end;
-
+       finally
+               BrowserTab.Tabs.EndUpdate;
        end;
-
 end;
 
 
@@ -4026,54 +3973,51 @@ end;
 
 procedure TGikoForm.SetBrowserTabState;
 var
-//     i: Integer;
        CoolBand: TCoolBand;
 begin
        BrowserBottomPanel.AutoSize := False;
        if GikoSys.Setting.BrowserTabVisible then begin
-               if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
-                       BrowserTab.Style := tsTabs;
-                       if GikoSys.Setting.BrowserTabPosition = gtpTop then
-                               BrowserTab.TabPosition := tpTop
-                       else
-                               BrowserTab.TabPosition := tpBottom;
-               end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
-                       BrowserTab.TabPosition := tpTop;
-                       BrowserTab.Style := tsButtons;
-               end else begin
-                       BrowserTab.TabPosition := tpTop;
-                       BrowserTab.Style := tsFlatButtons
-               end;
-
-               if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
-                       BrowserTab.Parent := BrowserTabToolBar;
-                       BrowserBottomPanel.Hide;
-                       CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
-                       if CoolBand <> nil then
-                               CoolBand.Visible := True;
-//                     BrowserTab.Parent := BrowserTopPanel;
-//                     BrowserTab.Parent := BrowserCoolBar;
-//                     BrowserTab.Top := 26;
-//                     BrowserTopPanel.Height := 44;
+               BrowserTab.Hide;
+               BrowserTab.Tabs.BeginUpdate;
+               try
+                       if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
+                               BrowserTab.Style := tsTabs;
+                               if GikoSys.Setting.BrowserTabPosition = gtpTop then
+                                       BrowserTab.TabPosition := tpTop
+                               else
+                                       BrowserTab.TabPosition := tpBottom;
+                       end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
+                               BrowserTab.TabPosition := tpTop;
+                               BrowserTab.Style := tsButtons;
+                       end else begin
+                               BrowserTab.TabPosition := tpTop;
+                               BrowserTab.Style := tsFlatButtons
+                       end;
 
-               end else begin
-                       BrowserTab.Parent := BrowserBottomPanel;
-                       BrowserTab.Top := 0;
-                       BrowserTab.Left := 0;
-                       BrowserBottomPanel.Show;
-                       CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
-                       if CoolBand <> nil then
-                               CoolBand.Visible := False;
-//                     BrowserTopPanel.Height := 26;
-               end;
-               BrowserTab.Show;
+                       if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
+                               BrowserTab.Parent := BrowserTabToolBar;
+                               BrowserBottomPanel.Hide;
+                               CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
+                               if CoolBand <> nil then
+                                       CoolBand.Visible := True;
+                       end else begin
+                               BrowserTab.Parent := BrowserBottomPanel;
+                               BrowserTab.Top := 0;
+                               BrowserTab.Left := 0;
+                               BrowserBottomPanel.Show;
+                               CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
+                               if CoolBand <> nil then
+                                       CoolBand.Visible := False;
+                       end;
+               finally
+                       BrowserTab.Tabs.EndUpdate;
+                       BrowserTab.Show;
+               end;
        end else begin
                CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
                if CoolBand <> nil then
                        CoolBand.Visible := False;
                BrowserBottomPanel.Visible := False;
-//             BrowserTab.Visible := False;
-//             BrowserTopPanel.Height := 26;
                GikoDM.AllTabCloseAction.Execute;
        end;
 end;
@@ -4092,6 +4036,7 @@ procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
 var
        idx: Integer;
 begin
+    FDragWFirst := False;
        idx := BrowserTab.IndexOfTabAt(X, Y);
        if idx <> -1 then
                BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
@@ -4106,14 +4051,11 @@ begin
 
        TabIdx := BrowserTab.IndexOfTabAt(x, y);
 
-       if ( ssLeft in Shift ) and ( BrowserTab.Style = tsTabs ) then begin
-               if FDragWFirst = false then begin
-                       FDragWFirst := true;
-               end else begin
+       if ( ssLeft in Shift ) then begin
+        if (FDragWFirst) then begin
                        BrowserTab.EndDrag(false);
                        BrowserTab.BeginDrag(false, DandD_THRESHOLD);
-                       FDragWFirst := false;
-               end;
+        end;
        end else begin
                BrowserTab.EndDrag(false);
                FDragWFirst := false;
@@ -4143,7 +4085,6 @@ var
        doc                                     : Variant;
        threadItem      : TThreadItem;
 begin
-//     AddMessageList('DocumentComplete', nil, gmiWhat);
        if TObject(Sender) is TWebBrowser then begin
                BrowserRecord := nil;
                if TWebBrowser(Sender) <> Browser then begin
@@ -4169,31 +4110,39 @@ begin
                                FEvent := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
                                FEvent.OnContextMenu := OnDocumentContextMenu;
                                FEvent.OnClick := WebBrowserClick;  //\92Ç\89Á\82µ\82½OnClick\83C\83x\83\93\83g
+                       end else begin
+                               if FEvent <> nil then begin
+                                       FEvent.Free;
+                                       FEvent := nil;
+                               end;
                        end;
-                       
+
                end;
 
                if (BrowserRecord <> nil) and
                         Assigned( BrowserRecord.Thread ) then begin
                        threadItem := BrowserRecord.Thread;
 
-                       if (BrowserRecord <> nil) and (Length( BrowserRecord.Movement ) > 0) then begin
+                       if (threadItem.JumpAddress > 0) then begin
                                if threadItem.UnRead then begin
                                        threadItem.UnRead := False;
-                                       threadItem.ParentBoard.UnRead := ThreadItem.ParentBoard.UnRead - 1;
-                                       if threadItem.ParentBoard.UnRead < 0 then threadItem.ParentBoard.UnRead := 0;
                                        TreeView.Refresh;
-                                       ListView.Refresh;
+                                       RefreshListView(threadItem);
+                               end;
+                               // \83X\83N\83\8d\81[\83\8b\90æ\82ª\8eæ\93¾\8aO\82Ì\83\8c\83X\82Ì\8e\9e\82Í\8fI\92[\82É\88Ú\93®
+                               //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
+                               if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
+                                       BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
+                                       threadItem.JumpAddress := 0;
+                               end else begin
+                                       BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
                                end;
-                               BrowserRecord.Move(BrowserRecord.Movement);
-                               BrowserRecord.Movement := '';
+
                        end else if threadItem.UnRead then begin
                                threadItem.UnRead := False;
-                               threadItem.ParentBoard.UnRead := ThreadItem.ParentBoard.UnRead - 1;
-                               if threadItem.ParentBoard.UnRead < 0 then threadItem.ParentBoard.UnRead := 0;
                                TreeView.Refresh;
                                BrowserRecord.Move('new');
-                               ListView.Refresh;
+                               RefreshListView(threadItem);
                        end else if threadItem.ScrollTop <> 0 then begin
                                try
                                        doc := Idispatch( OleVariant( BrowserRecord.Browser.ControlInterface ).Document ) as IHTMLDocument2;
@@ -4205,6 +4154,7 @@ begin
                        end;
                end;
        end;
+       LockWindowUpdate(0);
 end;
 
 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
@@ -4340,50 +4290,58 @@ procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
 var
        NewMenu: TMenuItem;
 begin
-       FavoriteMenu.Clear;
+       if FavoriteDM.Modified then begin
+               FavoriteMenu.Clear;
 
-       //\82¨\8bC\82É\93ü\82è\82Ì\92Ç\89Á
-       NewMenu := TMenuItem.Create(MainMenu);
-       NewMenu.Action := GikoDM.FavoriteAddAction;
-       FavoriteMenu.Add(NewMenu);
-       //\82¨\8bC\82É\93ü\82è\82Ì\90®\97\9d
-       NewMenu := TMenuItem.Create(FavoriteMenu);
-       NewMenu.Action := GikoDM.FavoriteArrangeAction;
-       FavoriteMenu.Add(NewMenu);
-       //\83Z\83p\83\8c\81[\83^
-       NewMenu := TMenuItem.Create(FavoriteMenu);
-       NewMenu.Caption := '-';
-       FavoriteMenu.Add(NewMenu);
-
-       CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
+               //\82¨\8bC\82É\93ü\82è\82Ì\92Ç\89Á
+               NewMenu := TMenuItem.Create(MainMenu);
+               NewMenu.Action := GikoDM.FavoriteAddAction;
+               FavoriteMenu.Add(NewMenu);
+               //\82¨\8bC\82É\93ü\82è\82Ì\90®\97\9d
+               NewMenu := TMenuItem.Create(FavoriteMenu);
+               NewMenu.Action := GikoDM.FavoriteArrangeAction;
+               FavoriteMenu.Add(NewMenu);
+               //\83Z\83p\83\8c\81[\83^
+               FavoriteMenu.InsertNewLineAfter(NewMenu);
+               CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
+               FavoriteDM.Modified := false;
+       end;
 end;
 
 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
 var
        i: Integer;
-       NewMenu: TMenuItem;
+       NewMenu: array of TMenuItem;
 begin
-       for i := 0 to Node.Count - 1 do begin
-               NewMenu := TFavoriteMenuItem.Create(Self);
-               NewMenu.AutoHotkeys := maAutomatic;
-               NewMenu.Caption := CustomStringReplace(Node.Item[i].Text, '&', '&&');
-               TFavoriteMenuItem(NewMenu).Data := Node.Item[i].Data;
-               MenuItem.Add(NewMenu);
+       SetLength(NewMenu, Node.Count);
+       Node := Node.getFirstChild;
+       i := 0;
+       while ( Node <> nil ) do begin
+               NewMenu[i] := TFavoriteMenuItem.Create(nil);
+               NewMenu[i].AutoHotkeys := maAutomatic;
+               NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
+               TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
 
-               if TObject(Node.Item[i].Data) is TFavoriteFolder then begin
-                       NewMenu.ImageIndex := TOOL_ICON_FAV_FOLDER;
-                       CreateFavMenu(Node.Item[i], NewMenu);
-               end else if TObject(Node.Item[i].Data) is TFavoriteBoardItem then begin
-                       NewMenu.ImageIndex := TOOL_ICON_FAV_BOARD;
-                       NewMenu.OnClick := FavoriteClick;
-               end else if TObject(Node.Item[i].Data) is TFavoriteThreadItem then begin
-                       NewMenu.ImageIndex := TOOL_ICON_FAV_THREAD;
-                       NewMenu.OnClick := FavoriteClick;
+               if TObject(Node.Data) is TFavoriteFolder then begin
+                       NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
+                       CreateFavMenu(Node, NewMenu[i]);
+               end else if TObject(Node.Data) is TFavoriteBoardItem then begin
+                       NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
+                       NewMenu[i].OnClick := FavoriteClick;
+               end else if TObject(Node.Data) is TFavoriteThreadItem then begin
+                       NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
+                       NewMenu[i].OnClick := FavoriteClick;
                end;
+        Inc(i);
+               Node := Node.getNextSibling;
        end;
+       MenuItem.Add(NewMenu);
 end;
 
 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
+const
+       MsgAdd : String = '\8aù\82É\82¨\8bC\82É\93ü\82è\82É\93o\98^\82³\82ê\82Ä\82¢\82Ü\82·\81B\82»\82ê\82Å\82à\92Ç\89Á\82µ\82Ü\82·\82©\81H';
+       TitleAdd: String =  '\82¨\8bC\82É\93ü\82è\82Ì\92Ç\89Á';
 var
        Dlg                     : TFavoriteAddDialog;
        ItemURL : string;
@@ -4403,7 +4361,7 @@ begin
                        Data := Node.Data;
                        if TObject( Data ) is TFavoriteBoardItem then begin
                                if ItemURL = TFavoriteBoardItem( Data ).URL then begin
-                                       if Application.MessageBox( '\8aù\82É\82¨\8bC\82É\93ü\82è\82É\93o\98^\82³\82ê\82Ä\82¢\82Ü\82·\81B\82»\82ê\82Å\82à\92Ç\89Á\82µ\82Ü\82·\82©\81H', '\82¨\8bC\82É\93ü\82è\82Ì\92Ç\89Á', MB_YESNO ) = IDNO then
+                                       if Application.MessageBox(PChar(MsgAdd) , PChar(TitleAdd), MB_YESNO ) = IDNO then
                                                Exit;
                                        Break;
                                end;
@@ -4423,7 +4381,7 @@ begin
                        Data := Node.Data;
                        if TObject( Data ) is TFavoriteThreadItem then begin
                                if ItemURL = TFavoriteThreadItem( Data ).URL then begin
-                                       if Application.MessageBox( '\8aù\82É\82¨\8bC\82É\93ü\82è\82É\93o\98^\82³\82ê\82Ä\82¢\82Ü\82·\81B\82»\82ê\82Å\82à\92Ç\89Á\82µ\82Ü\82·\82©\81H', '\82¨\8bC\82É\93ü\82è\82Ì\92Ç\89Á', MB_YESNO ) = IDNO then
+                                       if Application.MessageBox( PChar(MsgAdd), PChar(TitleAdd), MB_YESNO ) = IDNO then
                                                Exit;
                                        Break;
                                end;
@@ -4444,9 +4402,7 @@ end;
 
 procedure TGikoForm.FavoriteClick(Sender: TObject);
 begin
-
        FavoriteClick( Sender, True );
-
 end;
 
 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
@@ -4510,6 +4466,47 @@ begin
        TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
 
 end;
+//! \8ew\92è\82³\82ê\82½\83X\83\8c\83b\83h\82ð\8aJ\82­(\83\8d\83O\82ª\96³\82¢\82Æ\82« or \8ew\92èJUMP\82Ü\82Å\91«\82è\82È\82¢\82Æ\82«\82ÍDL\82·\82é)
+procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
+var
+       stRes, edRes : Int64;
+       browserRec : TBrowserRecord;
+       threadNumber : String;
+       doc : Variant;
+begin
+       stRes := 0;
+       edRes := 0;
+       Thread.JumpAddress := 0;
+       // \83^\83u\82ð\90\90¬
+       browserRec := InsertBrowserTab(Thread);
+       if (browserRec <> nil) then begin
+               // JUMP\82·\82×\82«\83\8c\83X\94Ô\8d\86\82ª\82 \82é\82©\83`\83F\83b\83N\82·\82é
+               threadNumber := ChangeFileExt(Thread.FileName, '');
+               GikoSys.GetPopupResNumber( URL, stRes, edRes );
+               // \83X\83\8c\82Ì\94Ô\8d\86\82ð\83\8c\83X\94Ô\82Æ\8cë\82Á\82Ä\94F\8e¯\82µ\82Ä\82¢\82é\82Ì\82ð\83N\83\8a\83A
+               if (StrToInt64(threadNumber) = stRes) then begin
+                       if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
+                               and (Pos('&st=' + threadNumber , URL) = 0) then begin
+                               stRes := 0;
+                       end;
+               end;
+               if ( stRes > 0 ) then begin
+                       Thread.JumpAddress := stRes;
+               end;
+               // \83\8d\83O\82ð\8e\9d\82Á\82Ä\82¢\82È\82¢\82© JUMP\82·\82×\82«\83\8c\83X\94Ô\8d\86\82Ü\82Å\8eæ\93¾\82µ\82Ä\82¢\82È\82¢\82Æ\82«\82ÍDL\82·\82é
+               if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
+                       DownloadContent(Thread);
+               end else if (not browserRec.Repaint) and (stRes > 0) then begin
+                       browserRec.Move(IntToStr(stRes));
+                       Thread.JumpAddress := 0;
+                       try
+                               doc := Idispatch( OleVariant( browserRec.Browser.ControlInterface ).Document ) as IHTMLDocument2;
+                               Thread.ScrollTop := doc.Body.ScrollTop;
+                       except
+                       end;
+               end;
+       end;
+end;
 
 procedure TGikoForm.MoveToURL(const inURL: string);
 var
@@ -4522,13 +4519,8 @@ var
        i, bi                                   : Integer;
        boardURL                        : string;
        tmpThread                       : TThreadItem;
-//     category                        : TCategory;
-//     categoryNode    : TTreeNode;
-//     boardNode                       : TTreeNode;
        shiftDown                       : Boolean;
        ctrlDown                        : Boolean;
-       stRes, edRes    : Int64;
-       browserRec              : TBrowserRecord;
 begin
 
        GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
@@ -4548,11 +4540,8 @@ begin
        //===== \83v\83\89\83O\83C\83\93
        try
                //\8dì\8bÆ\92\86//
-               //bi := High( BoardPlugIns );
                bi := Length(BoardGroups) - 1;
-               //for i := Low( BoardPlugIns ) to bi do begin
                for i := 1 to bi do begin
-                       //if Assigned( Pointer( BoardPlugIns[ i ].Module ) ) then begin
                        if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
                                case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
                                atThread:
@@ -4587,26 +4576,11 @@ begin
                                                                        if TBoard(ActiveList) = Board then
                                                                                ListView.Items.Count := ListView.Items.Count + 1;
                                                                end;
-                                                               GikoSys.GetPopupResNumber( inURL, stRes, edRes );
-                                                               browserRec := InsertBrowserTab( ThreadItem );
-                                                               if (browserRec <> nil) and (stRes > 0) then
-                                                                       browserRec.Movement := IntToStr( stRes );
-                                                               DownloadContent( ThreadItem );
-                                                               Exit;
                                                        end else begin
                                                                tmpThread.Free;
-                                                               GikoSys.GetPopupResNumber( inURL, stRes, edRes );
-                                                               browserRec := InsertBrowserTab( ThreadItem );
-                                                               if ThreadItem.IsLogFile then begin
-                                                                       if (browserRec <> nil) and (stRes > 0) then
-                                                                               browserRec.Move(IntToStr( stRes ));
-                                                               end else begin
-                                                                       if (browserRec <> nil) and (stRes > 0) then
-                                                                               browserRec.Movement := IntToStr( stRes );
-                                                                       DownloadContent( ThreadItem );
-                                                               end;
-                                                               Exit;
                                                        end;
+                                                       OpenThreadItem(ThreadItem, inURL);
+                                                       Exit;
                                                end;
                                        end;
 
@@ -4633,15 +4607,6 @@ begin
        if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
                boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
                Board := BBSsFindBoardFromURL( boardURL );
-               //if Board = nil then
-               //      Board := BBSsFindBoardFromBBSID( BBSID );
-               { \82±\82Ì\95\94\95ª\82àBBS\82\93FindBoardFromURL\82É\8e\9d\82½\82¹\82½\81@20050523
-               if Board = nil then begin
-                       // \81¦\8dì\82Á\82Ä\82à\92Ç\89Á\82·\82é\82Æ\82±\82ë\82ª\96³\82¢\82Ì\82Å\8c\83\82µ\82­\95Û\97¯
-                       //\81@\89ß\8b\8e\83\8d\83O\91q\8cÉ\82©\82ç\81A\83_\83E\83\\82µ\82½\83X\83\8c\82ª\94­\8c©\82Å\82«\82È\82¢\82Ì\82Å\82±\82±\82Å\92T\82·\82æ\82¤\82É\82·\82é (2004/01/22)
-                       Board := BBSs[ 0 ].FindBBSID( BBSID );
-               end;
-               }
                if Board = nil then begin
                         // \93ü\82é\82×\82«\94Â\82ª\8c©\82Â\82©\82ç\82È\82©\82Á\82½\82Ì\82Å\81A\95\81\92Ê\82Ì\83u\83\89\83E\83U\82Å\8aJ\82­
                         GikoSys.OpenBrowser(inURL, gbtUserApp);
@@ -4666,51 +4631,26 @@ begin
                if ThreadItem = nil then begin
                        ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
                end;
-               if ThreadItem = nil then begin
-                       //shift -> \90Ý\92è\83u\83\89\83E\83U\81i\96³\82¯\82ê\82ÎIE\81j
-                       //ctrl  -> IE
-                       {shiftDown      := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
-                       ctrlDown        := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
-                       if shiftDown then
-                               GikoSys.OpenBrowser(URL1, gbtUserApp)
-                       else if ctrlDown then
-                               GikoSys.OpenBrowser(URL1, gbtIE)
-                       else begin
-                       }
-                       ThreadItem := TThreadItem.Create( nil, Board, URL );
-                       ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
-                       if AnsiPos(Host, Board.URL) = 0 then
-                               ThreadItem.DownloadHost := Host
-                       else
-                               ThreadItem.DownloadHost := '';
-                       Board.Insert(0, ThreadItem);
-                       if ActiveList is TBoard then begin
-                               if TBoard(ActiveList) = Board then
-                                       ListView.Items.Count := ListView.Items.Count + 1;
+               try
+                       // \83X\83\8c\83b\83h\83A\83C\83e\83\80\82ª\82È\82¢\82È\82ç\90\90¬\82·\82é\81B
+                       if ThreadItem = nil then begin
+                               ThreadItem := TThreadItem.Create( nil, Board, URL );
+                               ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
+                               Board.Insert(0, ThreadItem);
+                               if ActiveList is TBoard then begin
+                                       if TBoard(ActiveList) = Board then
+                                               ListView.Items.Count := ListView.Items.Count + 1;
+                               end;
                        end;
-                       GikoSys.GetPopupResNumber( inURL, stRes, edRes );
-                       browserRec := InsertBrowserTab(ThreadItem);
-                       if (browserRec <> nil) and (stRes > 0) then
-                               browserRec.Movement := IntToStr( stRes );
-                       DownloadContent(ThreadItem);
-                       {end;}
-               end else begin
-                       if ThreadItem.IsLogFile then begin
-                               GikoSys.GetPopupResNumber( inURL, stRes, edRes );
-                               browserRec := InsertBrowserTab(ThreadItem);
-                               if (browserRec <> nil) and (stRes > 0) then
-                                       browserRec.Movement := IntToStr( stRes );
-                       end else begin
+                       // \83\8d\83O\82È\82µ\83X\83\8c\83b\83h\82Ì\82Æ\82«\82Í\81A\83z\83X\83g\96¼\82Ì\83`\83F\83b\83N\82ð\82·\82é
+                       if (not ThreadItem.IsLogFile) then begin
                                if AnsiPos(Host, Board.URL) = 0 then
                                        ThreadItem.DownloadHost := Host
                                else
                                        ThreadItem.DownloadHost := '';
-                               GikoSys.GetPopupResNumber( inURL, stRes, edRes );
-                               browserRec := InsertBrowserTab(ThreadItem);
-                               if (browserRec <> nil) and (stRes > 0) then
-                                       browserRec.Movement := IntToStr( stRes );
-                               DownloadContent(ThreadItem);
                        end;
+                       OpenThreadItem(ThreadItem, inURL);
+               except
                end;
        end else begin
                Board := BBSsFindBoardFromURL( inURL );
@@ -4720,7 +4660,7 @@ begin
                        if FActiveBBS <> Board.ParentCategory.ParenTBBS then
                                ShowBBSTree( Board.ParentCategory.ParenTBBS );
                        SelectTreeNode( Board, True );
-       end;
+               end;
        end;
 end;
 
@@ -4739,7 +4679,7 @@ end;
 
 procedure TGikoForm.BrowserEnter(Sender: TObject);
 begin
-       Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
+    Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
 end;
 
 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
@@ -4771,14 +4711,21 @@ begin
                        if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
                                Exit;
                WM_SYSCOMMAND:
-                       if Message.WParam = SC_MINIMIZE then
+                       if Message.WParam = SC_MINIMIZE then begin
                                OnMinimize;
+                PostMessage(Handle, USER_MINIMIZED, 0, 0);
+            end;
                USER_TREECLICK:
                        TreeClick( TreeView.Selected );
                USER_RESIZED:
                        OnResized;
                USER_MINIMIZED:
-                       OnMinimized;
+            begin
+                if (GikoSys.Setting.StoredTaskTray) then begin
+                    StoredTaskTray;
+                end;
+                OnMinimized;
+            end;
                USER_SETLINKBAR:
                        SetLinkBar;
                USER_DOCUMENTCOMPLETE:
@@ -4842,144 +4789,66 @@ procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
 var
        p: TPoint;
        ARect: TRect;
-       sl: TStringList;
-       html: string;
-       HtmlFileName: string;
-
-       NavURL: OleVariant;
-       Flags: OleVariant;
-       TargetFrameName: OleVariant;
-       PostData: OleVariant;
-       Headers: OleVariant;
-       WindowHeight: Integer;
-       WindowWidth: Integer;
-
-//     Style: Longint;
-       Referer: string;
-       Protocol, Host, Path, Document, Port, Bookmark: string;
 begin
        PreviewTimer.Enabled := False;
 
        GetCursorpos(p);
 
-       case GikoSys.Setting.PreviewSize of
-               gpsXSmall: begin
-                       WindowWidth := 128;
-                       WindowHeight := 96;
-               end;
-               gpsSmall: begin
-                       WindowWidth := 256;
-                       WindowHeight := 192;
-               end;
-               gpsLarge: begin
-                       WindowWidth := 512;
-                       WindowHeight := 384;
-               end;
-               gpsXLarge: begin
-                       WindowWidth := 640;
-                       WindowHeight := 480;
-               end;
-               else begin      //gpsMedium
-                       WindowWidth := 384;
-                       WindowHeight := 288;
-               end;
-       end;
-
-       ARect := Rect(0, 0, WindowWidth, WindowHeight);
-
-       case GikoSys.Setting.PopupPosition of
-               gppRightTop:            OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - (ARect.Bottom - ARect.Top) -     15);
-               gppRight:                       OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
-               gppRightBottom: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y + 15);
-               gppTop:                                 OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - (ARect.Bottom - ARect.Top) -  15);
-               gppCenter:                      OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - ((ARect.Bottom - ARect.Top) div 2));
-               gppBottom:                      OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y + 15);
-               gppLeftTop:                     OffsetRect(ARect, p.x + 15, p.y - (ARect.Bottom - ARect.Top) -  15);
-               gppLeft:                                OffsetRect(ARect, p.x + 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
-               gppLeftBottom:  OffsetRect(ARect, p.x + 15, p.y + 15);          //\83M\83R\83i\83r\83X\83\8c \83p\81[\83g\82P\82Ì453\8e\81\82É\8a´\8eÓ
-       end;
-
-       html := '<html><head>'#13#10
-                               + '<SCRIPT>'#13#10
-                               + 'function init() {'#13#10
-                               + '     if ((document.body.clientHeight >= Image1.height) && (document.body.clientWidth >= Image1.width)) {'#13#10
-                               + '     } else {'#13#10
-                               + '             var dh, ih;'#13#10
-                               + '             dh = document.body.clientWidth / document.body.clientHeight;'#13#10
-                               + '             ih = Image1.width / Image1.height;'#13#10
-                               + '             if (document.body.clientWidth < document.body.clientHeight) {'#13#10
-                               + '                     if (ih > dh)'#13#10
-                               + '                             Image1.width = document.body.clientWidth;'#13#10
-                               + '                     else'#13#10
-                               + '                             Image1.height = document.body.clientHeight;'#13#10
-                               + '             } else {'#13#10
-                               + '                     if (ih < dh)'#13#10
-                               + '                             Image1.height = document.body.clientHeight;'#13#10
-                               + '                     else'#13#10
-                               + '                             Image1.width = document.body.clientWidth;'#13#10
-                               + '             }'#13#10
-                               + '     }'#13#10
-                               + '     Message.style.display = "none";'#13#10
-                               + '}'#13#10
-                               + '</SCRIPT>'#13#10
-                               + '</head>'#13#10
-                               + '<body topmargin="0" leftmargin="0" style="border-width: 1px; overflow:hidden; border-style: solid;" onLoad="init()">'#13#10
-                               + '<div align="center" id="Message">\83v\83\8c\83r\83\85\81[\8dì\90¬\92\86</div>'#13#10
-                               + '<div align="center"><img name="Image1" border="0" src="%ImageURL%"></div>'#13#10
-                               + '</body></html>';
-       sl := TStringList.Create;
-       try
-               try
-                       HtmlFileName := GikoSys.GetAppDir + HTML_FILE_NAME;
-                       sl.Text := AnsiReplaceStr(html, '%ImageURL%', FPreviewURL);
-                       sl.SaveToFile(HtmlFileName);
-               finally
-                       sl.Free;
-               end;
-       except
-       end;
+    ARect := FPreviewBrowser.GetWindowRect(p);
 
-       NavURL := HtmlFileName;
-       Flags := 0;
-       TargetFrameName := '';
-       PostData := '';
-
-       GikoSys.ParseURI(FPreviewURL, Protocol, Host, Path, Document, Port, Bookmark);
-       Referer := Protocol + '://' + Host;
-       if Port <> '' then
-               Referer := Referer + ':' + Port;
-       Referer := Referer + Path;
-       Headers := 'Referer: ' + Referer;
-       FPreviewBrowser.Navigate(NavURL, Flags, TargetFrameName, PostData, Headers);
-       if ARect.Top + WindowHeight > Screen.DesktopHeight then
-               ARect.Top := Screen.DesktopHeight - WindowHeight;
-       if ARect.Left + WindowWidth > Screen.DesktopWidth then
-               ARect.Left := Screen.DesktopWidth - WindowWidth;
-       if ARect.Left < Screen.DesktopLeft then ARect.Left := Screen.DesktopLeft;
-       if ARect.Bottom < Screen.DesktopTop then ARect.Bottom := Screen.DesktopTop;
-
-       SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST, ARect.Left, ARect.Top, WindowWidth, WindowHeight, SWP_NOACTIVATE or SWP_HIDEWINDOW);
-       ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
+    FPreviewBrowser.PreviewImage(FPreviewURL);
 
-//     Style := GetWindowLong(FPreviewBrowser.Handle, GWL_EXSTYLE);
-//     SetWindowLong(FPreviewBrowser.Handle, GWL_EXSTYLE, Style xor WS_EX_APPWINDOW);
+       if ARect.Bottom > Screen.DesktopHeight then begin
+        OffsetRect(ARect, 0, -(ARect.Bottom - Screen.DesktopHeight));
+    end;
+       if (ARect.Right > Screen.DesktopWidth) then begin
+        OffsetRect(ARect, -(ARect.Right - Screen.DesktopWidth), 0);
+    end;
+       if (ARect.Left < Screen.DesktopLeft) then begin
+        OffsetRect(ARect, +(Screen.DesktopLeft - ARect.Left), 0);
+    end;
+       if (ARect.Top < Screen.DesktopTop) then begin
+        OffsetRect(ARect, 0, (Screen.DesktopTop - ARect.Top));
+    end;
 
+       SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST,
+        ARect.Left, ARect.Top,
+        (ARect.Right - ARect.Left), (ARect.Bottom - ARect.Top),
+        SWP_NOACTIVATE or SWP_HIDEWINDOW);
+
+       ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
+       FPreviewBrowserRect := ARect;
 end;
 
 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
+var
+       Pos : TPoint;
 begin
        if PreviewTimer.Enabled then
                PreviewTimer.Enabled := False;
-       if (FHint <> nil) and (IsWindowVisible(FHint.Handle)) then begin
-               FHint.ReleaseHandle;
-               FHint.ClearAllRes;
+
+       if (FResPopupBrowser <> nil) and (IsWindowVisible(FResPopupBrowser.Handle)) then begin
+        FResPopupBrowser.Clear;
+       end;
+
+       if (FPreviewBrowser <> nil)
+               and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
+        //\82±\82±\82Å\8fÁ\82³\82ê\82é\82Ì\82ª\96â\91è
+        //\82½\82Ô\82ñ\82±\82ê\82Å\95\\8e¦\94Í\88Í\94»\92è\82Å\82«\82Ä\82¢\82é\82Í\82¸
+               Pos := Mouse.CursorPos;
+               Pos.X := Pos.X + Left;
+               Pos.Y := Pos.Y + Top;
+               if (FPreviewBrowserRect.Left > Pos.X) or
+                       (FPreviewBrowserRect.Right < Pos.X) or
+                       (FPreviewBrowserRect.Top > Pos.Y) or
+                       (FPreviewBrowserRect.Bottom < Pos.Y) then begin
+                       ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
+               end;
        end;
-       if (FPreviewBrowser <> nil) and (IsWindowVisible(FPreviewBrowser.Handle)) then
-               ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
+
        Message.Result := 1;
        inherited;
 end;
-
 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
 begin
        GikoDM.MsgBarCloseAction.Execute;
@@ -5001,14 +4870,14 @@ begin
                s := CustomStringReplace(Range.text, '\81@', ' ');//\91S\8ap\8bó\94\92\82ð\94¼\8ap\8bó\94\92\82É
                s := ZenToHan(Trim(s));
                if GikoSys.IsNumeric(s) then begin
-
-                       ThreadItem := GetActiveContent;
-                       if ThreadItem <> nil then begin
-                               Num := StrToInt(s);
-                               FHint.PopupType := gptThread;
-                               HTMLCreater.SetResPopupText(FHint, ThreadItem, Num, Num, False, False);
-                               if FHint.ResCount <> 0 then
-                                       ShowTextPopup;
+                       Num := StrToInt64(s);
+                       ThreadItem := GetActiveContent(true);
+                       if (ThreadItem <> nil) and (Num <= ThreadItem.Count)
+                and (Num > 0)then begin
+                CreateResPopupBrowser;
+                FResPopupBrowser.CreateNewBrowser.PopupType := gptThread;
+                               HTMLCreater.SetResPopupText(FResPopupBrowser.CreateNewBrowser, ThreadItem, Num, Num, False, False);
+                FResPopupBrowser.Popup;
                                Result := False;
                        end else
                                Result := True;
@@ -5018,46 +4887,6 @@ begin
        end;
 end;
 
-procedure TGikoForm.ShowTextPopup;
-var
-       p: TPoint;
-       ARect: TRect;
-begin
-//     if Trim(s) = '' then
-//             Exit;
-       try
-               FHint.Font.Name := GikoSys.Setting.HintFontName;
-               FHint.Font.Size := GikoSys.Setting.HintFontSize;
-               FHint.Font.Color := GikoSys.Setting.HintFontColor;
-               FHint.Color := GikoSys.Setting.HintBackColor;
-               FHint.HeaderBold := GikoSys.Setting.ResPopupHeaderBold;
-               GetCursorpos(p);
-               if FHint.PopupType = gptRaw then
-                       ARect := FHint.CalcHintRect(Screen.Width, FHint.Caption, nil)
-               else
-                       ARect := FHint.CalcHintRect(Screen.Width, '', nil);
-               case GikoSys.Setting.PopupPosition of
-                       gppRightTop:            OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - (ARect.Bottom - ARect.Top) -     15);
-                       gppRight:                       OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
-                       gppRightBottom: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y + 15);
-                       gppTop:                                 OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - (ARect.Bottom - ARect.Top) -  15);
-                       gppCenter:                      OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - ((ARect.Bottom - ARect.Top) div 2));
-                       gppBottom:                      OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y + 15);
-                       gppLeftTop:                     OffsetRect(ARect, p.x + 15, p.y - (ARect.Bottom - ARect.Top) -  15);
-                       gppLeft:                                OffsetRect(ARect, p.x + 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
-                       gppLeftBottom:  OffsetRect(ARect, p.x + 15, p.y + 15);          //\83M\83R\83i\83r\83X\83\8c \83p\81[\83g\82P\82Ì453\8e\81\82É\8a´\8eÓ
-               end;
-               //FHint.ActivateHint(ARect, s);
-               if FHint.PopupType = gptRaw then
-                       FHint.ActivateHint(ARect, FHint.Caption)
-               else
-                       FHint.ActivateHint(ARect, '');
-       except
-               FHint.ReleaseHandle;
-               FHint.ClearAllRes;
-       end;
-end;
-
 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
 const
        DEL_MSG = '\91S\97\9a\97ð\82ð\8dí\8f\9c\82µ\82Ü\82·\81B\82æ\82ë\82µ\82¢\82Å\82·\82©\81H';
@@ -5067,7 +4896,6 @@ begin
                if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
                        if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
                                Exit;
-               ClearHistory;
                FHistoryList.Clear;
                TreeView.Items.Clear;
        end;
@@ -5099,12 +4927,12 @@ begin
                                                CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
                                                LinkBarPopupMenu.Items.Add(MenuItem);
                                                ToolButton.MenuItem := MenuItem;
-                                               ToolButton.ImageIndex := TOOL_ICON_FAV_FOLDER;
+                                               ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
                                        end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
-                                               ToolButton.ImageIndex := TOOL_ICON_FAV_BOARD;
+                                               ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
                                                ToolButton.OnClick := FavoriteClick;
                                        end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
-                                               ToolButton.ImageIndex := TOOL_ICON_FAV_THREAD;
+                                               ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
                                                ToolButton.OnClick := FavoriteClick;
                                        end;
                                        ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
@@ -5652,16 +5480,13 @@ function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TTool
 var
        i : Integer;
 begin
-
+       Result := nil;
        for i := bar.ButtonCount - 1 downto 0 do begin
                if bar.Buttons[ i ].Action = action then begin
                        Result := bar.Buttons[ i ];
-                       Exit;
+                       Break;
                end;
        end;
-
-       Result := nil;
-
 end;
 
 procedure TGikoForm.SetToolBarPopup;
@@ -5732,27 +5557,16 @@ end;
 
 procedure TGikoForm.SetSelectWord( const text : string );
 begin
+       // \83X\83\8c\88ê\97\97\82Ì\94Í\88Í\8ew\92è\82ð\89ð\8f\9c
+       ClearThreadRengeAction;
 
        if Length( text ) = 0 then
        begin
                GikoDM.AllItemAction.Checked := True;
-               GikoDM.LogItemAction.Checked := False;
-               GikoDM.NewItemAction.Checked := False;
-       end else begin
-               // \83`\83\89\82Â\82­\82Æ\8c\99\82¾\82©\82ç\81A\88ê\89\9e\89\9f\82µ\82Ä\82 \82é\82Æ\82«\82¾\82¯\8f\88\97\9d\82·\82é
-               if GikoDM.AllItemAction.Checked then
-                       GikoDM.AllItemAction.Checked := False;
-               if GikoDM.LogItemAction.Checked then
-                       GikoDM.LogItemAction.Checked := False;
-               if GikoDM.NewItemAction.Checked then
-                       GikoDM.NewItemaction.Checked := False;
-       end;
-
-       if Length( text ) = 0 then
                SetListViewType( gvtAll )
-       else
+       end else begin
                SetListViewType( gvtUser, text, false );
-
+       end;
 end;
 
 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
@@ -5788,7 +5602,9 @@ begin
                        end else
                                Str := SelectComboBox.Text + Str;
 
-                       SetSelectWord(Str);
+                       if (Length(Str) > 0) then begin
+                               SetSelectWord(Str);
+                       end;
                end;
        end else if Length( SelectComboBox.Text ) = 0 then
        begin
@@ -5797,16 +5613,27 @@ begin
                 * \81i\82±\82±\82Å\82Í\89½\82à\82µ\82È\82¢\81j
                 *}
        end else begin
-               // \83`\83\89\82Â\82­\82Æ\8c\99\82¾\82©\82ç\81A\88ê\89\9e\89\9f\82µ\82Ä\82 \82é\82Æ\82«\82¾\82¯\8f\88\97\9d\82·\82é
-               if GikoDM.AllItemAction.Checked then
-                       GikoDM.AllItemAction.Checked := False;
-               if GikoDM.LogItemAction.Checked then
-                       GikoDM.LogItemAction.Checked := False;
-               if GikoDM.NewItemAction.Checked then
-                       GikoDM.NewItemaction.Checked := False;
+        // \83X\83\8c\88ê\97\97\82Ì\94Í\88Í\8ew\92è\82ð\89ð\8f\9c
+               ClearThreadRengeAction;
        end;
 
 end;
+//! \83X\83\8c\83b\83h\88ê\97\97\82Ì\95\\8e¦\94Í\88Í\90Ý\92è\83`\83F\83b\83N\83N\83\8a\83A
+procedure TGikoForm.ClearThreadRengeAction;
+begin
+       // \83`\83\89\82Â\82­\82Æ\8c\99\82¾\82©\82ç\81A\88ê\89\9e\89\9f\82µ\82Ä\82 \82é\82Æ\82«\82¾\82¯\8f\88\97\9d\82·\82é
+       if GikoDM.AllItemAction.Checked then
+               GikoDM.AllItemAction.Checked := False;
+       if GikoDM.LogItemAction.Checked then
+               GikoDM.LogItemAction.Checked := False;
+       if GikoDM.NewItemAction.Checked then
+               GikoDM.NewItemaction.Checked := False;
+       if GikoDM.LiveItemAction.Checked then
+               GikoDM.LiveItemAction.Checked := False;
+       if GikoDM.ArchiveItemAction.Checked then
+               GikoDM.ArchiveItemAction.Checked := False;
+
+end;
 
 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
 begin
@@ -5815,8 +5642,8 @@ begin
 
        if Length( SelectComboBox.Text ) = 0 then
        begin
-               SelectComboBox.Text := SELECTCOMBOBOX_NAME;
-               SelectComboBox.Color := SELECTCOMBOBOX_COLOR;
+               SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
+               SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
        end;
 
 end;
@@ -5851,7 +5678,6 @@ begin
 end;
 
 
-// \91S\82Ä\82Ì\83\8c\83X\82ð\95\\8e¦
 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
        Shift: TShiftState; X, Y: Integer);
 var
@@ -5911,14 +5737,15 @@ end;
 procedure TGikoForm.StatusBarResize(Sender: TObject);
 begin
        StatusBar.Panels[1].Width := StatusBar.Width -
-                                                                                                                        StatusBar.Panels[0].Width -
-                                                                                                                        StatusBar.Panels[2].Width;
+                                       StatusBar.Panels[0].Width -
+                                       StatusBar.Panels[THREADSIZE_PANEL].Width -
+                                       StatusBar.Panels[NGWORDNAME_PANEL].Width;
 end;
 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
 begin
 
        if (Length( SelectComboBox.Text ) = 0) or
-               (SelectComboBox.Text = SELECTCOMBOBOX_NAME) then
+               (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
        begin
                SelectComboBox.Text := '';
                SelectComboBox.Color := clWindow;
@@ -5926,7 +5753,6 @@ begin
 
 end;
 
-//\94Â\96¼\8c\9f\8dõ
 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
 begin
 
@@ -6051,6 +5877,8 @@ begin
                        FDropSpaceNode := nil;
                end;
        end;
+       //\8dX\90V\82µ\82½\82±\82Æ\82ð\8b³\82¦\82é
+       FavoriteDM.Modified := true;
 
        SetLinkBar;
 
@@ -6059,6 +5887,8 @@ end;
 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
        Node: TTreeNode; var S: String);
 begin
+       //\8dX\90V\82µ\82½\82±\82Æ\82ð\8b³\82¦\82é
+       FavoriteDM.Modified := true;
 
        FavoriteTreeView.ReadOnly := True;
        SetLinkBar;
@@ -6086,7 +5916,10 @@ begin
                        FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
                        end;
                VK_SPACE:
-                       FavoriteTreeViewDblClick( Sender );
+                       begin
+                       FClickNode := FavoriteTreeView.Selected;
+                       GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
+                       end;
                end;
        end else begin
                //\95Ò\8fW\92\86\82ÉESC\82ð\89\9f\82µ\82½\82ç\81A\95Ò\8fW\82ð\8fI\97¹\82µ\82Ä\81A\8c³\82Ì\95\8e\9a\97ñ\82É\96ß\82·
@@ -6138,26 +5971,29 @@ begin
                FavoriteTreeNameURLCopyPopupMenu.Visible := False;
                FavoriteTreeReloadPopupMenu.Visible := False;
                FavoriteTreeLogDeletePopupMenu.Visible := False;
+               FavoriteTreeItemNameCopyPopupMenu.Visible := False;
        end else if FClickNode.IsFirstNode then begin
                FavoriteTreeBrowseFolderPopupMenu.Visible := True;
                FavoriteTreeDeletePopupMenu.Visible := False;
                FavoriteTreeRenamePopupMenu.Visible := False;
                FavoriteTreeNewFolderPopupMenu.Visible := True;
                FavoriteTreeURLCopyPopupMenu.Visible := False;
-               FavoriteTreeNameCopyPopupMenu.Visible := True;
+               FavoriteTreeNameCopyPopupMenu.Visible := False;
                FavoriteTreeNameURLCopyPopupMenu.Visible := False;
                FavoriteTreeReloadPopupMenu.Visible := False;
                FavoriteTreeLogDeletePopupMenu.Visible := False;
+               FavoriteTreeItemNameCopyPopupMenu.Visible := True;
        end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
                FavoriteTreeBrowseFolderPopupMenu.Visible := True;
                FavoriteTreeDeletePopupMenu.Visible := True;
                FavoriteTreeRenamePopupMenu.Visible := False;
                FavoriteTreeNewFolderPopupMenu.Visible := True;
                FavoriteTreeURLCopyPopupMenu.Visible := False;
-               FavoriteTreeNameCopyPopupMenu.Visible := True;
+               FavoriteTreeNameCopyPopupMenu.Visible := False;
                FavoriteTreeNameURLCopyPopupMenu.Visible := False;
                FavoriteTreeReloadPopupMenu.Visible := False;
                FavoriteTreeLogDeletePopupMenu.Visible := False;
+               FavoriteTreeItemNameCopyPopupMenu.Visible := True;
        end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
                FavoriteTreeBrowseFolderPopupMenu.Visible := True;
                FavoriteTreeDeletePopupMenu.Visible := True;
@@ -6168,6 +6004,7 @@ begin
                FavoriteTreeNameURLCopyPopupMenu.Visible := False;
                FavoriteTreeReloadPopupMenu.Visible := False;
                FavoriteTreeLogDeletePopupMenu.Visible := False;
+               FavoriteTreeItemNameCopyPopupMenu.Visible := True;
        end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
                FavoriteTreeBrowseFolderPopupMenu.Visible := False;
                FavoriteTreeDeletePopupMenu.Visible := True;
@@ -6178,6 +6015,7 @@ begin
                FavoriteTreeNameURLCopyPopupMenu.Visible := True;
                FavoriteTreeReloadPopupMenu.Visible := True;
                FavoriteTreeLogDeletePopupMenu.Visible := True;
+               FavoriteTreeItemNameCopyPopupMenu.Visible := True;
        end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
                FavoriteTreeBrowseFolderPopupMenu.Visible := False;
                FavoriteTreeDeletePopupMenu.Visible := True;
@@ -6188,6 +6026,7 @@ begin
                FavoriteTreeNameURLCopyPopupMenu.Visible := True;
                FavoriteTreeReloadPopupMenu.Visible := True;
                FavoriteTreeLogDeletePopupMenu.Visible := False;
+               FavoriteTreeItemNameCopyPopupMenu.Visible := True;
        end else begin
                FavoriteTreeBrowseFolderPopupMenu.Visible := False;
                FavoriteTreeDeletePopupMenu.Visible := False;
@@ -6198,6 +6037,7 @@ begin
                FavoriteTreeNameURLCopyPopupMenu.Visible := False;
                FavoriteTreeReloadPopupMenu.Visible := False;
                FavoriteTreeLogDeletePopupMenu.Visible := False;
+               FavoriteTreeItemNameCopyPopupMenu.Visible := False;
        end;
 
 end;
@@ -6219,27 +6059,6 @@ begin
        end;
 
 end;
-// *************************************************************************
-//! \82¨\8bC\82É\93ü\82è\83c\83\8a\81[\82Ì\83_\83u\83\8b\83N\83\8a\83b\83N\83C\83x\83\93\83g
-// *************************************************************************
-procedure TGikoForm.FavoriteTreeViewDblClick(Sender: TObject);
-var
-       pos : TPoint;
-       rect: TRect;
-begin
-       //\83N\83\8a\83b\83N\8e\9e\82Ì\91I\91ð\83C\83x\83\93\83g\82Æ\93¯\82\82È\82ç\83_\83u\83\8b\83N\83\8a\83b\83N\8eÀ\8ds
-       pos := FMouseDownPos;
-       if (FClickNode <> nil) and (FClickNode = FavoriteTreeView.GetNodeAt(pos.X, pos.Y)) then begin
-               //\83}\83E\83X\82ªnode\82Ì\8fã\82É\82¢\82é\82©
-               rect := FClickNode.DisplayRect(true);
-               if ((rect.Left <= pos.X) and (rect.Right >= pos.X)) and
-                       ((rect.Bottom >= pos.Y) and (rect.Top <= pos.Y)) then begin
-                       GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
-                       FClickNode := nil;
-               end;
-       end;
-end;
-
 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
 var
        Found: TTreeNode;
@@ -6287,24 +6106,18 @@ end;
 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
        Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
 begin
-       if FDragWFirst <> true then begin
+       if FDragWFirst = true then
                FDragWFirst := false;
-{
-       end else if (abs( X - FMouseDownPos.X ) < Mouse.DragThreshold)
-       and (abs( Y - FMouseDownPos.Y ) < Mouse.DragThreshold) then begin
-(*}
-       end else begin
-//*)
-               if GikoSys.Setting.ListOrientation = gloHorizontal then begin
-                       if GikoSys.Setting.ListWidthState = glsMin then begin
-                               GikoDM.BrowserMaxAndFocusAction.Execute;
-                       end;
-               end else begin
-                       if GikoSys.Setting.ListHeightState = glsMin then begin
-                               GikoDM.BrowserMaxAndFocusAction.Execute;
-                       end;
-               end;
-       end;
+
+    if GikoSys.Setting.ListOrientation = gloHorizontal then begin
+        if GikoSys.Setting.ListWidthState = glsMin then begin
+            GikoDM.BrowserMaxAndFocusAction.Execute;
+        end;
+    end else begin
+        if GikoSys.Setting.ListHeightState = glsMin then begin
+            GikoDM.BrowserMaxAndFocusAction.Execute;
+        end;
+    end;
 end;
 
 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
@@ -6325,40 +6138,13 @@ begin
                finally
                        FDropSpaceNode := nil;
                end;
+               //\8dX\90V\82µ\82½\82±\82Æ\82ð\8b³\82¦\82é
+               FavoriteDM.Modified := true;
                SetLinkBar;
        end;
 
 end;
 
-procedure TGikoForm.ListCoolBarContextPopup(Sender: TObject;
-       MousePos: TPoint; var Handled: Boolean);
-begin
-
-       FToolBarSettingSender := tssList;
-       MousePos := ListCoolBar.ClientToScreen( MousePos );
-       MainCoolBarPopupMenu.Popup( MousePos.X, MousePos.Y );
-
-end;
-
-procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
-       MousePos: TPoint; var Handled: Boolean);
-begin
-
-       FToolBarSettingSender := tssMain;
-       MousePos := MainCoolBar.ClientToScreen( MousePos );
-       MainCoolBarPopupMenu.Popup( MousePos.X, MousePos.Y );
-
-end;
-
-procedure TGikoForm.BrowserCoolBarContextPopup(Sender: TObject;
-       MousePos: TPoint; var Handled: Boolean);
-begin
-
-       FToolBarSettingSender := tssBrowser;
-       MousePos := BrowserCoolBar.ClientToScreen( MousePos );
-       MainCoolBarPopupMenu.Popup( MousePos.X, MousePos.Y );
-
-end;
 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
 begin
        if FListViewBackGroundColor <> value then begin
@@ -6415,7 +6201,7 @@ var
        boardPlugIn : TBoardPlugIn;
 begin
        if Number = 0 then Exit;
-       ThreadItem := GetActiveContent;
+       ThreadItem := GetActiveContent(True);
 
        if ThreadItem <> nil then begin
                //if ThreadItem.IsBoardPlugInAvailable then begin
@@ -6455,7 +6241,7 @@ begin
                        end;
                        Body := CustomStringReplace(Body, '</a>', '',true);
 
-                       Body := GikoSys.DeleteLink(Body);
+                       Body := HTMLCreater.DeleteLink(Body);
                        if ReplaceTag then begin
                                Body := CustomStringReplace(Body, '&lt;', '<');
                                Body := CustomStringReplace(Body, '&gt;', '>');
@@ -6475,8 +6261,61 @@ end;
 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
 begin
        AddRoundNameMenu(dummy1);
+    AddMenuSameBoardThread;
+end;
+//! \83A\83N\83e\83B\83u\82È\83^\83u\82Æ\93¯\82\94Â\82Ì\8aJ\82¢\82Ä\82¢\82é\83X\83\8c\83b\83h\82ð\83\81\83j\83\85\81[\83A\83C\83e\83\80\82É\92Ç\89Á
+procedure TGikoForm.AddMenuSameBoardThread;
+var
+       i: Integer;
+       Item: TMenuItem;
+begin
+    SameBoardThreadItem.Clear;
+    for i := 0 to BrowserTab.Tabs.Count - 1 do begin
+        // \93¯\82\94Â\82©\82Ç\82¤\82©
+        if (FActiveContent.Thread.ParentBoard =
+            TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
+            // \8e©\95ª\82Í\8aO\82·
+            if FActiveContent.Thread <>
+                TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
+                Item := TMenuItem.Create(Self);
+                Item.Caption := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.Title;
+                Item.OnClick := SameBoardThreadSubItemOnClick;
+                SameBoardThreadItem.Add(Item);
+            end;
+        end;
+    end;
+    // \89½\82à\96³\82¢\82È\82ç\8eg\97p\82Å\82«\82È\82¢\82æ\82¤\82É\82·\82é
+    SameBoardThreadItem.Enabled := SameBoardThreadItem.Count > 0;
+end;
+//!  \83A\83N\83e\83B\83u\82È\83^\83u\82Æ\93¯\82\94Â\82Ì\8aJ\82¢\82Ä\82¢\82é\83X\83\8c\83b\83h\83N\83\8a\83b\83N\83C\83x\83\93\83g
+procedure TGikoForm.SameBoardThreadSubItemOnClick(Sender: TObject);
+var
+       i, j: Integer;
+       MenuItem: TMenuItem;
+begin
+       if Sender is TMenuItem then begin
+        try
+            j := 0;
+            MenuItem := TMenuItem(Sender);
+            for i := 0 to BrowserTab.Tabs.Count - 1 do begin
+                // \93¯\82\94Â\82©\82Ç\82¤\82©
+                if (FActiveContent.Thread.ParentBoard =
+                    TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
+                    if FActiveContent.Thread <>
+                        TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
+                        if (SameBoardThreadItem.Items[j] = MenuItem) then begin
+                            MoveToURL( TBrowserRecord(BrowserTab.Tabs.Objects[i])
+                                .Thread.URL);
+                            Exit;
+                        end;
+                        Inc(j);
+                    end;
+                end;
+            end;
+        except
+        end;
+       end;
 end;
-
 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
 begin
        FavoriteDM.URLReplace(oldURLs, newURLs);
@@ -6623,6 +6462,7 @@ begin
                                Screen.Cursor := crDefault;
                        end;
                end;
+               Sort.SetSortDate(Now());
                SetActiveList(Node.data);
        end;
 
@@ -6668,13 +6508,8 @@ begin
 
 end;
 // *************************************************************************
-//! \83c\83\8a\81[\83r\83\85\81[\82Ì\83N\83\8a\83b\83N\83C\83x\83\93\83g
+//! \83c\83\8a\81[\83r\83\85\81[\82ÌKeyDown\83C\83x\83\93\83g
 // *************************************************************************
-procedure TGikoForm.TreeViewClick(Sender: TObject);
-begin
-       FClickNode := TreeView.Selected;
-       FMouseDownPos := TreeView.ScreenToClient(Mouse.CursorPos);
-end;
 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
        Shift: TShiftState);
 begin
@@ -6684,24 +6519,42 @@ begin
                TreeDoubleClick( TreeView.Selected );
        end else if Key = VK_RETURN then begin
                TreeClick( TreeView.Selected );
-               TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
+        // \97\9a\97ð\82Ì\8fê\8d\87\81A\8fÁ\82³\82ê\82Ä\82¢\82é\82Ì\82Å\83`\83F\83b\83N\82·\82é
+        if (TreeView.Selected <> nil) then begin
+               TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
+        end;
        end;
 end;
-
+//! \82¨\8bC\82É\93ü\82è\82ÌMouseDown\83C\83x\83\93\83g
 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
        Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
 var
        favItem                         : TTreeNode;
        favThreadItem   : TFavoriteThreadItem;
+       rect: TRect;
 begin
-
        case Button of
-{      mbLeft:
+       mbLeft:
                begin
-                       FMouseDownPos.X := X;
-                       FMouseDownPos.Y := Y;
+                       if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and 
+                               (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
+                               //\83}\83E\83X\82ªnode\82Ì\8fã\82É\82¢\82é\82©
+                               rect := FavoriteTreeView.Selected.DisplayRect(true);
+                               // \83A\83C\83R\83\93\95ª\8d\82É\82¸\82ç\82·
+                               if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
+                                       ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
+                                       if ssDouble in Shift then begin
+                                               FClickNode := FavoriteTreeView.Selected;
+                                               GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
+                                               FClickNode := nil;
+                                       end else begin
+                                               FavoriteClick(
+                                                       TObject(FavoriteTreeView.Selected));
+                                       end;
+                               end;
+                       end;
                end;
-}      mbMiddle:
+       mbMiddle:
                begin
                        favItem := FavoriteTreeView.GetNodeAt( X, Y );
                        if favItem = nil then Exit;
@@ -6761,30 +6614,24 @@ end;
 // *************************************************************************
 //! \82¨\8bC\82É\93ü\82è\83c\83\8a\81[\82Ì\83}\83E\83X\83A\83b\83v\83C\83x\83\93\83g
 // *************************************************************************
-procedure TGikoForm.FavoriteTreeViewMouseUp(Sender: TObject;
-  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
-begin
-       if (Button = mbLeft) and not (ssDouble  in Shift) then begin
-               if (FClickNode <> nil) and (FClickNode = FavoriteTreeView.GetNodeAt(X, Y)) then begin
-                       FavoriteClick( TObject( FClickNode ) );
-               end;
-       end;
-end;
-
 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
+const
+    LIMIT = 20;
 var
        p : TPoint;
        e: IHTMLElement;
        AID: string;
        stlist : TStringList;
-       i, count, rc : Integer;
+       i, count: Integer;
        body : String;
-    limited : boolean;
+    limited : Integer;
+    FOleInPlaceActiveObject: IOleInPlaceActiveObject;
 begin
   result := true;
   try
        if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then
-               FActiveContent.Browser.SetFocus;
+        FOleInPlaceActiveObject := FActiveContent.Browser.ControlInterface as IOleInPlaceActiveObject;
+        FOleInPlaceActiveObject.OnFrameWindowActivate(True);
                try
                        GetCursorPos(p);
                        p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
@@ -6815,13 +6662,14 @@ begin
                                                end;
                                        end;
                     count := GikoSys.GetSameIDResCount(AID, FActiveContent.Thread);
-                    limited := false;
-                    if count > 20 then begin
-                        rc := GikoUtil.MsgBox(Handle,
-                                '20\8cÂ\88È\8fã\82 \82è\82Ü\82·\82ª\81A\82·\82×\82Ä\95\\8e¦\82µ\82Ü\82·\82©\81H',
+                    limited := LIMIT;
+                    if count > LIMIT then begin
+                        if (GikoUtil.MsgBox(Handle,
+                                IntToStr(LIMIT) + '\8cÂ\88È\8fã\82 \82è\82Ü\82·\82ª\81A\82·\82×\82Ä\95\\8e¦\82µ\82Ü\82·\82©\81H',
                                 'ID\83|\83b\83v\83A\83b\83v\8cx\8d\90',
-                                                               MB_YESNO or MB_ICONQUESTION);
-                        limited := rc <> ID_YES;
+                                                               MB_YESNO or MB_ICONQUESTION) = ID_YES) then begin
+                            limited := -1;
+                        end
                     end;
                                        body := GikoSys.GetSameIDResAnchor(AID, FActiveContent.Thread, limited);
                                        FActiveContent.IDAnchorPopup(body);
@@ -6844,94 +6692,6 @@ begin
                end;
 end;
 
-function TGikoForm.GetTabURLs(AStringList: TStringList) : Boolean;
-var
-  rec : TBrowserRecord;
-  i, bound : Integer;
-begin
-  bound := BrowserTab.Tabs.Count -1;
-       if bound = -1 then begin
-               Result := False;
-               Exit; //for\82É\94ò\82Î\82È\82¢\82Å\91\80\8dì\82ð\94²\82¯\82é
-  end;
-
-  for i := 0 to bound do begin
-       rec := TBrowserRecord( BrowserTab.Tabs.Objects[ i ] );
-       if( rec <> nil) and (rec.Thread <> nil) then
-               AStringList.Add( rec.Thread.URL );
-  end;
-  Result := True;
-end;
-
-function TGikoForm.SaveTabURLs : Boolean;
-const
-       Filename = 'tab.sav';
-       bFilename = '~tab.sav';
-var
-       SaveStringList: TStringList;
-begin
-       Result := false;
-
-       SaveStringList := TStringList.Create;
-       try
-               if GetTabURLs(SaveStringList) then begin
-                       if FileExists( GikoSys.GetAppDir + Filename) then begin
-                               if FileExists( GikoSys.GetAppDir + bFilename) then
-                                       DeleteFile(GikoSys.GetAppDir + bFilename);
-
-                               //\83o\83b\83N\83A\83b\83v\82ð\8dì\82é\81B
-                               RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
-                       end;
-                       SaveStringList.SaveToFile(GikoSys.GetAppDir + Filename);
-                       Result := true;
-               end;
-       finally
-               SaveStringList.Free;
-       end;
-end;
-
-function TGikoForm.LoadTabURLs : Boolean;
-var
-       i, bound    : Integer;
-       item        : TThreadItem;
-       URLs                            : TStringList;
-       GikoTab                 : TGikoTabAppend;
-       fileName                : string;
-begin
-
-       fileName := ExtractFilePath(Application.ExeName) + 'tab.sav';
-       URLs := TStringList.Create();
-       GikoTab := GikoSys.Setting.BrowserTabAppend;
-       try
-               try
-                       Result := True;
-                       if FileExists(fileName) then begin
-                               URLs.LoadFromFile(fileName);
-                               bound    := URLs.Count - 1;
-                               if bound > -1 then begin
-                                       GikoSys.Setting.BrowserTabAppend := gtpLast;//TGikoTabAppend(1);
-                                       for i := 0 to bound do begin
-                                               item := BBSsFindThreadFromURL( URLs[ i ] );
-                                               if item <> nil then
-                                                       InsertBrowserTab( item, false );
-                                       end;
-                               end else
-                                       Result := False;
-                       end else
-                               Result := False;
-               except
-                       on EFOpenError do begin
-                               ShowMessage('\83^\83u\83t\83@\83C\83\8b\82ª\8aJ\82¯\82Ü\82¹\82ñ');
-                       end;
-               end;
-       finally
-               GikoSys.Setting.BrowserTabAppend := GikoTab;
-               URLs.Free;
-       end;
-
-end;
-
-
 /// ListView \82Ì\83J\83\89\83\80\95\9d\82¨\82æ\82Ñ\88Ê\92u\82Ì\95Û\91
 procedure TGikoForm.ActiveListColumnSave;
 var
@@ -7143,6 +6903,7 @@ var
        Action: TAction;
 begin
        s := MouseGesture.GetGestureStr;
+    MouseGesture.Clear;
        Action := GikoSys.Setting.Gestures.GetGestureAction(s);
        if Action <> nil then
                Action.Execute;
@@ -7309,7 +7070,7 @@ var
        ReadList                : TStringList;
        wordCount               : TWordCount;
 begin
-       ThreadItem      := GetActiveContent;
+       ThreadItem      := GetActiveContent(True);
        ReadList                := TStringList.Create;
        wordCount               := TWordCount.Create;
        try
@@ -7343,7 +7104,7 @@ var
 begin
        No := KokoPopupMenu.Tag;
        if No = 0 then Exit;
-       ThreadItem := GetActiveContent;
+       ThreadItem := GetActiveContent(True);
        if ThreadItem = nil then Exit;
        body := TStringList.Create;
        try
@@ -7390,7 +7151,6 @@ begin
                if Assigned(firstElement) then
                        if firstElement.style.visibility <> 'hidden' then
                                firstElement.style.visibility := 'hidden';
-
 end;
 
 procedure TGikoForm.RepaintAllTabsBrowser();
@@ -7457,46 +7217,6 @@ begin
                Screen.Cursor := Cursor;
 end;
 // *************************************************************************
-//! \83X\83N\83\8a\81[\83\93\8fã\82ÉEditorForm\82ª\82¢\82é\82©
-// *************************************************************************
-function TGikoForm.EditorFormExists(): boolean;
-var
-       i : Integer;
-begin
-       Result := false;
-       //\83X\83N\83\8a\81[\83\93\8fã\82Ì\91S\82Ä\82Ì\83t\83H\81[\83\80\82©\82ç\81AEditorForm\82ð\92T\82·
-       for i := 0 to Screen.CustomFormCount - 1 do begin
-               if TObject(Screen.CustomForms[i]) is TEditorForm then begin
-                       Result := true;
-                       Break;
-               end;
-       end;
-end;
-// *************************************************************************
-//! \83X\83N\83\8a\81[\83\93\8fã\82É\82¢\82é\82·\82×\82Ä\82ÌEditorForm\82©\82ç\96¼\91O\82Ì\97\9a\97ð\82ð\8dí\8f\9c\82·\82é
-// *************************************************************************
-procedure TGikoForm.AllEditroFormNameTextClearClear();
-var
-       i : Integer;
-begin
-       for i := 0 to Screen.CustomFormCount - 1 do begin
-               if TObject(Screen.CustomForms[i]) is TEditorForm then
-                       TEditorForm(Screen.CustomForms[i]).NameComboBox.Items.Clear;
-       end;
-end;
-// *************************************************************************
-//! \83X\83N\83\8a\81[\83\93\8fã\82É\82¢\82é\82·\82×\82Ä\82ÌEditorForm\82©\82ç\83\81\81[\83\8b\97\9a\97ð\82ð\8dí\8f\9c\82·\82é
-// *************************************************************************
-procedure TGikoForm.AllEditroFormMailTextClearClear();
-var
-       i : Integer;
-begin
-       for i := 0 to Screen.CustomFormCount - 1 do begin
-               if TObject(Screen.CustomForms[i]) is TEditorForm then
-                       TEditorForm(Screen.CustomForms[i]).MailComboBox.Items.Clear;
-       end;
-end;
-// *************************************************************************
 //! \83L\83\83\83r\83l\83b\83g\82ð\95Â\82\82é\81~\83{\83^\83\93\82Ì\83N\83\8a\83b\83N\83C\83x\83\93\83g
 // *************************************************************************
 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
@@ -7531,7 +7251,9 @@ begin
                        WM_KEYFIRST..WM_KEYLAST :
                        begin
                                //\83L\81[\83A\83b\83v\82Í\96³\8e\8b\82·\82é\81@KeyDown\82Æ\8d\87\82í\82¹\82Ä\82Q\89ñ\8cÄ\82Î\82ê\82é\82©\82ç
-                               if (Msg.message <> WM_KEYUP) and (Msg.message <> WM_CHAR) then begin
+                               if (Msg.message <> WM_KEYUP)
+                    and (Msg.message <> WM_CHAR)
+                    and (Msg.message <> WM_SYSKEYUP) then begin
                                        wmMsg.Msg := Msg.message;
                                        wmMsg.CharCode := Word(Msg.wParam);
                                        wmMsg.KeyData := Msg.lParam;
@@ -7550,12 +7272,11 @@ begin
        Application.ProcessMessages;
        if not Application.Terminated then begin
                if PreviewTimer.Enabled then
-                       PreviewTimer.Enabled := False;
-               //\83t\83H\81[\83J\83X\82ª\91¼\82Ì\83A\83v\83\8a\82É\95Ï\82í\82Á\82½\82Æ\82«\82É\83q\83\93\83g\82ð\8fÁ\8b\8e
-               if FHint <> nil then begin
-                       FHint.ReleaseHandle;
-                       FHint.ClearAllRes;
-               end;
+               PreviewTimer.Enabled := False;
+               //\83t\83H\81[\83J\83X\82ª\91¼\82Ì\83A\83v\83\8a\82É\95Ï\82í\82Á\82½\82Æ\82«\82É\83|\83b\83v\83A\83b\83v\8fÁ\8b\8e
+        if (FResPopupBrowser <> nil) then
+            FResPopupBrowser.Clear;
+
                //\83v\83\8c\83r\83\85\81[\82ð\89B\82·
                if FPreviewBrowser <> nil then
                        ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
@@ -7579,116 +7300,6 @@ begin
        MsgBox(Handle, s, '\8f\88\97\9d\82³\82ê\82È\82©\82Á\82½\97á\8aO', MB_OK or MB_ICONSTOP);
 end;
 // *************************************************************************
-//! \83A\83N\83V\83\87\83\93\82Ì\83`\83F\83b\83N\8fó\91Ô\82Ì\8f\89\8aú\89» Form\82ÌCreate\82Å\8cÄ\82Ñ\8fo\82µ\82Ä\82à\94½\89f\82µ\82È\82¢
-// *************************************************************************
-procedure TGikoForm.InitActionChecked();
-begin
-       //\83\8d\83O\83C\83\93\8fó\91Ô\82ð\8dÄ\90Ý\92è
-       GikoDM.LoginAction.Checked := GikoDM.LoginAction.Checked;
-       //\83~\83\85\81[\83g\82Ì\8fó\91Ô\82ð\90Ý\92è
-       GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
-       //\89æ\96Ê\82Ì\95ª\8a\84\82Ì\8fó\91Ô\82ð\8dÄ\90Ý\92è
-       GikoDM.ArrangeAction.Checked := GikoDM.ArrangeAction.Checked;
-
-       //\83X\83\8c\91S\95\94\95\\8e¦\83{\83^\83\93\82ð\89\9f\82³\82ê\82½\8fó\91Ô\82É\82·\82é
-       GikoDM.AllItemAction.Checked := True;
-       GikoDM.AllResAction.Checked := True;
-
-       // \83\8c\83X\95\\8e¦\94Í\88Í
-       FResRangeMenuSelect := GikoSys.ResRange;
-       case GikoSys.ResRange of
-       Ord( grrAll ):
-               begin
-                       GikoDM.AllResAction.Execute;
-               end;
-       Ord( grrSelect ):
-               begin
-                       SelectComboBox.Text := SelectComboBox.Items[ 1 ];
-                       GikoDM.SelectResAction.Checked := True;
-               end;
-       else
-               case FResRangeMenuSelect of
-               Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked        := True;
-               Ord( grrNew ):  GikoDM.OnlyNewResAction.Checked := True;
-               100:                    GikoDM.OnlyAHundredResAction.Checked            := True;
-               end;
-       end;
-
-       // \83X\83\8c\83b\83h\88ê\97\97\95\\8e¦\94Í\88Í
-       case GikoSys.Setting.ThreadRange of
-       gtrAll:
-               begin
-                       GikoDM.AllItemAction.Checked := True;
-                       ViewType := gvtAll;
-               end;
-       gtrLog:
-               begin
-                       GikoDM.LogItemAction.Checked := True;
-                       ViewType := gvtLog;
-               end;
-       gtrNew:
-               begin
-                       GikoDM.NewItemAction.Checked := True;
-                       ViewType := gvtNew;
-               end;
-       end;
-end;
-// *************************************************************************
-//! \82¨\8bC\82É\93ü\82è\83c\83\8a\81[\82Ì\83N\83\8a\83b\83N\83C\83x\83\93\83g
-// *************************************************************************
-procedure TGikoForm.FavoriteTreeViewClick(Sender: TObject);
-begin
-       //\8c»\8dÝ\91I\91ð\82³\82ê\82Ä\82¢\82é\83A\83C\83e\83\80\82ð\95Û\91
-       FClickNode := FavoriteTreeView.Selected;
-       FMouseDownPos := FavoriteTreeView.ScreenToClient(Mouse.CursorPos);
-end;
-// *************************************************************************
-//! \82¨\8bC\82É\93ü\82è\83c\83\8a\81[\82Ì\83A\83C\83e\83\80\82Ì\8fk\8f¬\8e\9e\83C\83x\83\93\83g
-// *************************************************************************
-procedure TGikoForm.FavoriteTreeViewCollapsing(Sender: TObject;
-  Node: TTreeNode; var AllowCollapse: Boolean);
-begin
-       //\8fk\8f¬\82³\82ê\82½\82ç\95Û\91\82³\82ê\82Ä\82¢\82é\83N\83\8a\83b\83N\8e\9e\91I\91ð\83A\83C\83e\83\80\82ð\83N\83\8a\83A
-       FClickNode := nil;
-end;
-// *************************************************************************
-//! \82¨\8bC\82É\93ü\82è\83c\83\8a\81[\82Ì\83A\83C\83e\83\80\82Ì\93W\8aJ\8e\9e\83C\83x\83\93\83g
-// *************************************************************************
-procedure TGikoForm.FavoriteTreeViewExpanding(Sender: TObject;
-  Node: TTreeNode; var AllowExpansion: Boolean);
-begin
-       //\93W\8aJ\82³\82ê\82½\82ç\95Û\91\82³\82ê\82Ä\82¢\82é\83N\83\8a\83b\83N\8e\9e\91I\91ð\83A\83C\83e\83\80\82ð\83N\83\8a\83A
-       FClickNode := nil;
-end;
-// *************************************************************************
-//! \83c\83\8a\81[\83r\83\85\81[\82Ì\83A\83C\83e\83\80\82Ì\8fk\8f¬\8e\9e\83C\83x\83\93\83g
-// *************************************************************************
-procedure TGikoForm.TreeViewCollapsing(Sender: TObject; Node: TTreeNode;
-  var AllowCollapse: Boolean);
-begin
-       FClickNode := nil;
-end;
-// *************************************************************************
-//! \83c\83\8a\81[\83r\83\85\81[\82Ì\83A\83C\83e\83\80\82Ì\93W\8aJ\8e\9e\83C\83x\83\93\83g
-// *************************************************************************
-procedure TGikoForm.TreeViewExpanding(Sender: TObject; Node: TTreeNode;
-  var AllowExpansion: Boolean);
-begin
-       FClickNode := nil;
-end;
-// *************************************************************************
-//! \83c\83\8a\81[\83r\83\85\81[\82Ì\83}\83E\83X\83A\83b\83v\83C\83x\83\93\83g
-// *************************************************************************
-procedure TGikoForm.TreeViewMouseUp(Sender: TObject; Button: TMouseButton;
-  Shift: TShiftState; X, Y: Integer);
-begin
-       if (Button = mbLeft) and not (ssDouble in Shift) then begin
-               if (FClickNode <> nil) and (FClickNode = TreeView.GetNodeAt(X, Y)) then begin
-                       TreeClick(FClickNode);
-               end;
-       end;
-end;
-// *************************************************************************
 //! \83_\83E\83\93\83\8d\81[\83h\83R\83\93\83g\83\8d\81[\83\8b\83X\83\8c\83b\83h\82Ì\90\90¬
 // *************************************************************************
 procedure TGikoForm.CreateControlThread();
@@ -7714,6 +7325,7 @@ begin
        BrowserNullTab := TBrowserRecord.Create;
        BrowserNullTab.Browser := Browser;
        BrowserNullTab.Browser.Navigate(BLANK_HTML);
+
        FBrowsers := TList.Create;
        for i := 0 to count -1 do begin
                FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
@@ -7722,6 +7334,7 @@ begin
                TOleControl(newBrowser).Align := alNone;
                TOleControl(newBrowser).Left    := 0;
                TOleControl(newBrowser).Top     := 0;
+               newBrowser.RegisterAsDropTarget := False;
                newBrowser.OnDocumentComplete   := BrowserDocumentComplete;
                newBrowser.OnBeforeNavigate2    := BrowserBeforeNavigate2;
                newBrowser.OnEnter                              := BrowserEnter;
@@ -7732,6 +7345,7 @@ begin
        end;
        BrowserNullTab.Browser.BringToFront;
        ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
+
        //\8bN\93®\8e\9e\82É\83^\83u\8e©\93®\95\9c\8c³\82ð\93ü\82ê\82Ä\82¢\82é\82Æ\81A\8bó\83y\81[\83W\97p\82ÌBrowser\82Ì
        //\95`\89æ\82ª\8fI\82í\82Á\82Ä\82¢\82È\82­\82Ä\81A\83N\83\8a\83b\83N\83C\83x\83\93\83g\82Ì\90Ý\92è\93\99\82É\93Ë\93ü\82·\82é\82Ì\82Å
        //\82±\82±\82Å\8fI\82í\82ç\82¹\82Ä\82¨\82­
@@ -7796,6 +7410,179 @@ begin
        except
        end;
 end;
+//! \83L\83\83\83r\83l\83b\83g\82Ì\83}\83E\83X\83_\83E\83\93\83C\83x\83\93\83g
+procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
+  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+var
+       rect : TRect;
+begin
+       case Button of
+       mbLeft:
+               begin
+                       if (TreeView.Selected <> nil) and
+                               (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
+                               //\83}\83E\83X\82ªnode\82Ì\8fã\82É\82¢\82é\82©
+                               rect := TreeView.Selected.DisplayRect(true);
+                               // \83A\83C\83R\83\93\95ª\82¾\82¯\8d\82É\82¸\82ç\82·
+                               if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
+                                       ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
+                                       // \83N\83\8a\83b\83N\82Æ\83_\83u\83\8b\83N\83\8a\83b\83N\82ð\83R\83R\82Å\94»\92è
+                                       if ssDouble in Shift then begin
+                                               TreeDoubleClick( TreeView.Selected );
+                                       end else begin
+                                               TreeClick(TreeView.Selected);
+                                       end;
+                               end;
+                       end;
+               end;
+       end;
+end;
+//! ActionList\82ÌGroupIndex\82Ì\95Û\91
+procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
+var
+       i: Integer;
+begin
+       if ActionList <> nil then begin
+               SetLength(FActionListGroupIndexes, ActionList.ActionCount);
+
+               for i := 0 to ActionList.ActionCount - 1 do begin
+                       try
+                               FActionListGroupIndexes[i] :=
+                                       TCustomAction(ActionList.Actions[i]).GroupIndex;
+                               TCustomAction(ActionList.Actions[i]).GroupIndex
+                                       := 0;
+                       except
+                               ;//Cast\82Å\82«\82È\82¢\82Æ\82«\91Î\8dô
+                       end;
+               end;
+
+       end;
+end;
+//! ActionList\82ÌGroupIndex\82Ì\90Ý\92è
+procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
+var
+       i: Integer;
+begin
+       if ActionList <> nil then begin
+               if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
+                       for i := 0 to ActionList.ActionCount - 1 do begin
+                               try
+                                       TCustomAction(ActionList.Actions[i]).GroupIndex
+                                               := FActionListGroupIndexes[i];
+                               except
+                                       ;//Cast\82Å\82«\82È\82¢\82Æ\82«\91Î\8dô
+                               end;
+                       end;
+               end;
+       end;
+end;
+//! \82±\82Ì\83\8c\83X\82ÌURL\8eæ\93¾
+procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
+begin
+;
+end;
+//! ListView\81i\83X\83\8c\83b\83h\88ê\97\97\81j\82ð\8dX\90V\82·\82é
+procedure TGikoForm.RefreshListView(Thread: TThreadItem);
+begin
+       //Thread\82Ì\94Â\82Æ\95\\8e¦\82µ\82Ä\82¢\82é\94Â\82ª\93¯\82\82È\82ç\95`\89æ\82ð\8dX\90V\82·\82é
+       if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin
+               ListView.Refresh;
+       end;
+end;
+
+procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
+  MousePos: TPoint; var Handled: Boolean);
+var
+    pos : TPoint;
+    coolBar: TGikoCoolBar;
+begin
+    Handled := False;
+    if (Sender <> nil) and (Sender is TGikoCoolBar) then begin
+        coolBar := TGikoCoolBar(Sender);
+        if (coolBar = MainCoolBar) then begin
+            FToolBarSettingSender := tssMain;
+        end else if (coolBar = ListCoolBar) then begin
+            FToolBarSettingSender := tssList;
+        end else if (coolBar = BrowserCoolBar) then begin
+            FToolBarSettingSender := tssBrowser;
+        end else begin
+            FToolBarSettingSender := tssNone;
+        end;
+        pos := coolBar.ClientToScreen( MousePos );
+        MainCoolBarPopupMenu.Popup( pos.X, pos.Y );
+        Handled := True;
+    end;
+end;
+
+procedure TGikoForm.TaskTrayIconMessage(var Msg: TMsg);
+begin
+    //  \8d\83N\83\8a\83b\83N\82È\82ç\95\9c\8c³\82·\82é
+    if  (Msg.wParam = WM_LBUTTONUP) then  begin
+        UnStoredTaskTray;
+    end;
+end;
+//! \83^\83X\83N\83g\83\8c\83C\82É\83A\83C\83R\83\93\93o\98^\81\95\83t\83H\81[\83\80\89B\82µ
+procedure TGikoForm.StoredTaskTray;
+begin
+    try
+        if (FIconData.uID = 0) then begin
+            FIconData.cbSize  :=  SizeOf(TNotifyIconData);
+            FIconData.uID     :=  Self.Handle;
+            FIconData.Wnd     :=  Handle;
+            FIconData.uFlags  :=  NIF_MESSAGE or NIF_ICON or NIF_TIP;
+            FIconData.uCallbackMessage  :=  USER_TASKTRAY;
+            FIconData.hIcon   :=  Application.Icon.Handle;  {\83A\83C\83R\83\93\8ew\92è}
+            FIconData.szTip   :=  '\83M\83R\83i\83r';      {\83q\83\93\83g\95\8e\9a\97ñ}
+            Shell_NotifyIcon(NIM_ADD, @FIconData);
+            ShowEditors(SW_HIDE);
+            ShowWindow(Self.Handle, SW_HIDE);
+        end;
+    except
+    end;
+end;
+//! \83^\83X\83N\83g\83\8c\83C\82Ì\83A\83C\83R\83\93\8dí\8f\9c\81\95\83t\83H\81[\83\80\95\\8e¦
+procedure TGikoForm.UnStoredTaskTray;
+begin
+    try
+        try
+            Shell_NotifyIcon(NIM_DELETE, @FIconData);
+            SetForegroundWindow(Application.Handle);
+        except
+        end;
+    finally
+        FIconData.uID := 0;
+        // Action\82©\82ç\8ai\94[\82µ\82½\82Æ\82«\82ÍTag\82Ì\92l\82Í0\88È\8aO
+        if (GikoDM.StoredTaskTrayAction.Tag = 0) then begin
+            ShowWindow(Self.Handle, SW_RESTORE);
+        end else begin
+            ShowWindow(Self.Handle, SW_SHOW);
+        end;
+        ShowEditors(SW_SHOW);
+        GikoDM.StoredTaskTrayAction.Tag := 0;
+    end;
+end;
+{
+\brief \83\8c\83X\83G\83f\83B\83^\82Ì\95\\8e¦\94ñ\95\\8e¦
+\param nCmdShow Windows.ShowWindow\82É\91\97\82é\83p\83\89\83\81\81[\83^\82Æ\93¯\82
+}
+procedure TGikoForm.ShowEditors(nCmdShow: Integer);
+var
+    i : Integer;
+begin
+    // \83\8c\83X\83G\83f\83B\83^\82ð\92T\82·
+    for i := 0 to Screen.CustomFormCount - 1 do begin
+        if TObject(Screen.CustomForms[i]) is TEditorForm then
+            ShowWindow(Screen.CustomForms[i].Handle, nCmdShow);
+
+    end;
+end;
+//! \83|\83b\83v\83A\83b\83v\83u\83\89\83E\83U\8dì\90¬
+procedure TGikoForm.CreateResPopupBrowser;
+begin
+    if (FResPopupBrowser = nil) then begin
+        FResPopupBrowser := TResPopupBrowser.Create(BrowserPanel);
+    end;
+end;
 
 initialization
                                OleInitialize(nil);