OSDN Git Service

スレを表示していない状態で、最小化でタスクトレイに格納されない不具合の修正
[gikonavigoeson/gikonavi.git] / Giko.pas
index c58f321..aaca970 100644 (file)
--- a/Giko.pas
+++ b/Giko.pas
@@ -18,7 +18,8 @@ uses
        Editor, RoundData, GikoPanel, Favorite, HTMLDocumentEvent,
        HintWindow, GikoCoolBar, GikoListView, Search, ExternalBoardManager,
        ExternalBoardPlugInMain, StdActns, Variants, ExtActns,IdTCPConnection,
-       IdBaseComponent, IdTCPClient, AppEvnts, BrowserRecord;
+       IdBaseComponent, IdTCPClient, AppEvnts, BrowserRecord, MoveHistoryItem,
+    ShellAPI;
 
 const
        NGWORDNAME_PANEL = 3;
@@ -404,6 +405,13 @@ type
     GikoApplicationEvents: TApplicationEvents;
     N22: TMenuItem;
     N42: TMenuItem;
+    DAT2: TMenuItem;
+    N75: TMenuItem;
+    DAT3: TMenuItem;
+    N76: TMenuItem;
+    FavoriteTreeItemNameCopyPopupMenu: TMenuItem;
+    N77: TMenuItem;
+    N78: TMenuItem;
                                procedure FormCreate(Sender: TObject);
                procedure FormDestroy(Sender: TObject);
                procedure BrowserStatusTextChange(Sender: TObject;
@@ -503,12 +511,6 @@ 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);
@@ -544,6 +546,8 @@ type
     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¾ }
                FEnabledCloseButton: Boolean;
@@ -593,6 +597,7 @@ type
                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ñ
+
                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);
@@ -642,8 +647,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è
@@ -662,6 +665,12 @@ type
                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;
        protected
                procedure CreateParams(var Params: TCreateParams); override;
                procedure WndProc(var Message: TMessage); override;
@@ -674,6 +683,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;
@@ -747,9 +757,12 @@ 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);
                //Application\82ÌMainForm\82ð\8eæ\93¾\82·\82é
@@ -763,18 +776,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);
                //
@@ -792,6 +795,10 @@ type
                //! \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;
@@ -824,7 +831,7 @@ implementation
 
 uses
        GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
-       YofUtils, ShellAPI, ToolBarUtil, ToolBarSetting,
+       YofUtils, ToolBarUtil, ToolBarSetting,
        GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
        FavoriteArrange, AddressHistory, Preview, Gesture,
        About, Option, Round, Splash, Sort, ListSelect, Imm,
@@ -847,6 +854,7 @@ const
        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);
@@ -893,7 +901,8 @@ begin
        GetGroupIndex(GikoDM.GikoFormActionList);
        FSearchDialog := nil;
        CreateBrowsers(BROWSER_COUNT);
-
+    FIconData.uID := 0;
+    
        //\83\81\83j\83\85\81[\83t\83H\83\93\83g
        SetMenuFont;
 
@@ -1000,6 +1009,16 @@ 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;
 
 
@@ -1250,9 +1269,6 @@ begin
        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 );
@@ -1284,6 +1300,7 @@ begin
 
        //\93ü\97Í\83A\83V\83X\83g\8b@\8d\\82Ì\8f\89\8aú\89»
        InputAssistDM.Init(GikoSys.GetInputAssistFileName);
+
 end;
 
 // CoolBar \82Ì\90Ý\92è\82ð\95Ï\90\94\82É\95Û\91
@@ -1433,7 +1450,9 @@ begin
 
                //FormCrete\82©\82ç\88Ú\93®\81B
                if GikoSys.Setting.TabAutoLoadSave then begin
-                       GikoDM.TabAutoLoadAction.Execute;
+            GikoDM.TabsOpenAction.Tag := 1;
+                       GikoDM.TabsOpenAction.Execute;
+            GikoDM.TabsOpenAction.Tag := 0;
                end;
 
         //ActionList\82ÌGroupIndex\82ð\8c³\82É\96ß\82·
@@ -1447,21 +1466,31 @@ 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;
+
+       if GikoSys.Setting.TabAutoLoadSave then begin
+               GikoDM.TabsSaveAction.Execute;
+       end;
+
+       if (SearchDialog <> nil) then begin
+               if (SearchDialog.Visible) then begin
+                       SearchDialog.Close;
+                       try
+                               SearchDialog.Release;
+                       except
+                       end;
+                       SearchDialog := nil;
                end;
        end;
-    {    //2ch\8c¾\8cȩ̂²ÙFree
-               if GikoSys.Setting.Gengo <> nil then begin
-                               GikoSys.Setting.Gengo.Free;
-        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;
@@ -1616,6 +1645,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Å
@@ -1790,11 +1825,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;
@@ -1814,7 +1851,14 @@ var
        e: IHTMLElement;
        Ext: string;
        PathRec: TPathRec;
-begin
+  Text2: string;
+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
@@ -1841,7 +1885,7 @@ begin
                Exit;
        end;
 
-       StatusBar.Panels[1].Text := Text;
+       StatusBar.Panels[1].Text := Text2;
 
        if FHint <> nil then begin
                FHint.ReleaseHandle;
@@ -1858,8 +1902,8 @@ begin
 //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);
@@ -1867,12 +1911,12 @@ 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;
@@ -1882,8 +1926,8 @@ begin
                                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);
+                                       wkIntSt := StrToInt64(tmp2);
+                                       wkIntTo := StrToInt64(tmp2);
                                                //s := GetThreadText(wkBBS, wkKey, wkIntSt, wkIntTo, False, False);
                                        FHint.PopupType := gptThread;
                                        HTMLCreater.SetResPopupText(FHint, GetActiveContent, wkIntSt, wkIntTo, False, False);
@@ -1894,7 +1938,7 @@ begin
                        end;
                end else begin
                        threadItem := GetActiveContent;
-                       URL := THTMLCreate.GetRespopupURL(Text, threadItem.URL);
+                       URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
                        PathRec := Gikosys.Parse2chURL2(URL);
                        if (PathRec.FNoParam) then begin
                                PathRec.FSt := 1;
@@ -2279,7 +2323,6 @@ var
        s: string;
        boardPlugIn : TBoardPlugIn;
        i: Integer;
-       browserRec      : TBrowserRecord;
        Res : TResRec;
 begin
        try
@@ -2309,6 +2352,7 @@ begin
                                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;
@@ -2332,15 +2376,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);
@@ -2377,11 +2418,14 @@ 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
@@ -2579,9 +2623,9 @@ begin
                        BrowserNullTab := TBrowserRecord.Create;
                        BrowserNullTab.Browser := Browser;
                end;
-               if BrowserNullTab.thread <> ThreadItem then begin
-               BrowserNullTab.Movement := '';
-               end;
+//             if BrowserNullTab.thread <> ThreadItem then begin
+//                     BrowserNullTab.Movement := '';
+//             end;
                BrowserNullTab.thread := ThreadItem;
                Result := BrowserNullTab;
                BrowserTab.TabIndex := -1;
@@ -2615,7 +2659,6 @@ begin
                (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
@@ -2673,7 +2716,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;
@@ -2682,14 +2724,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 := 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
+                       //\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;
@@ -2697,10 +2757,11 @@ begin
                                doc.Write(s);
                                doc.Close;
                        finally
+                               
                        end;
                end else begin
                        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¦
+                       //\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);
@@ -2710,51 +2771,14 @@ begin
                                Thread.Repaint := false;
 
                                Thread.Browser.OnStatusTextChange := nil;
-                               LockWindowUpdate(Thread.Browser.Handle);
-                               HTMLCreater.CreateHTML2(
-                                               Idispatch( olevariant(Thread.Browser.ControlInterface).Document),
-                                               ThreadItem, sTitle);
-                               while ( (Thread.Browser.Document as IHTMLDocument2).readyState <> 'complete' ) do begin
-                                       Application.ProcessMessages;
-                                       Sleep(1);
-                               end;
+                               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 else begin
-                               // JUMP\82ð\8ew\92è\82³\82ê\82Ä\82¢\82½\82çJUMP\82·\82é
-                               if (Thread.Movement <> '') then begin
-                                       Thread.Move(Thread.Movement);
-                                       Thread.Movement := '';
-                               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;
@@ -2861,7 +2885,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);
@@ -2893,6 +2920,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';
@@ -3050,12 +3085,27 @@ end;
 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
 var
        i: Integer;
-begin
+       node: TTreeNode;
+begin
+       // \83L\83\83\83r\83l\83b\83g\82É\97\9a\97ð\82ª\95\\8e¦\82³\82ê\82Ä\82¢\82½\82ç\81A
+       // \83L\83\83\83r\83l\83b\83g\93à\82Ì\83A\83C\83e\83\80\82à\8dí\8f\9c\82·\82é\81B
+       if (FTreeType = gttHistory) then begin
+               node := TreeView.Items.GetFirstNode;
+               while (node <> nil) do begin
+                       if ( TFavoriteThreadItem(node.Data).Item  = threadItem ) then begin
+                               TreeView.Items.Delete(node);
+                               TreeView.Refresh;
+                               node := nil;
+                       end else begin
+                               node := node.GetNext;
+                       end;
+               end;
+       end;
        for i := 0 to FHistoryList.Count - 1 do begin
-               if threadItem.URL = TFavoriteThreadItem( FHistoryList.Items[i] ).URL then begin
+               if threadItem = TFavoriteThreadItem( FHistoryList.Items[i] ).Item then begin
                        TFavoriteThreadItem( FHistoryList.Items[ i ] ).Free;
                        FHistoryList.Delete(i);
-            FHistoryList.Capacity := FHistoryList.Count;
+                       FHistoryList.Capacity := FHistoryList.Count;
                        Break;
                end;
        end;
@@ -3627,139 +3677,90 @@ 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
-                       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;
-                       BrowserTab.Tabs.BeginUpdate;
-                       try
-                               TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
-                               if ( BrowserTab.Tabs.Count - 1 = i ) and
-                                       ( BrowserTab.TabRect(i).Left
-                                               <= BrowserTab.DisplayRect.Left ) then begin
-                                       BrowserTab.ScrollTabs(-1);
-                               end;
-                               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;
-                       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
-                               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;
-                       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
-                       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;
-                       BrowserTab.Tabs.BeginUpdate;
-                       try
-                               TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
-                               if ( BrowserTab.Tabs.Count - 1 = i ) and
-                                       ( BrowserTab.TabRect(i).Left
-                                               <= BrowserTab.DisplayRect.Left ) then begin
-                                       BrowserTab.ScrollTabs(-1);
-                               end;
-                               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;
-                       finally
-                               BrowserTab.Tabs.EndUpdate;
-                       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;
-
-                       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
+        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
+        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;
+
+    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Ì
@@ -3774,23 +3775,27 @@ 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;
 
        AddRoundNameMenu(ItemReservPMenu);
        AddRoundNameMenu(ListReservPMenu);
@@ -3893,15 +3898,17 @@ var
        wkIntTo: Integer;
     BNum, BRes: string;
     threadItem: TThreadItem;
+    aElement : IHTMLElement;
 begin
-
        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
@@ -3924,6 +3931,7 @@ begin
 
                                if wkIntSt <> 0 then begin
                                        FActiveContent.IDAnchorPopup('');
+                    MoveHisotryManager.pushItem(FActiveContent);
                                        BrowserMovement(IntToStr(wkIntSt));
                                end;
 
@@ -3957,6 +3965,7 @@ begin
                                                AddressComboBox.Items.Insert(0, URL);
                                        end;
                                end;
+                MoveHisotryManager.pushItem(FActiveContent);
                                MoveToURL( URL );
                        end;
                end;
@@ -4244,16 +4253,17 @@ begin
                         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;
                                        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
-                                       BrowserRecord.Move(BrowserRecord.Movement);
-                                       BrowserRecord.Movement := '';
+                               //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;
@@ -4262,7 +4272,7 @@ begin
                                threadItem.UnRead := False;
                                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;
@@ -4459,6 +4469,9 @@ begin
 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;
@@ -4478,7 +4491,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;
@@ -4498,7 +4511,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;
@@ -4593,6 +4606,7 @@ var
 begin
        stRes := 0;
        edRes := 0;
+       Thread.JumpAddress := 0;
        // \83^\83u\82ð\90\90¬
        browserRec := InsertBrowserTab(Thread);
        if (browserRec <> nil) then begin
@@ -4600,23 +4614,22 @@ begin
                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 (StrToInt(threadNumber) = stRes) then begin
+               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
-                       browserRec.Movement := IntToStr( stRes );
+                       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 (browserRec.Movement <> '') then begin
+               end else if (not browserRec.Repaint) and (stRes > 0) then begin
+                       browserRec.Move(IntToStr(stRes));
+                       Thread.JumpAddress := 0;
                        try
-                               //SetContent(browserRec);
-                               browserRec.Move(browserRec.Movement);
-                               browserRec.Movement := '';
                                doc := Idispatch( OleVariant( browserRec.Browser.ControlInterface ).Document ) as IHTMLDocument2;
                                Thread.ScrollTop := doc.Body.ScrollTop;
                        except
@@ -4760,7 +4773,7 @@ begin
                                end;
                        end;
                        // \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 (not ThreadItem.IsLogFile) then begin
                                if AnsiPos(Host, Board.URL) = 0 then
                                        ThreadItem.DownloadHost := Host
                                else
@@ -4828,14 +4841,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:
@@ -5077,7 +5097,7 @@ begin
 
                        ThreadItem := GetActiveContent;
                        if ThreadItem <> nil then begin
-                               Num := StrToInt(s);
+                               Num := StrToInt64(s);
                                FHint.PopupType := gptThread;
                                HTMLCreater.SetResPopupText(FHint, ThreadItem, Num, Num, False, False);
                                if FHint.ResCount <> 0 then
@@ -5802,27 +5822,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);
@@ -5858,7 +5867,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
@@ -5867,16 +5878,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
@@ -6214,26 +6236,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;
@@ -6244,6 +6269,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;
@@ -6254,6 +6280,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;
@@ -6264,6 +6291,7 @@ begin
                FavoriteTreeNameURLCopyPopupMenu.Visible := True;
                FavoriteTreeReloadPopupMenu.Visible := True;
                FavoriteTreeLogDeletePopupMenu.Visible := False;
+               FavoriteTreeItemNameCopyPopupMenu.Visible := True;
        end else begin
                FavoriteTreeBrowseFolderPopupMenu.Visible := False;
                FavoriteTreeDeletePopupMenu.Visible := False;
@@ -6274,6 +6302,7 @@ begin
                FavoriteTreeNameURLCopyPopupMenu.Visible := False;
                FavoriteTreeReloadPopupMenu.Visible := False;
                FavoriteTreeLogDeletePopupMenu.Visible := False;
+               FavoriteTreeItemNameCopyPopupMenu.Visible := False;
        end;
 
 end;
@@ -6387,35 +6416,6 @@ begin
 
 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
@@ -6902,106 +6902,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
-               try
-                       rec := TBrowserRecord( BrowserTab.Tabs.Objects[ i ] );
-                       if( rec <> nil) and (rec.Thread <> nil) then
-                               AStringList.Add( rec.Thread.URL );
-               except
-               end;
-       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
-                       try
-                               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;
-                       except
-                       end;
-                       SaveStringList.SaveToFile(GikoSys.GetAppDir + Filename);
-                       Result := true;
-               end;
-       finally
-               SaveStringList.Free;
-       end;
-end;
-
-function TGikoForm.LoadTabURLs : Boolean;
-const
-       TABFILE = 'tab.sav';
-var
-       i, bound    : Integer;
-       item        : TThreadItem;
-       URLs                            : TStringList;
-       GikoTab                 : TGikoTabAppend;
-       fileName                : string;
-begin
-
-       fileName := ExtractFilePath(Application.ExeName) + TABFILE;
-       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;
-                                       //\8dÅ\8f\89\82Ì\82P\96\87\82É\90Ý\92è \83A\83h\83\8c\83X\82Ì\90Ý\92è\82Ì\82½\82ß\82Ì\83J\83\89\8cÄ\82Ñ
-                                       if BrowserTab.Tabs.Count > 0 then begin
-                       BrowserTab.OnChange(nil);
-                                       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
@@ -7527,46 +7427,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);
@@ -7682,6 +7542,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;
@@ -7827,6 +7688,85 @@ 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);
+
+            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;
+        GikoDM.StoredTaskTrayAction.Tag := 0;
+    end;
+end;
 
 initialization
                                OleInitialize(nil);