• R/O
  • HTTP
  • SSH
  • HTTPS

gikonavi: Commit


Commit MetaInfo

Revision772ff6c6cb59fd1ecb853b288273a9b4a1ae0044 (tree)
Time2007-10-05 00:34:56
Authorcvs2git <cvs2git>
Commitercvs2git

Log Message

This commit was manufactured by cvs2svn to create tag 'v1_57_0_734'.

Change Summary

Incremental Difference

--- a/AbonUnit.pas
+++ b/AbonUnit.pas
@@ -115,6 +115,7 @@ type
115115 //--
116116 function TreatSyria(AString: string): string;
117117 //--
118+ function AddToken(AString: string; Invisible: Boolean): Boolean;
118119 end;
119120 var
120121 Abon1 :TAbon;
@@ -383,14 +384,20 @@ begin
383384 buftoken := Copy(argline,1,pos-1);
384385 Delete(argline,1,pos);
385386 if Length(buftoken) > 0 then begin
386- bufstl.Append(buftoken);
387+ // >> で始まるトークンはコメント扱いで無視する
388+ if AnsiPos('>>', buftoken) <> 1 then begin
389+ bufstl.Append(buftoken);
390+ end;
387391 end else if ( bufstl.Count = 0 ) then begin
388392 bufstl.Append('');
389393 end;
390394 pos := AnsiPos(#9,argline);
391395 end;
392396 if Length(argline) > 0 then begin
393- bufstl.Append(argline);
397+ // >> で始まるトークンはコメント扱いで無視する
398+ if AnsiPos('>>', argline) <> 1 then begin
399+ bufstl.Append(argline);
400+ end;
394401 end;
395402 ret := bufstl.Count;
396403 SetLength(Ftokens[index],ret);
@@ -448,6 +455,9 @@ begin
448455 trgLen := Length(target);
449456
450457 for lines := 0 to High(Ftokens) do begin
458+ if Length(Ftokens[lines]) = 0 then begin
459+ Continue;
460+ end;
451461 hit := true;
452462 bufline := target;
453463 pts := PChar(bufline);
@@ -905,6 +915,32 @@ begin
905915 Result := Result + AString;
906916 end;
907917
918+// NGワードファイルに追加 追加された場合、Trueがかえる
919+function TAbon.AddToken(AString: string; Invisible: Boolean): Boolean;
920+var
921+ bufStringList : TStringList;
922+ ngword: String;
923+begin
924+ Result := False;
925+ if FileExists(GetNGwordpath) then begin
926+ bufStringList := TStringList.Create;
927+ try
928+ bufStringList.LoadFromFile(GetNGwordpath);
929+ if (Invisible) then begin
930+ ngword := #9 + AString;
931+ end else begin
932+ ngword := AString;
933+ end;
934+ if (bufStringList.IndexOf(ngword) = -1) then begin
935+ bufStringList.Add(ngword);
936+ bufStringList.SaveToFile(GetNGwordpath);
937+ Result := True;
938+ end;
939+ finally
940+ bufStringList.Free;
941+ end;
942+ end;
943+end;
908944
909945
910946 end.
--- a/BoardGroup.pas
+++ b/BoardGroup.pas
@@ -1777,9 +1777,6 @@ begin
17771777 end;
17781778
17791779 function TThreadItem.GetCreateDate: TDateTime;
1780-var
1781- unixtime: Int64;
1782- tmp: string;
17831780 begin
17841781 // ファイル名からスレ作成日時を求める
17851782 try
@@ -1787,18 +1784,7 @@ begin
17871784 Result := ZERO_DATE
17881785 else begin
17891786 // ログファイルの拡張子をはずしたものがスレ作成日時
1790- tmp := ChangeFileExt(FFileName, '');
1791- if AnsiPos('_', tmp) <> 0 then
1792- if AnsiPos('_', tmp) > 9 then
1793- tmp := Copy(tmp, 1, AnsiPos('_', tmp)-1)
1794- else
1795- Delete(tmp, AnsiPos('_', tmp), 1);
1796-
1797- if ( Length(tmp) = 9) and ( tmp[1] = '0' ) then
1798- Insert('1', tmp, 1);
1799-
1800- unixtime := StrToInt64Def(tmp, ZERO_DATE);
1801- Result := UnixToDateTime(unixtime) + OffsetFromUTC;
1787+ Result := GikoSys.GetCreateDateFromName(FFileName);
18021788 if GikoSys.Setting.FutureThread then begin
18031789 if CompareDateTime(Result, Now) = 1 then
18041790 Result := ZERO_DATE;
--- a/Editor.pas
+++ b/Editor.pas
@@ -1438,12 +1438,13 @@ end;
14381438
14391439 procedure TEditorForm.BoardTopClick(Sender: TObject);
14401440 var
1441- ini: TIniFile;
1441+ ini: TMemIniFile;
14421442 begin
1443- ini := TIniFile.Create(GikoSys.Setting.GetFileName);
1443+ ini := TMemIniFile.Create(GikoSys.Setting.GetFileName);
14441444 try
14451445 BoardtopTab.TabVisible := BoardTop.Checked;
14461446 ini.WriteBool('EditorForm', 'BoardTopTab', BoardtopTab.TabVisible);
1447+ ini.UpdateFile;
14471448 finally
14481449 ini.Free;
14491450 end;
--- a/Favorite.dfm
+++ b/Favorite.dfm
@@ -1,6 +1,5 @@
11 object FavoriteDM: TFavoriteDM
22 OldCreateOrder = False
3- OnDestroy = DataModuleDestroy
43 Left = 192
54 Top = 107
65 Height = 201
--- a/Favorite.pas
+++ b/Favorite.pas
@@ -45,20 +45,14 @@ type
4545 end;
4646
4747 TFavoriteDM = class(TDataModule)
48- procedure DataModuleDestroy(Sender: TObject);
4948 private
5049 { Private 宣言 }
50+ FAbEnd: Boolean;
5151 FStack: TStack;
5252 FTreeView: TTreeView;
5353 FModified: boolean;
5454 procedure ReadNode(Node: IXMLNode);
5555 procedure AddSaveString(Node: TTreeNode; SaveList: TStringList);
56-// procedure AddSaveString(Node: TTreeNode; XMLNode: IXMLNode);
57-// procedure SAXStartDocument(Sender: TObject);
58-// procedure SAXEndDocument(Sender: TObject);
59-// procedure SAXStartElement(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString; const Atts: IAttributes);
60-// procedure SAXEndElement(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString);
61-// procedure SAXCharacters(Sender: TObject; const PCh: SAXString);
6256 public
6357 { Public 宣言 }
6458 procedure Clear;
@@ -70,6 +64,7 @@ type
7064 procedure URLReplace(oldURLs: TStringList; newURLs: TStringList);
7165 property TreeView: TTreeView read FTreeView;
7266 property Modified: boolean read FModified write FModified;
67+ property AbEnd: Boolean read FAbEnd write FAbEnd;
7368 end;
7469
7570 var
@@ -262,19 +257,6 @@ begin
262257
263258 end;
264259
265-procedure TFavoriteDM.DataModuleDestroy(Sender: TObject);
266-//var
267-// i: Integer;
268-begin
269-{ TreeView.Items.BeginUpdate;
270- for i := TreeView.Items.Count - 1 downto 0 do begin
271- // if TObject(TreeView.Items[i].Data) <> nil then
272- // TObject(TreeView.Items[i].Data).Free;
273- end;
274- TreeView.Items.Clear;
275- TreeView.Items.EndUpdate;
276-} //TreeView.Free;
277-end;
278260 procedure TFavoriteDM.Clear;
279261 var
280262 Node : TTreeNode;
@@ -307,6 +289,8 @@ var
307289 FavFolder: TFavoriteFolder;
308290 LinkExists: Boolean;
309291 begin
292+ FABend := False;
293+
310294 FavoriteDM.Modified := true;
311295 FileName := GikoSys.GetConfigDir + FAVORITE_FILE_NAME;
312296
@@ -341,11 +325,15 @@ begin
341325 Node.ImageIndex := 14;
342326 Node.SelectedIndex := 14;
343327 end;
328+
344329 finally
345330 FStack.Free;
346331 XMLDoc.Free;
347332 end;
348333 except
334+ on e : Exception do begin
335+ FABend := True;
336+ end;
349337 end;
350338 end;
351339
@@ -455,25 +443,6 @@ begin
455443 end;
456444
457445 procedure TFavoriteDM.WriteFavorite;
458-{
459-var
460- FileName: string;
461-// SaveList: TStringList;
462-// i: Integer;
463-// Count: Integer;
464-
465- XMLDoc: IXMLDocument;
466- XMLNode: IXMLNode;
467-// FavoNode: IXMLNode;
468-begin
469- XMLDoc := NewXMLDocument;
470- XMLDoc.Encoding := 'Shift_JIS';
471- XMLDoc.StandAlone := 'yes';
472- XMLNode := XMLDoc.AddChild('favorite');
473- FileName := GikoSys.GetConfigDir + FAVORITE_FILE_NAME;
474- AddSaveString(TreeView.Items.GetFirstNode, XMLNode);
475- XMLDoc.SaveToFile(FileName);
476-}
477446 var
478447 FileName, tmpFileName: string;
479448 SaveList: TStringList;
@@ -502,42 +471,6 @@ begin
502471 end;
503472 end;
504473
505-{
506-procedure TFavoriteDM.AddSaveString(Node: TTreeNode; XMLNode: IXMLNode);
507-var
508- i: Integer;
509-// s: string;
510- FavBoard: TFavoriteBoardItem;
511- FavThread: TFavoriteThreadItem;
512- FavNode: IXMLNode;
513-begin
514- for i := 0 to Node.Count - 1 do begin
515- if TObject(Node.Item[i].Data) is TFavoriteFolder then begin
516- FavNode := XMLNode.AddChild('folder');
517- FavNode.Attributes['title'] := Node.Item[i].Text;
518- AddSaveString(Node.Item[i], FavNode);
519- end else if TObject(Node.Item[i].Data) is TFavoriteBoardItem then begin
520- FavBoard := TFavoriteBoardItem(Node.Item[i].Data);
521- FavNode := XMLNode.AddChild('favitem');
522- FavNode.Attributes['type'] := '2ch';
523- FavNode.Attributes['favtype'] := 'board';
524- FavNode.Attributes['bbs'] := FavBoard.BBSID;
525- FavNode.Attributes['title'] := Node.Item[i].Text;
526- FavNode.Attributes['boardname'] := FavBoard.BoardName;
527- end else if TObject(Node.Item[i].Data) is TFavoriteThreadItem then begin
528- FavThread := TFavoriteThreadItem(Node.Item[i].Data);
529- FavNode := XMLNode.AddChild('favitem');
530- FavNode.Attributes['type'] := '2ch';
531- FavNode.Attributes['favtype'] := 'thread';
532- FavNode.Attributes['bbs'] := FavThread.BBSID;
533- FavNode.Attributes['thread'] := FavThread.ThreadID;
534- FavNode.Attributes['title'] := Node.Item[i].Text;
535- FavNode.Attributes['threadname'] := FavThread.ThreadName;
536- end;
537- end;
538-end;
539-}
540-
541474 procedure TFavoriteDM.AddSaveString(Node: TTreeNode; SaveList: TStringList);
542475 var
543476 s: string;
@@ -570,74 +503,6 @@ begin
570503 end;
571504 end;
572505
573-{
574-procedure TFavoriteDM.SAXStartDocument(Sender: TObject);
575-begin
576- FStack := TStack.Create;
577- FStack.Push(FTreeView.Items.GetFirstNode);
578-end;
579-
580-procedure TFavoriteDM.SAXEndDocument(Sender: TObject);
581-begin
582- FStack.Free;
583-end;
584-
585-procedure TFavoriteDM.SAXStartElement(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString;
586- const Atts: IAttributes);
587-var
588- FavType: string;
589- ParentNode: TTreeNode;
590- CurrentNode: TTreeNode;
591- FavFolder: TFavoriteFolder;
592- FavBoard: TFavoriteBoardItem;
593- FavThread: TFavoriteThreadItem;
594-begin
595- if QName = 'folder' then begin
596- ParentNode := FStack.Peek;
597- if TObject(ParentNode.Data) is TFavoriteFolder then begin
598- FavFolder := TFavoriteFolder.Create;
599- CurrentNode := FTreeView.Items.AddChildObject(ParentNode, Atts.getValue('title'), FavFolder);
600- CurrentNode.ImageIndex := 12;
601- CurrentNode.SelectedIndex := 13;
602- FStack.Push(CurrentNode);
603- end;
604- end else if QName = 'favitem' then begin
605- ParentNode := FStack.Peek;
606- if TObject(ParentNode.Data) is TFavoriteFolder then begin
607- FavType := Atts.getValue('favtype');
608- if FavType = 'board' then begin
609- FavBoard := TFavoriteBoardItem.Create;
610- FavBoard.BBSID := Atts.getValue('bbs');
611- FavBoard.BoardName := Atts.getValue('boardname');
612- CurrentNode := FTreeView.Items.AddChildObject(ParentNode, Atts.getValue('title'), FavBoard);
613- CurrentNode.ImageIndex := 14;
614- CurrentNode.SelectedIndex := 15;
615- end else if FavType = 'thread' then begin
616- FavThread := TFavoriteThreadItem.Create;
617- FavThread.BBSID := Atts.getValue('bbs');
618- FavThread.ThreadID := Atts.getValue('thread');
619- FavThread.ThreadName := Atts.getValue('threadname');
620- CurrentNode := FTreeView.Items.AddChildObject(ParentNode, Atts.getValue('title'), FavThread);
621- CurrentNode.ImageIndex := 16;
622- CurrentNode.SelectedIndex := 17;
623- end;
624- end;
625- end;
626-end;
627-
628-procedure TFavoriteDM.SAXEndElement(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString);
629-begin
630- if QName = 'folder' then begin
631- if FStack.Count <> 0 then
632- FStack.Pop;
633- end;
634-end;
635-
636-procedure TFavoriteDM.SAXCharacters(Sender: TObject; const PCh: SAXString);
637-begin
638-//
639-end;
640-}
641506 function TFavoriteDM.SaveFavoriteFile(FileName: String) : Boolean;
642507 var
643508 FavoriteFilePath: string;
--- a/Giko.dfm
+++ b/Giko.dfm
@@ -8419,6 +8419,17 @@ object GikoForm: TGikoForm
84198419 object N71: TMenuItem
84208420 Action = GikoDM.IndividualAbonID0Action
84218421 end
8422+ object N82: TMenuItem
8423+ Caption = '-'
8424+ end
8425+ object IDNG1: TMenuItem
8426+ Action = GikoDM.AddIDtoNGWord1Action
8427+ Caption = 'NG'#12527#12540#12489#12395#36861#21152
8428+ end
8429+ object IDNG2: TMenuItem
8430+ Action = GikoDM.AddIDtoNGWord0Action
8431+ Caption = 'NG'#12527#12540#12489#12395#36861#21152'('#36879#26126')'
8432+ end
84228433 end
84238434 object N52: TMenuItem
84248435 Caption = #20491#21029#12354#12412#65374#12435#35299#38500
@@ -8781,4 +8792,11 @@ object GikoForm: TGikoForm
87818792 Left = 4
87828793 Top = 373
87838794 end
8795+ object ResPopupClearTimer: TTimer
8796+ Tag = 1
8797+ Enabled = False
8798+ OnTimer = ResPopupClearTimerTimer
8799+ Left = 8
8800+ Top = 440
8801+ end
87848802 end
--- a/Giko.pas
+++ b/Giko.pas
@@ -24,7 +24,8 @@ uses
2424 const
2525 NGWORDNAME_PANEL = 3;
2626 THREADSIZE_PANEL = 2;
27-
27+ USER_RESPOPUPCLEAR = WM_USER + 2005; ///< wParam : TWebBrowser
28+
2829 type
2930
3031 TToolBarSettingSenderType = (tssNone, tssMain, tssList, tssBrowser);
@@ -419,6 +420,10 @@ type
419420 N80: TMenuItem;
420421 SameBoardThreadItem: TMenuItem;
421422 N81: TMenuItem;
423+ N82: TMenuItem;
424+ IDNG1: TMenuItem;
425+ IDNG2: TMenuItem;
426+ ResPopupClearTimer: TTimer;
422427 procedure FormCreate(Sender: TObject);
423428 procedure FormDestroy(Sender: TObject);
424429 procedure BrowserStatusTextChange(Sender: TObject;
@@ -555,6 +560,7 @@ type
555560 procedure GetResURLMenuClick(Sender: TObject);
556561 procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
557562 var Handled: Boolean);
563+ procedure ResPopupClearTimerTimer(Sender: TObject);
558564 private
559565 { Private 宣言 }
560566 FEnabledCloseButton: Boolean;
@@ -686,6 +692,10 @@ type
686692 procedure SameBoardThreadSubItemOnClick(Sender: TObject);
687693 //! ポップアップブラウザ作成
688694 procedure CreateResPopupBrowser;
695+ //! D&Dを受け取る
696+ procedure WMDropFiles(var Msg: TWMDropFiles); Message WM_DropFiles;
697+ //! ファイルチェック
698+ function isValidFile(FileName: String) : boolean;
689699 protected
690700 procedure CreateParams(var Params: TCreateParams); override;
691701 procedure WndProc(var Message: TMessage); override;
@@ -756,6 +766,8 @@ type
756766 procedure IndividualAbonID(Atype : Integer);
757767 //このレスあぼ〜ん
758768 procedure IndividualAbon(Atag, Atype : Integer);
769+ //同一IDをNGワードに登録
770+ procedure AddIDtoNGWord(invisible : boolean);
759771 //ブラウザの再描画 true:全てのタブ false:アクティブなタブのみ
760772 procedure RepaintAllTabsBrowser();
761773 //リンクバー設定
@@ -1312,6 +1324,20 @@ begin
13121324
13131325 //置換設定ファイルの読み込み
13141326 ReplaceDM.LoadFromFile(GikoSys.GetReplaceFileName);
1327+
1328+ //レスポップアップ消去タイマー
1329+ ResPopupClearTimer.Interval := GikoSys.Setting.RespopupWait;
1330+
1331+ // D&Dを受け取る
1332+ DragAcceptFiles(Self.Handle, True);
1333+
1334+ // 初期化に失敗したモジュールチェック
1335+ if (FavoriteDM.AbEnd) then begin
1336+ GikoUtil.MsgBox(Self.Handle, 'お気に入りの初期化に失敗しました。ギコナビを終了します。',
1337+ '初期化異常');
1338+ Self.Close;
1339+ end;
1340+
13151341 end;
13161342
13171343 // CoolBar の設定を変数に保存
@@ -1467,6 +1493,13 @@ begin
14671493 GikoDM.TabsOpenAction.Execute;
14681494 GikoDM.TabsOpenAction.Tag := 0;
14691495 if (GikoSys.Setting.LastCloseTabURL <> '') then begin
1496+ PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( FActiveContent.Browser ), 0 );
1497+ if ( FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
1498+ while (FActiveContent.Browser.ReadyState <> READYSTATE_COMPLETE) and
1499+ (FActiveContent.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
1500+ Application.ProcessMessages;
1501+ end;
1502+ end;
14701503 item := BBSsFindThreadFromURL( GikoSys.Setting.LastCloseTabURL );
14711504 if (item <> nil) and (item.IsLogFile) then begin
14721505 OpenThreadItem(item, item.URL);
@@ -1523,13 +1556,15 @@ end;
15231556 procedure TGikoForm.FormDestroy(Sender: TObject);
15241557 var
15251558 i : Integer;
1526-// CoolSet: TCoolSet;
15271559 wp : TWindowPlacement;
15281560 tmpBool : Boolean;
15291561 begin
15301562 // マウスジェスチャー開放
15311563 try
1564+ MouseGesture.Clear;
15321565 MouseGesture.UnHook;
1566+ MouseGesture.Free;
1567+ MouseGesture := nil;
15331568 except
15341569 end;
15351570 try
@@ -1586,11 +1621,14 @@ begin
15861621 //お気に入り保存
15871622 try
15881623 //FavoriteDMは自動生成フォームなので、解放は自動的にされる
1589- FavoriteDM.WriteFavorite;
1624+ // 初期化異常時からの終了では保存しない
1625+ if not (FavoriteDM.AbEnd) then begin
1626+ FavoriteDM.WriteFavorite;
1627+ end;
15901628 FavoriteDM.Clear;
15911629 except
15921630 end;
1593- LockWindowUpdate(Self.Handle);
1631+ //LockWindowUpdate(Self.Handle);
15941632 try
15951633 //タブクローズ
15961634 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
@@ -1698,7 +1736,6 @@ begin
16981736 if FEvent <> nil then
16991737 FEvent.Free;
17001738
1701- // TODO レスポップアップの破棄
17021739 try
17031740 if FResPopupBrowser <> nil then begin
17041741 TOleControl(FResPopupBrowser).Parent := nil;
@@ -1714,7 +1751,7 @@ begin
17141751 end;
17151752 except
17161753 end;
1717- LockWindowUpdate(0);
1754+ //LockWindowUpdate(0);
17181755 end;
17191756
17201757 // 各所にあるキャビネット・ BBS メニューをセット/更新
@@ -1936,10 +1973,20 @@ begin
19361973 if FResPopupBrowser <> nil then begin
19371974 if not(Sender is TResPopupBrowser) then begin
19381975 if (FResPopupBrowser.Visible) then begin
1939- FResPopupBrowser.Clear;
1976+ if ResPopupClearTimer.Interval > 0 then begin
1977+ ResPopupClearTimer.Enabled := True;
1978+ ResPopupClearTimer.Tag := 0;
1979+ end else begin
1980+ FResPopupBrowser.Clear;
1981+ end;
19401982 end;
19411983 end else begin
1942- TResPopupBrowser(Sender).ChildClear;
1984+ if ResPopupClearTimer.Interval > 0 then begin
1985+ ResPopupClearTimer.Enabled := True;
1986+ ResPopupClearTimer.Tag := 1;
1987+ end else begin
1988+ TResPopupBrowser(Sender).ChildClear;
1989+ end;
19431990 end;
19441991 end;
19451992 cResPopup := nil;
@@ -1968,7 +2015,7 @@ begin
19682015 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
19692016 PreviewTimer.Enabled := True;
19702017 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
1971- if Pos('mailto:', Text2) = 1 then begin
2018+ if (Pos('mailto:', Text2) = 1) and (GikoSys.Setting.RespopupMailTo) then begin
19722019 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
19732020 //ギコナビスレ パート3の466氏に感謝
19742021 GetCursorPos(p);
@@ -1977,6 +2024,15 @@ begin
19772024 e := IHTMLDocument2(TWebBrowser(Sender).Document).elementFromPoint(p.x, p.y);
19782025 if (Assigned(e)) then begin
19792026 CreateResPopupBrowser;
2027+
2028+ if not(Sender is TResPopupBrowser) then begin
2029+ if (FResPopupBrowser.Visible) then begin
2030+ FResPopupBrowser.Clear;
2031+ end;
2032+ end else begin
2033+ TResPopupBrowser(Sender).ChildClear;
2034+ end;
2035+
19802036 cResPopup := FResPopupBrowser.CreateNewBrowser;
19812037 tmp2 := ZenToHan(e.Get_outerText);
19822038 if (GikoSys.IsNumeric(tmp2)) then begin
@@ -1991,6 +2047,16 @@ begin
19912047 end;
19922048 end;
19932049 end else begin
2050+ CreateResPopupBrowser;
2051+
2052+ if not(Sender is TResPopupBrowser) then begin
2053+ if (FResPopupBrowser.Visible) then begin
2054+ FResPopupBrowser.Clear;
2055+ end;
2056+ end else begin
2057+ TResPopupBrowser(Sender).ChildClear;
2058+ end;
2059+
19942060 threadItem := GetActiveContent(true);
19952061 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
19962062 PathRec := Gikosys.Parse2chURL2(URL);
@@ -2043,7 +2109,6 @@ begin
20432109 wkIntSt := 1;
20442110 wkIntTo := 1;
20452111 end;
2046- CreateResPopupBrowser;
20472112 cResPopup := FResPopupBrowser.CreateNewBrowser;
20482113 cResPopup.PopupType := gptThread;
20492114 HTMLCreater.SetResPopupText(cResPopup, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
@@ -2051,6 +2116,8 @@ begin
20512116 end;
20522117 end;
20532118 if (cResPopup <> nil) then begin
2119+ ResPopupClearTimer.Enabled := False;
2120+
20542121 if cResPopup.PopupType = gptRaw then begin
20552122 if cResPopup.Title <> '' then begin
20562123 cResPopup.TitlePopup;
@@ -2181,6 +2248,7 @@ var
21812248 ARect: TRect;
21822249 begin
21832250 DefaultDraw := True;
2251+// なぜか無条件でExitしている
21842252 Exit;
21852253 DefaultDraw := False;
21862254 if (cdsSelected in State) or (cdsHot in State) then begin
@@ -2740,7 +2808,8 @@ var
27402808 begin
27412809 Thread := inThread;
27422810 idx := BrowserTab.TabIndex;
2743- if (FActiveContent <> nil) and
2811+ if (not FStartUp) and
2812+ (FActiveContent <> nil) and
27442813 (FActiveContent.Thread <> Thread.Thread) and
27452814 (FActiveContent.Browser <> nil) and
27462815 (Assigned(FActiveContent.Browser.Document)) then begin
@@ -2777,6 +2846,12 @@ begin
27772846 ThreadTitle := Thread.Thread.Title;
27782847 ThreadPTitle := Thread.Thread.ParentBoard.Title;
27792848 //ThreadScrollTop := Thread.Thread.ScrollTop;
2849+ if Thread.Thread.IsLogFile then begin
2850+ if not FileExists(Thread.Thread.GetThreadFileName) then begin
2851+ Thread.Thread.DeleteLogFile;
2852+ end;
2853+ end;
2854+
27802855 ThreadIsLog := Thread.Thread.IsLogFile;
27812856 ThreadItem := Thread.Thread;
27822857 ThreadNewArraical := Thread.Thread.NewArrival;
@@ -4279,7 +4354,6 @@ begin
42794354 MenuToolBar.Buttons[0].AutoSize := True;
42804355 MainCoolBar.AutoSize := False;
42814356 MainCoolBar.AutoSize := True;
4282-
42834357 GikoSys.MenuFont(ListCoolBar.Font);
42844358 GikoSys.MenuFont(BrowserCoolBar.Font);
42854359 // MenuToolBar.Font.Color := clMenuText;
@@ -4733,6 +4807,13 @@ begin
47334807 senderBrowser := TWebBrowser( Message.WParam );
47344808 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
47354809 end;
4810+ USER_RESPOPUPCLEAR:
4811+ if (TObject(Message.WParam) is TResPopupBrowser) then begin
4812+ try
4813+ TResPopupBrowser( Message.WParam ).Clear;
4814+ except
4815+ end;
4816+ end;
47364817 end;
47374818
47384819 inherited;
@@ -4869,7 +4950,7 @@ begin
48694950 s := CustomStringReplace(Range.text, ' ', ' ');//全角空白を半角空白に
48704951 s := ZenToHan(Trim(s));
48714952 if GikoSys.IsNumeric(s) then begin
4872- Num := StrToInt64(s);
4953+ Num := StrToInt64Def(s, -1);
48734954 ThreadItem := GetActiveContent(true);
48744955 if (ThreadItem <> nil) and (Num <= ThreadItem.Count)
48754956 and (Num > 0)then begin
@@ -6611,7 +6692,7 @@ begin
66116692
66126693 end;
66136694 // *************************************************************************
6614-//! お気に入りツリーのマウスアップイベント
6695+//! スレッドブラウザクリックイベント
66156696 // *************************************************************************
66166697 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
66176698 const
@@ -6662,7 +6743,9 @@ begin
66626743 end;
66636744 count := GikoSys.GetSameIDResCount(AID, FActiveContent.Thread);
66646745 limited := LIMIT;
6665- if count > LIMIT then begin
6746+ if not (GikoSys.Setting.LimitResCountMessage) then begin
6747+ limited := -1;
6748+ end else if (count > LIMIT) then begin
66666749 if (GikoUtil.MsgBox(Handle,
66676750 IntToStr(LIMIT) + '個以上ありますが、すべて表示しますか?',
66686751 'IDポップアップ警告',
@@ -6955,10 +7038,11 @@ end;
69557038
69567039 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
69577040 begin
6958- if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
6959- MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
6960- end;
6961-
7041+ if (FIsMinimize <> mtMinimizing) then begin
7042+ if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
7043+ MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
7044+ end;
7045+ end;
69627046 end;
69637047 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
69647048 var
@@ -7091,6 +7175,63 @@ begin
70917175 if ThreadItem <> nil then
70927176 InsertBrowserTab( ThreadItem, True );
70937177 end;
7178+//同一IDをNGワードに登録
7179+procedure TGikoForm.AddIDtoNGWord(invisible : boolean);
7180+var
7181+ ThreadItem : TThreadItem;
7182+ No : Integer;
7183+{$IFDEF SPAM_FILTER_ENABLED}
7184+ body : TStringList;
7185+ ReadList : TStringList;
7186+ wordCount : TWordCount;
7187+{$ENDIF}
7188+ id, dateStr: String;
7189+begin
7190+ No := KokoPopupMenu.Tag;
7191+ if No = 0 then Exit;
7192+ ThreadItem := GetActiveContent(True);
7193+ if ThreadItem = nil then Exit;
7194+
7195+ id := GikoSys.GetResID(No, ThreadItem);
7196+ if (id <> '') and (not IsNoValidID(id)) then begin
7197+ // コメントとして、スレッド名と今日の日付を追加
7198+ DateTimeToString(dateStr, 'yyyymmdd', Now);
7199+ id := id + #9'>>add ' + dateStr + ',' + ThreadItem.Title;
7200+ if (GikoSys.FAbon.AddToken(id, invisible)) then begin
7201+ GikoSys.FAbon.ReLoadFromNGwordFile;
7202+ FActiveContent.Repaint := True;
7203+ end;
7204+ end else begin
7205+ ShowMessage('IDを取得できませんでした。');
7206+ end;
7207+{$IFDEF SPAM_FILTER_ENABLED}
7208+ body := TStringList.Create;
7209+ try
7210+ GikoSys.GetSameIDRes(id, ThreadItem, body);
7211+ ReadList := TStringList.Create;
7212+ wordCount := TWordCount.Create;
7213+ try
7214+ // スパムに設定
7215+ ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7216+ for i := 0 to body.Count - 1 do begin
7217+ GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7218+ GikoSys.SpamForget( wordCount, False ); // ハムを解除
7219+ GikoSys.SpamLearn( wordCount, True ); // スパムに設定
7220+ end;
7221+ finally
7222+ wordCount.Free;
7223+ ReadList.Free;
7224+ end;
7225+ finally
7226+ body.Free;
7227+ end;
7228+{$ENDIF}
7229+ if (FActiveContent.Repaint) then begin
7230+ ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7231+ if ThreadItem <> nil then
7232+ InsertBrowserTab( ThreadItem, True );
7233+ end;
7234+end;
70947235
70957236 //同一IDのあぼ〜ん
70967237 procedure TGikoForm.IndividualAbonID(Atype : Integer);
@@ -7582,6 +7723,103 @@ begin
75827723 FResPopupBrowser := TResPopupBrowser.Create(BrowserPanel);
75837724 end;
75847725 end;
7726+//! 外からのD&D処理
7727+procedure TGikoForm.WMDropFiles(var Msg: TWMDropFiles);
7728+var
7729+ FileName: Array[0..MAX_PATH] of Char;
7730+ Cnt, K: Integer;
7731+ Board: TBoard;
7732+ LogFolder: String;
7733+ datList: TStringList;
7734+begin
7735+ // 表示しているの板のとき以外は拒否
7736+ if GetActiveList is TBoard then begin
7737+ Board := TBoard(GetActiveList);
7738+ if MsgBox(Handle, Board.Title
7739+ + ' 板に入れていいですか?', 'ギコナビ', MB_YESNO or MB_ICONQUESTION) = IDYES then begin
7740+ // 板の時は、ログフォルダにコピーしてはぐれログ対応と同じ処理?
7741+ datList := TStringList.Create;
7742+ try
7743+ Cnt := DragQueryFile(Msg.Drop, $FFFFFFFF, FileName, SizeOf(FileName));
7744+ for K := 0 to Cnt - 1 do begin
7745+ DragQueryFile(Msg.Drop, K, FileName, SizeOf(FileName));
7746+ {FileNameにdropされたファイル名が入っているので、ここで何らかの処理をする。たとえば次の行}
7747+ // ファイルのチェック
7748+ if (isValidFile(FileName)) then begin
7749+ LogFolder := ExtractFilePath(Board.FilePath);
7750+ if (FileExists( LogFolder + ExtractFileName(FileName))) then begin
7751+ GikoUtil.MsgBox(Handle, LogFolder + 'に' + ExtractFileName(FileName) + 'が既に存在します。', 'エラー', MB_ICONSTOP or MB_OK);
7752+ end else begin
7753+ if (not DirectoryExists(LogFolder)) then begin
7754+ if (not GikoSys.ForceDirectoriesEx(LogFolder) ) then begin
7755+ GikoUtil.MsgBox(Handle, LogFolder + 'の生成に失敗しました。', 'エラー', MB_ICONSTOP or MB_OK);
7756+ end;
7757+ end;
7758+ if (not Windows.CopyFile(FileName, PChar(LogFolder + ExtractFileName(FileName)), true)) then begin
7759+ GikoUtil.MsgBox(Handle, FileName + 'のコピーに失敗しました。', 'エラー', MB_ICONSTOP or MB_OK);
7760+ end else begin
7761+ datList.Add(ExtractFileName(FileName));
7762+ end;
7763+ end;
7764+ end;
7765+ end;
7766+ DragFinish(Msg.Drop);
7767+ if (datList.Count > 0) then begin
7768+ GikoSys.AddOutofIndexDat(Board, datList, False);
7769+ ShowMessage(IntToStr(datList.Count) + '個のdatファイルがコピーされました。' );
7770+ if GikoForm.TreeView.Visible then
7771+ GikoForm.TreeView.Refresh;
7772+ if GikoForm.ListView.Visible then
7773+ GikoForm.ListView.Refresh;
7774+ end else begin
7775+ ShowMessage('一つもコピーされませんでした。' );
7776+ end;
7777+ finally
7778+ datList.Free;
7779+ end;
7780+
7781+ end;
7782+ end else begin
7783+ ShowMessage('板を表示してください。');
7784+ end;
7785+end;
7786+//! ファイルチェック
7787+function TGikoForm.isValidFile(FileName: String) : boolean;
7788+var
7789+ dt: TDateTime;
7790+begin
7791+ Result := True;
7792+ // 存在するか、拡張子dat、ファイル名
7793+ if ( not FileExists(FileName) ) then begin
7794+ Result := False;
7795+ GikoUtil.MsgBox(Handle, FileName + 'は存在しません。', 'エラー', MB_ICONSTOP or MB_OK);
7796+ end else if (ExtractFileExt(ExtractFileName(FileName)) <> '.dat' ) then begin
7797+ Result := False;
7798+ GikoUtil.MsgBox(Handle, ExtractFileName(FileName) + 'の拡張子が".dat"でありません。', 'エラー', MB_ICONSTOP or MB_OK);
7799+ end else begin
7800+ // ログファイルの拡張子をはずしたものがスレ作成日時
7801+ try
7802+ dt := GikoSys.GetCreateDateFromName(FileName);
7803+ if ((UnixToDateTime(ZERO_DATE) + OffsetFromUTC) = dt) then begin
7804+ Result := False;
7805+ GikoUtil.MsgBox(Handle, ExtractFileName(FileName) + 'のファイル名が不正です。', 'エラー', MB_ICONSTOP or MB_OK);
7806+ end;
7807+ except
7808+ Result := False;
7809+ GikoUtil.MsgBox(Handle, ExtractFileName(FileName) + 'のファイル名が不正です。', 'エラー', MB_ICONSTOP or MB_OK);
7810+ end;
7811+ end;
7812+end;
7813+
7814+procedure TGikoForm.ResPopupClearTimerTimer(Sender: TObject);
7815+begin
7816+ ResPopupClearTimer.Enabled := False;
7817+ if ResPopupClearTimer.Tag = 0 then begin
7818+ FResPopupBrowser.Clear;
7819+ end else begin
7820+ FResPopupBrowser.CurrentBrowser.ChildClear;
7821+ end;
7822+end;
75857823
75867824 initialization
75877825 OleInitialize(nil);
--- a/GikoDataModule.dfm
+++ b/GikoDataModule.dfm
@@ -1344,6 +1344,18 @@ object GikoDM: TGikoDM
13441344 OnExecute = NewLinkToClipboardActionExecute
13451345 OnUpdate = DependActiveCntentActionUpdate
13461346 end
1347+ object AddIDtoNGWord0Action: TAction
1348+ Category = #12502#12521#12454#12470#12509#12483#12503#12450#12483#12503
1349+ Caption = 'ID'#12434'NG'#12527#12540#12489#12395#36861#21152'('#36879#26126')'
1350+ Hint = #12524#12473#12398'ID'#12434'NG'#12527#12540#12489#12501#12449#12452#12523#12395#36861#21152#12377#12427#65288#36879#26126#65289
1351+ OnExecute = AddIDtoNGWord0ActionExecute
1352+ end
1353+ object AddIDtoNGWord1Action: TAction
1354+ Category = #12502#12521#12454#12470#12509#12483#12503#12450#12483#12503
1355+ Caption = 'ID'#12434'NG'#12527#12540#12489#12395#36861#21152
1356+ Hint = 'ID'#12434'NG'#12527#12540#12489#12501#12449#12452#12523#12395#36861#21152#12377#12427
1357+ OnExecute = AddIDtoNGWord1ActionExecute
1358+ end
13471359 end
13481360 object ToobarImageList: TImageList
13491361 Left = 44
--- a/GikoDataModule.pas
+++ b/GikoDataModule.pas
@@ -237,6 +237,8 @@ type
237237 ScrollPageUpAction: TAction;
238238 AllLinkToClipboardAction: TAction;
239239 NewLinkToClipboardAction: TAction;
240+ AddIDtoNGWord0Action: TAction;
241+ AddIDtoNGWord1Action: TAction;
240242 procedure EditNGActionExecute(Sender: TObject);
241243 procedure ReloadActionExecute(Sender: TObject);
242244 procedure GoFowardActionExecute(Sender: TObject);
@@ -444,6 +446,8 @@ type
444446 procedure ScrollPageUpActionExecute(Sender: TObject);
445447 procedure AllLinkToClipboardActionExecute(Sender: TObject);
446448 procedure NewLinkToClipboardActionExecute(Sender: TObject);
449+ procedure AddIDtoNGWord0ActionExecute(Sender: TObject);
450+ procedure AddIDtoNGWord1ActionExecute(Sender: TObject);
447451 private
448452 { Private 宣言 }
449453 procedure ClearResFilter;
@@ -2261,9 +2265,11 @@ begin
22612265 if item <> nil then
22622266 GikoForm.InsertBrowserTab( item, false );
22632267 end;
2264- //最初の1枚に設定 アドレスの設定のためのカラ呼び
2265- if GikoForm.BrowserTab.Tabs.Count > 0 then begin
2266- GikoForm.BrowserTab.OnChange(nil);
2268+ //最初の1枚に設定
2269+ if (GikoSys.Setting.URLDisplay) and
2270+ (GikoForm.BrowserTab.Tabs.Count > 0) then begin
2271+ GikoForm.AddressComboBox.Text :=
2272+ TBrowserRecord(GikoForm.BrowserTab.Tabs.Objects[0]).Thread.URL;
22672273 end;
22682274 end;
22692275 finally
@@ -2408,7 +2414,9 @@ begin
24082414 if ThreadItem = nil then Exit;
24092415 count := GikoSys.GetSameIDResCount(No, GikoForm.ActiveContent.Thread);
24102416 limited := LIMIT;
2411- if count > LIMIT then begin
2417+ if not (GikoSys.Setting.LimitResCountMessage) then begin
2418+ limited := -1;
2419+ end else if count > LIMIT then begin
24122420 if ( GikoUtil.MsgBox(GikoForm.Handle,
24132421 IntToStr(LIMIT) + '個以上ありますが、すべて表示しますか?',
24142422 'IDポップアップ警告',
@@ -4434,6 +4442,16 @@ begin
44344442 end;
44354443
44364444
4445+//! このレスのIDをNGワードに追加する(透明)
4446+procedure TGikoDM.AddIDtoNGWord0ActionExecute(Sender: TObject);
4447+begin
4448+ GikoForm.AddIDtoNGWord(true);
4449+end;
4450+//! このレスのIDをNGワードに追加する
4451+procedure TGikoDM.AddIDtoNGWord1ActionExecute(Sender: TObject);
4452+begin
4453+ GikoForm.AddIDtoNGWord(false);
4454+end;
44374455
44384456 end.
44394457
--- a/GikoSystem.pas
+++ b/GikoSystem.pas
@@ -116,8 +116,6 @@ type
116116 function ChooseString(const Text, Separator: string; Index: integer): string;
117117 //! 一時ファイルからの復旧
118118 procedure RestoreThreadData(Board: TBoard);
119- //! インデックスにないdat(はぐれdat)の追加
120- procedure AddOutofIndexDat(Board: TBoard; DatList: TStringList);
121119 public
122120 { Public 宣言 }
123121 FAbon : TAbon;
@@ -129,13 +127,10 @@ type
129127 property ResRange : Longint read FResRange write FResRange;
130128 //! バージョン情報
131129 property Version : String read FVersion;
132-// function MsgBox(Msg: string; Title: string; Flags: Longint): integer; overload;
133-// function MsgBox(Handle: THandle; Msg: string; Title: string; Flags: Longint): integer; overload;
134130 function IsNumeric(s: string): boolean;
135131 function IsFloat(s: string): boolean;
136132 function DirectoryExistsEx(const Name: string): Boolean;
137133 function ForceDirectoriesEx(Dir: string): Boolean;
138-// function GetVersion: string;
139134
140135 function GetBoardFileName: string;
141136 function GetCustomBoardFileName: string;
@@ -224,7 +219,7 @@ type
224219 procedure GetSameIDRes(AIDNum : Integer; ThreadItem: TThreadItem;var body: TStringList); overload;
225220 function GetSameIDResCount(const AID : string; ThreadItem: TThreadItem):Integer; overload;
226221 function GetSameIDResCount(AIDNum : Integer; ThreadItem: TThreadItem):Integer; overload;
227-
222+ function GetResID(AIDNum: Integer; ThreadItem: TThreadItem): String;
228223 //! 単語解析
229224 procedure SpamCountWord( const text : string; wordCount : TWordCount );
230225 //! 学習クリア
@@ -257,6 +252,10 @@ type
257252 function GetOEIndentChar : string;
258253 //! 置換設定ファイル取得
259254 function GetReplaceFileName: String;
255+ //! インデックスにないdat(はぐれdat)の追加
256+ procedure AddOutofIndexDat(Board: TBoard; DatList: TStringList; AllCreate: boolean = True);
257+ //! ファイル名からのスレッド作成日の取得
258+ function GetCreateDateFromName(FileName: String): TDateTime;
260259 end;
261260
262261 var
@@ -266,7 +265,7 @@ const
266265 ZERO_DATE: Integer = 25569;
267266 BETA_VERSION_NAME_E = 'beta';
268267 BETA_VERSION_NAME_J = 'バタ';
269- BETA_VERSION = 56;
268+ BETA_VERSION = 57;
270269 BETA_VERSION_BUILD = ''; //!< debug版など
271270 APP_NAME = 'gikoNavi';
272271 BE_PHP_URL = 'http://be.2ch.net/test/p.php?i=';
@@ -345,18 +344,6 @@ var
345344 i: Integer;
346345 FileList: TStringList;
347346 begin
348- //スレッドデータファイルを更新
349-// FlashExitWrite;
350-
351-// FExitWrite.Free;
352- FBayesian.Free;
353- FAWKStr.Free;
354- FSetting.Free;
355- FDolib.Free;
356- FAbon.Free;
357- FSelectResFilter.Free;
358- FGikoMessage.Free;
359- //FBoardURLList.Free;
360347 //テンポラリHTMLを削除
361348 FileList := TStringList.Create;
362349 try
@@ -369,6 +356,13 @@ begin
369356 finally
370357 FileList.Free;
371358 end;
359+ FGikoMessage.Free;
360+ FBayesian.Free;
361+ FSelectResFilter.Free;
362+ FAbon.Free;
363+ FAWKStr.Free;
364+ FDolib.Free;
365+ FSetting.Free;
372366 inherited;
373367 end;
374368
@@ -572,11 +566,18 @@ var
572566 usePlugIn : Boolean;
573567 islog : Boolean;
574568 urlHead: String;
569+ datFileCheck: Boolean;
575570 {*
576571 FavoThreadItem : TFavoriteThreadItem;
577572 Node: TTreeNode;
578573 *}
574+{$IFDEF DEBUG}
575+ st, rt: Cardinal;
576+{$ENDIF}
579577 begin
578+{$IFDEF DEBUG}
579+ st := GetTickCount;
580+{$ENDIF}
580581 if Board.IsThreadDatRead then
581582 Exit;
582583 Board.Clear;
@@ -592,12 +593,16 @@ begin
592593
593594 FileName := Board.GetFolderIndexFileName;
594595
595- FileList := TStringList.Create;
596- FileList.Sorted := True;
597- FileList.BeginUpdate;
598- //IsLogFile用DATファイルリスト
599- GetFileList(ExtractFileDir(Board.GetFolderIndexFileName), '*.dat', FileList, False);
600- FileList.EndUpdate;
596+ //
597+ datFileCheck := (Setting.CheckDatFile) or (not FileExists(FileName));
598+ if (datFileCheck) then begin
599+ FileList := TStringList.Create;
600+ FileList.Sorted := True;
601+ FileList.BeginUpdate;
602+ //IsLogFile用DATファイルリスト
603+ GetFileList(ExtractFileDir(Board.GetFolderIndexFileName), '*.dat', FileList, False);
604+ FileList.EndUpdate;
605+ end;
601606
602607 // 重複を防ぐ
603608 Board.BeginUpdate;
@@ -609,7 +614,11 @@ begin
609614 //2行目から(1行目はバージョン)
610615 for i := sl.Count - 1 downto 1 do begin
611616 Rec := ParseIndexLine(sl[i]);
612- islog := FileList.Find( Rec.FFileName, Index );
617+ if (datFileCheck) then begin
618+ islog := FileList.Find( Rec.FFileName, Index );
619+ end else begin
620+ islog := (Rec.FSize <> 0) and (Rec.FCount <> 0);
621+ end;
613622 if usePlugIn then
614623 ThreadItem := TThreadItem.Create(
615624 Board.BoardPlugIn,
@@ -636,7 +645,7 @@ begin
636645 end;
637646
638647 ThreadItem.BeginUpdate;
639- if islog then
648+ if (datFileCheck) and (islog) then
640649 FileList.Delete( Index );
641650
642651 ThreadItem.No := Rec.FNo;
@@ -671,50 +680,75 @@ begin
671680 if UnRead <> Board.UnRead then
672681 Board.UnRead := UnRead;
673682
674- //インデックスに無かったログを追加(腐れインデックス対応)
675- AddOutofIndexDat(Board, FileList);
683+ if (datFileCheck) then begin
684+ //インデックスに無かったログを追加(腐れインデックス対応)
685+ AddOutofIndexDat(Board, FileList);
686+ end;
676687 Board.EndUpdate;
677688
678689 //前回異常終了時チェック
679690 RestoreThreadData( Board );
680691 finally
681692 sl.Free;
682- FileList.Free;
693+ if (datFileCheck) then begin
694+ FileList.Free;
695+ end;
683696 Board.Sorted := False;
684697 end;
685698 Board.IsThreadDatRead := True;
699+{$IFDEF DEBUG}
700+ rt := GetTickCount - st;
701+ Writeln('Read Done.' + IntToStr(rt) + ' ms');
702+{$ENDIF}
686703 end;
687704 {!
688705 \brief インデックスにないdat(はぐれdat)の追加
689706 \param Board 追加する板
690707 \param DatList datファイル名
691708 }
692-procedure TGikoSys.AddOutofIndexDat(Board: TBoard; DatList: TStringList);
709+procedure TGikoSys.AddOutofIndexDat(Board: TBoard; DatList: TStringList; AllCreate: Boolean = True);
693710 var
694711 i : Integer;
695712 Boardpath,FileName : String;
696713 ResRec: TResRec;
697714 ThreadItem: TThreadItem;
715+ create: Boolean;
698716 begin
717+ create := False;
699718 Boardpath := ExtractFilePath(Board.GetFolderIndexFileName);
700719 //インデックスに無かったログを追加(腐れインデックス対応)
701720 for i := 0 to DatList.Count - 1 do begin
702721 FileName := Boardpath + DatList[i];
703-
704- //ResRec := DivideStrLine(ReadThreadFile(FileName, 1));
705- if Board.IsBoardPlugInAvailable then begin
706- ThreadItem := TThreadItem.Create(
707- Board.BoardPlugIn,
708- Board,
709- Board.BoardPlugIn.FileName2ThreadURL( DWORD( Board ), DatList[i] ) );
710- THTMLCreate.DivideStrLine(Board.BoardPlugIn.GetDat( DWORD( ThreadItem ), 1 ), @ResRec);
711- end else begin
712- ThreadItem := TThreadItem.Create(
713- nil,
714- Board,
715- Get2chBoard2ThreadURL( Board, ChangeFileExt( DatList[i], '' ) ) );
716- THTMLCreate.DivideStrLine(ReadThreadFile(FileName, 1), @ResRec);
722+ ThreadItem := nil;
723+ if (not AllCreate) then begin
724+ create := False;
725+ ThreadItem := Board.FindThreadFromFileName(DatList[i]);
726+ if (ThreadItem = nil) then begin
727+ create := True;
728+ end else begin
729+ if Board.IsBoardPlugInAvailable then begin
730+ THTMLCreate.DivideStrLine(Board.BoardPlugIn.GetDat( DWORD( ThreadItem ), 1 ), @ResRec);
731+ end else begin
732+ THTMLCreate.DivideStrLine(ReadThreadFile(FileName, 1), @ResRec);
733+ end;
734+ end;
717735 end;
736+ if (ThreadItem = nil) then begin
737+ if Board.IsBoardPlugInAvailable then begin
738+ ThreadItem := TThreadItem.Create(
739+ Board.BoardPlugIn,
740+ Board,
741+ Board.BoardPlugIn.FileName2ThreadURL( DWORD( Board ), DatList[i] ) );
742+ THTMLCreate.DivideStrLine(Board.BoardPlugIn.GetDat( DWORD( ThreadItem ), 1 ), @ResRec);
743+ end else begin
744+ ThreadItem := TThreadItem.Create(
745+ nil,
746+ Board,
747+ Get2chBoard2ThreadURL( Board, ChangeFileExt( DatList[i], '' ) ) );
748+ THTMLCreate.DivideStrLine(ReadThreadFile(FileName, 1), @ResRec);
749+ end;
750+ end;
751+
718752
719753 ThreadItem.BeginUpdate;
720754 ThreadItem.FileName := DatList[i];
@@ -736,7 +770,9 @@ begin
736770 ThreadItem.ScrollTop := 0;
737771 ThreadItem.AgeSage := gasNone;
738772 ThreadItem.EndUpdate;
739- Board.Add(ThreadItem);
773+ if (AllCreate) or (create) then begin
774+ Board.Add(ThreadItem);
775+ end;
740776 end;
741777 end;
742778 {!
@@ -1307,17 +1343,15 @@ var
13071343 nm: NONCLIENTMETRICS;
13081344 begin
13091345 nm.cbSize := sizeof(NONCLIENTMETRICS);
1310-
1311- SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @nm, 0);
1312- lf := nm.lfMenuFont;
1313-
1314- Font.Name := lf.lfFaceName;
1315- Font.Height := lf.lfHeight;
1316- Font.Style := [];
1317- if lf.lfWeight >= 700 then
1318- Font.Style := Font.Style + [fsBold];
1319- if lf.lfItalic = 1 then
1320- Font.Style := Font.Style + [fsItalic];
1346+ SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @nm, 0);
1347+ lf := nm.lfMenuFont;
1348+ Font.Name := lf.lfFaceName;
1349+ Font.Height := lf.lfHeight;
1350+ Font.Style := [];
1351+ if lf.lfWeight >= 700 then
1352+ Font.Style := Font.Style + [fsBold];
1353+ if lf.lfItalic = 1 then
1354+ Font.Style := Font.Style + [fsItalic];
13211355 end;
13221356
13231357 {!
@@ -2849,12 +2883,27 @@ end;
28492883 }
28502884 procedure TGikoSys.GetSameIDRes(AIDNum : Integer; ThreadItem: TThreadItem;var body: TStringList);
28512885 var
2886+ AID : String;
2887+begin
2888+ AID := GetResID(AIDNum, ThreadItem);
2889+ if not IsNoValidID(AID) then begin
2890+ GetSameIDRes(AID, ThreadItem, body);
2891+ end;
2892+end;
2893+{!
2894+\brief 投稿 ID 取得
2895+\param AIDNum 投稿 レス番号
2896+\param ThreadItem 投稿スレッド
2897+\param body OUT:投稿ID
2898+}
2899+function TGikoSys.GetResID(AIDNum: Integer; ThreadItem: TThreadItem): String;
2900+var
28522901 Res: TResRec;
28532902 boardPlugIn : TBoardPlugIn;
2854- AID : String;
28552903 stList: TStringList;
28562904 i : Integer;
28572905 begin
2906+ Result := '';
28582907 if (ThreadItem <> nil) and (ThreadItem.IsLogFile)
28592908 and (AIDNum > 0) and (AIDNum <= ThreadItem.Count) then begin
28602909 //if ThreadItem.IsBoardPlugInAvailable then begin
@@ -2866,21 +2915,21 @@ begin
28662915 end else begin
28672916 THTMLCreate.DivideStrLine( ReadThreadFile(ThreadItem.GetThreadFileName, AIDNum), @Res);
28682917 end;
2869- AID := Res.FDateTime;
2870- if AnsiPos('id', AnsiLowerCase(AID)) > 0 then begin
2871- AID := Copy(AID, AnsiPos('id', AnsiLowerCase(AID)) - 1, 11);
2872- if AnsiPos(' be:', AnsiLowerCase(AID)) > 0 then begin
2873- AID := Copy(AID, 1, AnsiPos(' BE:', AnsiLowerCase(AID)) - 1)
2918+ Result := Res.FDateTime;
2919+ if AnsiPos('id', AnsiLowerCase(Result)) > 0 then begin
2920+ Result := Copy(Result, AnsiPos('id', AnsiLowerCase(Result)) - 1, 11);
2921+ if AnsiPos(' be:', AnsiLowerCase(Result)) > 0 then begin
2922+ Result := Copy(Result, 1, AnsiPos(' BE:', AnsiLowerCase(Result)) - 1)
28742923 end;
28752924 end else begin
28762925 stlist := TStringList.Create;
28772926 try
2878- stList.DelimitedText := AID;
2879- AID := '';
2927+ stList.DelimitedText := Result;
2928+ Result := '';
28802929 for i := 0 to stList.Count - 1 do
28812930 if Length(WideString(stList[i])) = 8 then begin
28822931 if NotDateorTimeString(stList[i]) then begin
2883- AID := stList[i];
2932+ Result := stList[i];
28842933 break;
28852934 end;
28862935 end;
@@ -2888,11 +2937,8 @@ begin
28882937 stList.Free;
28892938 end;
28902939 end;
2891- if not IsNoValidID(AID) then
2892- GetSameIDRes(AID, ThreadItem, body);
28932940 end;
28942941 end;
2895-
28962942 {!
28972943 \brief 同じ投稿 ID を持つレスをカウント
28982944 \param AID 個人を特定する投稿 ID
@@ -3309,7 +3355,8 @@ begin
33093355 ThreadItem.NewReceive := ini.ReadInteger(SECTION, 'NewReceive', 0);
33103356
33113357 ThreadItem.Size := ini.ReadInteger(SECTION, 'Size', 0);
3312- if(ThreadItem.Size = 0) and (FileExists(ThreadItem.GetThreadFileName)) then begin
3358+ ThreadItem.IsLogFile := FileExists(ThreadItem.GetThreadFileName);
3359+ if(ThreadItem.Size = 0) and (ThreadItem.IsLogFile) then begin
33133360 try
33143361 ThreadItem.Size := GetFileSize(ThreadItem.GetThreadFileName) - ThreadItem.Count;
33153362 except
@@ -3399,6 +3446,26 @@ function TGikoSys.GetReplaceFileName: String;
33993446 begin
34003447 Result := Setting.GetReplaceFileName;
34013448 end;
3449+//! ファイル名からのスレッド作成日の取得
3450+function TGikoSys.GetCreateDateFromName(FileName: String): TDateTime;
3451+var
3452+ tmp : String;
3453+ unixtime: Int64;
3454+begin
3455+ // ログファイルの拡張子をはずしたものがスレ作成日時
3456+ tmp := ChangeFileExt(FileName, '');
3457+ if AnsiPos('_', tmp) <> 0 then
3458+ if AnsiPos('_', tmp) > 9 then
3459+ tmp := Copy(tmp, 1, AnsiPos('_', tmp)-1)
3460+ else
3461+ Delete(tmp, AnsiPos('_', tmp), 1);
3462+
3463+ if ( Length(tmp) = 9) and ( tmp[1] = '0' ) then
3464+ Insert('1', tmp, 1);
3465+
3466+ unixtime := StrToInt64Def(tmp, ZERO_DATE);
3467+ Result := UnixToDateTime(unixtime) + OffsetFromUTC;
3468+end;
34023469
34033470 initialization
34043471 GikoSys := TGikoSys.Create;
--- a/HTMLDocumentEvent.pas
+++ b/HTMLDocumentEvent.pas
@@ -18,6 +18,7 @@ type
1818 FOnClick: TDocumentContextMenuEvent;
1919 FOnMouseMove: TDocumentContextMenuEvent;
2020 FOnMouseDown: TDocumentContextMenuEvent;
21+ FOnDoubleClick: TDocumentContextMenuEvent;
2122 protected
2223 { IUnknown }
2324 function QueryInterface(const IID:TGUID; out Obj): HRESULT; stdcall;
@@ -37,6 +38,7 @@ type
3738 property OnClick: TDocumentContextMenuEvent read FOnClick write FOnClick;
3839 property OnMouseMove: TDocumentContextMenuEvent read FOnMouseMove write FOnMouseMove;
3940 property OnMouseDown: TDocumentContextMenuEvent read FOnMouseDown write FOnMouseDown;
41+ property OnDoubleClick: TDocumentContextMenuEvent read FOnDoubleClick write FOnDoubleClick;
4042 end;
4143
4244 implementation
@@ -100,6 +102,10 @@ begin
100102 if Assigned(FOnClick) then begin
101103 PVariant(VarResult)^ := FOnClick(FOwner);
102104 end;
105+ DISPID_DBLCLICK:
106+ if Assigned(FOnDoubleClick) then begin
107+ PVariant(VarResult)^ := FOnDoubleClick(FOwner);
108+ end;
103109 1023:
104110 if Assigned(FOnContextMenu) then begin
105111 PVariant(VarResult)^ := FOnContextMenu(FOwner);
--- a/InputAssist.pas
+++ b/InputAssist.pas
@@ -189,12 +189,19 @@ var
189189 begin
190190 if GikoListView1.Selected <> nil then begin
191191 if (ValidateKey(KeyNameEdit.Text, CategoryNameComboBox.Text)) then begin
192- if (not InputAssistDM.IsDupulicate(
192+ resWord := TResistWord(GikoListView1.Selected.Data);
193+ // 変更前のキー/カテゴリと同一もしくは、他と重複無し
194+ if ((resWord.GetKey = KeyNameEdit.Text)
195+ and (resWord.GetCategory = CategoryNameComboBox.Text)) or
196+ (not InputAssistDM.IsDupulicate(
193197 KeyNameEdit.Text, CategoryNameComboBox.Text) ) then begin
194- resWord := TResistWord(GikoListView1.Selected.Data);
195- resWord.SetKey(KeyNameEdit.Text);
196- resWord.SetCategory(CategoryNameComboBox.Text);
197- resWord.SetText(TextMemo.Text);
198+ resWord.SetCategory(CategoryNameComboBox.Text);
199+ resWord.SetText(TextMemo.Text);
200+ // キーが変わるときは、ChangeKeyを呼ぶ
201+ if (resWord.GetKey <> KeyNameEdit.Text) then begin
202+ resWord.SetKey(KeyNameEdit.Text);
203+ InputAssistDM.ChangeKey(resWord);
204+ end;
198205 // 一覧の更新
199206 GikoListView1.Selected.Caption := resWord.GetKey;
200207 GikoListView1.Selected.SubItems[0] := resWord.GetCategory;
--- a/KuroutSetting.dfm
+++ b/KuroutSetting.dfm
@@ -1,9 +1,10 @@
11 object KuroutOption: TKuroutOption
2- Left = 319
3- Top = 169
4- Width = 525
5- Height = 457
2+ Left = 322
3+ Top = 172
4+ BorderStyle = bsDialog
65 Caption = #35443#32048#35373#23450
6+ ClientHeight = 417
7+ ClientWidth = 511
78 Color = clBtnFace
89 Font.Charset = SHIFTJIS_CHARSET
910 Font.Color = clWindowText
@@ -562,11 +563,141 @@ object KuroutOption: TKuroutOption
562563 TabOrder = 1
563564 end
564565 end
566+ object LogGroupBox: TGroupBox
567+ Left = 16
568+ Top = 160
569+ Width = 465
570+ Height = 65
571+ Caption = #12525#12464
572+ TabOrder = 1
573+ object CheckDatFileCheckBox: TCheckBox
574+ Left = 22
575+ Top = 14
576+ Width = 369
577+ Height = 17
578+ Caption = #12473#12524#12483#12489#19968#35239#65288'Folder.idx'#65289#35501#12415#36796#12415#26178#12395'dat'#12501#12449#12452#12523#12434#12481#12455#12483#12463#12377#12427#12290
579+ TabOrder = 0
580+ end
581+ end
582+ end
583+ object RespopupTabSheet: TTabSheet
584+ Caption = #35443#32048#35373#23450'5'
585+ ImageIndex = 4
586+ object RespopuGroupBox: TGroupBox
587+ Left = 8
588+ Top = 16
589+ Width = 473
590+ Height = 121
591+ Caption = #12524#12473#12509#12483#12503#12450#12483#12503
592+ TabOrder = 0
593+ object Label16: TLabel
594+ Left = 16
595+ Top = 48
596+ Width = 292
597+ Height = 12
598+ Caption = '( '#12510#12454#12473#12459#12540#12477#12523#20301#32622#12363#12425#12398#12378#12425#12375#20301#32622' -25 px '#65374' 25'#12288'px)'
599+ end
600+ object Label19: TLabel
601+ Left = 192
602+ Top = 72
603+ Width = 96
604+ Height = 12
605+ Caption = '(0 ms '#65374' 5000 ms)'
606+ end
607+ object DeltaXLabeledEdit: TLabeledEdit
608+ Left = 120
609+ Top = 24
610+ Width = 49
611+ Height = 20
612+ EditLabel.Width = 97
613+ EditLabel.Height = 12
614+ EditLabel.Caption = #12509#12483#12503#12450#12483#12503#20301#32622' X'
615+ LabelPosition = lpLeft
616+ LabelSpacing = 10
617+ TabOrder = 0
618+ Text = '0'
619+ OnExit = DeltaXLabeledEditExit
620+ end
621+ object DeltaYLabeledEdit: TLabeledEdit
622+ Left = 304
623+ Top = 24
624+ Width = 49
625+ Height = 20
626+ EditLabel.Width = 97
627+ EditLabel.Height = 12
628+ EditLabel.Caption = #12509#12483#12503#12450#12483#12503#20301#32622' Y'
629+ LabelPosition = lpLeft
630+ LabelSpacing = 10
631+ TabOrder = 1
632+ Text = '0'
633+ OnExit = DeltaYLabeledEditExit
634+ end
635+ object DeltaXUpDown: TUpDown
636+ Left = 169
637+ Top = 24
638+ Width = 16
639+ Height = 20
640+ Associate = DeltaXLabeledEdit
641+ Min = -25
642+ Max = 25
643+ Position = 0
644+ TabOrder = 2
645+ Wrap = False
646+ end
647+ object DeltaYUpDown: TUpDown
648+ Left = 353
649+ Top = 24
650+ Width = 16
651+ Height = 20
652+ Associate = DeltaYLabeledEdit
653+ Min = -25
654+ Max = 25
655+ Position = 0
656+ TabOrder = 3
657+ Wrap = False
658+ end
659+ object RespopupWaitLabeledEdit: TLabeledEdit
660+ Left = 76
661+ Top = 66
662+ Width = 92
663+ Height = 20
664+ EditLabel.Width = 52
665+ EditLabel.Height = 12
666+ EditLabel.Caption = #12463#12522#12450'Wait'
667+ LabelPosition = lpLeft
668+ LabelSpacing = 10
669+ TabOrder = 4
670+ Text = '100'
671+ OnExit = RespopupWaitLabeledEditExit
672+ end
673+ object RespopupWaitUpDown: TUpDown
674+ Left = 168
675+ Top = 66
676+ Width = 17
677+ Height = 20
678+ Associate = RespopupWaitLabeledEdit
679+ Min = 0
680+ Max = 5000
681+ Increment = 100
682+ Position = 100
683+ TabOrder = 5
684+ Thousands = False
685+ Wrap = False
686+ end
687+ object RespopupMailToCheckBox: TCheckBox
688+ Left = 16
689+ Top = 96
690+ Width = 185
691+ Height = 17
692+ Caption = #12513#12540#12523#27396#12434#12509#12483#12503#12450#12483#12503#12377#12427
693+ TabOrder = 6
694+ end
695+ end
565696 end
566697 end
567698 object OkBotton: TButton
568699 Left = 224
569- Top = 400
700+ Top = 398
570701 Width = 89
571702 Height = 21
572703 Caption = 'OK'
@@ -577,7 +708,7 @@ object KuroutOption: TKuroutOption
577708 end
578709 object CancelBotton: TButton
579710 Left = 320
580- Top = 400
711+ Top = 398
581712 Width = 89
582713 Height = 21
583714 Cancel = True
@@ -587,7 +718,7 @@ object KuroutOption: TKuroutOption
587718 end
588719 object ApplyButton: TButton
589720 Left = 416
590- Top = 400
721+ Top = 398
591722 Width = 89
592723 Height = 21
593724 Cancel = True
--- a/KuroutSetting.pas
+++ b/KuroutSetting.pas
@@ -81,6 +81,19 @@ type
8181 Label14: TLabel;
8282 ExtListLabeledEdit: TLabeledEdit;
8383 Label15: TLabel;
84+ LogGroupBox: TGroupBox;
85+ CheckDatFileCheckBox: TCheckBox;
86+ RespopupTabSheet: TTabSheet;
87+ RespopuGroupBox: TGroupBox;
88+ DeltaXLabeledEdit: TLabeledEdit;
89+ DeltaYLabeledEdit: TLabeledEdit;
90+ DeltaXUpDown: TUpDown;
91+ DeltaYUpDown: TUpDown;
92+ Label16: TLabel;
93+ RespopupWaitLabeledEdit: TLabeledEdit;
94+ RespopupWaitUpDown: TUpDown;
95+ Label19: TLabel;
96+ RespopupMailToCheckBox: TCheckBox;
8497 procedure OkBottonClick(Sender: TObject);
8598 procedure FormCreate(Sender: TObject);
8699 procedure CDeleteButtonClick(Sender: TObject);
@@ -94,6 +107,9 @@ type
94107 procedure MoveHistoryMaxEditExit(Sender: TObject);
95108 procedure AHandredLabeledEditExit(Sender: TObject);
96109 procedure ExtListLabeledEditExit(Sender: TObject);
110+ procedure DeltaXLabeledEditExit(Sender: TObject);
111+ procedure DeltaYLabeledEditExit(Sender: TObject);
112+ procedure RespopupWaitLabeledEditExit(Sender: TObject);
97113 private
98114 { Private 宣言 }
99115 procedure SetValue;
@@ -156,6 +172,12 @@ begin
156172 ReplaceDatCheckBox.Checked := GikoSys.Setting.ReplaceDat;
157173 SentIniFileSizeUpDown.Position := GikoSys.Setting.SentIniFileSize;
158174 ExtListLabeledEdit.Text := GikoSys.Setting.ExtList;
175+ // Folder.idx読み込み時datチェック
176+ CheckDatFileCheckBox.Checked := GikoSys.Setting.CheckDatFile;
177+ DeltaXUpDown.Position := GikoSys.Setting.RespopupDeltaX;
178+ DeltaYUpDown.Position := GikoSys.Setting.RespopupDeltaY;
179+ RespopupWaitUpDown.Position := GikoSys.Setting.RespopupWait;
180+ RespopupMailToCheckBox.Checked := GikoSys.Setting.RespopupMailTo;
159181 end;
160182
161183 procedure TKuroutOption.SaveSetting;
@@ -198,6 +220,14 @@ begin
198220 GikoSys.Setting.ReplaceDat := ReplaceDatCheckBox.Checked;
199221 GikoSys.Setting.SentIniFileSize := SentIniFileSizeUpDown.Position;
200222 GikoSys.Setting.ExtList := ExtListLabeledEdit.Text;
223+ // Folder.idx読み込み時datチェック
224+ GikoSys.Setting.CheckDatFile := CheckDatFileCheckBox.Checked;
225+
226+ GikoSys.Setting.RespopupDeltaX := StrToInt(DeltaXLabeledEdit.Text);
227+ GikoSys.Setting.RespopupDeltaY := StrToInt(DeltaYLabeledEdit.Text);
228+ GikoSys.Setting.RespopupWait := StrToInt(RespopupWaitLabeledEdit.Text);
229+ GikoForm.ResPopupClearTimer.Interval := GikoSys.Setting.RespopupWait;
230+ GikoSys.Setting.RespopupMailTo := RespopupMailToCheckBox.Checked;
201231 end;
202232
203233 procedure TKuroutOption.RecvBufferSizeExit(Sender: TObject);
@@ -229,6 +259,9 @@ begin
229259 MoveHistoryMaxEditExit(Sender);
230260 AHandredLabeledEditExit(Sender);
231261 ExtListLabeledEditExit(Sender);
262+ DeltaXLabeledEditExit(Sender);
263+ DeltaYLabeledEditExit(Sender);
264+ RespopupWaitLabeledEditExit(Sender);
232265 PostColumnData();
233266 SaveSetting;
234267 end;
@@ -448,8 +481,38 @@ begin
448481 if AnsiEndsStr(';', ExtListLabeledEdit.Text) then begin
449482 ExtListLabeledEdit.Text :=
450483 Copy(ExtListLabeledEdit.Text, 0,
451- Length(ExtListLabeledEdit.Text) - 1);
484+ Length(ExtListLabeledEdit.Text) - 1);
452485 end;
453486 end;
487+// レスポップアップ位置X
488+procedure TKuroutOption.DeltaXLabeledEditExit(Sender: TObject);
489+begin
490+ if not GikoSys.IsNumeric(DeltaXLabeledEdit.Text) then
491+ DeltaXLabeledEdit.Text := IntToStr(GikoSys.Setting.RespopupDeltaX);
492+ if StrToInt(DeltaXLabeledEdit.Text) < DeltaXUpDown.Min then
493+ DeltaXLabeledEdit.Text := IntToStr(DeltaXUpDown.Min);
494+ if StrToInt(DeltaXLabeledEdit.Text) > DeltaXUpDown.Max then
495+ DeltaXLabeledEdit.Text:= IntToStr(DeltaXUpDown.Max);
496+end;
497+// レスポップアップ位置Y
498+procedure TKuroutOption.DeltaYLabeledEditExit(Sender: TObject);
499+begin
500+ if not GikoSys.IsNumeric(DeltaYLabeledEdit.Text) then
501+ DeltaYLabeledEdit.Text := IntToStr(GikoSys.Setting.RespopupDeltaY);
502+ if StrToInt(DeltaYLabeledEdit.Text) < DeltaYUpDown.Min then
503+ DeltaYLabeledEdit.Text := IntToStr(DeltaYUpDown.Min);
504+ if StrToInt(DeltaYLabeledEdit.Text) > DeltaYUpDown.Max then
505+ DeltaYLabeledEdit.Text := IntToStr(DeltaYUpDown.Max);
506+end;
507+
508+procedure TKuroutOption.RespopupWaitLabeledEditExit(Sender: TObject);
509+begin
510+ if not GikoSys.IsNumeric(RespopupWaitLabeledEdit.Text) then
511+ RespopupWaitLabeledEdit.Text := IntToStr(GikoSys.Setting.RespopupWait);
512+ if StrToInt(RespopupWaitLabeledEdit.Text) < RespopupWaitUpDown.Min then
513+ RespopupWaitLabeledEdit.Text := IntToStr(RespopupWaitUpDown.Min);
514+ if StrToInt(RespopupWaitLabeledEdit.Text) > RespopupWaitUpDown.Max then
515+ RespopupWaitLabeledEdit.Text := IntToStr(RespopupWaitUpDown.Max);
516+end;
454517
455518 end.
--- a/NewBoardURL.dfm
+++ b/NewBoardURL.dfm
@@ -1,9 +1,10 @@
11 object NewBoardURLForm: TNewBoardURLForm
2- Left = 380
3- Top = 187
4- Width = 495
5- Height = 313
2+ Left = 382
3+ Top = 189
4+ BorderStyle = bsDialog
65 Caption = #26495#31227#36578#20808#26908#32034
6+ ClientHeight = 271
7+ ClientWidth = 483
78 Color = clBtnFace
89 Font.Charset = SHIFTJIS_CHARSET
910 Font.Color = clWindowText
--- a/NewBoardURL.pas
+++ b/NewBoardURL.pas
@@ -47,20 +47,32 @@ var
4747 sec : TStringList;
4848 begin
4949 sec := TStringList.Create;
50- ini := TMemIniFile.Create(GikoSys.GetBoardFileName);
51- ini.ReadSections(sec);
50+ try
51+ ini := TMemIniFile.Create(GikoSys.GetBoardFileName);
52+ try
53+ ini.ReadSections(sec);
5254
53- CategoryComboBox.Clear;
54- CategoryComboBox.Items.BeginUpdate;
55- for i := 0 to sec.Count - 1 do begin
56- CategoryComboBox.Items.Add(sec[i]);
57- end;
58- CategoryComboBox.Items.EndUpdate;
59- CategoryComboBox.ItemIndex := 0;
55+ CategoryComboBox.Clear;
56+ CategoryComboBox.Items.BeginUpdate;
57+ for i := 0 to sec.Count - 1 do begin
58+ CategoryComboBox.Items.Add(sec[i]);
59+ end;
60+ CategoryComboBox.Items.EndUpdate;
61+ CategoryComboBox.ItemIndex := 0;
6062
61- ResultMemo.Lines.Clear;
63+ ResultMemo.Lines.Clear;
64+ finally
65+ if ini <> nil then begin
66+ ini.Free;
67+ end;
68+ end;
69+ finally
70+ if sec <> nil then begin
71+ sec.Free;
72+ end;
73+ end;
6274 end;
63-
75+//! デストラクタ
6476 procedure TNewBoardURLForm.SearchButtonClick(Sender: TObject);
6577 var
6678 i : Integer;
@@ -186,9 +198,13 @@ begin
186198 keys := TStringList.Create;
187199 try
188200 ini := TMemIniFile.Create(GikoSys.GetBoardFileName);
189- ini.ReadSection(sec, keys);
190- for i := 0 to keys.Count - 1 do begin
191- urls.Add(ini.ReadString(sec, keys[i], ''));
201+ try
202+ ini.ReadSection(sec, keys);
203+ for i := 0 to keys.Count - 1 do begin
204+ urls.Add(ini.ReadString(sec, keys[i], ''));
205+ end;
206+ finally
207+ ini.Free;
192208 end;
193209 finally
194210 keys.Free;
--- a/Option.dfm
+++ b/Option.dfm
@@ -1,6 +1,6 @@
11 object OptionDialog: TOptionDialog
2- Left = 417
3- Top = 435
2+ Left = 300
3+ Top = 166
44 BorderStyle = bsDialog
55 Caption = #12458#12503#12471#12519#12531
66 ClientHeight = 428
@@ -61,9 +61,9 @@ object OptionDialog: TOptionDialog
6161 Top = 4
6262 Width = 509
6363 Height = 389
64- ActivePage = TabSheet1
64+ ActivePage = ThreadSheet
6565 MultiLine = True
66- TabIndex = 5
66+ TabIndex = 4
6767 TabOrder = 3
6868 OnChange = OptionTabChange
6969 object ConnectSheet: TTabSheet
@@ -870,7 +870,7 @@ object OptionDialog: TOptionDialog
870870 Left = 12
871871 Top = 92
872872 Width = 477
873- Height = 121
873+ Height = 157
874874 Caption = #12522#12531#12463#12463#12522#12483#12463#26178#21205#20316
875875 TabOrder = 1
876876 object AppFolderLabel: TLabel
@@ -915,13 +915,21 @@ object OptionDialog: TOptionDialog
915915 TabOrder = 3
916916 OnClick = URLAppCheckBoxClick
917917 end
918+ object ResAnchorCheckBox: TCheckBox
919+ Left = 12
920+ Top = 125
921+ Width = 333
922+ Height = 17
923+ Caption = #12524#12473#12450#12531#12459#12540#12398#22580#21512#12289#12381#12398#12524#12473#12414#12391#12472#12515#12531#12503#12377#12427
924+ TabOrder = 4
925+ end
918926 end
919927 object GroupBox6: TGroupBox
920928 Left = 12
921- Top = 220
929+ Top = 260
922930 Width = 477
923- Height = 49
924- Caption = #12525#12464#21066#38500
931+ Height = 77
932+ Caption = #30906#35469#12513#12483#12475#12540#12472
925933 TabOrder = 2
926934 object LogDeleteMessageCheckBox: TCheckBox
927935 Left = 12
@@ -932,21 +940,14 @@ object OptionDialog: TOptionDialog
932940 TabOrder = 0
933941 OnClick = URLAppCheckBoxClick
934942 end
935- end
936- object ResAnchorGroupBox: TGroupBox
937- Left = 12
938- Top = 279
939- Width = 477
940- Height = 49
941- Caption = #12524#12473#12450#12531#12459#12540#12463#12522#12483#12463#26178#21205#20316
942- TabOrder = 3
943- object ResAnchorCheckBox: TCheckBox
943+ object IgnoreLimitResCountCheckBox: TCheckBox
944944 Left = 12
945- Top = 21
946- Width = 165
945+ Top = 46
946+ Width = 389
947947 Height = 17
948- Caption = #12381#12398#12524#12473#12414#12391#12472#12515#12531#12503#12377#12427
949- TabOrder = 0
948+ Caption = #21516'ID'#12524#12473#12450#12531#12459#12540#34920#31034#12391#21046#38480#25968#36234#12360#12398#30906#35469#12513#12483#12475#12540#12472#12434#34920#31034#12377#12427'(&R)'
949+ TabOrder = 1
950+ OnClick = URLAppCheckBoxClick
950951 end
951952 end
952953 end
--- a/Option.pas
+++ b/Option.pas
@@ -116,8 +116,6 @@ type
116116 OpenMailerCheckBox: TCheckBox;
117117 GroupBox6: TGroupBox;
118118 LogDeleteMessageCheckBox: TCheckBox;
119- ResAnchorGroupBox: TGroupBox;
120- ResAnchorCheckBox: TCheckBox;
121119 TabSheet1: TTabSheet;
122120 TabAddRadioGroup: TRadioGroup;
123121 GroupBox8: TGroupBox;
@@ -219,6 +217,8 @@ type
219217 gppLeftBottomRB: TRadioButton;
220218 gppBottomRB: TRadioButton;
221219 gppRighBottomRB: TRadioButton;
220+ ResAnchorCheckBox: TCheckBox;
221+ IgnoreLimitResCountCheckBox: TCheckBox;
222222 procedure FormCreate(Sender: TObject);
223223 procedure FormDestroy(Sender: TObject);
224224 procedure ApplyButtonClick(Sender: TObject);
@@ -766,6 +766,8 @@ begin
766766
767767 //ログ削除時メッセージ
768768 LogDeleteMessageCheckBox.Checked := GikoSys.Setting.DeleteMsg;
769+ //同IDレスアンカー表示の制限数越えメッセージ
770+ IgnoreLimitResCountCheckBox.Checked := GikoSys.Setting.LimitResCountMessage;
769771
770772 //終了時確認ダイアログ
771773 ShowDialogForEndCheckBox.Checked := GikoSys.Setting.ShowDialogForEnd;
@@ -1031,6 +1033,8 @@ begin
10311033
10321034 GikoSys.Setting.OpenMailer := OpenMailerCheckBox.Checked;
10331035 GikoSys.Setting.DeleteMsg := LogDeleteMessageCheckBox.Checked;
1036+ GikoSys.Setting.LimitResCountMessage := IgnoreLimitResCountCheckBox.Checked;
1037+
10341038 //終了時確認ダイアログ
10351039 GikoSys.Setting.ShowDialogForEnd := ShowDialogForEndCheckBox.Checked;
10361040 //AllTabClose
--- a/Preview.pas
+++ b/Preview.pas
@@ -10,7 +10,6 @@ uses
1010 SHDocVw_TLB
1111 {$IFEND}
1212 ;
13-
1413 type
1514 TPreviewBrowser = class(TWebBrowser)
1615 private
@@ -29,6 +28,9 @@ uses MojuUtils, GikoSystem, Setting;
2928 const
3029 //プレビューファイル名
3130 HTML_FILE_NAME = 'temp_preview.html';
31+ // マウスカーソルからのずらし位置
32+ DIV_X = 15;
33+ DIV_Y = 15;
3234
3335 constructor TPreviewBrowser.Create(AOwner: TComponent);
3436 begin
@@ -148,26 +150,26 @@ begin
148150 end;
149151
150152 Result := Rect(0, 0, WindowWidth, WindowHeight);
151-
153+ // bata55以前は左右が間違ってた
152154 // 出し位置による補正
153155 case GikoSys.Setting.PopupPosition of
154- gppRightTop: OffsetRect(Result,
155- Point.x - WindowWidth - 15, Point.y - WindowHeight - 15);
156- gppRight: OffsetRect(Result,
157- Point.x - WindowWidth - 15, Point.y - (WindowHeight div 2));
158- gppRightBottom: OffsetRect(Result,
159- Point.x - WindowWidth - 15, Point.y + 15);
156+ gppLeftTop: OffsetRect(Result,
157+ Point.x - WindowWidth - DIV_X, Point.y - WindowHeight - DIV_Y);
158+ gppLeft: OffsetRect(Result,
159+ Point.x - WindowWidth - DIV_X, Point.y - (WindowHeight div 2));
160+ gppLeftBottom: OffsetRect(Result,
161+ Point.x - WindowWidth - DIV_X, Point.y + DIV_Y);
160162 gppTop: OffsetRect(Result,
161- Point.x - (WindowWidth div 2), Point.y - WindowHeight - 15);
163+ Point.x - (WindowWidth div 2), Point.y - WindowHeight - DIV_Y);
162164 gppCenter: OffsetRect(Result,
163165 Point.x - (WindowWidth div 2), Point.y - (WindowHeight div 2));
164166 gppBottom: OffsetRect(Result,
165- Point.x - (WindowWidth div 2), Point.y + 15);
166- gppLeftTop: OffsetRect(Result,
167- Point.x + 15, Point.y - WindowHeight - 15);
168- gppLeft: OffsetRect(Result,
169- Point.x + 15, Point.y - (WindowHeight div 2));
170- gppLeftBottom: OffsetRect(Result, Point.x + 15, Point.y + 15); //ギコナビスレ パート1の453氏に感謝
167+ Point.x - (WindowWidth div 2), Point.y + DIV_Y);
168+ gppRightTop: OffsetRect(Result,
169+ Point.x + DIV_X, Point.y - WindowHeight - DIV_Y);
170+ gppRight: OffsetRect(Result,
171+ Point.x + DIV_X, Point.y - (WindowHeight div 2));
172+ gppRightBottom: OffsetRect(Result, Point.x + DIV_X, Point.y + DIV_Y); //ギコナビスレ パート1の453氏に感謝
171173 end;
172174
173175 end;
--- a/ResPopupBrowser.pas
+++ b/ResPopupBrowser.pas
@@ -29,6 +29,7 @@ type
2929 function GetTitle(OnlyTitle: Boolean): string;
3030 function CalcRect(WorkArea: TRect; Scroll: Boolean): TRect;
3131 function ResPopupBrowserClick(Sender: TObject): WordBool;
32+ function ResPopupBrowserDbClick(Sender: TObject): WordBool;
3233 function GetThread: TThreadItem;
3334 protected
3435 procedure CreateParams(var Params: TCreateParams); override;
@@ -53,8 +54,7 @@ type
5354 end;
5455
5556 implementation
56-uses MojuUtils, GikoSystem, Setting, Giko, GikoDataModule;
57-
57+uses MojuUtils, GikoSystem, Setting, Giko, GikoDataModule, Preview;
5858
5959 constructor TResPopupBrowser.Create(AOwner: TComponent);
6060 begin
@@ -151,13 +151,22 @@ begin
151151 end;
152152 procedure TResPopupBrowser.Popup;
153153 begin
154- Write(Self.RawDocument, false);
154+ if (GetAsyncKeyState(VK_SHIFT) = Smallint($8001)) then begin
155+ // シフト押してる場合はそのまま出す
156+ Write(Self.RawDocument, false);
157+ end else begin
158+ // 騙し絵が見えるように半角スペース*2を&nbsp;*2に置換する
159+ Write(
160+ MojuUtils.CustomStringReplace(
161+ Self.RawDocument, ' ', '&nbsp;&nbsp;'),
162+ false);
163+ end;
155164 end;
156165 procedure TResPopupBrowser.Write(ADocument: String; OnlyTitle: Boolean = False);
157166 var
158167 p: TPoint;
159168 doc: Variant;
160- ARect, rect: TRect;
169+ ARect: TRect;
161170 FDispHtmlDocument: DispHTMLDocument;
162171 begin
163172 try
@@ -186,7 +195,7 @@ begin
186195 FDispHtmlDocument := Idispatch(OleVariant(Self.ControlInterface).Document) as DispHTMLDocument;
187196 FEvent := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
188197 FEvent.OnClick := ResPopupBrowserClick;
189-
198+ FEvent.OnDoubleClick := ResPopupBrowserDbClick;
190199 Self.Visible := True;
191200 SetWindowPos(Self.Handle, HWND_TOPMOST,
192201 ARect.Left, ARect.Top,
@@ -261,6 +270,7 @@ var
261270 ele: IHTMLElement2;
262271 h, w, dx1, dx2, dy1, dy2: Integer;
263272 MaxWidth, MaxHeight: Integer;
273+ DIV_X, DIV_Y: Integer;
264274 begin
265275 GetCursorpos(p);
266276 ele := ((Self.Document as IHTMLDocument2).body as IHTMLElement2);
@@ -272,6 +282,9 @@ begin
272282 w := ele.scrollWidth + 10;
273283 end;
274284
285+ DIV_X := GikoSys.Setting.RespopupDeltaX;
286+ DIV_Y := GikoSys.Setting.RespopupDeltaY;
287+
275288 dx1 := 0; dx2 := 0;
276289 dy1 := 0; dy2 := 0;
277290
@@ -279,44 +292,44 @@ begin
279292 case GikoSys.Setting.PopupPosition of
280293 gppRightTop:
281294 begin
282- dx1 := 0; dx2 := -2;
283- dy1 := -h; dy2 := -2;
295+ dx1 := 0; dx2 := + DIV_X;
296+ dy1 := -h; dy2 := - DIV_Y;
284297 end;
285298 gppRight:
286299 begin
287- dx1 := 0; dx2 := -2;
300+ dx1 := 0; dx2 := + DIV_X;
288301 dy1 := - (h div 2); dy2 := 0;
289302 end;
290303 gppRightBottom:
291304 begin
292- dx1 := 0; dx2 := -2;
293- dy1 := 0; dy2 := +2;
305+ dx1 := 0; dx2 := + DIV_X;
306+ dy1 := 0; dy2 := + DIV_Y;
294307 end;
295308 gppTop:
296309 begin
297310 dx1 := - (w div 2); dx2 := 0;
298- dy1 := -h; dy2 := -2;
311+ dy1 := -h; dy2 := - DIV_Y;
299312 end;
300313 // 廃止 gppCenter: OffsetRect(Result, p.x - (w div 2), p.y - (h div 2));
301314 gppBottom:
302315 begin
303316 dx1 := - (w div 2); dx2 := 0;
304- dy1 := 0; dy2 := +2;
317+ dy1 := 0; dy2 := + DIV_Y;
305318 end;
306319 gppLeftTop:
307320 begin
308- dx1 := -w; dx2 := +2;
309- dy1 := -h; dy2 := -2;
321+ dx1 := -w; dx2 := - DIV_X ;
322+ dy1 := -h; dy2 := - DIV_Y;
310323 end;
311324 gppLeft:
312325 begin
313- dx1 := -w; dx2 := +2;
326+ dx1 := -w; dx2 := - DIV_X;
314327 dy1 := - (h div 2); dy2 := 0;
315328 end;
316329 gppLeftBottom:
317330 begin
318- dx1 := -w; dx2 := +2;
319- dy1 := 0; dy2 := +2;
331+ dx1 := -w; dx2 := - DIV_X;
332+ dy1 := 0; dy2 := + DIV_Y;
320333 end;
321334 end;
322335 // 初期位置に移動
@@ -440,7 +453,14 @@ begin
440453 FOleInPlaceActiveObject := Self.ControlInterface as IOleInPlaceActiveObject;
441454 FOleInPlaceActiveObject.OnFrameWindowActivate(False);
442455 end;
443-
456+function TResPopupBrowser.ResPopupBrowserDbClick(Sender: TObject): WordBool;
457+begin
458+ // ギコナビのフォーカスを奪ってるのでフォームに無理やり返す
459+ Blur;
460+ // 自分で自分は消せないので、メッセージ経由で消してもらう
461+ PostMessage( GikoForm.Handle , USER_RESPOPUPCLEAR, Integer( Self ), 0 );
462+ Result := True;
463+end;
444464 initialization
445465 OleInitialize(nil);
446466
--- a/Setting.pas
+++ b/Setting.pas
@@ -20,9 +20,9 @@ type
2020 TGikoListOrientation = (gloHorizontal, gloVertical); // リスト垂直・水平
2121 TGikoListState = (glsMax, glsNormal, glsMin); // リストサイズ状態
2222 // ポップアップ表示位置
23- TGikoPopupPosition = (gppRightTop, gppTop, gppLeftTop,
24- gppRight, gppCenter, gppLeft,
25- gppRightBottom, gppBottom, gppLeftBottom);
23+ TGikoPopupPosition = (gppLeftTop = 0, gppTop, gppRightTop,
24+ gppLeft, gppCenter, gppRight,
25+ gppLeftBottom, gppBottom, gppRightBottom);
2626 //プレビューサイズ
2727 TGikoPreviewSize = (gpsXLarge, gpsLarge, gpsMedium, gpsSmall, gpsXSmall);
2828 TGikoBrowserAutoMaximize = (gbmNone, gbmClick, gbmDoubleClick);
@@ -450,6 +450,18 @@ type
450450 FExtList: String;
451451 //! Skin関連
452452 FSkinFiles: TSkinFiles;
453+ //! indexファイルを読み時にdatを検索する
454+ FCheckDatFile: Boolean;
455+ //! 同IDレスアンカー表示
456+ FLimitResCountMessage: Boolean;
457+ //! レスポップアップ表示位置deltaX
458+ FRespopupDeltaX: Integer;
459+ //! レスポップアップ表示位置deltaY
460+ FRespopupDeltaY: Integer;
461+ //! レスポップアップタイマー
462+ FRespopupWait: Integer;
463+ //! メール欄レスポップアップ
464+ FRespopupMailTo: Boolean;
453465 function GetMainCoolSet(Index: Integer): TCoolSet;
454466 function GetBoardCoolSet(Index: Integer): TCoolSet;
455467 function GetBrowserCoolSet(Index: Integer): TCoolSet;
@@ -807,7 +819,16 @@ type
807819 property ExtList: String read FExtList write FExtList;
808820 //! Skinファイル管理
809821 property SkinFiles: TSkinFiles read FSkinFiles;
810-
822+ //! インデックス読み込み時datファイルチェック
823+ property CheckDatFile: Boolean read FCheckDatFile write FCheckDatFile;
824+ property LimitResCountMessage: Boolean read FLimitResCountMessage write FLimitResCountMessage;
825+ //! レスポップアップ表示位置deltaX
826+ property RespopupDeltaX: Integer read FRespopupDeltaX write FRespopupDeltaX;
827+ //! レスポップアップ表示位置deltaY
828+ property RespopupDeltaY: Integer read FRespopupDeltaY write FRespopupDeltaY;
829+ //! レスポップアップタイマー
830+ property RespopupWait: Integer read FRespopupWait write FRespopupWait;
831+ property RespopupMailTo: Boolean read FRespopupMailTo write FRespopupMailTo;
811832 end;
812833
813834
@@ -972,15 +993,16 @@ end;
972993 //デストラクタ
973994 destructor TSetting.Destroy();
974995 begin
975- inherited;
996+ FSkinFiles.Free;
997+ FGestures.Free;
976998 FBoardColumnOrder.Free;
977999 FCategoryColumnOrder.Free;
9781000 FBBSColumnOrder.Free;
979- FSelectTextList.Free;
9801001 FBoardURLs.Free;
1002+ FSelectTextList.Free;
9811003 FMailList.Free;
9821004 FNameList.Free;
983- FGestures.Free;
1005+ inherited;
9841006 end;
9851007
9861008 //初期化ファイル名取得(パス+ファイル名)
@@ -1147,6 +1169,11 @@ begin
11471169 if (FPopupPosition = gppCenter) then begin
11481170 FPopupPosition := gppTop;
11491171 end;
1172+ FRespopupDeltaX := ini.ReadInteger('Browser', 'RespopupDelteX', 5);
1173+ FRespopupDeltaY := ini.ReadInteger('Browser', 'RespopupDelteY', 5);
1174+ FRespopupWait := ini.ReadInteger('Browser', 'RespopupWait', 1000);
1175+ FRespopupMailTo := ini.ReadBool('Browser', 'RespopupMailTo', true);
1176+
11501177 //アドレスバー
11511178 FURLDisplay := ini.ReadBool('AddressBar', 'URLDisplay', False);
11521179 FAddressBarTabStop := ini.ReadBool('AddressBar', 'TabStop', True);
@@ -1293,6 +1320,9 @@ begin
12931320
12941321 FSentIniFileSize := ini.ReadInteger('Function', 'SentIniFileSize', 3);
12951322 FExtList := ini.ReadString('Function', 'ExtList', '*.gif;*.jpg;*.jpeg;*.png;*.zip;*.rar');
1323+
1324+ FCheckDatFile := ini.ReadBool('ThreadList', 'CheckDatFile', True);
1325+ FLimitResCountMessage := ini.ReadBool('Thread', 'LimitResCountMessage', True);
12961326 ini.UpdateFile;
12971327 finally
12981328 ini.Free;
@@ -1517,7 +1547,11 @@ begin
15171547
15181548 //ポップアップ位置
15191549 ini.WriteInteger('Browser', 'PopupPosition', Ord(FPopupPosition));
1520-
1550+ ini.WriteInteger('Browser', 'RespopupDelteX', FRespopupDeltaX);
1551+ ini.WriteInteger('Browser', 'RespopupDelteY', FRespopupDeltaY);
1552+ ini.WriteInteger('Browser', 'RespopupWait', FRespopupWait);
1553+ ini.WriteBool('Browser', 'RespopupMailTo', FRespopupMailTo);
1554+
15211555 //アドレスバー
15221556 ini.WriteBool('AddressBar', 'URLDisplay', FURLDisplay);
15231557 ini.WriteBool('AddressBar', 'TabStop', FAddressBarTabStop);
@@ -1675,6 +1709,8 @@ begin
16751709 ini.WriteBool('Thread', 'ReplaceDat', FReplaceDat);
16761710 ini.WriteInteger('Function', 'SentIniFileSize', FSentIniFileSize);
16771711 ini.WriteString('Function', 'ExtList', FExtList);
1712+ ini.WriteBool('ThreadList', 'CheckDatFile', FCheckDatFile);
1713+ ini.WriteBool('Thread', 'LimitResCountMessage', FLimitResCountMessage);
16781714 ini.UpdateFile;
16791715 finally
16801716 ini.Free;
--- a/gikoNavi.dpr
+++ b/gikoNavi.dpr
@@ -78,7 +78,8 @@ uses
7878 HistoryList in 'HistoryList.pas',
7979 ReplaceDataModule in 'ReplaceDataModule.pas' {ReplaceDM: TDataModule},
8080 ResPopupBrowser in 'ResPopupBrowser.pas',
81- SkinFiles in 'SkinFiles.pas';
81+ SkinFiles in 'SkinFiles.pas',
82+ NewBoardURL in 'NewBoardURL.pas' {NewBoardURLForm};
8283
8384 {$R *.RES}
8485 {$R gikoResource.res}
Binary files a/gikoNavi.res and b/gikoNavi.res differ
--- a/readme/gikoSetup.iss
+++ b/readme/gikoSetup.iss
@@ -10,11 +10,11 @@ VersionInfoDescription=
1010 DefaultGroupName=ギコナビ
1111 ; 自分の環境に合わせてください
1212 SourceDir=G:\Release
13-OutputDir=G:\Output
13+OutputDir=G:\InnoSetup\Output
1414 SetupIconFile="G:\gikoNaviSFX_102\MainIcon.ico"
1515 ; ギコナビのバージョンにあわせてください
16-VersionInfoVersion=1.56.0.714
17-OutputBaseFilename=gikoNavi_1.56.0.714_2_setup
16+VersionInfoVersion=1.56.1.716
17+OutputBaseFilename=gikoNavi_b56_setup
1818
1919
2020 [Tasks]
@@ -90,7 +90,7 @@ begin
9090 begin
9191 DelTree(path, True, True, True);
9292 end;
93-
93+
9494 path := ExpandConstant('{app}') + '\config';
9595 if MsgBox(path + 'フォルダ以下を完全に消去してよろしいでしょうか?', mbConfirmation, MB_YESNO) = IDYES then
9696 begin
--- a/readme/readme.txt
+++ b/readme/readme.txt
@@ -1,4 +1,4 @@
1-■ギコナビ Version1.00 バタ56 Readme.txt
1+■ギコナビ Version1.00 バタ57 Readme.txt
22
33
44 ------------------------------
@@ -108,6 +108,19 @@ LICENSE
108108 ------------------------------
109109 履歴
110110 ------------------------------
111+2007/XX/XX
112+ Version バタ57
113+ ・詳細設定に、スレッド一覧読み込み時にローカルのdatファイルをチェックしないオプションを追加
114+ ・レスポップアップのウィンドウをダブルクリックで消せるように修正
115+ ・レスポップアップの表示位置などの調整を詳細設定に追加
116+ ・NGワードで、">>"で始まる文字列はコメント扱いとするように修正
117+
118+2007/08/18
119+ Version バタ56 リリース2
120+ 入力アシストの設定で、挿入文字列をだけを変更できない不具合の修正
121+ 一部環境で、ギコナビを最小化して復元するとスレッドがスクロールする不具合の修正
122+ バタ55以前からアップデートするとレスポップアップ位置の設定の左右が逆転する不具合の修正
123+
111124 2007/08/05
112125 Version バタ56
113126  レスポップアップの多段対応
--- a/res/default/Samba.default
+++ b/res/default/Samba.default
@@ -1,44 +1,36 @@
11 [Setting]
2-@ascii2d=30
3-@chiri=30
4-@gline=30
52 @newsplus=120
6-@operate=30
7-@tv=30
8-aa6=30
3+@skate=60
94 academy6=30
10-anime2=45
11-book4=30
12-bubble5=30
5+anime2=60
6+bubble6=30
137 etc6=30
148 ex20=30
159 ex21=30
16-ex22=30
17-food7=30
10+ex23=20
11+food8=30
1812 game11=30
1913 game12=30
2014 hobby9=30
21-human6=30
15+human7=30
2216 life8=30
2317 live23=10
2418 live24=10
2519 live25=10
26-love5=30
27-money5=30
20+love6=30
21+money6=30
2822 music8=30
2923 news21=30
3024 news22=30
31-off4=30
32-pc9=30
25+news23=128
3326 pc11=30
3427 qb5=30
35-school6=30
28+school7=30
3629 science6=30
37-sports10=60
30+sports11=60
3831 tmp6=45
39-travel3=30
4032 tv11=60
41-wwwww=20
33+wwwww=15
4234
4335 idol=30
4436 pie=30
Show on old repository browser