OSDN Git Service

・TThreadItem クラス、およびクラスの受け渡し処理を追加。
[gikonavigoeson/gikonavi.git] / Search.pas
index 96b6278..f1152aa 100644 (file)
@@ -40,6 +40,7 @@ type
                { Private \90é\8c¾ }
                FChkItem: TObject;
                FRegItem: TThreadItem;
+        FCancel: Boolean;
                procedure SetCategoryList;
                procedure SetBoardList(Item: TListItem);
                procedure CheckItem(Item: TObject);
@@ -68,6 +69,7 @@ constructor TSearchDialog.Create(AOwner: TComponent; ChkItem: TObject);
 begin
        inherited Create(AOwner);
        FChkItem := ChkItem;
+    FCancel := false;
 end;
 
 procedure TSearchDialog.FormCreate(Sender: TObject);
@@ -222,14 +224,14 @@ var
        SearchWord: string;
        Reg: TGrep;
        Filter: string;
-  oldText: string;
+       oldText: string;
 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;
        AllReleaseButton.Enabled := False;
        OkBotton.Enabled := False;
-       CancelBotton.Enabled := False;
+    CancelBotton.Enabled := true;
+       FCancel := false;
        CategoryListView.Enabled := False;
 
        Screen.Cursor := crHourglass;
@@ -240,7 +242,7 @@ begin
        try
                if Length( SearchComboBox.Text ) > 0 then
                begin
-       // ComboBox \82Ì\93à\97e\82ð\8dX\90V
+                       // ComboBox \82Ì\93à\97e\82ð\8dX\90V
                        oldText := SearchComboBox.Text;
                        i := GikoSys.Setting.SelectTextList.IndexOf( oldText );
                        if i <> -1 then
@@ -252,75 +254,79 @@ begin
                        SearchComboBox.Items.Insert( 0, oldText );
                        SearchComboBox.Text := oldText;
 
-      BoardListView.Clear;
-
-      // grep \97p\82Ì\8c\9f\8dõ\83\8f\81[\83h\82ð\90\90¬
-      Reg.OnMatch := OnMatch;
-      Reg.UseFuzzyCharDic := True;
-
-      If RegExpCheckBox.Checked Then
-        SearchWord := SearchComboBox.Text
-      Else
-        SearchWord := RegExpEncode( SearchComboBox.Text );
-
-      If NameCheckBox.Checked And
-         MailCheckBox.Checked And
-         IDCheckBox.Checked And
-         SentenceCheckBox.Checked Then
-      Begin
-        // \91S\82Ä\83Z\83b\83g\82³\82ê\82Ä\82¢\82é\8fê\8d\87\82Í\90³\8bK\95\\8c»\82ð\8bÉ\97Í\8eg\82í\82È\82¢
-        // (\90³\8bK\95\\8c»\82ð\8eg\82¤\82Æ\82©\82È\82è\92x\82¢\82Ì\82Å)
-        Reg.RegExp := SearchWord;
-      End Else Begin
-        If NameCheckBox.Checked Then
-          Filter := '.*' + SearchWord + '.*<>'
-        Else
-          Filter := '.*<>';
-        If MailCheckBox.Checked Then
-          Filter := Filter + '.*' + SearchWord + '.*<>'
-        Else
-          Filter := Filter + '.*<>';
-        If IDCheckBox.Checked Then
-          Filter := Filter + '.*' + SearchWord + '.*<>'
-        Else
-          Filter := Filter + '.*<>';
-        If SentenceCheckBox.Checked Then
-          Filter := Filter + '.*' + SearchWord + '.*<>\n'
-        Else
-          Filter := Filter + '.*<>\n';
-
-        Reg.RegExp := Filter;
-      End;
-
-      // \83T\83C\83g\82Ì\92\86\82Ì (\91±\82­)
-      for i := 0 to BBS2ch.Count - 1 do begin
-        // \83J\83e\83S\83\8a\82Ì\92\86\82Ì (\91±\82­)
-        Category := BBS2ch.Items[i];
-        for j := 0 to Category.Count - 1 do begin
-          // \94Â\82Ì\92\86\82Ì (\91±\82­)
-          Board := Category.Items[j];
-          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;
-
-            end;
-          end;
-        end
-      end;
+                       BoardListView.Clear;
+
+                       // grep \97p\82Ì\8c\9f\8dõ\83\8f\81[\83h\82ð\90\90¬
+                       Reg.OnMatch := OnMatch;
+                       Reg.UseFuzzyCharDic := True;
+
+                       If RegExpCheckBox.Checked Then
+                               SearchWord := SearchComboBox.Text
+                       Else
+                               SearchWord := RegExpEncode( SearchComboBox.Text );
+
+                       If NameCheckBox.Checked And
+                               MailCheckBox.Checked And
+                               IDCheckBox.Checked And
+                               SentenceCheckBox.Checked Then
+                       Begin
+                               // \91S\82Ä\83Z\83b\83g\82³\82ê\82Ä\82¢\82é\8fê\8d\87\82Í\90³\8bK\95\\8c»\82ð\8bÉ\97Í\8eg\82í\82È\82¢
+                               // (\90³\8bK\95\\8c»\82ð\8eg\82¤\82Æ\82©\82È\82è\92x\82¢\82Ì\82Å)
+                               Reg.RegExp := SearchWord;
+                       End Else Begin
+                               If NameCheckBox.Checked Then
+                                       Filter := '.*' + SearchWord + '.*<>'
+                               Else
+                                       Filter := '.*<>';
+                               If MailCheckBox.Checked Then
+                                       Filter := Filter + '.*' + SearchWord + '.*<>'
+                               Else
+                                       Filter := Filter + '.*<>';
+                               If IDCheckBox.Checked Then
+                                       Filter := Filter + '.*' + SearchWord + '.*<>'
+                               Else
+                                       Filter := Filter + '.*<>';
+                               If SentenceCheckBox.Checked Then
+                                       Filter := Filter + '.*' + SearchWord + '.*<>\n'
+                               Else
+                                       Filter := Filter + '.*<>\n';
+
+                               Reg.RegExp := Filter;
+                       End;
+
+                       // \83T\83C\83g\82Ì\92\86\82Ì (\91±\82­)
+                       try
+                               for i := 0 to BBS2ch.Count - 1 do begin
+                                       // \83J\83e\83S\83\8a\82Ì\92\86\82Ì (\91±\82­)
+                                       Category := BBS2ch.Items[i];
+                                       for j := 0 to Category.Count - 1 do begin
+                                               // \94Â\82Ì\92\86\82Ì (\91±\82­)
+                                               Board := Category.Items[j];
+                                               if not Board.IsThreadDatRead then
+                                                       GikoSys.ReadSubjectFile(Board);
+                                               if Board.BoolData then begin
+                                                       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;
+                                                               end;
+                                                       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;
+                       except
+                               on E:Exception do ShowMessage(E.Message)
+                       end;
                end;
        finally
                //sl.Free;
@@ -332,10 +338,9 @@ begin
                AllSelectButton.Enabled := True;
                AllReleaseButton.Enabled := True;
                OkBotton.Enabled := True;
-               CancelBotton.Enabled := True;
                CategoryListView.Enabled := True;
-       end;
-
+        CancelBotton.Enabled := false;
+    end;
 end;
 
 procedure TSearchDialog.BoardListViewDblClick(Sender: TObject);
@@ -349,7 +354,8 @@ end;
 procedure TSearchDialog.CancelBottonClick(Sender: TObject);
 begin
 
-       Self.Close;
+       //Self.Close;
+    FCancel := true;
 
 end;