OSDN Git Service

タブを閉じる系アクションのバグ取り。SetContentメソッド内のバグの修正
authorh677 <h677>
Sat, 22 May 2004 14:56:10 +0000 (14:56 +0000)
committerh677 <h677>
Sat, 22 May 2004 14:56:10 +0000 (14:56 +0000)
Giko.pas
gikoNavi.res

index b205b47..2186937 100644 (file)
--- a/Giko.pas
+++ b/Giko.pas
@@ -1994,9 +1994,10 @@ var
 begin
        //\83^\83u\83N\83\8d\81[\83Y
        NotSelectTabCloseAction.Execute;
-       if BrowserTab.Tabs.Count >= 1 then
-               for i := BrowserTab.Tabs.Count - 1 downto 0 do
-                       DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
+       //if BrowserTab.Tabs.Count >= 1 then
+       //      for i := BrowserTab.Tabs.Count - 1 downto 0 do
+       //              DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
+       BrowserTabCloseAction.Execute;
        //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;
 
@@ -3219,6 +3220,16 @@ begin
                for i := 0 to BrowserTab.Tabs.Count - 1 do begin
                        if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then 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
+                                                               TBrowserRecord(BrowserTab.Tabs.Objects[j]).FBrowser := nil;
+                                                               break;
+                                                       end;
+                                               end;
+                                               TBrowserRecord(BrowserTab.Tabs.Objects[i]).FBrowser := TWebBrowser(FBrowsers[4]);
+                                               FBrowsers.Move(4, 0);
+                                       end;
                                        if ActiveTab then begin
                                                BrowserTab.TabIndex := i;
                                                        BrowserTab.OnChange(nil);
@@ -3230,40 +3241,39 @@ begin
                end;
 
                if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
-                       //BrowserTab.Tabs.Insert(0, GikoSys.GetShortName(ThreadItem.Title, 20));
                        newBrowser := TBrowserRecord.Create;
                        for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
-                               if TBrowserRecord(BrowserTab.Tabs.Objects[j]).FBrowser = TWebBrowser(FBrowsers[4]) then
+                               if TBrowserRecord(BrowserTab.Tabs.Objects[j]).FBrowser = TWebBrowser(FBrowsers[4]) then begin
                                        TBrowserRecord(BrowserTab.Tabs.Objects[j]).FBrowser := nil;
+                                       break;
+                               end;
                        end;
                        newBrowser.Browser := TWebBrowser(FBrowsers[4]);
                        FBrowsers.Move(4, 0);
                        newBrowser.thread := ThreadItem;
                        newBrowser.Repaint := true;
                        newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
-                       newBrowser.Browser.Navigate( 'about:blank' );
+                       newBrowser.Browser.Navigate(BLANK_HTML);
                        BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
-                       //BrowserTab.Tabs.Objects[0] := newBrowser;
                        if ActiveTab then begin
                                BrowserTab.TabIndex := 0;
                        end;
 
                end else begin
-                       //i := BrowserTab.Tabs.Add(GikoSys.GetShortName(ThreadItem.Title, 20));
-                       //Inc(FNewBrowserCount);
                        newBrowser := TBrowserRecord.Create;
                        for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
-                               if TBrowserRecord(BrowserTab.Tabs.Objects[j]).FBrowser = TWebBrowser(FBrowsers[4]) then
+                               if TBrowserRecord(BrowserTab.Tabs.Objects[j]).FBrowser = TWebBrowser(FBrowsers[4]) then begin
                                        TBrowserRecord(BrowserTab.Tabs.Objects[j]).FBrowser := nil;
+                                       break;
+                               end;
                        end;
                        newBrowser.Browser := TWebBrowser(FBrowsers[4]);
                        FBrowsers.Move(4, 0);
                        newBrowser.thread := ThreadItem;
                        newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
                        newBrowser.Repaint := true;
-                       newBrowser.Browser.Navigate( 'about:blank' );
+                       newBrowser.Browser.Navigate(BLANK_HTML);
                        i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
-                       //BrowserTab.Tabs.Objects[i] := newBrowser;
                        if ActiveTab then begin
                                BrowserTab.TabIndex := i;
                        end;
@@ -3297,30 +3307,18 @@ var
        doc: Variant;
        s: string;
 //     OldCursor: TCursor;
-       //i: Integer;
-       ThreadItem      : TThreadItem;
-       Thread : TBrowserRecord;
+       i: Integer;
 begin
-       if inThread = nil then
-       begin
-               //Thread := TBrowserRecord.Create;
-               //Thread.Browser := Browser;
-               //Thread.Thread := nil;
-               Exit;
-       end else begin
-               Thread := inThread;
-       end;
-
        if (FActiveContent <> nil) and
-               (FActiveContent.Thread <> Thread.Thread) and
+               (FActiveContent.Thread <> inThread.Thread) and
                (Assigned(FActiveContent.Browser.Document)) then begin
                try
                try
                        Sleep(1);
                        //Application.ProcessMessages;
                        FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document).Body).ScrollTop;
-                       if FActiveContent.Browser <> BrowserNullTab.Browser then
-                               TOleControl(FActiveContent.Browser).Visible := false;
+                       //if FActiveContent.Browser <> BrowserNullTab.Browser then
+                       //      TOleControl(FActiveContent.Browser).Visible := false;
                except
                        on E: Exception do
                                MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
@@ -3328,51 +3326,67 @@ begin
                finally
                end;
        end;
+       if inThread = nil then
+               Exit
+       else if inThread.Browser = nil then begin
+               for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
+                       if TBrowserRecord(BrowserTab.Tabs.Objects[i]).FBrowser = TWebBrowser(FBrowsers[4]) then begin
+                               TBrowserRecord(BrowserTab.Tabs.Objects[i]).FBrowser := nil;
+                               break;
+                       end;
+               end;
+               inThread.Browser := TWebBrowser(FBrowsers[4]);
+               FBrowsers.Move(4, 0);
+       end;
+
 
-       while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
-                               (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
+       while (inThread.Browser.ReadyState <> READYSTATE_COMPLETE) and
+                               (inThread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
                Application.ProcessMessages;
        end;
 
-       ThreadItem := Thread.Thread;
-
-       if Thread.Thread = nil then begin
-               Thread.Browser.Navigate(BLANK_HTML);
+       if inThread.Thread = nil then begin
+               inThread.Browser.Navigate(BLANK_HTML);
                BrowserBoardNameLabel.Caption := '';
                ItemBoardImage.Picture := nil;
                BrowserNameLabel.Caption := '';
                ItemImage.Picture := nil;
                BrowserNullTab.Thread := nil;
                TOleControl(BrowserNullTab.Browser).Visible := true;
+               TOleControl(BrowserNullTab.Browser).BringToFront;
                FActiveContent := nil;
                Exit;
        end;
 
-       BBSID := ThreadItem.ParentBoard.BBSID;
-       FileName := ThreadItem.FileName;
+       BBSID := inThread.FThread.ParentBoard.BBSID;
+       FileName := inThread.FThread.FileName;
 
        if GetCapture = ListView.Handle then
                ReleaseCapture;
 
        Screen.Cursor := crHourGlass;
        try
-        ToleControl(Thread.FBrowser).Visible := true;
-               if ThreadItem.UnRead then begin
-                       ThreadItem.ParentBoard.UnRead := ThreadItem.ParentBoard.UnRead - 1;
-                       if ThreadItem.ParentBoard.UnRead < 0 then ThreadItem.ParentBoard.UnRead := 0;
+               if (FActiveContent <> nil) and (FActiveContent.FBrowser <> nil) then
+                       TOleControl(FActiveContent.FBrowser).BringToFront;
+               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;
                        TreeView.Refresh;
                end;
-               if not ThreadItem.IsLogFile then begin
+               LockWindowUpdate(Self.Handle);
+               TOleControl(inThread.FBrowser).Visible := true; //\82±\82±\82Å\95\\8e¦\82µ\82Ä\82¨\82©\82È\82¢\82Æ\95`\89æ\82Å\8e~\82Ü\82é
+        TOleControl(inThread.FBrowser).BringToFront;
+               if not inThread.FThread.IsLogFile then begin
 
-                       if (not Assigned(Thread.Browser.Document)) then begin
-                               Thread.Browser.Navigate('about:blank');
+                       if (not Assigned(inThread.Browser.Document)) then begin
+                               inThread.Browser.Navigate('about:blank');
                                //while (not Assigned(Thread.Browser.Document)) do begin
                                //      Application.ProcessMessages;
                                //end;
                        end;
                        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(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
+                               doc := Idispatch( olevariant(inThread.Browser.ControlInterface).Document) as IHTMLDocument2;
                                doc.open;
                                doc.charset := 'Shift_JIS';
                                doc.Write(s);
@@ -3382,24 +3396,23 @@ begin
                end else begin
                        //Thread.Repaint\82Í\81A\83X\83L\83\93\93\99\82Ì\90Ý\92è\82ð\95Ï\8dX\82µ\82½\82Æ\82«\81AThread\82ð\83_\83E\83\93\83\8d\81[\83h\82µ\82½\82Æ\82«
                        //\90V\8bK\82ÉThread\82ð\8aJ\82¢\82½\82Æ\82«\82É\90^\82É\82È\82Á\82Ä\82¢\82é\81B
-                       if(Thread.Repaint) or (Thread.OnlyHundred <> GikoSys.OnlyAHundredRes)then begin
+                       if(inThread.Repaint) or (inThread.OnlyHundred <> GikoSys.OnlyAHundredRes)then begin
                                //Thread.LastSize := ThreadItem.Size;
-                               Thread.Repaint := false;
+                               inThread.Repaint := false;
                                try
-                                       Application.ProcessMessages;
-                                       doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
-                                       GikoSys.CreateHTML2(doc, ThreadItem, sTitle);
-                                       Thread.OnlyHundred := GikoSys.OnlyAHundredRes;
+                                       doc := Idispatch( olevariant(inThread.Browser.ControlInterface).Document) as IHTMLDocument2;
+                                       GikoSys.CreateHTML2(doc, inThread.FThread, sTitle);
+                                       inThread.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 ThreadItem.UnRead then
-                                               BrowserMovement('new', Thread)
-                                       else if ThreadItem.ScrollTop <> 0 then begin
+                                       if inThread.FThread.UnRead then
+                                               BrowserMovement('new', inThread)
+                                       else if inThread.FThread.ScrollTop <> 0 then begin
                                                try
-                                                       doc.Body.ScrollTop := ThreadItem.ScrollTop;
+                                                       doc.Body.ScrollTop := inThread.FThread.ScrollTop;
                                                except
                                                        on E: Exception do
                                                                MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
@@ -3409,32 +3422,23 @@ begin
                                         //     Application.ProcessMessages;
                                end;
                        end;
-                       ThreadItem.UnRead := False;
+                       inThread.FThread.UnRead := False;
                        ListView.Refresh;
                end;
-               if not TOleControl(Thread.Browser).Visible then begin
-                       LockWindowUpdate(Thread.Browser.Handle);
-                       TOleControl(Thread.Browser).Visible := true;
-                       if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
-                               if (FActiveContent.Browser <> BrowserNullTab.Browser) and
-                                                               (TOleControl(FActiveContent.Browser).Visible) then
-                                       TOleControl(FActiveContent.Browser).Visible := false;
-                       end;
-                       LockWindowUpdate(0);
-               end else if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
+               LockWindowUpdate(0);
+               if(FActiveContent <> nil) and (FActiveContent <> inThread) then begin
                        if (FActiveContent.Browser <> BrowserNullTab.Browser) and
-                                                               (TOleControl(FActiveContent.Browser).Visible) then
-                               TOleControl(FActiveContent.Browser).Visible := false;
+                               (TOleControl(FActiveContent.Browser).Visible) then
+                                       TOleControl(FActiveContent.Browser).Visible := false;
                end;
+               FActiveContent := inThread;
 
-               FActiveContent := Thread;
-
-               BrowserBoardNameLabel.Caption := ThreadItem.ParentBoard.Title;
+               BrowserBoardNameLabel.Caption := inThread.FThread.ParentBoard.Title;
                ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
-               BrowserNameLabel.Caption := ThreadItem.Title;
+               BrowserNameLabel.Caption := inThread.FThread.Title;
                ItemImage.Picture := nil;
-               if ThreadItem.IsLogFile then
-                       if ThreadItem.NewArrival then
+               if inThread.FThread.IsLogFile then
+                       if inThread.FThread.NewArrival then
                                ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
                        else
                                ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
@@ -5578,6 +5582,8 @@ begin
        BrowserTab.OnChange := nil;
        BrowserTab.Tabs.BeginUpdate;
        for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
+               if TBrowserRecord(BrowserTab.Tabs.Objects[i]).FBrowser <> nil then
+                       TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[i]).FBrowser).Visible := false;
                TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
        end;
        BrowserTab.Tabs.Clear;
index 317c758..62cb032 100644 (file)
Binary files a/gikoNavi.res and b/gikoNavi.res differ