OSDN Git Service

IDポップアップの処理見直し
authorh677 <h677>
Sat, 10 May 2008 14:05:32 +0000 (14:05 +0000)
committerh677 <h677>
Sat, 10 May 2008 14:05:32 +0000 (14:05 +0000)
件数取得を廃止

Giko.pas
GikoDataModule.pas
GikoSystem.pas

index c3d3ed1..c25410e 100644 (file)
--- a/Giko.pas
+++ b/Giko.pas
@@ -6771,11 +6771,9 @@ var
     doc : IHTMLDocument2;
     FOleInPlaceActiveObject: IOleInPlaceActiveObject;
        p : TPoint;
-       AID: string;
-       stlist : TStringList;
-       i, count: Integer;
-       body : String;
-    limited : Integer;
+       AID, body: string;
+       stlist, numbers : TStringList;
+    i, limited : Integer;
 begin
        result := true;
     if not Assigned(FActiveContent) then
@@ -6823,22 +6821,26 @@ begin
                                        stList.Free;
                                end;
                        end;
-                       
-                       count := GikoSys.GetSameIDResCount(AID, FActiveContent.Thread);
-                       limited := LIMIT;
-                       if not (GikoSys.Setting.LimitResCountMessage) then begin
-                               limited := -1;
-                       end else if (count > LIMIT) then begin
-                               if (GikoUtil.MsgBox(Handle,
-                                               IntToStr(LIMIT) + '\8cÂ\88È\8fã\82 \82è\82Ü\82·\82ª\81A\82·\82×\82Ä\95\\8e¦\82µ\82Ü\82·\82©\81H',
-                                               'ID\83|\83b\83v\83A\83b\83v\8cx\8d\90',
-                                               MB_YESNO or MB_ICONQUESTION) = ID_YES) then begin
-                                       limited := -1;
-                               end
-                       end;
-
-                       body := GikoSys.GetSameIDResAnchor(AID, FActiveContent.Thread, limited);
-                       FActiveContent.IDAnchorPopup(body);
+                       numbers := TStringList.Create;
+            try
+
+                GikoSys.GetSameIDRes(AID, FActiveContent.Thread, numbers);
+                limited := LIMIT;
+                if not (GikoSys.Setting.LimitResCountMessage) then begin
+                    limited := -1;
+                end else if (numbers.Count > LIMIT) then begin
+                    if (GikoUtil.MsgBox(Handle,
+                            IntToStr(LIMIT) + '\8cÂ\88È\8fã\82 \82è\82Ü\82·\82ª\81A\82·\82×\82Ä\95\\8e¦\82µ\82Ü\82·\82©\81H',
+                            'ID\83|\83b\83v\83A\83b\83v\8cx\8d\90',
+                            MB_YESNO or MB_ICONQUESTION) = ID_YES) then begin
+                        limited := -1;
+                    end
+                end;
+                body := GikoSys.CreateSameIDResAnchor(numbers, FActiveContent.Thread, limited);
+                FActiveContent.IDAnchorPopup(body);
+            finally
+                numbers.Free;
+            end;
                end;
        except
        end;
index bbfebf1..67d9020 100644 (file)
@@ -2404,28 +2404,34 @@ const
     LIMIT = 20;
 var
        ThreadItem : TThreadItem;
-       No, count: Integer;
+       No : Integer;
        body : string;
        limited: Integer;
+    numbers : TStringList;
 begin
        No := GikoForm.KokoPopupMenu.Tag;
        if No = 0 then Exit;
        ThreadItem := GikoForm.GetActiveContent(True);
        if ThreadItem = nil then Exit;
-       count := GikoSys.GetSameIDResCount(No, GikoForm.ActiveContent.Thread);
-       limited := LIMIT;
-    if not (GikoSys.Setting.LimitResCountMessage) then begin
-        limited := -1;
-    end else if count > LIMIT then begin
-               if ( GikoUtil.MsgBox(GikoForm.Handle,
-                               IntToStr(LIMIT) + '\8cÂ\88È\8fã\82 \82è\82Ü\82·\82ª\81A\82·\82×\82Ä\95\\8e¦\82µ\82Ü\82·\82©\81H',
-                               'ID\83|\83b\83v\83A\83b\83v\8cx\8d\90',
-                               MB_YESNO or MB_ICONQUESTION) = ID_YES ) then begin
+    numbers := TStringList.Create;
+    try
+        GikoSys.GetSameIDRes(No, GikoForm.ActiveContent.Thread, numbers);
+        limited := LIMIT;
+        if not (GikoSys.Setting.LimitResCountMessage) then begin
             limited := -1;
+        end else if numbers.Count > LIMIT then begin
+            if ( GikoUtil.MsgBox(GikoForm.Handle,
+                    IntToStr(LIMIT) + '\8cÂ\88È\8fã\82 \82è\82Ü\82·\82ª\81A\82·\82×\82Ä\95\\8e¦\82µ\82Ü\82·\82©\81H',
+                    'ID\83|\83b\83v\83A\83b\83v\8cx\8d\90',
+                    MB_YESNO or MB_ICONQUESTION) = ID_YES ) then begin
+                limited := -1;
+            end;
         end;
-       end;
-       body := GikoSys.GetSameIDResAnchor(No, ThreadItem, limited);
-       GikoForm.ActiveContent.IDAnchorPopup(body);
+        body := GikoSys.CreateSameIDResAnchor(numbers, ThreadItem, limited);
+        GikoForm.ActiveContent.IDAnchorPopup(body);
+    finally
+        numbers.Free;
+    end;
 end;
 // *************************************************************************
 //! \82±\82Ì\83\8c\83X\82 \82Ú\81`\82ñ\81@\81i\92Ê\8fí\81j
index 3a7fcac..5e8b832 100644 (file)
@@ -213,12 +213,9 @@ type
                procedure GetPopupResNumber(URL : string; var stRes, endRes : Int64);
 
                property Bayesian : TGikoBayesian read FBayesian write FBayesian;
-               function GetSameIDResAnchor(const AID : string; ThreadItem: TThreadItem; limited: Integer):string; overload;
-               function GetSameIDResAnchor(AIDNum : Integer; ThreadItem: TThreadItem; limited: Integer):string; overload;
+        function CreateSameIDResAnchor(var Numbers: TStringList; ThreadItem: TThreadItem; limited: Integer):string;
                procedure GetSameIDRes(const AID : string; ThreadItem: TThreadItem;var body: TStringList); overload;
                procedure GetSameIDRes(AIDNum : Integer; ThreadItem: TThreadItem;var body: TStringList); overload;
-               function GetSameIDResCount(const AID : string; ThreadItem: TThreadItem):Integer; overload;
-               function GetSameIDResCount(AIDNum : Integer; ThreadItem: TThreadItem):Integer; overload;
         function GetResID(AIDNum: Integer; ThreadItem: TThreadItem): String;
                //! \92P\8cê\89ð\90Í
                procedure SpamCountWord( const text : string; wordCount : TWordCount );
@@ -2751,20 +2748,18 @@ function TGikoSys.GetSambaFileName : string;
 begin
        Result := Setting.GetSambaFileName;
 end;
-
 {!
-\brief \93¯\82\93\8a\8de ID \82ð\8e\9d\82Â\83\8c\83X\82ð\83A\83\93\83J\81[\82É\82µ\82Ä\97ñ\8b\93
-\param AID        \8cÂ\90l\82ð\93Á\92è\82·\82é\93\8a\8de ID
+\brief \97ñ\8b\93\82³\82ê\82½\83\8c\83X\94Ô\8d\86\82Ö\82Ì\83A\83\93\83J\81[\97pHTML\8dì\90¬
+\param Numbers    \97ñ\8b\93\82³\82ê\82½\83\8c\83X\94Ô\8d\86
 \param ThreadItem \97ñ\8b\93\82·\82é\83X\83\8c\83b\83h
 \param limited    \97ñ\8b\93\82·\82é\90\94\82ð\90§\8cÀ\82·\82é\82È\82ç1\88È\8fã
 \return           \97ñ\8b\93\82³\82ê\82½\83\8c\83X\83A\83\93\83J\81[
 }
-function TGikoSys.GetSameIDResAnchor(
-    const AID : string; ThreadItem: TThreadItem;
+function TGikoSys.CreateSameIDResAnchor(
+    var Numbers: TStringList; ThreadItem: TThreadItem;
     limited: Integer):string;
 var
        i: integer;
-       body: TStringList;
     Res: TResRec;
     ResLink : TResLinkRec;
 begin
@@ -2772,29 +2767,22 @@ begin
     Res.FBody := '';
     Res.FType := glt2chNew;
 
-               Result := '';
-               if (not IsNoValidID(AID)) and
-                       (ThreadItem <> nil) and (ThreadItem.IsLogFile) then begin
-                               body := TStringList.Create;
-                               try
-                                               GetSameIDRes(AID, ThreadItem, body);
-                                               if (limited > 0) and (body.Count > limited) then begin
-                                                               for i := body.Count - limited to body.Count - 1 do begin
-                                                                               Res.FBody := Res.FBody + '&gt;' + body[i] + ' ';
-                                                               end;
-                                               end else begin
-                                                               for i := 0 to body.Count - 1 do begin
-                                                                               Res.FBody := Res.FBody + '&gt;' + body[i] + ' ';
-                                                               end;
-                                               end;
-                               finally
-                                               body.Free;
-                               end;
+       Result := '';
+       if (Numbers <> nil) and (Numbers.Count > 0) then begin
+        if (limited > 0) and (Numbers.Count > limited) then begin
+            for i := Numbers.Count - limited to Numbers.Count - 1 do begin
+                Res.FBody := Res.FBody + '&gt;' + Numbers[i] + ' ';
+            end;
+        end else begin
+            for i := 0 to Numbers.Count - 1 do begin
+                Res.FBody := Res.FBody + '&gt;' + Numbers[i] + ' ';
+            end;
+        end;
         ResLink.FBbs := ThreadItem.ParentBoard.BBSID;
         ResLink.FKey := ChangeFileExt(ThreadItem.FileName, '');
         HTMLCreater.ConvRes(@Res, @ResLink, false);
         Result := Res.FBody;
-               end;
+    end;
 end;
 
 {!
@@ -2809,6 +2797,22 @@ var
        ReadList: TStringList;
        Res: TResRec;
        boardPlugIn : TBoardPlugIn;
+
+    procedure CheckSameID(const AID:String; const Target: String; no: Integer);
+    var
+        pos: Integer;
+    begin
+        pos := AnsiPos('id:', LowerCase(Target));
+        if (pos > 0) then begin
+            if(AnsiPos(AID, Copy(Target, pos-1, Length(Target))) > 0) then begin
+                body.Add(IntToStr(no));
+            end;
+        end else begin
+            if(AnsiPos(AID, Target) > 0) then begin
+                body.Add(IntToStr(no));
+            end;
+        end;
+    end;
 begin
        if (not IsNoValidID(AID)) and
        (ThreadItem <> nil) and (ThreadItem.IsLogFile) then begin
@@ -2821,9 +2825,7 @@ begin
                        for i := 0 to threadItem.Count - 1 do begin
                                // \83\8c\83X
                                THTMLCreate.DivideStrLine(boardPlugIn.GetDat(DWORD( threadItem ), i + 1), @Res);
-                               if(AnsiPos(AID, Res.FDateTime) > 0) then begin
-                                       body.Add(IntToStr(i+1));
-                               end;
+                CheckSameID(AID, Res.FDateTime, i+1);
                        end;
                end else begin
                        ReadList := TStringList.Create;
@@ -2831,9 +2833,7 @@ begin
                                ReadList.LoadFromFile(ThreadItem.GetThreadFileName);
                                for i := 0 to ReadList.Count - 1 do begin
                                        THTMLCreate.DivideStrLine(ReadList[i], @Res);
-                                       if AnsiPos(AID, Res.FDateTime) > 0 then begin
-                                               body.Add(IntToStr(i+1));
-                                       end;
+                    CheckSameID(AID, Res.FDateTime, i+1);
                                end;
                        finally
                                ReadList.Free;
@@ -2846,50 +2846,6 @@ end;
 \brief \93¯\82\93\8a\8de ID \82ð\8e\9d\82Â\83\8c\83X\82ð\97ñ\8b\93
 \param AIDNum     \8cÂ\90l\82ð\93Á\92è\82·\82é\93\8a\8de ID
 \param ThreadItem \97ñ\8b\93\82·\82é\83X\83\8c\83b\83h
-\param limited    \97ñ\8b\93\82·\82é\90\94\82ð\90§\8cÀ\82·\82é\82È\82ç1\88È\8fã
-\return
-}
-function TGikoSys.GetSameIDResAnchor(AIDNum : Integer;
-     ThreadItem: TThreadItem;
-     limited: Integer):string;
-var
-       i: integer;
-       body: TStringList;
-    Res: TResRec;
-    ResLink : TResLinkRec;
-begin
-    // body\88È\8aO\82Í\8eg\97p\82µ\82È\82¢\82Ì\82Å\8f\89\8aú\89»\82µ\82È\82¢
-    Res.FBody := '';
-    Res.FType := glt2chNew;
-
-       Result := '';
-       if (ThreadItem <> nil) and (ThreadItem.IsLogFile) then begin
-               body := TStringList.Create;
-               try
-                       GetSameIDRes(AIDNum, ThreadItem, body);
-            if (limited > 0) and ( body.Count > limited) then begin
-                for i := body.Count - 20 to body.Count - 1 do begin
-                    Res.FBody := Res.FBody + '&gt;' + body[i] + ' ';
-                end;
-            end else begin
-                       for i := 0 to body.Count - 1 do begin
-                               Res.FBody := Res.FBody + '&gt;' + body[i] + ' ';
-                       end;
-            end;
-               finally
-                       body.Free;
-               end;
-        ResLink.FBbs := ThreadItem.ParentBoard.BBSID;
-        ResLink.FKey := ChangeFileExt(ThreadItem.FileName, '');
-        HTMLCreater.ConvRes(@Res, @ResLink, false);
-        Result := Res.FBody;
-       end;
-end;
-
-{!
-\brief \93¯\82\93\8a\8de ID \82ð\8e\9d\82Â\83\8c\83X\82ð\97ñ\8b\93
-\param AIDNum     \8cÂ\90l\82ð\93Á\92è\82·\82é\93\8a\8de ID
-\param ThreadItem \97ñ\8b\93\82·\82é\83X\83\8c\83b\83h
 \param body       OUT:\97ñ\8b\93\82³\82ê\82½\83\8c\83X\94Ô\8d\86\82ª\95Ô\82é
 }
 procedure TGikoSys.GetSameIDRes(AIDNum : Integer; ThreadItem: TThreadItem;var body: TStringList);
@@ -2950,51 +2906,6 @@ begin
                end;
        end;
 end;
-{!
-\brief \93¯\82\93\8a\8de ID \82ð\8e\9d\82Â\83\8c\83X\82ð\83J\83E\83\93\83g
-\param AID        \8cÂ\90l\82ð\93Á\92è\82·\82é\93\8a\8de ID
-\param ThreadItem \97ñ\8b\93\82·\82é\83X\83\8c\83b\83h
-\return           \93¯\82¶ ID \82ð\8e\9d\82Â\83\8c\83X\82Ì\90\94
-}
-function TGikoSys.GetSameIDResCount(const AID : string; ThreadItem: TThreadItem):Integer;
-var
-       body: TStringList;
-begin
-    Result := 0;
-       if (not IsNoValidID(AID))
-     and (ThreadItem <> nil) and (ThreadItem.IsLogFile) then begin
-               body := TStringList.Create;
-               try
-                       GetSameIDRes(AID, ThreadItem, body);
-                       Result := body.Count;
-               finally
-                       body.Free;
-               end;
-       end;
-
-end;
-
-{!
-\brief \93¯\82\93\8a\8de ID \82ð\8e\9d\82Â\83\8c\83X\82ð\83J\83E\83\93\83g
-\param AIDNum     \8cÂ\90l\82ð\93Á\92è\82·\82é\93\8a\8de ID
-\param ThreadItem \97ñ\8b\93\82·\82é\83X\83\8c\83b\83h
-\return           \93¯\82¶ ID \82ð\8e\9d\82Â\83\8c\83X\82Ì\90\94
-}
-function TGikoSys.GetSameIDResCount(AIDNum : Integer; ThreadItem: TThreadItem):Integer;
-var
-       body: TStringList;
-begin
-       Result := 0;
-       if (ThreadItem <> nil) and (ThreadItem.IsLogFile) then begin
-               body := TStringList.Create;
-               try
-                       GetSameIDRes(AIDNum, ThreadItem, body);
-            Result := body.Count;
-               finally
-                       body.Free;
-               end;
-       end;
-end;
 
 {!
 \brief \8e\9e\8d\8f\82ð\8e¦\82·\95\8e\9a\97ñ\82Å\82Í\96³\82¢\82©\82Ç\82¤\82©
@@ -3485,8 +3396,10 @@ begin
 end;
 
 procedure TGikoSys.ShowRefCount(msg: String; unk: IUnknown);
+{$IFDEF DEBUG}
 var
     count : integer;
+{$ENDIF}
 begin
     if not Assigned(unk) then
         Exit;