OSDN Git Service

一つの大きなメソッドを分割。
authorh677 <h677>
Mon, 24 Apr 2006 14:26:43 +0000 (14:26 +0000)
committerh677 <h677>
Mon, 24 Apr 2006 14:26:43 +0000 (14:26 +0000)
途中経過表示のプログレスバーを追加。

Search.dfm
Search.pas

index e7a5462..7123ed4 100644 (file)
@@ -17,6 +17,7 @@ object SearchDialog: TSearchDialog
   OldCreateOrder = False
   Position = poOwnerFormCenter
   OnCreate = FormCreate
+  OnDestroy = FormDestroy
   DesignSize = (
     450
     303)
@@ -256,4 +257,16 @@ object SearchDialog: TSearchDialog
       TabOrder = 6
     end
   end
+  object BoardsProgressBar: TProgressBar
+    Left = 8
+    Top = 275
+    Width = 145
+    Height = 16
+    Min = 0
+    Max = 100
+    Smooth = True
+    Step = 1
+    TabOrder = 8
+    Visible = False
+  end
 end
index dd7323f..50beca9 100644 (file)
@@ -26,6 +26,7 @@ type
                RegExpCheckBox: TCheckBox;
                GoogleCheckBox: TCheckBox;
     FuzzyCharDicCheckBox: TCheckBox;
+    BoardsProgressBar: TProgressBar;
                procedure FormCreate(Sender: TObject);
                procedure CategoryListViewSelectItem(Sender: TObject; Item: TListItem;
                        Selected: Boolean);
@@ -37,6 +38,7 @@ type
                procedure BoardListViewDblClick(Sender: TObject);
                procedure CancelBottonClick(Sender: TObject);
                procedure BoardListViewResize(Sender: TObject);
+    procedure FormDestroy(Sender: TObject);
        private
                { Private \90é\8c¾ }
                FChkItem: TObject;
@@ -46,6 +48,9 @@ type
                procedure SetBoardList(Item: TListItem);
                procedure CheckItem(Item: TObject);
                procedure OnMatch(Sender: TObject; LineInfo: RE_LineInfo_t);
+               procedure SearchLogs( Reg: TGrep );
+               procedure SearchLog(Reg: TGrep; Item: TThreadItem);
+               function  CountBoards : Integer;
        public
                { Public \90é\8c¾ }
 //             constructor Create(AOwner: TComponent); overload; override;
@@ -224,17 +229,18 @@ end;
 
 procedure TSearchDialog.OkBottonClick(Sender: TObject);
 var
-       i, j, k, l: Integer;
-       Category: TCategory;
-       Board: TBoard;
-       ThreadItem: TThreadItem;
+       i : Integer;
+//     i, j, k, l: Integer;
+//     Category: TCategory;
+//     Board: TBoard;
+//     ThreadItem: TThreadItem;
        List: TList;
        //sl: TStringList;
        SearchWord: string;
        Reg: TGrep;
        Filter: string;
        oldText: string;
-       bbs : TBBS;
+//     bbs : TBBS;
 begin
        // grep \93à\82Å\83C\83x\83\93\83g\82ª\8fE\82¦\82Ä\82µ\82Ü\82¤\82Ì\82Å\81A\91\80\8dì\82Å\82«\82È\82¢\82æ\82¤\82É\82·\82é
        AllSelectButton.Enabled := False;
@@ -250,6 +256,11 @@ begin
 
        Reg := TGrep.Create( nil );
        try
+               // \83v\83\8d\83O\83\8c\83X\83o\81[\82ð\90Ý\92è\82µ\82Ä\8c©\82¦\82é\82æ\82¤\82É\82·\82é
+               BoardsProgressBar.Max := CountBoards;
+               BoardsProgressBar.Position := 0;
+               BoardsProgressBar.Visible := True;
+
                if Length( SearchComboBox.Text ) > 0 then
                begin
                        // ComboBox \82Ì\93à\97e\82ð\8dX\90V
@@ -265,7 +276,7 @@ begin
                        SearchComboBox.Text := oldText;
 
                        BoardListView.Clear;
-            Application.ProcessMessages;
+                       Application.ProcessMessages;
                        // grep \97p\82Ì\8c\9f\8dõ\83\8f\81[\83h\82ð\90\90¬
                        Reg.OnMatch := OnMatch;
                        Reg.UseFuzzyCharDic := FuzzyCharDicCheckBox.Checked;
@@ -305,45 +316,11 @@ begin
                        End;
 
                        // \83T\83C\83g\82Ì\92\86\82Ì (\91±\82­)
-                       try
-                               // \8cf\8e¦\94Â\82Ì\92\86\82Ì (\91±\82­)
-                               for l := 0 to Length( BBSs ) - 1 do begin
-                                       bbs := BBSs[ l ];
-                                       for i := 0 to bbs.Count - 1 do begin
-                                               // \83J\83e\83S\83\8a\82Ì\92\86\82Ì (\91±\82­)
-                                               Category := bbs.Items[i];
-                                               for j := 0 to Category.Count - 1 do begin
-                                                       // \94Â\82Ì\92\86\82Ì (\91±\82­)
-                                                       Board := Category.Items[j];
-                                                       if Board.BoolData then begin
-                                                               if not Board.IsThreadDatRead then
-                                                                       GikoSys.ReadSubjectFile(Board);
-                                                               for k := 0 to Board.Count - 1 do begin
-                                                                       // \8cÂ\81X\82Ì\83X\83\8c\83b\83h\82Ì (\91±\82­)
-                                                                       ThreadItem := Board.Items[k];
-                                                                       if FileExists( ThreadItem.GetThreadFileName ) then begin
-                                                                       // \83\8d\83O\82ª\91\8dÝ\82·\82é
-                                                                               try
-                                                                                       // \8c\9f\8dõ
-                                                                                       // \81¦\8c©\82Â\82©\82Á\82½\82ç OnMatch \82É\94ò\82Ô
-                                                                                       FRegItem := ThreadItem;
-                                                                                       Reg.GrepByRegExp( ThreadItem.GetThreadFileName )
-                                                                               except
-                                                                               end;
-                                                                               //Application.ProcessMessages;
-                                                                               if FCancel then raise   Exception.Create('\83\8d\83O\8c\9f\8dõ\82ð\92\86\8e~\82µ\82Ü\82·');
-                                                                       end;
-                                                               end;
-
-                                                       end;
-                                               end;
-                                       end;
-                               end;
-                       except
-                               on E:Exception do ShowMessage(E.Message)
-                       end;
+                       SearchLogs(Reg);
                end;
        finally
+               //\83v\83\8d\83O\83\8c\83X\83o\81[\82ð\89B\82·
+               BoardsProgressBar.Visible := False;
                //sl.Free;
                List.Free;
                Screen.Cursor := crDefault;
@@ -357,22 +334,96 @@ begin
                CancelBotton.Enabled := false;
        end;
 end;
+//! \91I\91ð\82³\82ê\82½\94Â\82Ì\83X\83\8c\83b\83h\82Ì\92\86\90g\82ð\8c\9f\8dõ\82·\82é
+procedure TSearchDialog.SearchLogs( Reg: TGrep );
+var
+       i, j, k, l : Integer;
+       bbs : TBBS;
+       Category: TCategory;
+       Board: TBoard;
+begin
+       // \83T\83C\83g\82Ì\92\86\82Ì (\91±\82­)
+       try
+               // \8cf\8e¦\94Â\82Ì\92\86\82Ì (\91±\82­)
+               for l := 0 to Length( BBSs ) - 1 do begin
+                       bbs := BBSs[ l ];
+                       for i := 0 to bbs.Count - 1 do begin
+                               // \83J\83e\83S\83\8a\82Ì\92\86\82Ì (\91±\82­)
+                               Category := bbs.Items[i];
+                               for j := 0 to Category.Count - 1 do begin
+                                       // \94Â\82Ì\92\86\82Ì (\91±\82­)
+                                       Board := Category.Items[j];
+                                       if Board.BoolData then begin
+                                               if not Board.IsThreadDatRead then
+                                                       GikoSys.ReadSubjectFile(Board);
+                                               for k := 0 to Board.Count - 1 do begin
+                                                       // \8cÂ\81X\82Ì\83X\83\8c\83b\83h\82Ì (\91±\82­)
+                                                       SearchLog(Reg, Board.Items[k]);
+                                               end;
+                                               BoardsProgressBar.StepIt;
+                                       end;
 
+                               end;
+                       end;
+               end;
+       except
+               on E:Exception do ShowMessage(E.Message)
+       end;
+end;
+//! \91I\91ð\82³\82ê\82Ä\82¢\82é\94Â\82Ì\90\94\82ð\83J\83E\83\93\83g\82·\82é
+function  TSearchDialog.CountBoards : Integer;
+var
+       i, j, l : Integer;
+       bbs : TBBS;
+       Category: TCategory;
+       Board: TBoard;
+begin
+       Result := 0;
+       // \8cf\8e¦\94Â\82Ì\92\86\82Ì (\91±\82­)
+       for l := 0 to Length( BBSs ) - 1 do begin
+               bbs := BBSs[ l ];
+               for i := 0 to bbs.Count - 1 do begin
+                       // \83J\83e\83S\83\8a\82Ì\92\86\82Ì (\91±\82­)
+                       Category := bbs.Items[i];
+                       for j := 0 to Category.Count - 1 do begin
+                               // \94Â\82Ì\92\86\82Ì (\91±\82­)
+                               Board := Category.Items[j];
+                               if Board.BoolData then begin
+                                       Inc(Result);
+                               end;
+                       end;
+               end;
+       end;
+end;
+//! \90³\8bK\95\\8c»\82Ì\8c\9f\8dõ\82É\83X\83\8c\83b\83h\82Ì\83\8d\83O\83t\83@\83C\83\8b\82ð\91\97\82é
+procedure TSearchDialog.SearchLog(Reg: TGrep; Item: TThreadItem);
+begin
+       // \83\8d\83O\82ª\91\8dÝ\82·\82é\82©\8am\94F
+       if (Item.IsLogFile) and (FileExists( Item.GetThreadFileName )) then begin
+               try
+                       // \8c\9f\8dõ
+                       // \81¦\8c©\82Â\82©\82Á\82½\82ç OnMatch \82É\94ò\82Ô
+                       FRegItem := Item;
+                       // GrepByReg\82Ì\92\86\82ÅApplication.ProcessMessage\82ª\91å\97Ê\82É\8cÄ\82Î\82ê\82Ä\82¢\82é
+                       Reg.GrepByRegExp( Item.GetThreadFileName )
+               except
+               end;
+               if FCancel then raise   Exception.Create('\83\8d\83O\8c\9f\8dõ\82ð\92\86\8e~\82µ\82Ü\82·');
+       end;
+end;
 procedure TSearchDialog.BoardListViewDblClick(Sender: TObject);
 begin
 
        If TObject( BoardListView.Selected.Data ) is TThreadItem Then
                GikoForm.InsertBrowserTab( TThreadItem(BoardListView.Selected.Data) );
 
+       BringToFront;
 end;
 
 procedure TSearchDialog.CancelBottonClick(Sender: TObject);
 begin
-
-       //Self.Close;
        TGrep(Sender).Cancel := true;
        FCancel := true;
-
 end;
 
 procedure TSearchDialog.BoardListViewResize(Sender: TObject);
@@ -382,4 +433,14 @@ begin
 
 end;
 
+procedure TSearchDialog.FormDestroy(Sender: TObject);
+begin
+       if (BoardListView <> nil) then begin
+               BoardListView.Clear;
+       end;
+       if (CategoryListView <> nil) then begin
+               CategoryListView.Clear;
+       end;
+end;
+
 end.