OSDN Git Service

SkinでID検索等すると普通のブラウザが立ち上がる不具合の修正。
authorh677 <h677>
Fri, 4 Jun 2004 13:58:16 +0000 (13:58 +0000)
committerh677 <h677>
Fri, 4 Jun 2004 13:58:16 +0000 (13:58 +0000)
タブ表示無しの時のAccessViolation。タブを高速で閉じたときのAccessViolation
の対策。

Giko.dfm
Giko.pas

index ef2930d..d4dfd0d 100644 (file)
--- a/Giko.dfm
+++ b/Giko.dfm
@@ -1,6 +1,6 @@
 object GikoForm: TGikoForm
-  Left = 49
-  Top = 173
+  Left = 362
+  Top = 160
   HorzScrollBar.Visible = False
   VertScrollBar.Visible = False
   AutoScroll = False
@@ -566,7 +566,6 @@ object GikoForm: TGikoForm
             Width = 546
             Height = 149
             Align = alClient
-            Caption = 'BrowserPanel'
             TabOrder = 2
             object Browser: TWebBrowser
               Left = 1
@@ -577,7 +576,6 @@ object GikoForm: TGikoForm
               TabOrder = 0
               OnEnter = BrowserEnter
               OnStatusTextChange = BrowserStatusTextChange
-              OnTitleChange = BrowserTitleChange
               OnBeforeNavigate2 = BrowserBeforeNavigate2
               OnNewWindow2 = BrowserNewWindow2
               OnDocumentComplete = BrowserDocumentComplete
@@ -10499,7 +10497,7 @@ object GikoForm: TGikoForm
     Top = 468
   end
   object SelectTimer: TTimer
-    Interval = 50
+    Interval = 200
     OnTimer = SelectTimerTimer
     Left = 100
     Top = 308
index 9cb5898..1ebdf41 100644 (file)
--- a/Giko.pas
+++ b/Giko.pas
@@ -556,7 +556,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);
@@ -1238,7 +1237,7 @@ begin
                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);
@@ -2494,7 +2493,7 @@ var
        board                           : TBoard;
        Protocol, Host, Path, Document, Port, Bookmark: string;
 
-       //wkInt: Integer;
+       wkInt: Integer;
        wkIntSt: Integer;
        wkIntTo: Integer;
        ActiveFileName: string;
@@ -2519,10 +2518,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;
 
@@ -2614,9 +2618,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;
@@ -2666,19 +2670,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;
@@ -3291,17 +3282,10 @@ begin
                        newBrowser.Repaint := true;
                        newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
 
-                       if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then begin
-                       {
-                               if FActiveContent = BrowserTab.Tabs.Objects[ 0 ] then
-                                       FActiveContent := nil;
-                               BrowserTab.Tabs.Objects[ 0 ].Free;
-                               BrowserTab.Tabs.Objects[ 0 ] := newBrowser;
-                               BrowserTab.Tabs[ 0 ] := GikoSys.GetShortName(ThreadItem.Title, 20);
-                       }
-                               DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
+                       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
-                               BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
                        //end;
                        BrowserTab.Repaint;
                        if ActiveTab then begin
@@ -3327,21 +3311,17 @@ begin
                        newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
                        newBrowser.Repaint := true;
 
-                       if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then begin
-                       {
-                               if FActiveContent = BrowserTab.Tabs.Objects[ 0 ] then
-                                       FActiveContent := nil;
-                               BrowserTab.Tabs.Objects[ 0 ].Free;
-                               BrowserTab.Tabs.Objects[ 0 ] := newBrowser;
-                               BrowserTab.Tabs[ 0 ] := GikoSys.GetShortName(ThreadItem.Title, 20);
-                       }
+                       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;// else begin
-                               i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
+                       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
@@ -3393,9 +3373,7 @@ begin
                finally
                end;
        end;
-       if inThread = nil then
-               Exit
-       else if inThread.Thread = nil then begin
+       if not (Assigned(inThread)) or (inThread.Thread = nil) then begin
                inThread.Browser.Navigate(BLANK_HTML);
                BrowserBoardNameLabel.Caption := '';
                ItemBoardImage.Picture := nil;
@@ -3430,6 +3408,8 @@ begin
                ReleaseCapture;
 
        Screen.Cursor := crHourGlass;
+
+
        try
                if inThread.FThread.UnRead then begin
                        inThread.FThread.ParentBoard.UnRead := inThread.FThread.ParentBoard.UnRead - 1;
@@ -3442,18 +3422,22 @@ begin
                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;
+               while (inThread.Browser.ReadyState <> READYSTATE_COMPLETE) and
+                               (inThread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
+                       Application.ProcessMessages;
+                       if idx <> BrowserTab.TabIndex then begin
+                               FActiveContent := inThread;
+                               //BrowserTab.OnChange(nil);
+                               Exit;
                        end;
-               //end;
 
+               end;
+               if not (Assigned(inThread)) or not (Assigned(inThread.Thread)) then begin
+                       FActiveContent := nil;
+                       Exit;
+               end;
                if not inThread.FThread.IsLogFile then begin
+                       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;
@@ -3464,6 +3448,7 @@ begin
                        finally
                        end;
                end else begin
+                       Caption := CAPTION_NAME + ' - [' + inThread.Thread.Title + ']';
                        //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
@@ -3479,16 +3464,27 @@ begin
                                        //\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(inThread)) and (Assigned(inThread.Thread))then begin
+                                                       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);
+                                                               end;
+                                                       end;
+                                               end else begin
+                                                       FActiveContent := nil;
+                                                       BrowserTab.Repaint;
+                                                       Exit;
                                                end;
+                                       except
+                                               FActiveContent := nil;
+                                               BrowserTab.Repaint;
+                                               Exit;
                                        end;
                                finally
                                         //     Application.ProcessMessages;
@@ -3501,23 +3497,26 @@ begin
                        if (FActiveContent.Browser <> BrowserNullTab.Browser) then
                                ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
                end;
-               FActiveContent := inThread;
+               if (Assigned(inThread)) and (Assigned(inThread.Thread)) then begin
+                       FActiveContent := inThread;
 
-               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 := 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)
+                               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;
@@ -3525,10 +3524,17 @@ 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))then
+                       Result := FActiveContent.Thread
+               else begin
+            FActiveContent := nil;
+                       Result := nil;
+               end;
+       except
+               FActiveContent := nil;
                Result := nil;
+       end;
 end;
 
 procedure TGikoForm.SetActiveList(Obj: TObject);
@@ -5340,7 +5346,8 @@ begin
                                FBrowsers.Move(4, 0);
                        end;
                        BrowserTab.Tabs.EndUpdate;
-                       BrowserTab.OnChange(nil);
+                       if( FActiveContent = nil) then
+                               BrowserTab.OnChange(nil);
                        Exit;
                end;
        end;
@@ -5401,7 +5408,8 @@ begin
                        end;
 
                        BrowserTab.Tabs.EndUpdate;
-                       BrowserTab.OnChange(nil);
+                       if( FActiveContent = nil) then
+                               BrowserTab.OnChange(nil);
                        Exit;
                end;
        end;
@@ -5878,19 +5886,22 @@ begin
                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;
 
@@ -6026,8 +6037,8 @@ begin
                        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;
                end;
 
        end;
@@ -10278,15 +10289,28 @@ begin
 
        if not GikoSys.Setting.BrowserTabVisible then
                if Item <> nil then
-                       if TObject( Item.Data ) is TThreadItem then
-                               SelectTimer.Enabled := True;
+                       if (TObject( Item.Data ) is TThreadItem) then begin
+                               if not SelectTimer.Enabled  then begin
+                                       SelectTimer.Tag := 0;
+                                       SelectTimer.Enabled := True;
+                               end else begin
+                    SelectTimer.Tag := 0;
+                                       SelectTimer.Enabled := false;
+                                       SelectTimer.Enabled := True;
+                               end;
+                       end;
 
 end;
 
 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
 begin
-       SelectTimer.Enabled := False;
-       ListClick;
+       if SelectTimer.Tag = 0 then
+               SelectTimer.Tag := 1
+       else begin
+        SelectTimer.Tag := 0;
+               SelectTimer.Enabled := False;
+               ListClick;
+       end;
 end;
 
 initialization