OSDN Git Service

>123 型のリンクのポップアップができなくなってしまったのを修正
[gikonavigoeson/gikonavi.git] / Giko.pas
index 82b54cb..b6378b2 100644 (file)
--- a/Giko.pas
+++ b/Giko.pas
@@ -13,7 +13,7 @@ uses
        MSHTML_TLB,
 {$IFEND}
        IdHTTP, ActiveX, ActnList, ImgList,
-    ToolWin, Buttons, {Clipbrd,} {HTTPApp,} YofUtils, IdComponent,
+       ToolWin, Buttons, {Clipbrd,} {HTTPApp,} YofUtils, IdComponent,
        ShellAPI,  UrlMon, Tabs, IdGlobal, StrUtils,
        CommCtrl, IniFiles, Dialogs,
        GikoSystem, GikoUtil, Setting, BoardGroup, ThreadControl, ItemDownload,
@@ -21,7 +21,8 @@ uses
        FavoriteArrange, AddressHistory, Preview, HTMLDocumentEvent, Kotehan,
        HintWindow, GikoCoolBar, GikoListView, ToolBarSetting, ToolBarUtil,
        IndividualAbon, Search, ExternalBoardManager, ExternalBoardPlugInMain,
-       StdActns, GikoXMLDoc, Variants, ExtActns;
+       StdActns, GikoXMLDoc, Variants, ExtActns,IdTCPConnection, IdBaseComponent,
+  IdTCPClient;
 
 type
        TGikoTreeType = (gttNone, gtt2ch, gttHistory, gttFavorite);
@@ -250,7 +251,6 @@ type
                N21: TMenuItem;
                URLC3: TMenuItem;
                URLN2: TMenuItem;
-               N22: TMenuItem;
                N23: TMenuItem;
                ListCoolBar: TGikoCoolBar;
                ListToolBar: TToolBar;
@@ -507,7 +507,7 @@ type
                ExportFavoriteFileAction1: TMenuItem;
                ExportFavoriteFile: TFileSaveAs;
                ToolButton21: TToolButton;
-    CabinetBBSToolButton: TToolButton;
+               CabinetBBSToolButton: TToolButton;
                ToolButton23: TToolButton;
                ToolButton24: TToolButton;
                N6: TMenuItem;
@@ -531,7 +531,6 @@ type
     TmpToolBar: TToolBar;
     TreeSelectNameCopy: TAction;
     TreeSelectNamePupupMenu: TMenuItem;
-    Browser: TWebBrowser;
     BrowserPanel: TPanel;
     SetFocusForBrowserAction: TAction;
     SetFocusForThreadListAction: TAction;
@@ -539,6 +538,21 @@ type
     FileRun1: TFileRun;
     ThreadlistMaxAndFocusAction: TAction;
     BrowserMaxAndFocusAction: TAction;
+    UpBoardButton: TToolButton;
+    SelectTimer: TTimer;
+    SelectThreadSave: TMenuItem;
+    SelectItemSaveForHTML: TAction;
+    FileSaveAs1: TFileSaveAs;
+    N55: TMenuItem;
+    N66: TMenuItem;
+    dat1: TMenuItem;
+    SelectItemSaveForDat: TAction;
+    LogFolderOpenAction: TAction;
+    OpenLogFolder: TMenuItem;
+    Browser: TWebBrowser;
+    LocalRuleView: TToolButton;
+    IdHTTP1: TIdHTTP;
+    TabSave: TMenuItem;
                                procedure FormCreate(Sender: TObject);
                procedure FormDestroy(Sender: TObject);
                procedure CabinetPanelHide(Sender: TObject);
@@ -554,7 +568,6 @@ type
                        EndIndex: Integer; OldState, NewState: TItemStates);
                procedure BrowserStatusTextChange(Sender: TObject;
                        const Text: WideString);
-               procedure BrowserTitleChange(Sender: TObject; const Text: WideString);
                procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
                procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
                        var AllowChange: Boolean);
@@ -864,6 +877,20 @@ type
     procedure BrowserMaxAndFocusActionUpdate(Sender: TObject);
     procedure ThreadlistMaxAndFocusActionExecute(Sender: TObject);
     procedure ListViewExit(Sender: TObject);
+    procedure SetFocusForCabinetActionUpdate(Sender: TObject);
+    procedure ListViewSelectItem(Sender: TObject; Item: TListItem;
+      Selected: Boolean);
+    procedure SelectTimerTimer(Sender: TObject);
+    procedure SelectItemSaveForHTMLExecute(Sender: TObject);
+    procedure KidokuActionExecute(Sender: TObject);
+    procedure MidokuActionExecute(Sender: TObject);
+    procedure SelectItemSaveForDatExecute(Sender: TObject);
+    procedure BrowserPanelCanResize(Sender: TObject; var NewWidth,
+      NewHeight: Integer; var Resize: Boolean);
+    procedure LogFolderOpenActionExecute(Sender: TObject);
+    procedure LogFolderOpenActionUpdate(Sender: TObject);
+    procedure LocalRuleViewClick(Sender: TObject);
+    procedure TabSaveClick(Sender: TObject);
        private
                { Private \90é\8c¾ }
         //RoundList : TRoundList;
@@ -1011,6 +1038,7 @@ type
                // \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;
                function WebBrowserClick(Sender: TObject): WordBool;
+               procedure SkinorCSSFilesCopy(path: string);
        protected
                procedure CreateParams(var Params: TCreateParams); override;
                procedure WndProc(var Message: TMessage); override;
@@ -1176,7 +1204,9 @@ const
        USER_RESIZED            = WM_USER + 2001;
        USER_MINIMIZED                                  = WM_USER + 2002;
        USER_SETLINKBAR                                 = WM_USER + 2003;
+       SELECTTIME_INTERBAL                             = 110;
 
+       BROWSER_COUNT           = 5;    //\83u\83\89\83E\83U\82Ì\90\94
 {$R *.DFM}
 
 procedure TGikoForm.CreateParams(var Params: TCreateParams);
@@ -1215,7 +1245,7 @@ begin
        Self.OnDeactivate := AppFormDeactivate;
        Application.HookMainWindow(Hook);
        Application.OnMessage := HandleAppMessage; //\82È\82ñ\82©\96³\82­\82Ä\82à\91å\8fä\95v\82É\82È\82Á\82½\81@by\81@\82à\82\82ã
-
+       Self.DoubleBuffered := true;
        FTreeType := gttNone;
 
        FSearchDialog := nil;
@@ -1223,19 +1253,23 @@ begin
        BrowserNullTab.Browser := Browser;
        BrowserNullTab.Browser.Navigate(BLANK_HTML);
        FBrowsers := TList.Create;
-       for i := 0 to 4 do begin
-               newBrowser := TWebBrowser.Create(nil);
+       for i := 0 to BROWSER_COUNT -1 do begin
+               FBrowsers.Add(TWebBrowser.Create(nil));
+               newBrowser := FBrowsers[FBrowsers.Count - 1];
                TOleControl(newBrowser).Parent := BrowserPanel;
-               TOleControl(newBrowser).Align := alClient;
+               newBrowser.Align := alNone;
+               newBrowser.Left := 0;
+               newBrowser.Top  := 0;
+        //newBrowser.DoubleBuffered := true;
                newBrowser.OnDocumentComplete   := BrowserDocumentComplete;
                newBrowser.OnBeforeNavigate2    := BrowserBeforeNavigate2;
                newBrowser.OnEnter                              := BrowserEnter;
                newBrowser.OnNewWindow2                 := BrowserNewWindow2;
                newBrowser.OnStatusTextChange   := BrowserStatusTextChange;
-               newBrowser.OnTitleChange                := BrowserTitleChange;
+               //newBrowser.OnTitleChange              := BrowserTitleChange;
                newBrowser.Navigate(BLANK_HTML);
                ShowWindow(newBrowser.Handle, SW_HIDE);
-               FBrowsers.Add(newBrowser);
+
        end;
        BrowserNullTab.Browser.BringToFront;
        ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
@@ -1739,8 +1773,8 @@ end;
 
 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
 begin
-       if GikoForm.WindowState <> wsMinimized then
-               SaveCoolBarSettings;
+//     if GikoForm.WindowState <> wsMinimized then
+//             SaveCoolBarSettings;
        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;
@@ -1758,6 +1792,7 @@ var
        i: Integer;
 //     CoolSet: TCoolSet;
        wp: TWindowPlacement;
+       tmpBool: Boolean;
 begin
 //     Application.OnDeactivate := nil;
 //     Self.OnDeactivate := nil;
@@ -1821,25 +1856,22 @@ begin
 
        try
                //\83^\83u\83N\83\8d\81[\83Y
-               BrowserNullTab.Thread := nil;
-               BrowserTab.OnChange := nil;
-               BrowserTab.Tabs.BeginUpdate;
-               for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
-                       TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
-               end;
-               FActiveContent := nil;
-               BrowserTab.Tabs.Clear;
-               BrowserTab.Tabs.EndUpdate;
-               BrowserTab.OnChange := BrowserTabChange;
+               tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
+               GikoSys.Setting.ShowDialogForAllTabClose := false;
+               AllTabCloseAction.Execute;
+        GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
        except
        end;
-
-       for i := FBrowsers.Count - 1 downto 0 do begin
-               TWebBrowser(FBrowsers[i]).Free;
+       try
+               LockWindowUpdate(Self.Handle);
+               for i := FBrowsers.Count - 1 downto 0 do begin
+                       TWebBrowser(FBrowsers[i]).Free;
+               end;
+               FBrowsers.Clear;
+               FBrowsers.Capacity := 0;
+       finally
+               FBrowsers.Free;
        end;
-       FBrowsers.Clear;
-       FBrowsers.Capacity := 0;
-       FBrowsers.Free;
        try
                if BrowserNullTab <> nil then begin
                        BrowserNullTab.Browser := nil;  {*BrowserNullTab\82ÌBrowser\82Í\90Ý\8cv\8e\9e\82É\93\\82è\95t\82¯\82Ä\82é\93z
@@ -1849,7 +1881,7 @@ begin
                end;
        except
        end;
-
+       LockWindowUpdate(0);
        try
                TreeView.Items.BeginUpdate;
                for i := TreeView.Items.Count - 1 downto 0 do begin
@@ -2003,9 +2035,14 @@ end;
 procedure TGikoForm.ReloadBBS;
 var
        i                       : Integer;
+       tmpBool: Boolean;
 begin
        //\83^\83u\83N\83\8d\81[\83Y
+       tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
+       GikoSys.Setting.ShowDialogForAllTabClose := false;
        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;
@@ -2213,6 +2250,7 @@ function TGikoForm.SetThreadListItem(Board: TBoard): Integer;
 const
        COLUMN: array[0..7] of string = ('\83X\83\8c\83b\83h\96¼', '\83J\83E\83\93\83g', '\8eæ\93¾', '\90V\92\85',
                                                                                                                                         '\96¢\93Ç', '\8f\84\89ñ\97\\96ñ', '\8eæ\93¾\93ú\8e\9e', '\83X\83\8c\8dì\90¬\93ú\8e\9e');
+       COLUMN_NONACQUIREDCOUNT: string = '\96¢\8eæ\93¾';
        COLUMN_ALIGNMENT: array[0..7] of TAlignment = (taLeftJustify, taRightJustify,
                                                                                                                                                                                                 taRightJustify, taRightJustify,
                                                                                                                                                                                                 taRightJustify, taLeftJustify,
@@ -2238,6 +2276,10 @@ begin
                                ListColumn.Alignment := COLUMN_ALIGNMENT[i];
                        end;
                end;
+               if GikoSys.Setting.NonAcquiredCount then
+               begin
+                       ListView.Columns[2].Caption := COLUMN_NONACQUIREDCOUNT;
+               end;
 
                ListView.Items.Count := 0;
                ListView.Items.Clear;
@@ -2411,7 +2453,10 @@ begin
                if ThreadItem.IsLogFile then begin
                        Item.ImageIndex := ITEM_ICON_THREADLOG1;
                        Item.SubItems[0] := IntToStr(ThreadItem.AllResCount);
-                       Item.SubItems[1] := IntToStr(ThreadItem.Count);
+                       if GikoSys.Setting.NonAcquiredCount then
+                               Item.SubItems[1] := IntToStr(ThreadItem.AllResCount - ThreadItem.Count)
+                       else
+                               Item.SubItems[1] := IntToStr(ThreadItem.Count);
                        if ThreadItem.NewResCount = 0 then
                                Item.SubItems[2] := ''
                        else
@@ -2485,7 +2530,7 @@ var
        board                           : TBoard;
        Protocol, Host, Path, Document, Port, Bookmark: string;
 
-       //wkInt: Integer;
+       wkInt: Integer;
        wkIntSt: Integer;
        wkIntTo: Integer;
        ActiveFileName: string;
@@ -2510,10 +2555,15 @@ begin
        if PreviewTimer.Enabled then
                PreviewTimer.Enabled := False;
        Application.CancelHint;
-       if GetActiveContent <> nil then
-               ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
-       else
-               ActiveFileName := '';
+       try
+               if GetActiveContent <> nil then
+                       ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
+               else
+                       ActiveFileName := '';
+       except
+               FActiveContent := nil;
+               Exit;
+       end;
 
        StatusBar.Panels[1].Text := Text;
 
@@ -2588,7 +2638,11 @@ begin
                                URL := Text;
                        end;
                        PathRec := Gikosys.Parse2chURL2(URL);
-                       Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
+                       if (PathRec.FNoParam) then begin
+                               PathRec.FSt := 1;
+                               PathRec.FTo := 1;
+                       end else
+                               Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
                        GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
 
                        if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
@@ -2605,9 +2659,9 @@ begin
                                end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
                                        wkIntTo := wkIntSt;
                                end else if wkIntSt > wkIntTo then begin
-                                       //wkInt := wkIntTo;
+                                       wkInt := wkIntTo;
                                        wkIntTo := wkIntSt;
-                                       wkIntSt := wkIntTo;
+                                       wkIntSt := wkInt;
                                end;
                                //if wkIntSt = 0 then
                                //      wkIntSt := 1;
@@ -2657,19 +2711,6 @@ begin
        end;
 end;
 
-procedure TGikoForm.BrowserTitleChange(Sender: TObject;
-       const Text: WideString);
-var
-       Title: string;
-begin
-       if (Text = BLANK_HTML) or (Text = GikoSys.GetHtmlTempFileName) then
-               Title := CAPTION_NAME
-       else
-               Title := CAPTION_NAME + ' - [' + Text + ']';
-       Caption := Title;
-       //Application.Title := Title;
-end;
-
 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
 var
        SysMenu: HMenu;
@@ -2769,6 +2810,7 @@ begin
                wkBoard := TBoard( FActiveList );
                Sort.SortOrder := FSortOrder;
                Sort.SortIndex := Column.Index;
+               Sort.SortNonAcquiredCountFlag := GikoSys.Setting.NonAcquiredCount;
                wkBoard.CustomSort(ThreadItemSortProc);
                ListView.Refresh;
        end;
@@ -3078,12 +3120,17 @@ begin
                                        if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then
                                                TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
                                end;
-                               if GetActiveContent = Item.ThreadItem then
-                                       InsertBrowserTab(Item.ThreadItem)
-                               else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
-                                       InsertBrowserTab(Item.ThreadItem, True)
-                               else
-                                       InsertBrowserTab(Item.ThreadItem, False);
+                               if GikoSys.Setting.BrowserTabVisible then begin
+                                       if GetActiveContent = Item.ThreadItem then
+                                               InsertBrowserTab(Item.ThreadItem)
+                                       else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
+                                               InsertBrowserTab(Item.ThreadItem, True)
+                                       else
+                                               InsertBrowserTab(Item.ThreadItem, False);
+                               end else begin
+                                       if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
+                       InsertBrowserTab(Item.ThreadItem);
+                               end;
 
                                if Item.State = gdsComplete then begin
                                        PlaySound('New');
@@ -3228,8 +3275,8 @@ begin
                if (FActiveContent <> nil) and (FActiveContent.FBrowser <> nil) and
                        (FActiveContent.FBrowser <> BrowserNullTab.Browser)then begin
                        j := FBrowsers.IndexOf(FActiveContent.FBrowser);
-                       if j = 4 then
-                               FBrowsers.Move(4, 0);
+                       if j = BROWSER_COUNT - 1 then
+                               FBrowsers.Move(BROWSER_COUNT - 1, 0);
                end;
                favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
                if not AddHistory( favItem ) then
@@ -3240,7 +3287,7 @@ begin
                                if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
                                        if TBrowserRecord(BrowserTab.Tabs.Objects[i]).FBrowser = nil then begin
                                                for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
-                                                       if TBrowserRecord(BrowserTab.Tabs.Objects[j]).FBrowser = TWebBrowser(FBrowsers[4]) then begin
+                                                       if TBrowserRecord(BrowserTab.Tabs.Objects[j]).FBrowser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
                                                                TBrowserRecord(BrowserTab.Tabs.Objects[j]).FBrowser := nil;
                                                                if TBrowserRecord(BrowserTab.Tabs.Objects[j]).FEvent <> nil then begin
                                                                        TBrowserRecord(BrowserTab.Tabs.Objects[j]).FEvent.Free;
@@ -3249,9 +3296,9 @@ begin
                                                                break;
                                                        end;
                                                end;
-                                               TBrowserRecord(BrowserTab.Tabs.Objects[i]).FBrowser := TWebBrowser(FBrowsers[4]);
+                                               TBrowserRecord(BrowserTab.Tabs.Objects[i]).FBrowser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
                                                TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
-                                               FBrowsers.Move(4, 0);
+                                               FBrowsers.Move(BROWSER_COUNT - 1, 0);
                                        end;
                                        if ActiveTab then begin
                                                BrowserTab.TabIndex := i;
@@ -3266,7 +3313,7 @@ begin
                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]).FBrowser = TWebBrowser(FBrowsers[4]) then begin
+                               if TBrowserRecord(BrowserTab.Tabs.Objects[j]).FBrowser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
                                        TBrowserRecord(BrowserTab.Tabs.Objects[j]).FBrowser := nil;
                                        if TBrowserRecord(BrowserTab.Tabs.Objects[j]).FEvent <> nil then begin
                                                TBrowserRecord(BrowserTab.Tabs.Objects[j]).FEvent.Free;
@@ -3275,14 +3322,18 @@ begin
                                        break;
                                end;
                        end;
-                       newBrowser.Browser := TWebBrowser(FBrowsers[4]);
-                       FBrowsers.Move(4, 0);
+                       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;
 
                        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 ] ) );
+                       end;// else begin
+                       //end;
                        BrowserTab.Repaint;
                        if ActiveTab then begin
                                BrowserTab.TabIndex := 0;
@@ -3291,7 +3342,7 @@ begin
                end else begin
                        newBrowser := TBrowserRecord.Create;
                        for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
-                               if TBrowserRecord(BrowserTab.Tabs.Objects[j]).FBrowser = TWebBrowser(FBrowsers[4]) then begin
+                               if TBrowserRecord(BrowserTab.Tabs.Objects[j]).FBrowser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
                                        TBrowserRecord(BrowserTab.Tabs.Objects[j]).FBrowser := nil;
                                        if TBrowserRecord(BrowserTab.Tabs.Objects[j]).FEvent <> nil then begin
                                                TBrowserRecord(BrowserTab.Tabs.Objects[j]).FEvent.Free;
@@ -3300,17 +3351,24 @@ begin
                                        break;
                                end;
                        end;
-                       newBrowser.Browser := TWebBrowser(FBrowsers[4]);
-                       FBrowsers.Move(4, 0);
+                       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;
 
                        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 ] ) );
+                       end;
+                       //end;
                        BrowserTab.Repaint;
                        if ActiveTab then begin
-                               BrowserTab.TabIndex := i;
+                               if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
+                                       BrowserTab.TabIndex := 0
+                               else
+                                       BrowserTab.TabIndex := i;
                        end;
                end;
                if(ActiveTab) or (idx = -1) then begin
@@ -3337,16 +3395,22 @@ var
        FileName: string;
        sTitle: string;
 //     HtmlName: string;
-       doc: Variant;
+       doc:  Variant;
        s: string;
 //     OldCursor: TCursor;
        i: Integer;
        url: OleVariant;
        idx: Integer;
+       ThreadItem: TThreadItem;
+       Thread: TBrowserRecord;
+       ThreadTitle, ThreadPTitle: string;
+       ThreadScrollTop: Integer;
+       ThreadIsLog, ThreadUnRead, ThreadNewArraical: boolean;
 begin
-    idx := BrowserTab.TabIndex;
+       Thread := inThread;
+       idx := BrowserTab.TabIndex;
        if (FActiveContent <> nil) and
-               (FActiveContent.Thread <> inThread.Thread) and
+               (FActiveContent.Thread <> Thread.Thread) and
                (Assigned(FActiveContent.Browser.Document)) then begin
                try
                try
@@ -3362,10 +3426,8 @@ begin
                finally
                end;
        end;
-       if inThread = nil then
-               Exit
-       else if inThread.Thread = nil then begin
-               inThread.Browser.Navigate(BLANK_HTML);
+       if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
+               Thread.Browser.Navigate(BLANK_HTML);
                BrowserBoardNameLabel.Caption := '';
                ItemBoardImage.Picture := nil;
                BrowserNameLabel.Caption := '';
@@ -3375,11 +3437,11 @@ begin
                ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
                FActiveContent := nil;
                Exit;
-       end     else if inThread.Browser = nil then begin
-               if FActiveContent.Browser = TWebBrowser(FBrowsers[4]) then
-                       FBrowsers.Move(4, 0);
+       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]).FBrowser = TWebBrowser(FBrowsers[4]) then begin
+                       if TBrowserRecord(BrowserTab.Tabs.Objects[i]).FBrowser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
                                TBrowserRecord(BrowserTab.Tabs.Objects[i]).FBrowser := nil;
                                if TBrowserRecord(BrowserTab.Tabs.Objects[i]).FEvent <> nil then begin
                                        TBrowserRecord(BrowserTab.Tabs.Objects[i]).FEvent.Free;
@@ -3388,44 +3450,54 @@ begin
                                break;
                        end;
                end;
-               inThread.Browser := TWebBrowser(FBrowsers[4]);
-               FBrowsers.Move(4, 0);
+               Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
+               FBrowsers.Move(BROWSER_COUNT - 1, 0);
        end;
-
-       BBSID := inThread.FThread.ParentBoard.BBSID;
-       FileName := inThread.FThread.FileName;
+       ThreadTitle := Thread.Thread.Title;
+       ThreadPTitle := Thread.Thread.ParentBoard.Title;
+       ThreadScrollTop := Thread.Thread.ScrollTop;
+       ThreadIsLog := Thread.Thread.IsLogFile;
+       ThreadItem := Thread.Thread;
+       ThreadNewArraical :=  Thread.Thread.NewArrival;
+       ThreadUnRead := Thread.Thread.UnRead;
+       BBSID := ThreadItem.ParentBoard.BBSID;
+       FileName := ThreadItem.FileName;
 
        if GetCapture = ListView.Handle then
                ReleaseCapture;
 
        Screen.Cursor := crHourGlass;
+
+
        try
-               if inThread.FThread.UnRead then begin
-                       inThread.FThread.ParentBoard.UnRead := inThread.FThread.ParentBoard.UnRead - 1;
-                       if inThread.FThread.ParentBoard.UnRead < 0 then inThread.FThread.ParentBoard.UnRead := 0;
+               if ThreadItem.UnRead then begin
+                       ThreadItem.ParentBoard.UnRead := ThreadItem.ParentBoard.UnRead - 1;
+                       if ThreadItem.ParentBoard.UnRead < 0 then ThreadItem.ParentBoard.UnRead := 0;
                        TreeView.Refresh;
                end;
-               LockWindowUpdate(Self.Handle);
-               ShowWindow(inThread.FBrowser.Handle, SW_SHOW);
-               LockWindowUpdate(0);
-               if (not Assigned(inThread.Browser.Document)) then begin
-                       inThread.Browser.Navigate('about:blank');
-               end;
-               //if inThread.Browser <> BrowserNullTab.Browser then begin
-                       while (inThread.Browser.ReadyState <> READYSTATE_COMPLETE) and
-                                       (inThread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
-                               Application.ProcessMessages;
-                               if idx <> BrowserTab.TabIndex then begin
-                                       BrowserTab.OnChange(nil);
-                                       Exit;
-                               end;
+          //   LockWindowUpdate(Self.Handle);
+               if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
+                       if (FActiveContent.Browser <> BrowserNullTab.Browser) then
+                               ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
+               end;
+               ShowWindow(Thread.FBrowser.Handle, SW_SHOW);
+               //LockWindowUpdate(0);
+               if (not Assigned(Thread.Browser.Document)) then begin
+                       Thread.Browser.Navigate('about:blank');
+               end;
+               FActiveContent := Thread;
+               while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
+                               (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
+                       Application.ProcessMessages;
+                       if idx <> BrowserTab.TabIndex then begin
+                               Exit;
                        end;
-               //end;
-
-               if not inThread.FThread.IsLogFile then begin
+               end;
+               if not ThreadIsLog then begin
+                       Self.Caption := CAPTION_NAME ;
                        try
                                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(inThread.Browser.ControlInterface).Document) as IHTMLDocument2;
+                               doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
                                doc.open;
                                doc.charset := 'Shift_JIS';
                                doc.Write(s);
@@ -3433,60 +3505,79 @@ begin
                        finally
                        end;
                end else begin
+                       Self.Caption := CAPTION_NAME + ' - [' + ThreadTitle + ']';
                        //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(inThread.Repaint) or (inThread.OnlyHundred <> GikoSys.OnlyAHundredRes)then begin
+                       if(Thread.Repaint) or (Thread.OnlyHundred <> GikoSys.OnlyAHundredRes)then begin
                                //Thread.LastSize := ThreadItem.Size;
-                               inThread.Repaint := false;
+                               Thread.Repaint := false;
                                try
-                                       doc := Idispatch( olevariant(inThread.Browser.ControlInterface).Document) as IHTMLDocument2;
-                                       GikoSys.CreateHTML2(doc, inThread.FThread, sTitle);
+                                       Thread.Browser.OnStatusTextChange := nil;
+                                       doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
+                                       GikoSys.CreateHTML2(doc, ThreadItem, sTitle);
+
+                       //              if (Assigned(Thread.Browser)) and (Thread.Browser <> nil) then
+                                       Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
                                        //\82È\82º\82©\82±\82±\82Å\96¾\8e¦\93I\82ÉDocumentComplete\82ð\8cÄ\82Î\82È\82¢\82Æ\82¤\82Ü\82­\82¢\82©\82È\82¢
-                                       inThread.FBrowser.OnDocumentComplete(inThread.FBrowser, inThread.FBrowser.Parent, url);
-                                       inThread.OnlyHundred := GikoSys.OnlyAHundredRes;
+                                       //\92Ç\8bL\81@200406/19
+                                       //Visible\82Ì\82Æ\82«\82µ\82©DocumentComplete\82Í\8cÄ\82Î\82ê\82È\82¢\82ç\82µ\82¢
+                                       Thread.FBrowser.OnDocumentComplete(Thread.FBrowser, Thread.FBrowser.Parent, url);
+                                       Thread.OnlyHundred := GikoSys.OnlyAHundredRes;
                                        Application.ProcessMessages;
                                        //\82±\82±\82ÅApplication.ProcessMessages\82ð\8cÄ\82Ô\82±\82Æ\82É\82æ\82Á\82ÄWebBrowser\82ð\8dX\90V\82³\82¹\82é\81B
                                        //\91\8a\82µ\82È\82¢\82Æ\88ê\89æ\96Ê\95ª\82µ\82©\95`\89æ\82Å\82«\82Ä\82È\82¢\82Ì\82Å\82»\82ê\88È\8fã\82Ì\83X\83N\83\8d\81[\83\8b\97Ê\82ð\8ew\92è\82µ\82Ä\82à\96³\8cø\82É\82È\82é
                                        //\81@by\82à\82\82ã(2004/01/20)
-
-                                       if inThread.FThread.UnRead then
-                                               BrowserMovement('new', inThread)
-                                       else if inThread.FThread.ScrollTop <> 0 then begin
-                                               try
-                                                       doc.Body.ScrollTop := inThread.FThread.ScrollTop;
-                                               except
-                                                       on E: Exception do
-                                                               MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
+                                       try
+                                               //if (Assigned(Thread)) and (Assigned(ThreadItem))then begin
+                                                       if(Thread <> nil) and (ThreadItem <>nil) then begin
+                                                               if ThreadUnRead then
+                                                                       BrowserMovement('new', Thread)
+                                                               else if ThreadScrollTop <> 0 then begin
+                                                                       try
+                                                                               doc.Body.ScrollTop := ThreadScrollTop;
+                                                                       except
+                                                                               on E: Exception do
+                                                                                       MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
+                                                                       end;
+                                                               end;
+                                               //      end;
+                                               end else begin
+                                                       FActiveContent := nil;
+                                                       BrowserTab.Repaint;
+                                                       Exit;
                                                end;
+                                       except
+                                               FActiveContent := nil;
+                                               BrowserTab.Repaint;
+                                               Exit;
                                        end;
                                finally
                                         //     Application.ProcessMessages;
                                end;
                        end;
-                       inThread.FThread.UnRead := False;
+                       ThreadItem.UnRead := False;
                        ListView.Refresh;
                end;
-               if(FActiveContent <> nil) and (FActiveContent <> inThread) then begin
-                       if (FActiveContent.Browser <> BrowserNullTab.Browser) then
-                               ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
-               end;
-               FActiveContent := inThread;
+               if (Assigned(Thread)) and (Assigned(Thread.Thread)) and (Thread <> nil) and (ThreadItem <>nil) then begin
+                       //FActiveContent := Thread;
 
-               BrowserBoardNameLabel.Caption := inThread.FThread.ParentBoard.Title;
-               ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
-               BrowserNameLabel.Caption := inThread.FThread.Title;
-               ItemImage.Picture := nil;
-               if inThread.FThread.IsLogFile then
-                       if inThread.FThread.NewArrival then
-                               ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
+                       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(0, ItemImage.Picture.Bitmap)
-               else
-                       ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
-
-               ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
-               BrowserNameLabel.Left := ItemImage.Left + 20;
+                               ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
 
+                       ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
+                       BrowserNameLabel.Left := ItemImage.Left + 20;
+               end else begin
+                       FActiveContent := nil;
+               end;
        finally
                Screen.Cursor := crDefault;
        end;
@@ -3494,10 +3585,18 @@ end;
 
 function TGikoForm.GetActiveContent: TThreadItem;
 begin
-       if( FActiveContent <> nil) and (FActiveContent.Thread <> nil)then
-               Result := FActiveContent.Thread
-       else
+       try
+               if( Assigned(FActiveContent) ) and (Assigned(FActiveContent.Thread))
+                       and (FActiveContent <> nil) and (FActiveContent.Thread <> nil) then
+                       Result := FActiveContent.Thread
+               else begin
+            FActiveContent := nil;
+                       Result := nil;
+               end;
+       except
+               FActiveContent := nil;
                Result := nil;
+       end;
 end;
 
 procedure TGikoForm.SetActiveList(Obj: TObject);
@@ -3517,7 +3616,7 @@ begin
                ListView.Selected := nil;
 //     ListView.Columns.Clear;
 
-               Caption := CAPTION_NAME;
+               Self.Caption := CAPTION_NAME;
                //Application.Title := CAPTION_NAME;
 
                if Obj is TBBS then begin
@@ -3712,9 +3811,9 @@ begin
 //                             SetContent(ThreadItem);
                                FHistoryList.Move(i, 0);
                                if FTreeType = gttHistory then
-                                       if TreeView.TopItem <> TreeView.Items[ i ] then
-                                               TreeView.Items[ i ].MoveTo( TreeView.TopItem, naInsert );
-                Result := false;
+                                       if TreeView.Items.GetFirstNode <> TreeView.Items[ i ] then
+                                               TreeView.Items[ i ].MoveTo( TreeView.Items.GetFirstNode, naInsert );
+                                                               Result := false;
                                Exit;
                        end;
                end;
@@ -3728,7 +3827,7 @@ begin
 
        if FTreeType = gttHistory then begin
                Node := TreeView.Items.Add( nil, favItem.Title );
-               Node.MoveTo( TreeView.TopItem, naInsert );
+               Node.MoveTo( TreeView.Items.GetFirstNode, naInsert );
                {
                if favItem.NewArrival then begin
                        Node.ImageIndex := ITEM_ICON_THREADNEW1;
@@ -3773,7 +3872,7 @@ begin
             else if TObject(FHistoryList[ i ]) is TFavoriteBoardItem then
                 TFavoriteBoardItem(FHistoryList[ i ]).Free;
 
-            //FHistoryList.Delete(i);
+                       //FHistoryList.Delete(i);
         end;
        except
        end;
@@ -3894,7 +3993,7 @@ begin
                        FTreeType := gtt2ch;
                        HistoryToolBar.Hide;
                        SetBoardTreeNode( inBBS );
-                       TreeView.TopItem.Expanded := True;                              //?c???[?g?b?v???????J??
+                       TreeView.Items.GetFirstNode.Expanded := True;                           //?c???[?g?b?v???????J??
                        //?c???[??g?b?v?????I????
                        if GetActiveList = nil then
                                TreeView.Selected := TreeView.Items[0]
@@ -3951,7 +4050,7 @@ begin
                        FTreeType := gtt2ch;
                        HistoryToolBar.Hide;
                        SetBoardTreeNode( inBBS );
-                       TreeView.TopItem.Expanded := True;                              //\83c\83\8a\81[\83g\83b\83v\8d\80\96Ú\82¾\82¯\82ð\8aJ\82­
+                       TreeView.Items.GetFirstNode.Expanded := True;                           //\83c\83\8a\81[\83g\83b\83v\8d\80\96Ú\82¾\82¯\82ð\8aJ\82­
                        //\83c\83\8a\81[\82Ì\83g\83b\83v\8d\80\96Ú\82ð\91I\91ð\82·\82é
                        if GetActiveList = nil then begin
                                try
@@ -4120,6 +4219,22 @@ begin
                        end;
                        SetActiveList( Item );
                end;
+
+               if Item is TBoard then begin // not TCategory
+                       if GikoSys.Setting.ListOrientation = gloHorizontal then begin
+                               if GikoSys.Setting.ListWidthState = glsMax then begin
+                                       BrowserMinAction.Execute;
+                                       if GikoForm.Visible then
+                                               ListView.SetFocus;
+                               end;
+                       end else begin
+                               if GikoSys.Setting.ListHeightState = glsMax then begin
+                                       BrowserMinAction.Execute;
+                                       if GikoForm.Visible then
+                                               ListView.SetFocus;
+                               end;
+                       end;
+               end;
        end;
 end;
 
@@ -4200,7 +4315,17 @@ begin
                InsertBrowserTab(ThreadItem);
        end;
 
-
+       if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
+               if GikoSys.Setting.ListOrientation = gloHorizontal then begin
+                       if GikoSys.Setting.ListWidthState = glsMin then begin
+                               BrowserMaxAndFocusAction.Execute;
+                       end;
+               end else begin
+                       if GikoSys.Setting.ListHeightState = glsMin then begin
+                               BrowserMaxAndFocusAction.Execute;
+                       end;
+               end;
+       end;
 end;
 
 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
@@ -4228,6 +4353,18 @@ begin
                        ThreadItem := TThreadItem(ListView.Selected.Data);
                        DownloadContent(ThreadItem, shiftDown);
                //end;
+               
+               if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
+                       if GikoSys.Setting.ListOrientation = gloHorizontal then begin
+                               if GikoSys.Setting.ListWidthState = glsMin then begin
+                                       BrowserMaxAndFocusAction.Execute;
+                               end;
+                       end else begin
+                               if GikoSys.Setting.ListHeightState = glsMin then begin
+                                       BrowserMaxAndFocusAction.Execute;
+                               end;
+                       end;
+               end;
        end;
 end;
 procedure TGikoForm.BrowserMovement(const AName: string; BrowserRecord: TBrowserRecord);
@@ -4791,11 +4928,12 @@ begin
 //     Mouse.CursorPos := BrowserSizeButton.ClientToScreen(Point(
 //                                                                                             System.Round(BrowserToolBar.ButtonWidth div 2),
 //                                                                                             System.Round(BrowserToolBar.ButtonHeight div 2)));
-       BrowserTab.OnChange(nil);
+       //BrowserTab.OnChange(nil);
 end;
 
 procedure TGikoForm.BrowserMinActionExecute(Sender: TObject);
 begin
+
        if GikoSys.Setting.ListOrientation = gloHorizontal then begin
                case GikoSys.Setting.ListWidthState of
                        glsMax, glsNormal: begin
@@ -4865,14 +5003,6 @@ var
 begin
        Item := GetActiveContent;
        if Item = nil then Exit;
-
-       if Item.Count >= 1000 then begin
-               msg := '\82±\82Ì\83X\83\8c\83b\83h\82Í\83\8c\83X\90\94\82ª\82P\82O\82O\82O\82ð\92´\82¦\82Ä\82¢\82é\82Ì\82Å\8f\91\8d\9e\82Ý\8fo\97\88\82Ü\82¹\82ñ\81B' + #13#10
-                                + '\90V\83X\83\8c\83b\83h\82ð\92T\82µ\82Ä\82­\82¾\82³\82¢\81B';
-               if MsgBox(Handle, msg, '\8cx\8d\90', MB_YESNO or MB_ICONEXCLAMATION) <> 7 then begin
-                                               Exit;
-                               end;
-       end;
        Editor := TEditorForm.Create(Self);
        Editor.SetThreadItem(Item);
     GikoSys.LoadEditorKeySetting(Editor.ActionList);
@@ -5081,7 +5211,7 @@ begin
 
        if FIsMinimize = mtMinimized then begin
                if FActiveContent <> nil then begin
-                       Application.ProcessMessages;
+                       //Application.ProcessMessages;
                        doc := Idispatch( olevariant(FActiveContent.Browser.ControlInterface).Document) as IHTMLDocument2;
                        doc.Body.ScrollTop := FActiveContent.Thread.ScrollTop;
                        FIsMinimize := mtNone;
@@ -5236,7 +5366,7 @@ begin
                        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, 4);
+                                       FBrowsers.Move(j, BROWSER_COUNT - 1);
                        end;
                        TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
                        BrowserTab.Tabs.Delete(i);
@@ -5255,7 +5385,7 @@ begin
                                ( 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[4]) )then
+                                                = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) )then
                                        begin
                                                TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser := nil;
                                                if TBrowserRecord(BrowserTab.Tabs.Objects[j]).FEvent <> nil then begin
@@ -5266,12 +5396,13 @@ begin
                                        end;
                                end;
                                TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
-                                        :=  TWebBrowser(FBrowsers[4]);
+                                        :=  TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
                                TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
-                               FBrowsers.Move(4, 0);
+                               FBrowsers.Move(BROWSER_COUNT - 1, 0);
                        end;
                        BrowserTab.Tabs.EndUpdate;
-                       BrowserTab.OnChange(nil);
+                       if( FActiveContent = nil) then
+                               BrowserTab.OnChange(nil);
                        Exit;
                end;
        end;
@@ -5290,6 +5421,7 @@ begin
                                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;
@@ -5299,7 +5431,7 @@ begin
                        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, 4);
+                                       FBrowsers.Move(j, BROWSER_COUNT - 1);
                        end;
                        TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
                        BrowserTab.Tabs.Delete(i);
@@ -5315,7 +5447,7 @@ begin
                                ( 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[4]) )then
+                                                = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) )then
                                        begin
                                                TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser := nil;
                                                if TBrowserRecord(BrowserTab.Tabs.Objects[j]).FEvent <> nil then begin
@@ -5326,13 +5458,14 @@ begin
                                        end;
                                end;
                                TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
-                                        :=  TWebBrowser(FBrowsers[4]);
+                                        :=  TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
                                TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
-                               FBrowsers.Move(4, 0);
+                               FBrowsers.Move(BROWSER_COUNT - 1, 0);
                        end;
 
                        BrowserTab.Tabs.EndUpdate;
-                       BrowserTab.OnChange(nil);
+                       if( FActiveContent = nil) then
+                               BrowserTab.OnChange(nil);
                        Exit;
                end;
        end;
@@ -5388,13 +5521,6 @@ begin
        Item := GetActiveContent;
        if Item = nil then Exit;
 
-       if Item.Count >= 1000 then begin
-               msg := '\82±\82Ì\83X\83\8c\83b\83h\82Í\83\8c\83X\90\94\82ª\82P\82O\82O\82O\82ð\92´\82¦\82Ä\82¢\82é\82Ì\82Å\8f\91\8d\9e\82Ý\8fo\97\88\82Ü\82¹\82ñ\81B' + #13#10
-                                + '\90V\83X\83\8c\83b\83h\82ð\92T\82µ\82Ä\82­\82¾\82³\82¢\81B';
-               if MsgBox(Handle, msg, '\8cx\8d\90', MB_YESNO or MB_ICONEXCLAMATION) <> 7 then begin
-                       Exit;
-               end;
-       end;
        Editor := TEditorForm.Create(Self);
        Editor.SetThreadItem(Item);
        Editor.BodyEdit.Text := '>>' + IntToStr(Number) + #13#10;
@@ -5418,7 +5544,6 @@ begin
        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);
 
@@ -5592,7 +5717,10 @@ procedure TGikoForm.AllTabCloseActionExecute(Sender: TObject);
 var
        i: Integer;
 begin
-       //SetContent(BrowserNullTab);
+       if GikoSys.Setting.ShowDialogForAllTabClose then
+               if(MessageDlg('\91S\82Ä\82Ì\83^\83u\82ð\95Â\82\82Ä\82æ\82ë\82µ\82¢\82Å\82·\82©\81H', mtConfirmation,[mbOk, mbCancel], 0) = mrCancel ) then
+                       Exit;
+
        FActiveContent := nil;
        BrowserNullTab.Thread := nil;
        BrowserTab.OnChange := nil;
@@ -5604,6 +5732,7 @@ begin
        BrowserTab.Tabs.EndUpdate;
        BrowserTab.OnChange := BrowserTabChange;
        SetContent(BrowserNullTab);
+       Self.Caption := CAPTION_NAME ;
 end;
 
 procedure TGikoForm.TreeSelectBoradReloadExecute(Sender: TObject);
@@ -5783,41 +5912,45 @@ begin
                Html := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.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
-                       Text := ZenToHan(Text);
+                       if GikoSys.Setting.ResAnchorJamp then begin
+                               Text := ZenToHan(Text);
 
-                       if(AnsiPos('>>', Text) = 1) then begin
-                               Text := Copy(Text, 3, Length(Text) - 2);
-                       end else begin
-                               Text := Copy(Text, 2, Length(Text) - 1);
+                               if(AnsiPos('>>', Text) = 1) then begin
+                                       Text := Copy(Text, 3, Length(Text) - 2);
+                               end else begin
+                                       Text := Copy(Text, 2, Length(Text) - 1);
+                               end;
+                               if AnsiPos('-', Text) <> 0 then begin
+                                       wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
+                                       Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
+                                       wkIntTo := StrToIntDef(Text, 0);
+                                       if wkIntTo < wkIntSt then
+                                               wkIntSt := wkIntTo;
+                               end else
+                                       wkIntSt := StrToIntDef(Text, 0);
+
+                               if wkIntSt <> 0 then
+                                       BrowserMovement(IntToStr(wkIntSt));
                        end;
-                       if AnsiPos('-', Text) <> 0 then begin
-                               wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
-                               Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
-                               wkIntTo := StrToIntDef(Text, 0);
-                               if wkIntTo < wkIntSt then
-                                       wkIntSt := wkIntTo;
-                       end else
-                               wkIntSt := StrToIntDef(Text, 0);
-
-                       if wkIntSt <> 0 then
-                               BrowserMovement(IntToStr(wkIntSt));
-
                end else begin
                        URL := GikoSys.GetHRefText(Html);
                        URL := GikoSys.HTMLDecode(URL);
-                       //\83A\83h\83\8c\83X\83o\81[\82Ì\97\9a\97ð
-                       if GikoSys.Setting.LinkAddAddressBar then begin
-                               idx := AddressComboBox.Items.IndexOf(URL);
-                               if idx = -1 then begin
-                                       AddressComboBox.Items.Insert(0, URL);
-                                       if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
-                                               AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
-                               end else begin
-                                       AddressComboBox.Items.Delete(idx);
-                                       AddressComboBox.Items.Insert(0, URL);
+                       if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
+                               ( AnsiPos('ftp://', URL) = 1) then begin
+                               //\83A\83h\83\8c\83X\83o\81[\82Ì\97\9a\97ð
+                               if GikoSys.Setting.LinkAddAddressBar then begin
+                                       idx := AddressComboBox.Items.IndexOf(URL);
+                                       if idx = -1 then begin
+                                               AddressComboBox.Items.Insert(0, URL);
+                                               if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
+                                                       AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
+                                       end else begin
+                                               AddressComboBox.Items.Delete(idx);
+                                               AddressComboBox.Items.Insert(0, URL);
+                                       end;
                                end;
+                               MoveToURL( URL );
                        end;
-                       MoveToURL( URL );
                end;
        end;
 
@@ -5909,7 +6042,6 @@ procedure TGikoForm.BrowserTabChange(Sender: TObject);
 var
        i, j: Integer;
        idx: Integer;
-       ThreadItem: TThreadItem;
 begin
 
 //     if NewTab = -1 then
@@ -5930,11 +6062,11 @@ begin
                        end else begin
                                if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
                                        (FActiveContent.Browser <> BrowserNullTab.Browser) and
-                                       (FActiveContent.Browser = TWebBrowser(FBrowsers[4])) then
-                                       FBrowsers.Move(4, 0);
+                                       (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
+                                       FBrowsers.Move(BROWSER_COUNT - 1, 0);
 
                                for i := 0 to BrowserTab.Tabs.Count - 1 do begin
-                                       if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[4]) then begin
+                                       if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
                                                TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := nil;
                                                TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
                                                if TBrowserRecord(BrowserTab.Tabs.Objects[i]).FEvent <> nil then begin
@@ -5943,18 +6075,24 @@ begin
                                                end;
                                        end;
                                end;
-                               TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[4]);
+                               TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
                                TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
-                               FBrowsers.Move(4, 0);
+                               FBrowsers.Move(BROWSER_COUNT - 1, 0);
                        end;
-                       ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Thread;
                        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 then
-                               AddressComboBox.Text := ThreadItem.URL;
+                       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
+               SetFocusForBrowserAction.Execute;       
+
                end;
 
        end;
@@ -6054,6 +6192,7 @@ begin
                BrowserBottomPanel.Visible := False;
 //             BrowserTab.Visible := False;
 //             BrowserTopPanel.Height := 26;
+               AllTabCloseAction.Execute;
        end;
 end;
 
@@ -6139,12 +6278,14 @@ begin
                                BrowserRecord.FEvent.OnClick := WebBrowserClick;  //\92Ç\89Á\82µ\82½OnClick\83C\83x\83\93\83g
                        end;
                end else begin
+               if GetActiveContent <> nil then begin
                                FDispHtmlDocument := Idispatch(OleVariant(Browser.ControlInterface).Document) as DispHTMLDocument;
                                if FEvent <> nil then
                                        FEvent.Free;
                                FEvent := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
                                FEvent.OnContextMenu := OnDocumentContextMenu;
                                FEvent.OnClick := WebBrowserClick;  //\92Ç\89Á\82µ\82½OnClick\83C\83x\83\93\83g
+                       end;
                end;
        end;
 end;
@@ -6806,6 +6947,16 @@ begin
                        Exit;
 
                InsertBrowserTab(ThreadItem, ActiveTab);
+
+               if GikoSys.Setting.ListOrientation = gloHorizontal then begin
+                       if GikoSys.Setting.ListWidthState = glsMin then begin
+                               BrowserMaxAndFocusAction.Execute;
+                       end;
+               end else begin
+                       if GikoSys.Setting.ListHeightState = glsMin then begin
+                               BrowserMaxAndFocusAction.Execute;
+                       end;
+               end;
        end;
 end;
 
@@ -6892,6 +7043,8 @@ procedure TGikoForm.MoveToURL(URL: string);
 
 var
        protocol, host, path, document, port, bookmark : string;
+       URL2, protocol2, host2, path2, document2, port2, bookmark2 : string;
+       tmp1, tmp2: string;
        BBSID, BBSKey: string;
        Board: TBoard;
        ThreadItem: TThreadItem;
@@ -7000,12 +7153,21 @@ begin
                        Board := BBSs[ 0 ].FindBBSID( Copy(BBSID, 1 , Length(BBSID) - 1) );
                end;
                if Board = nil then begin
-                       GikoSys.OpenBrowser(URL, gbtUserApp);
-                       Exit;
-                       //Board := GikoSys.GetUnknownBoard( nil, boardURL );
-                       //if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
-                       //      ShowBBSTree( BBSs[ 1 ] );
+                        // \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(URL, gbtUserApp);
+                        Exit;
+               end else begin
+                       // \8aO\95\94\82Ì\94Â\82È\82Ì\82É2ch\82ÌURL\82É\82³\82ê\82Ä\82µ\82Ü\82Á\82½\93z\82ð\82±\82±\82Å\8am\94F\82·\82é
+                       URL2 :=  Board.URL;
+                       GikoSys.ParseURI(URL2 , protocol2, host2, path2, document2, port2, bookmark2 );
+                       tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
+                       tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
+                       if (tmp1 <> tmp2) then begin
+                               GikoSys.OpenBrowser(URL, gbtUserApp);
+                               Exit;
+                       end;
                end;
+
                if not Board.IsThreadDatRead then
                        GikoSys.ReadSubjectFile(Board);
                URL := GikoSys.Get2chBrowsableThreadURL( URL );
@@ -7320,9 +7482,7 @@ begin
                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
@@ -7365,24 +7525,27 @@ var
        Num: Integer;
        ThreadItem: TThreadItem;
 begin
+       Result := False;
        Doc := FactiveContent.FBrowser.Document as IHtmlDocument2;
-       Range := Doc.selection.createRange as IHTMLTxtRange;
-       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;
-                       SetResPopupText(ThreadItem, Num, Num, False, False);
-                       if FHint.ResCount <> 0 then
-                               ShowTextPopup;
-                       Result := False;
-               end else
+       if Assigned(Doc) then begin
+               Range := Doc.selection.createRange as IHTMLTxtRange;
+               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;
+                               SetResPopupText(ThreadItem, Num, Num, False, False);
+                               if FHint.ResCount <> 0 then
+                                       ShowTextPopup;
+                               Result := False;
+                       end else
+                               Result := True;
+               end else begin
                        Result := True;
-       end else begin
-               Result := True;
+               end;
        end;
 end;
 
@@ -7425,8 +7588,8 @@ begin
                 // \95\8e\9a\83R\81[\83h\82Í\83v\83\89\83O\83C\83\93\82É\94C\82¹\82é
                 for i := StNum to ToNum do begin
                     Line := i;
-                    //\82±\82±\82Å\82Q\82¿\82á\82ñ\82Ë\82é\82Ìdat\82Ì\8c`\8e®\82Å\82P\8ds\93Ç\82Ý\8d\9e\82ß\82ê\82Î¥¥¥\81B\81«\93Ç\82ß\82é\82æ\82¤\82É\82È\82Á\82½
-                    tmp := boardPlugIn.GetDat( DWORD( threadItem ), i );
+                                       //\82±\82±\82Å\82Q\82¿\82á\82ñ\82Ë\82é\82Ìdat\82Ì\8c`\8e®\82Å\82P\8ds\93Ç\82Ý\8d\9e\82ß\82ê\82Î¥¥¥\81B\81«\93Ç\82ß\82é\82æ\82¤\82É\82È\82Á\82½
+                                       tmp := boardPlugIn.GetDat( DWORD( threadItem ), i );
                     if (tmp <> '') And ( not GikoSys.FAbon.CheckAbonPopupRes(tmp) And( not GikoSys.FAbon.CheckIndividualAbonList(line))) then begin
                         Res := GikoSys.DivideStrLine(tmp);
                         if (GikoSys.Setting.ShowMail = false) or (Length(res.FMailTo) = 0) then
@@ -7704,7 +7867,7 @@ var
 begin
 
        LinkToolButton := TLinkToolButton( Sender );
-       SenderNode := TreeNodeDataFind( FavoriteTreeView.TopItem, LinkToolButton.Data );
+       SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
 
        FavoriteDragDrop( SenderNode, Source );
 
@@ -8433,6 +8596,9 @@ var
        FilterList : TStringList;
        i: Integer;
 begin
+       if(FActiveContent <> nil) and (FActiveContent.FBrowser <> nil )
+               and (FActiveContent.FBrowser.Busy) then Exit;
+
        // \83{\83^\83\93\82Ì\8dX\90V
        AllResAction.Checked := True;
        SelectResAction.Checked := False;
@@ -8771,7 +8937,7 @@ begin
        CabinetHistoryAction.Checked := False;
 
        // \82¨\8bC\82É\93ü\82è\82Ì\83c\83\8a\81[\82ð\93W\8aJ
-       FavoriteTreeView.TopItem.Expanded := True;
+       FavoriteTreeView.Items.GetFirstNode.Expanded := True;
 
 end;
 
@@ -8872,7 +9038,7 @@ begin
 
                LinkToolButton := TLinkToolButton( Source );
                //ShowMessage(LinkToolButton.Text);
-               SourceNode := TreeNodeDataFind( FavoriteTreeView.TopItem, LinkToolButton.Data );
+               SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
                FavoriteMoveTo( SenderNode, SourceNode );
 
        end else if Source = BrowserTab then begin
@@ -9408,15 +9574,11 @@ begin
        end else if (X = FMouseDownPos.X) and (Y = FMouseDownPos.Y) then begin
                if GikoSys.Setting.ListOrientation = gloHorizontal then begin
                        if GikoSys.Setting.ListWidthState = glsMin then begin
-                               BrowserMaxAction.Execute;
-                               if GikoForm.Visible then
-                                       Browser.SetFocus;
+                               BrowserMaxAndFocusAction.Execute;
                        end;
                end else begin
                        if GikoSys.Setting.ListHeightState = glsMin then begin
-                               BrowserMaxAction.Execute;
-                               if GikoForm.Visible then
-                                       Browser.SetFocus;
+                               BrowserMaxAndFocusAction.Execute;
                        end;
                end;
        end;
@@ -9485,6 +9647,7 @@ begin
 end;
 procedure TGikoForm.ExportFavoriteFileAccept(Sender: TObject);
 begin
+
        if FavoriteDM.SaveFavoriteFile( ExportFavoriteFile.Dialog.FileName ) Then begin
                ShowMessage('\83t\83@\83C\83\8b\82ð\8fo\97Í\82µ\82Ü\82µ\82½');
        end else begin
@@ -9636,10 +9799,16 @@ begin
                                Header := CustomStringReplace(Header, '</b>', '',true);
                                Header := CustomStringReplace(Header, '<b>', '',true);
                        end;
+                       if ThreadItem.IsBoardPlugInAvailable then begin
+                               Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
+                               Body := CustomStringReplace(Body, '<br>', #13#10,true);
+                       end else begin
+                               Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
+                               Body := CustomStringReplace(Body, ' <br>', #13#10,true);
+                               Body := CustomStringReplace(Body, '<br> ', #13#10,true);
+                               Body := CustomStringReplace(Body, '<br>', #13#10,true);
 
-                       //Body := CustomStringReplace(Res.FBody, '<br> ', #13#10,true);
-                       Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
-                       Body := CustomStringReplace(Body, '<br>', #13#10,true);
+                       end;
                        Body := CustomStringReplace(Body, '</a>', '',true);
 
                        Body := GikoSys.DeleteLink(Body);
@@ -9883,6 +10052,22 @@ begin
                SetActiveList(Node.data);
        end;
 
+       if TObject( Node.Data ) is TBoard then begin // not TCategory
+               if GikoSys.Setting.ListOrientation = gloHorizontal then begin
+                       if GikoSys.Setting.ListWidthState = glsMax then begin
+                               BrowserMinAction.Execute;
+                               if GikoForm.Visible then
+                                       ListView.SetFocus;
+                       end;
+               end else begin
+                       if GikoSys.Setting.ListHeightState = glsMax then begin
+                               BrowserMinAction.Execute;
+                               if GikoForm.Visible then
+                                       ListView.SetFocus;
+                       end;
+               end;
+       end;
+
 end;
 
 // TreeView \82ª\83_\83u\83\8b\83N\83\8a\83b\83N\82³\82ê\82½
@@ -9967,31 +10152,36 @@ procedure TGikoForm.HandleAppMessage(var Msg: TMsg; var Handled: Boolean);
 //var
 //     key                             : Word;
 begin
-{      case Msg.message of
-       WM_KEYDOWN:
+       case Msg.message of
+       {WM_KEYDOWN:
                if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
                        if IsDialogMessage( FActiveContent.Browser.Handle, Msg ) then begin
                                key := Msg.wParam;
                                Handled := BrowserKeyDown( Msg, key, KeyDataToShiftState( Msg.lParam ) );
                        end;
-               end;
+               end;}
 
        WM_XBUTTONDOWN:
-       case Msg.wParam shr 16 of
-               XBUTTON1:
-                       if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
-                               if IsDialogMessage( FActiveContent.Browser.Handle, Msg ) then begin
-                                       UpBoardAction.Execute;
-                                       Handled := True;
-                               end else if IsDialogMessage( ListView.Handle, Msg ) then begin
-                                       UpFolderAction.Execute;
-                                       Handled := True;
-                               end;
+               case Msg.wParam shr 16 of
+                       XBUTTON1:
+                       begin
+                                       if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
+                                               if IsDialogMessage( FActiveContent.Browser.Handle, Msg ) then begin
+                                                       UpBoardAction.Execute;
+                                                       Handled := True;
+                                               end;
+                                       end;
+                                       if not Handled then begin
+                                               if IsDialogMessage( ListView.Handle, Msg ) then begin
+                                                       UpFolderAction.Execute;
+                                                       Handled := True;
+                                               end;
+                                       end;
                        end;
-               XBUTTON2:
+                       XBUTTON2:
                end;
        end;
-}end;
+end;
 
 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
        Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
@@ -10089,7 +10279,6 @@ end;
 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
 begin
   result := true;
-  if Sender <> nil then
   try
        if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then
                FActiveContent.FBrowser.SetFocus;
@@ -10112,20 +10301,43 @@ begin
 end;
 
 procedure TGikoForm.SetFocusForThreadListActionExecute(Sender: TObject);
+var
+       rct: TRect;
 begin
        if FActiveContent <> nil then
                WebBrowserClick(FActiveContent.Browser); //\88ê\89ñBrowser\82É\93\96\82Ä\82È\82¢\82Æ\93®\82©\82È\82¢\82Æ\82«\82ª\82 \82é
        ListView.SetFocus;
        if( ListView.Items.Count > 0 ) and (ListView.ItemFocused = nil) then
-               ListView.Items.Item[0].Selected := true; //\91I\91ð\83A\83C\83e\83\80\82ª\96³\82¢\82Æ\82«\82Í\90æ\93ª\82Ì\82ð\91I\91ð\82·\82é
+               ListView.Items.Item[0].Selected := true //\91I\91ð\83A\83C\83e\83\80\82ª\96³\82¢\82Æ\82«\82Í\90æ\93ª\82Ì\82ð\91I\91ð\82·\82é
+       else begin
+               ListView.Scroll(-ListView.ClientWidth, -ListView.ClientHeight);
+               rct := ListView.ItemFocused.DisplayRect(drBounds);
+               ListView.Scroll(0, 2 * rct.Top - rct.Bottom);
+               if ListView.ViewStyle <> vsReport then begin
+                       ListView.Scroll(rct.Left, 0);
+               end;
+       end;
 end;
 
 procedure TGikoForm.SetFocusForCabinetActionExecute(Sender: TObject);
 begin
        if FActiveContent <> nil then
                WebBrowserClick(FActiveContent.Browser); //\88ê\89ñBrowser\82É\93\96\82Ä\82È\82¢\82Æ\93®\82©\82È\82¢\82Æ\82«\82ª\82 \82é
-       TreeView.SetFocus;
+       if TreeView.Visible then begin
+               TreeView.SetFocus;
+               if(TreeView.Items.Count > 0) and ( TreeView.Selected = nil ) then
+                       TreeView.Items.Item[0].Selected := true;
+       end else if FavoriteTreeView.Visible then begin
+               FavoriteTreeView.SetFocus;
+               if(FavoriteTreeView.Items.Count > 0) and (FavoriteTreeView.Selected = nil) then
+                       FavoriteTreeView.Items.Item[0].Selected := true;
+       end;
+end;
+procedure TGikoForm.SetFocusForCabinetActionUpdate(Sender: TObject);
+begin
+       SetFocusForCabinetAction.Enabled := CabinetPanel.Visible;
 end;
+
 //\83u\83\89\83E\83U\82ð\8dÅ\91å\89»\82µ\82Ä\83t\83H\81[\83J\83X\82ð\93\96\82Ä\82é\81B
 procedure TGikoForm.BrowserMaxAndFocusActionExecute(Sender: TObject);
 begin
@@ -10153,6 +10365,299 @@ begin
        ListView.Repaint;
 end;
 
+
+procedure TGikoForm.ListViewSelectItem(Sender: TObject; Item: TListItem;
+  Selected: Boolean);
+begin
+
+       if not (GikoSys.Setting.BrowserTabVisible) and (Item <> nil) then
+                       if (TObject( Item.Data ) is TThreadItem) then begin
+                               SelectTimer.Interval := GikoSys.Setting.SelectInterval;
+                       end else
+                               SelectTimer.Interval := 0
+       else
+               SelectTimer.Interval := 0;
+
+end;
+
+procedure TGikoForm.SelectTimerTimer(Sender: TObject);
+begin
+       if not (ListView.Selected = nil) then
+               if( FActiveContent = nil) or
+                               (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
+                       SelectTimer.Interval := 0;
+                       ListClick;
+               end;
+end;
+
+procedure TGikoForm.SelectItemSaveForDatExecute(Sender: TObject);
+var
+       List: TList;
+       i: Integer;
+begin
+       List := TList.Create;
+       try
+               Screen.Cursor := crHourGlass;
+               SelectListItem(List);
+               if ((GikoSys.Setting.ListOrientation = gloVertical) and
+                       (GikoSys.Setting.ListHeightState = glsMax)) or
+                       ((GikoSys.Setting.ListOrientation = gloHorizontal) and
+                       (GikoSys.Setting.ListWidthState = glsMax)) then
+                       ShowMessage('\83X\83\8c\83b\83h\88ê\97\97\82ð\95\\8e¦\82µ\82Ä\82­\82¾\82³\82¢')
+               else if(List.Count = 0) then
+                       ShowMessage('\83X\83\8c\83b\83h\82ð\91I\91ð\82µ\82Ä\82­\82¾\82³\82¢')
+               else begin
+                       FileSaveAs1.Dialog.Title := '\91I\91ð\83X\83\8c\83b\83h\82ðdat\82Ì\82Ü\82Ü\95Û\91¶';
+                       FileSaveAs1.Dialog.Filter := 'DAT\83t\83@\83C\83\8b(*.dat)|*.dat';
+                       for i := 0 to List.Count - 1 do begin
+                               if (TObject(List[i]) is TThreadItem) and (TThreadItem(List[i]).IsLogFile) then begin
+                                       FileSaveAs1.Dialog.FileName := TThreadItem(List[i]).FileName;
+                                       if FileSaveAs1.Execute then begin
+                                               //\82È\82º\82©\83L\83\83\83\93\83Z\83\8b\82Å\82à\82±\82Á\82¿\82É\93ü\82Á\82Ä\82­\82é
+                                               if ExtractFilePath(FileSaveAs1.Dialog.FileName) <> '' then begin
+                                                       CopyFile(PChar(TThreadItem(List[i]).FilePath),
+                                                               PChar(FileSaveAs1.Dialog.FileName), true);
+                                               end;
+                                       end;
+                               end;
+                       end;
+               end;
+       finally
+               Screen.Cursor := crDefault;
+               List.Free;
+       end;
+
+end;
+
+procedure TGikoForm.SelectItemSaveForHTMLExecute(Sender: TObject);
+var
+       List: TList;
+       i: Integer;
+       html: TStringList;
+       title: string;
+begin
+       List := TList.Create;
+       try
+               Screen.Cursor := crHourGlass;
+               SelectListItem(List);
+               if ((GikoSys.Setting.ListOrientation = gloVertical) and
+                       (GikoSys.Setting.ListHeightState = glsMax)) or
+                       ((GikoSys.Setting.ListOrientation = gloHorizontal) and
+                       (GikoSys.Setting.ListWidthState = glsMax))      then
+                       ShowMessage('\83X\83\8c\83b\83h\88ê\97\97\82ð\95\\8e¦\82µ\82Ä\82­\82¾\82³\82¢')
+               else if(List.Count = 0) then
+                       ShowMessage('\83X\83\8c\83b\83h\82ð\91I\91ð\82µ\82Ä\82­\82¾\82³\82¢')
+               else begin
+                       FileSaveAs1.Dialog.Title := '\91I\91ð\83X\83\8c\83b\83h\82ðHTML\89»\82µ\82Ä\95Û\91¶';
+                       FileSaveAs1.Dialog.Filter := 'HTML\83t\83@\83C\83\8b(*.html)|*.html';
+                       for i := 0 to List.Count - 1 do begin
+                               if (TObject(List[i]) is TThreadItem) and (TThreadItem(List[i]).IsLogFile) then begin
+                                       FileSaveAs1.Dialog.FileName := TThreadItem(List[i]).Title + '.html';
+                                       if FileSaveAs1.Execute then begin
+                                               //\82È\82º\82©\83L\83\83\83\93\83Z\83\8b\82Å\82à\82±\82Á\82¿\82É\93ü\82Á\82Ä\82­\82é
+                                               if ExtractFilePath(FileSaveAs1.Dialog.FileName) <> '' then begin
+                                                       html := TStringList.Create;
+                                                       title := TThreadItem(List[i]).Title;
+                                                       try
+                                                               GikoSys.CreateHTML3(html, TThreadItem(List[i]), title);
+                                                               html.SaveToFile(FileSaveAs1.Dialog.FileName);
+                                                               SkinorCSSFilesCopy(ExtractFilePath(FileSaveAs1.Dialog.FileName));
+                                                       finally
+                                                               html.Free;
+                                                       end;
+                                               end;
+                                       end;
+                               end;
+                       end;
+               end;
+       finally
+               Screen.Cursor := crDefault;
+               List.Free;
+       end;
+end;
+procedure TGikoForm.SkinorCSSFilesCopy(path: string);
+var
+       tmp, tmpD, tmpF: string;
+       current: string;
+       dirs: TStringList;
+       files: TStringList;
+       i, j: Integer;
+begin
+       if GikoSys.Setting.UseSkin then begin
+               current := ExtractFilePath(GikoSys.GetSkinDir);
+               tmp := GikoSys.Setting.CSSFileName;
+       end else if GikoSys.Setting.UseCSS then begin
+               current := ExtractFilePath(GikoSys.GetStyleSheetDir);
+               tmp := ExtractFilePath(GikoSys.GetStyleSheetDir + GikoSys.Setting.CSSFileName);
+       end;
+       dirs := TStringList.Create;
+       try
+               dirs.Add(tmp);
+               if tmp <> current then begin
+                       GikoSys.GetDirectoryList(current, '*.*', dirs, true);
+                       for i := 0 to dirs.Count - 1 do begin
+                               files := TStringList.Create;
+                               try
+                                       gikoSys.GetFileList(dirs[i], '*.*', files, true);
+                                       tmpD := CustomStringReplace(dirs[i], GikoSys.GetConfigDir, path);
+                                       if (AnsiPos(dirs[i], tmp) <> 0) and not (DirectoryExists(tmpD)) then
+                                               ForceDirectories(tmpD);
+
+                                       if(dirs[i] = tmp) and (dirs[i] <> current) then begin
+                                               for j := 0 to files.Count - 1 do begin
+                                                       tmpF := CustomStringReplace(files[j], GikoSys.GetConfigDir, path);
+                                                       if not FileExists(tmpF) then begin
+                                                               CopyFile(PChar(files[j]), PChar(tmpF),True);
+                                                       end;
+                                               end;
+                                       end;
+                               finally
+                                       files.Free;
+                               end;
+                       end;
+               end else begin
+                       tmpD := CustomStringReplace(dirs[0], GikoSys.GetConfigDir, path);
+                       if not DirectoryExists(tmpD) then
+                               ForceDirectories(tmpD);
+                       tmpF := CustomStringReplace(GikoSys.GetStyleSheetDir + GikoSys.Setting.CSSFileName
+                                       , GikoSys.GetConfigDir, path);
+                       if not FileExists(tmpF) then begin
+                               CopyFile(PChar(GikoSys.GetStyleSheetDir + GikoSys.Setting.CSSFileName)
+                                       , PChar(tmpF), True);
+                       end;
+               end;
+       finally
+               dirs.Free;
+       end;
+
+
+end;
+procedure TGikoForm.KidokuActionExecute(Sender: TObject);
+var
+       List: TList;
+       i: Integer;
+begin
+       List := TList.Create;
+       try
+               SelectListItem(List);
+               for i := 0 to List.Count - 1 do begin
+                       if TObject(List[i]) is TThreadItem then begin
+                               TThreadItem(List[i]).UnRead := false;
+                               TThreadItem(List[i]).ParentBoard.UnRead := TThreadItem(List[i]).ParentBoard.UnRead - 1;
+                       end;
+               end;
+               if TreeView.Visible then
+                       TreeView.Refresh;
+       finally
+               List.Free;
+       end;
+end;
+
+procedure TGikoForm.MidokuActionExecute(Sender: TObject);
+var
+       List: TList;
+       i: Integer;
+begin
+       List := TList.Create;
+       try
+               SelectListItem(List);
+               for i := 0 to List.Count - 1 do begin
+                       if TObject(List[i]) is TThreadItem then begin
+                               TThreadItem(List[i]).UnRead := true;
+                               TThreadItem(List[i]).ParentBoard.UnRead := TThreadItem(List[i]).ParentBoard.UnRead + 1;
+                       end;
+               end;
+               if TreeView.Visible then
+                       TreeView.Refresh;
+       finally
+               List.Free;
+       end;
+end;
+
+procedure TGikoForm.BrowserPanelCanResize(Sender: TObject; var NewWidth,
+  NewHeight: Integer; var Resize: Boolean);
+var
+       i: Integer;
+begin
+       for i := 0 to BROWSER_COUNT - 1 do
+               SetWindowPos(TWebBrowser(FBrowsers[i]).Handle, HWND_NOTOPMOST, 0, 0, NewWidth, NewHeight, SWP_NOMOVE + SWP_NOZORDER);
+
+       if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
+               SetWindowPos(FActiveContent.Browser.Handle, HWND_NOTOPMOST, 0, 0, NewWidth, NewHeight, SWP_NOMOVE + SWP_NOZORDER);
+       end;
+end;
+
+procedure TGikoForm.LogFolderOpenActionExecute(Sender: TObject);
+var
+       List: TList;
+begin
+       if ((GikoSys.Setting.ListOrientation = gloVertical) and
+               (GikoSys.Setting.ListHeightState = glsMax)) or
+               ((GikoSys.Setting.ListOrientation = gloHorizontal) and
+               (GikoSys.Setting.ListWidthState = glsMax))      then begin
+               if(GetActiveContent <> nil) then begin
+                       GikoSys.CreateProcess('explorer.exe', '/e,"' + ExtractFilePath(GetActiveContent.FilePath) + '"');
+               end;
+       end else if GetActiveList is TCategory then begin
+               List := TList.Create;
+               try
+                       SelectListItem(List);
+                       GikoSys.CreateProcess('explorer.exe', '/e,"' + ExtractFilePath(TBoard(List[0]).FilePath) + '"');
+               finally
+                       List.Free;
+               end;
+       end else if GetActiveList is TBoard then begin
+               GikoSys.CreateProcess('explorer.exe', '/e,"' + ExtractFilePath(TBoard(GetActiveList).FilePath) + '"');
+       end;
+
+end;
+
+procedure TGikoForm.LogFolderOpenActionUpdate(Sender: TObject);
+begin
+       if (GetActiveList is TCategory) and (ListView.SelCount > 0) then
+               LogFolderOpenAction.Enabled := True
+       else if GetActiveList is TBoard then
+               LogFolderOpenAction.Enabled := True
+       else
+               LogFolderOpenAction.Enabled := False;
+end;
+
+procedure TGikoForm.LocalRuleViewClick(Sender: TObject);
+var
+        RefURL,
+        RefeURL,
+        RuleURL,
+        RuleTxt:String;
+        FBoard: TBoard;
+        Indy: TIdHTTP;
+        FileStream: TFileStream;
+begin
+        //\83\8d\81[\83J\83\8b\83\8b\81[\83\8b\8eæ\93¾ by \92è\8aú\95Ö
+       RefURL := GikoSys.UrlToServer(FBoard.URL)
+               + GikoSys.UrlToID(FBoard.URL)
+               + '/';
+        //\8e\8e\82µ\82É\83\8d\81[\83J\83\8b\83\8b\81[\83\8b\8eæ\93¾\82à
+        RuleURL := RefURL
+                + 'head.txt';
+        //\8eæ\93¾\81`
+       RuleTxt := Indy.Get(RuleURL);
+        //FileStream.Create('head.txt', fmCreate) := Indy.Get(RuleURL, FileStream);
+        //\8e\8e\8c±\95\\8e¦\81`
+        if RuleTxt = '' then begin
+                ShowMessage('\83\8d\81[\83J\83\8b\83\8b\81[\83\8b\8eæ\93¾\8e¸\94s');
+        end;
+        ShowMessage(RuleTxt);
+
+end;
+
+procedure TGikoForm.TabSaveClick(Sender: TObject);
+var
+        SaveStringList: TStringList;
+        TabIdx: Integer;
+begin
+        SaveStringList := TStringList.Create;
+end;
+
 initialization
                                OleInitialize(nil);
 finalization