Commit MetaInfo

修订版ffbc30f09add2c88ecc2957be51a5592f070f64f (tree)
时间2004-10-03 03:37:50
作者cvs2git <cvs2git>
Commitercvs2git

Log Message

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

更改概述

差异

--- a/Editor.pas
+++ b/Editor.pas
@@ -410,11 +410,8 @@ end;
410410
411411 function TEditorForm.GetBody : string;
412412 var
413- body, tmp : string;
414- p, tail : PChar;
415- len : Integer;
416-const
417- TAB_LENGTH = 4;
413+ body : string;
414+ regexp : TAWKStr;
418415 begin
419416
420417 body := BodyEdit.Text;
@@ -422,65 +419,16 @@ begin
422419 // & の置換は一番最初にやること
423420 body := CustomStringReplace( body, '&', '&amp;' );
424421 if SpaceToNBSPAction.Checked then begin
425- p := PChar( body );
426- tail := p + Length( body );
427- len := 0;
428- while p < tail do begin
429- case p^ of
430- #09:
431- begin
432- Inc( p );
433- repeat
434- Inc( len );
435- tmp := tmp + '&nbsp;';
436- until (len mod TAB_LENGTH) = 0;
437- end;
438-
439- #10, #13:
440- begin
441- tmp := tmp + p^; Inc( p );
442- len := 0;
443- end;
444-
445- ' ':
446- begin
447- tmp := tmp + '&nbsp;';
448- Inc( p );
449- Inc( len );
450- end;
451-
452- '&':
453- // 実体参照は 1 文字分
454- begin
455- tmp := tmp + '&';
456- Inc( p );
457- Inc( len );
458- while p < tail do begin
459- if p^ in ['a'..'z', 'A'..'Z', '0'..'9', '#'] then begin
460- tmp := tmp + p^;
461- end else if p^ = ';' then begin
462- tmp := tmp + p^;
463- Inc( p );
464- Break;
465- end else begin
466- Break;
467- end;
468- Inc( p );
469- end;
470- end;
471-
472- else
473- if p^ in kYofKanji then begin
474- tmp := tmp + p^; Inc( p );
475- tmp := tmp + p^; Inc( p );
476- len := len + 2;
477- end else begin
478- tmp := tmp + p^; Inc( p );
479- Inc( len );
480- end;
481- end;
422+ body := CustomStringReplace( body, #09, '&nbsp;&nbsp;&nbsp;&nbsp;' );
423+ body := CustomStringReplace( body, ' ', '&nbsp;&nbsp;' );
424+ body := CustomStringReplace( body, '&nbsp; ', '&nbsp;&nbsp;' );
425+ regexp := TAWKStr.Create( nil );
426+ try
427+ regexp.RegExp := '^ ';
428+ regexp.GSub( '\&nbsp;', body );
429+ finally
430+ regexp.Free;
482431 end;
483- body := tmp;
484432 end;
485433
486434 Result := body;
@@ -1666,6 +1614,7 @@ procedure TEditorForm.GetTitlePictureActionExecute(Sender: TObject);
16661614 var
16671615 memStream: TMemoryStream;
16681616 tmpBoard: TBoard;
1617+ tmp : string;
16691618 begin
16701619 InitIdHTTP(Indy);
16711620 memStream := TMemoryStream.Create;
--- a/ExternalBoardPlugInMain.pas
+++ b/ExternalBoardPlugInMain.pas
@@ -229,8 +229,7 @@ var
229229 // httpSocket : TIdHTTP;
230230 resStream : TMemoryStream;
231231 content : string;
232-const
233- LIVEDOOR_URL = 'http://jbbs.livedoor.jp/';
232+
234233 begin
235234
236235 {$IFDEF DEBUG}
@@ -271,8 +270,7 @@ begin
271270 Result := socket.ResponseCode;
272271 if (Length( content ) = 0) and (Result = 206) then
273272 Result := 304;
274- //したらばJBBSはヘッダにエラー情報が載るらしいので、ここでチェック
275- if ( AnsiPos(LIVEDOOR_URL, inURL) > 0 ) and (Result = 200) then begin
273+ if ( AnsiPos('http://jbbs.livedoor.com/', inURL) > 0 ) and (Result = 200) then begin
276274 if( AnsiPos('STORAGE IN', socket.Response.RawHeaders.Text) > 0 ) then begin
277275 Result := 302;
278276 end;
--- a/Favorite.pas
+++ b/Favorite.pas
@@ -117,50 +117,13 @@ function TFavoriteBoardItem.GetItem : TBoard;
117117 var
118118 protocol, host, path, document, port, bookmark : string;
119119 BBSID{, BBSKey} : string;
120- tmpURL, boardURL : string;
120+ tmpURL : string;
121121 // category : TCategory;
122- i, bi: Integer;
123- tmpThread: TThreadItem;
124- tmpBoard: TBoard;
125122 begin
126123
127124 if FItem = nil then begin
128125 FItem := BBSsFindBoardFromURL( URL );
129126 if FItem = nil then begin
130- //===== プラグイン
131- try
132- //作業中//
133- bi := High( BoardPlugIns );
134- for i := Low( BoardPlugIns ) to bi do begin
135- if Assigned( Pointer( BoardPlugIns[ i ].Module ) ) then begin
136- case BoardPlugIns[ i ].AcceptURL( URL ) of
137- atThread:
138- begin
139- tmpThread := TThreadItem.Create( BoardPlugIns[ i ], URL );
140- boardURL := tmpThread.BoardPlugIn.GetBoardURL( DWORD( tmpThread ) );
141- FItem := BBSsFindBoardFromURL( boardURL );
142- URL := FItem.URL;
143- tmpThread.Free;
144- break;
145- end;
146- atBoard:
147- begin
148- tmpBoard := TBoard.Create(BoardPlugIns[ i ], URL);
149- FItem := BBSsFindBoardFromURL( tmpBoard.URL );
150- tmpBoard.Free;
151- if FItem <> nil then begin
152- URL := FItem.URL;
153- end;
154- break;
155- end;
156- end;
157- end;
158- end;
159- except
160- // exception が発生した場合は内部処理に任せたいのでここでは何もしない
161- end;
162- end;
163- if FItem = nil then begin
164127 tmpURL := URL;
165128 GikoSys.ParseURI( tmpURL, protocol, host, path, document, port, bookmark );
166129 if GikoSys.Is2chHost( host ) then begin
--- a/Giko.dfm
+++ b/Giko.dfm
@@ -1,11 +1,11 @@
11 object GikoForm: TGikoForm
2- Left = 246
3- Top = 188
2+ Left = 124
3+ Top = 95
44 HorzScrollBar.Visible = False
55 VertScrollBar.Visible = False
66 AutoScroll = False
77 Caption = '-'
8- ClientHeight = 404
8+ ClientHeight = 545
99 ClientWidth = 854
1010 Color = clBtnFace
1111 Font.Charset = SHIFTJIS_CHARSET
@@ -27,7 +27,7 @@ object GikoForm: TGikoForm
2727 TextHeight = 12
2828 object StatusBar: TStatusBar
2929 Left = 0
30- Top = 384
30+ Top = 525
3131 Width = 854
3232 Height = 20
3333 Panels = <
@@ -38,7 +38,11 @@ object GikoForm: TGikoForm
3838 Width = 500
3939 end
4040 item
41+ Style = psOwnerDraw
4142 Width = 50
43+ end
44+ item
45+ Width = 100
4246 end>
4347 SimplePanel = False
4448 OnResize = StatusBarResize
@@ -47,13 +51,13 @@ object GikoForm: TGikoForm
4751 Left = 0
4852 Top = 77
4953 Width = 854
50- Height = 307
54+ Height = 448
5155 Align = alClient
5256 BevelOuter = bvNone
5357 TabOrder = 1
5458 object MessageSplitter: TSplitter
5559 Left = 0
56- Top = 268
60+ Top = 409
5761 Width = 854
5862 Height = 5
5963 Cursor = crVSplit
@@ -66,7 +70,7 @@ object GikoForm: TGikoForm
6670 Left = 0
6771 Top = 0
6872 Width = 854
69- Height = 268
73+ Height = 409
7074 Align = alClient
7175 BevelOuter = bvNone
7276 TabOrder = 0
@@ -74,7 +78,7 @@ object GikoForm: TGikoForm
7478 Left = 145
7579 Top = 0
7680 Width = 5
77- Height = 268
81+ Height = 409
7882 Cursor = crHSplit
7983 AutoSnap = False
8084 ResizeStyle = rsUpdate
@@ -83,7 +87,7 @@ object GikoForm: TGikoForm
8387 Left = 0
8488 Top = 0
8589 Width = 145
86- Height = 268
90+ Height = 409
8791 Align = alLeft
8892 BevelOuter = bvNone
8993 TabOrder = 0
@@ -270,7 +274,7 @@ object GikoForm: TGikoForm
270274 Left = 150
271275 Top = 0
272276 Width = 704
273- Height = 268
277+ Height = 409
274278 Align = alClient
275279 BevelOuter = bvNone
276280 TabOrder = 1
@@ -309,12 +313,14 @@ object GikoForm: TGikoForm
309313 OwnerData = True
310314 ReadOnly = True
311315 RowSelect = True
316+ PopupMenu = ListPopupMenu
312317 SmallImages = ItemIcon16
313318 StateImages = StateIconImageList
314319 TabOrder = 0
315320 ViewStyle = vsReport
316321 OnAdvancedCustomDrawItem = ListViewAdvancedCustomDrawItem
317322 OnColumnClick = ListViewColumnClick
323+ OnColumnDragged = ListViewColumnDragged
318324 OnColumnRightClick = ListViewColumnRightClick
319325 OnCustomDraw = ListViewCustomDraw
320326 OnData = ListViewData
@@ -548,7 +554,7 @@ object GikoForm: TGikoForm
548554 Left = 0
549555 Top = 194
550556 Width = 704
551- Height = 74
557+ Height = 215
552558 Align = alClient
553559 BevelOuter = bvNone
554560 TabOrder = 1
@@ -556,7 +562,7 @@ object GikoForm: TGikoForm
556562 Left = 0
557563 Top = 46
558564 Width = 704
559- Height = 8
565+ Height = 149
560566 Align = alClient
561567 BevelOuter = bvNone
562568 UseDockManager = False
@@ -566,7 +572,7 @@ object GikoForm: TGikoForm
566572 Left = 0
567573 Top = 0
568574 Width = 704
569- Height = 8
575+ Height = 149
570576 Align = alClient
571577 TabOrder = 0
572578 OnEnter = BrowserEnter
@@ -575,7 +581,7 @@ object GikoForm: TGikoForm
575581 OnNewWindow2 = BrowserNewWindow2
576582 OnDocumentComplete = BrowserDocumentComplete
577583 ControlData = {
578- 4C000000C3480000D40000000000000000000000000000000000000000000000
584+ 4C000000C3480000660F00000000000000000000000000000000000000000000
579585 000000004C000000000000000000000001000000E0D057007335CF11AE690800
580586 2B2E12620A000000000000004C0000000114020000000000C000000000000046
581587 8000000000000000000000000000000000000000000000000000000000000000
@@ -584,7 +590,7 @@ object GikoForm: TGikoForm
584590 end
585591 object BrowserBottomPanel: TGikoPanel
586592 Left = 0
587- Top = 54
593+ Top = 195
588594 Width = 704
589595 Height = 20
590596 Align = alBottom
@@ -862,7 +868,7 @@ object GikoForm: TGikoForm
862868 end
863869 object MessagePanel: TPanel
864870 Left = 0
865- Top = 273
871+ Top = 414
866872 Width = 854
867873 Height = 34
868874 Align = alBottom
@@ -6009,7 +6015,7 @@ object GikoForm: TGikoForm
60096015 end
60106016 object ActionList: TActionList
60116017 Images = ToobarImageList
6012- Left = 5
6018+ Left = 8
60136019 Top = 372
60146020 object OnlyAHundredResAction: TAction
60156021 Category = #12473#12524#12483#12489
@@ -7065,20 +7071,6 @@ object GikoForm: TGikoForm
70657071 Hint = #12479#12502#12398#38918#30058#12434#33258#21205#24489#20803
70667072 OnExecute = TabAutoLoadActionExecute
70677073 end
7068- object JumpToNumOfResAction: TAction
7069- Category = #12473#12524#12483#12489
7070- Caption = #25351#23450#12375#12383#30058#21495#12398#12524#12473#12395#39131#12406
7071- Hint = #25351#23450#12375#12383#30058#21495#12398#12524#12473#12395#39131#12406
7072- ShortCut = 16455
7073- OnExecute = JumpToNumOfResActionExecute
7074- OnUpdate = JumpToNumOfResActionUpdate
7075- end
7076- object FavoriteTreeViewCollapseAction: TAction
7077- Category = #12362#27671#12395#20837#12426
7078- Caption = #12362#27671#12395#20837#12426#12484#12522#12540#12434#12377#12409#12390#38281#12376#12427
7079- Hint = #12362#27671#12395#20837#12426#12484#12522#12540#12434#12377#12409#12390#38281#12376#12427
7080- OnExecute = FavoriteTreeViewCollapseActionExecute
7081- end
70827074 end
70837075 object BrowserPopupMenu: TPopupMenu
70847076 Left = 68
--- a/Giko.pas
+++ b/Giko.pas
@@ -577,8 +577,6 @@ type
577577 TabAutoSaveAction: TAction;
578578 TabAutoLoadAction: TAction;
579579 ListColumnPopupMenu: TPopupMenu;
580- JumpToNumOfResAction: TAction;
581- FavoriteTreeViewCollapseAction: TAction;
582580 procedure FormCreate(Sender: TObject);
583581 procedure FormDestroy(Sender: TObject);
584582 procedure CabinetPanelHide(Sender: TObject);
@@ -928,9 +926,6 @@ type
928926 procedure TabAutoLoadActionExecute(Sender: TObject);
929927 procedure ListViewColumnRightClick(Sender: TObject;
930928 Column: TListColumn; Point: TPoint);
931- procedure JumpToNumOfResActionExecute(Sender: TObject);
932- procedure JumpToNumOfResActionUpdate(Sender: TObject);
933- procedure FavoriteTreeViewCollapseActionExecute(Sender: TObject);
934929 private
935930 { Private 宣言 }
936931 //RoundList : TRoundList;
@@ -995,7 +990,6 @@ type
995990 FBrowsers: TList;
996991 FResRangeMenuSelect : Longint; ///< ResRangeButton で選択されている項目 (フォーマットは ResRange 互換)
997992 FStartUp : Boolean;
998- FIsHandledWheel : Boolean; ///< 既に受け取った WM_MOUSEWHEEL かどうか
999993 procedure SetBoardTreeNode( inBBS : TBBS );
1000994 function SetCategoryListItem(ABBS2ch: TBBS): Integer;
1001995 function SetBoardListItem(Category: TCategory): Integer;
@@ -1008,7 +1002,7 @@ type
10081002 procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
10091003 procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
10101004
1011-
1005+ procedure SetActiveList(Obj: TObject);
10121006 procedure ListClick;
10131007 procedure ListDoubleClick(Shift: TShiftState);
10141008 procedure BrowserMovement(const AName: string); overload;
@@ -1090,6 +1084,8 @@ type
10901084 function LoadTabURLs : Boolean;
10911085 /// バンド幅を再計算・再設定する
10921086 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
1087+ /// ListView のカラム幅および位置の保存
1088+ procedure ActiveListColumnSave;
10931089 /// ListView の Column を真のカラムに変換
10941090 function ActiveListTrueColumn( column : TListColumn ) : TListColumn;
10951091 /// ListColumnPopupMenu アイテムのクリックイベント
@@ -1105,11 +1101,8 @@ type
11051101 { Public 宣言 }
11061102 // FDownload: TDownload;
11071103 FControlThread: TThreadControl;
1108- procedure MoveToURL(const inURL: string);
1109- function InsertBrowserTab(
1110- ThreadItem : TThreadItem;
1111- ActiveTab : Boolean = True
1112- ) : TBrowserRecord;
1104+ procedure MoveToURL(URL: string);
1105+ procedure InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True);
11131106 procedure ReloadBBS;
11141107 function GetHttpState: Boolean;
11151108 procedure SetEnabledCloseButton(Enabled: Boolean);
@@ -1129,7 +1122,7 @@ type
11291122 function GetActiveContent: TThreadItem;
11301123 function GetActiveList: TObject;
11311124
1132-
1125+ property ActiveList: TObject read GetActiveList write SetActiveList;
11331126 // property LastRoundTime: TDateTime read FLastRoundTime write FLastRoundTime;
11341127
11351128 procedure SetListViewType(AViewType: TGikoViewType); overload;
@@ -1153,19 +1146,16 @@ type
11531146 // property Favorite: TFavorite read FFavorite write FFavorite;
11541147 procedure SetToolBarPopup;
11551148 procedure ShowFavoriteAddDialog( Item : TObject );
1156- procedure FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
1157- procedure RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
1149+ procedure FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
1150+ procedure RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
11581151 property ListViewBackGroundColor: TColor read FListViewBackGroundColor write SetListViewBackGroundColor;
11591152 property UseOddResOddColor : Boolean read FUseOddResOddColor write FUseOddResOddColor;
11601153 property OddColor : TColor read FOddColor write FOddColor;
11611154
11621155 function FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
11631156 procedure OnPlugInMenuItem( Sender : TObject );
1164- procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
1165- /// ListView のカラム幅および位置の保存 KuroutSettingからよびだしたいので
1166- procedure ActiveListColumnSave;
1167- procedure SetActiveList(Obj: TObject);
1168- property ActiveList: TObject read GetActiveList write SetActiveList;
1157+ procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
1158+
11691159 published
11701160 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
11711161 end;
@@ -1194,18 +1184,18 @@ type
11941184 TBrowserRecord = class( TObject )
11951185 private
11961186 FBrowser : TWebBrowser;
1197- FEvent: THTMLDocumentEventSink; //!< ブラウザドキュメントイベント
1187+ FEvent: THTMLDocumentEventSink;//ブラウザドキュメントイベント
11981188 FThread : TThreadItem;
11991189 FLastSize : Integer;
12001190 FRepaint : Boolean;
1201- FMovement : string; //!< スクロール先アンカー
1191+ // FOnlyHundred: Boolean;
12021192 public
12031193 destructor Destroy; override;
12041194 property Browser : TWebBrowser read FBrowser write FBrowser;
12051195 property Thread : TThreadItem read FThread write FThread;
12061196 property LastSize : Integer read FLastSize write FLastSize;
12071197 property Repaint : Boolean read FRepaint write FRepaint;
1208- property Movement : string read FMovement write FMovement;
1198+// property OnlyHundred : Boolean read FOnlyHundred write FOnlyHundred;
12091199 end;
12101200
12111201 var
@@ -1266,7 +1256,6 @@ const
12661256 USER_RESIZED = WM_USER + 2001;
12671257 USER_MINIMIZED = WM_USER + 2002;
12681258 USER_SETLINKBAR = WM_USER + 2003;
1269- USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
12701259 SELECTTIME_INTERBAL = 110;
12711260
12721261 BROWSER_COUNT = 5; //ブラウザの数
@@ -1721,7 +1710,7 @@ begin
17211710 //Samba24のファイルチェック
17221711 GikoSys.SambaFileExists();
17231712
1724- //にちゃん語ファイル読み出し
1713+ //タブ自動読み込み (AV発生のため一時封印)
17251714 end;
17261715
17271716 // CoolBar の設定を変数に保存
@@ -1885,12 +1874,6 @@ begin
18851874 if GikoSys.Setting.TabAutoLoadSave then begin
18861875 TabAutoLoadAction.Execute;
18871876 end;
1888- //にちゃん語案内サポート機能
1889- if GikoSys.Setting.GengoSupport then begin
1890- //予定地
1891- //Test向け
1892- end;
1893-
18941877 FStartUp := true;
18951878 end;
18961879 end;
@@ -2687,8 +2670,8 @@ begin
26872670 else
26882671 Item.SubItems[ idx ] := '';
26892672
2690- gbcRoundDate://gbcLastModified:
2691- if (ThreadItem.RoundDate = ZERO_DATE) then begin
2673+ gbcLastModified:
2674+ if ThreadItem.RoundDate = ZERO_DATE then begin
26922675 Item.SubItems[ idx ] := '';
26932676 end else
26942677 Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.RoundDate);
@@ -2698,14 +2681,6 @@ begin
26982681 Item.SubItems[ idx ] := '';
26992682 end else
27002683 Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.CreateDate);
2701-
2702- gbcLastModified:
2703- if (ThreadItem.LastModified = ZERO_DATE) then begin
2704- Item.SubItems[ idx ] := '';
2705- end else
2706- Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.LastModified);
2707-
2708-
27092684 end;
27102685 Inc( idx );
27112686 end;
@@ -2726,18 +2701,18 @@ begin
27262701 gbcAllCount:
27272702 Item.SubItems[ idx ] := IntToStr(ThreadItem.AllResCount);
27282703
2729- gbcRoundDate://gbcLastModified:
2730- Item.SubItems[ idx ] := '';
2704+ gbcLastModified:
2705+ if not GikoSys.Setting.CreationTimeLogs then
2706+ if ThreadItem.CreateDate = ZERO_DATE then
2707+ Item.SubItems[ idx ] := ''
2708+ else
2709+ Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.CreateDate);
27312710
27322711 gbcCreated:
27332712 if ThreadItem.CreateDate = ZERO_DATE then begin
27342713 Item.SubItems[ idx ] := '';
27352714 end else
27362715 Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.CreateDate);
2737-
2738- gbcLastModified:
2739- Item.SubItems[ idx ] := '';
2740-
27412716 else
27422717 Item.SubItems[ idx ] := '';
27432718 end;
@@ -2794,7 +2769,7 @@ var
27942769 ActiveFileName: string;
27952770 e: IHTMLElement;
27962771 Ext: string;
2797- buf, buf2: string;
2772+ buf: string;
27982773 PathRec: TPathRec;
27992774 begin
28002775 if not( TObject(Sender) is TWebBrowser )then
@@ -2877,43 +2852,30 @@ begin
28772852 end else begin
28782853 threadItem := GetActiveContent;
28792854 if Pos('about:blank..', Text) = 1 then begin
2880- wkInt := LastDelimiter( '/', threadItem.URL );
2881- if Pos( '?', Copy( threadItem.URL, wkInt, MaxInt ) ) = 0 then begin
2882- // Thread.URL は PATH_INFO 渡し
2883- URL := Copy( threadItem.URL, 1, LastDelimiter( '/', threadItem.URL ) );
2884- wkInt := LastDelimiter( '/', Text );
2885- if Pos( '?', Copy( Text, wkInt, MaxInt ) ) = 0 then
2886- // Text も PATH_INFO 渡し
2887- URL := URL + Copy( Text, LastDelimiter( '/', Text ) + 1, MaxInt )
2888- else
2889- // Text は QUERY_STRING 渡し
2890- URL := URL + Copy( Text, LastDelimiter( '?', Text ) + 1, MaxInt );
2855+ if (AnsiPos('http://jbbs.livedoor.com/', threadItem.URL) <> 0) then begin
2856+ URL := Copy(threadItem.URL, 1, LastDelimiter('/',threadItem.URL));
2857+ Gikosys.GetPopupResNumber(Text,PathRec.FSt,PathRec.FTo);
2858+ if ( PathRec.FSt <> 0 ) and ( PathRec.FTo <> 0 ) then
2859+ buf := IntToStr(PathRec.FSt) + '-' + IntToStr(PathRec.FTo)
2860+ else if( PathRec.FSt <> 0 ) then
2861+ buf := IntToStr(PathRec.FSt);
2862+ end else if AnsiPos('machi.to/bbs/', threadItem.URL) <> 0 then begin
2863+ URL := threaditem.URL;
2864+ buf := Copy(Text,AnsiPos('&st=',Text),Length(Text)-AnsiPos('&st=',Text) + 1);
28912865 end else begin
2892- // Thread.URL は QUERY_STRING 渡し
2893- URL := Copy( threadItem.URL, 1, LastDelimiter( '?', threadItem.URL ) );
2894- wkInt := LastDelimiter( '/', Text );
2895- if Pos( '?', Copy( Text, wkInt, MaxInt ) ) = 0 then begin
2896- // Text は PATH_INFO 渡し
2897- // URL に板とキーが足らないので Text から頂戴する
2898- wkInt := LastDelimiter( '/', Copy( Text, 1, wkInt - 1 ) );
2899- wkInt := LastDelimiter( '/', Copy( Text, 1, wkInt - 1 ) );
2900- URL := Copy( URL, 1, Length( URL ) - 1 ) + Copy( Text, wkInt, MaxInt );
2901- end else begin
2902- // Text も QUERY_STRING 渡し
2903- URL := URL + Copy( Text, LastDelimiter( '?', Text ) + 1, MaxInt )
2904- end;
2866+ URL := Copy(threadItem.URL, 1, LastDelimiter('/',threadItem.URL));
2867+ buf := Copy(Text,LastDelimiter('/',Text)+1,Length(Text)-LastDelimiter('/',Text));
29052868 end;
2869+ URL := URL + buf;
29062870 end else begin
29072871 URL := Text;
29082872 end;
2909-
29102873 PathRec := Gikosys.Parse2chURL2(URL);
29112874 if (PathRec.FNoParam) then begin
29122875 PathRec.FSt := 1;
29132876 PathRec.FTo := 1;
2914- end else begin
2877+ end else
29152878 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
2916- end;
29172879 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
29182880
29192881 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
@@ -2940,10 +2902,10 @@ begin
29402902 // wkIntTo := 1;
29412903 //if PathRec.FFirst then
29422904 // wkIntSt := 1;
2943- //if PathRec.FStBegin then //http://〜〜〜〜/-50というとき
2944- // wkIntSt := 1; //
2945- //if PathRec.FToEnd then //http://〜〜〜〜/50-というとき
2946- // wkIntTo := 9999; // どちらの場合も、GetPopupResNumberでうまく番号を調整するのでふよう。
2905+ if PathRec.FStBegin then
2906+ wkIntSt := 1;
2907+ if PathRec.FToEnd then
2908+ wkIntTo := 9999;
29472909
29482910 //ATitle := ActiveFileName <> PathRec.FKey;
29492911 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
@@ -3013,44 +2975,22 @@ end;
30132975
30142976 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
30152977 Shift: TShiftState);
3016-var
3017- pos : TPoint;
30182978 begin
30192979 if GetActiveList is TBoard then begin
3020- case Key of
3021- VK_BACK:; // UpFolderButtonClick(Sender);
3022- VK_SPACE: ListDoubleClick(Shift);
3023- VK_RETURN: ListClick;
3024- VK_APPS:
3025- begin
3026- if ListView.Selected <> nil then begin
3027- pos.X := ListView.Column[ 0 ].Width;
3028- pos.Y := ListView.Selected.Top;
3029- end else begin
3030- pos.X := ListView.Left;
3031- pos.Y := ListView.Top;
3032- end;
3033- Windows.ClientToScreen( ListView.Handle, pos );
3034- ListPopupMenu.Popup( pos.X, pos.Y );
3035- end;
2980+ if Key = VK_BACK then begin
2981+// UpFolderButtonClick(Sender);
2982+ end else if Key = VK_SPACE then begin
2983+ ListDoubleClick(Shift);
2984+ end else if Key = VK_RETURN then begin
2985+ ListClick;
30362986 end;
30372987 end else begin // TBBS, TCategory
3038- case Key of
3039- VK_BACK:; // UpFolderButtonClick(Sender);
3040- VK_SPACE: ListClick;
3041- VK_RETURN: ListDoubleClick(Shift);
3042- VK_APPS:
3043- begin
3044- if ListView.Selected <> nil then begin
3045- pos.X := ListView.Column[ 0 ].Width;
3046- pos.Y := ListView.Selected.Top;
3047- end else begin
3048- pos.X := ListView.Left;
3049- pos.Y := ListView.Top;
3050- end;
3051- Windows.ClientToScreen( ListView.Handle, pos );
3052- ListPopupMenu.Popup( pos.X, pos.Y );
3053- end;
2988+ if Key = VK_BACK then begin
2989+// UpFolderButtonClick(Sender);
2990+ end else if Key = VK_SPACE then begin
2991+ ListClick;
2992+ end else if Key = VK_RETURN then begin
2993+ ListDoubleClick(Shift);
30542994 end;
30552995 end;
30562996 end;
@@ -3067,11 +3007,9 @@ Delphi 6 Personal
30673007 正しいカラムが渡されないため、正しいカラムに変換します。
30683008 *}
30693009 function TGikoForm.ActiveListTrueColumn( column : TListColumn ) : TListColumn;
3070-{*
30713010 var
30723011 i, idx : Integer;
30733012 orderList : TList;
3074-*}
30753013 begin
30763014
30773015 // 正しく変換する方法が分からないので保留
@@ -3185,8 +3123,6 @@ begin
31853123 GikoSys.Setting.BoardSortIndex := id;
31863124 GikoSys.Setting.BoardSortOrder := FSortOrder;
31873125 wkBoard.CustomSort(ThreadItemSortProc);
3188- end else begin
3189- id := 0;
31903126 end;
31913127
31923128 ListView.Refresh;
@@ -3459,7 +3395,6 @@ var
34593395 s: string;
34603396 boardPlugIn : TBoardPlugIn;
34613397 i: Integer;
3462- browserRec : TBrowserRecord;
34633398 begin
34643399 try
34653400 if Item.DownType = gdtBoard then
@@ -3494,27 +3429,21 @@ begin
34943429 ATitle := GikoSys.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1)).FTitle;
34953430 end;
34963431 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
3497- if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
3432+ if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then
34983433 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
3499- break;
3500- end;
35013434 end;
35023435 if GikoSys.Setting.BrowserTabVisible then begin
35033436 if GetActiveContent = Item.ThreadItem then
3504- browserRec := InsertBrowserTab(Item.ThreadItem)
3437+ InsertBrowserTab(Item.ThreadItem)
35053438 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
3506- browserRec := InsertBrowserTab(Item.ThreadItem, True)
3439+ InsertBrowserTab(Item.ThreadItem, True)
35073440 else
3508- browserRec := InsertBrowserTab(Item.ThreadItem, False);
3509- if browserRec.Thread = BrowserNullTab.Thread then begin
3510- browserRec.Movement := BrowserNullTab.Movement;
3511- BrowserNullTab.Movement := '';
3512- end;
3441+ InsertBrowserTab(Item.ThreadItem, False);
35133442 end else begin
35143443 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
35153444 InsertBrowserTab(Item.ThreadItem);
35163445 end;
3517- Application.ProcessMessages;
3446+
35183447 if Item.State = gdsComplete then begin
35193448 PlaySound('New');
35203449 AddMessageList(ATitle + ' [スレ取得完了]', nil, gmiOK);
@@ -3642,17 +3571,14 @@ begin
36423571 end;
36433572 end;}
36443573
3645-function TGikoForm.InsertBrowserTab(
3646- ThreadItem : TThreadItem;
3647- ActiveTab : Boolean = True
3648-) : TBrowserRecord;
3574+procedure TGikoForm.InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True);
3575+
36493576 var
3650- i, j, idx : Integer;
3651- favItem : TFavoriteThreadItem;
3577+ i, j, idx: Integer;
3578+ favItem : TFavoriteThreadItem;
36523579 newBrowser : TBrowserRecord;
36533580 begin
36543581
3655- Result := nil;
36563582 if Threaditem = nil then Exit;
36573583
36583584 if ThreadItem.IsLogFile then begin
@@ -3671,7 +3597,6 @@ begin
36713597 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
36723598 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
36733599 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3674- Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
36753600 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).FBrowser = nil then begin
36763601 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
36773602 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).FBrowser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
@@ -3758,7 +3683,6 @@ begin
37583683 BrowserTab.TabIndex := i;
37593684 end;
37603685 end;
3761- Result := newBrowser;
37623686 if(ActiveTab) or (idx = -1) then begin
37633687 BrowserTab.OnChange(nil);
37643688 end;
@@ -3768,7 +3692,6 @@ begin
37683692 BrowserNullTab.Browser := Browser;
37693693 end;
37703694 BrowserNullTab.thread := ThreadItem;
3771- Result := BrowserNullTab;
37723695 BrowserTab.TabIndex := -1;
37733696 SetContent(BrowserNullTab);
37743697 end;
@@ -3788,6 +3711,7 @@ var
37883711 s: string;
37893712 // OldCursor: TCursor;
37903713 i: Integer;
3714+ url: OleVariant;
37913715 idx: Integer;
37923716 ThreadItem: TThreadItem;
37933717 Thread: TBrowserRecord;
@@ -3795,7 +3719,6 @@ var
37953719 ThreadScrollTop: Integer;
37963720 ThreadIsLog, ThreadUnRead, ThreadNewArraical: boolean;
37973721 begin
3798-// AddMessageList('SetContent', nil, gmiWhat);
37993722 Thread := inThread;
38003723 idx := BrowserTab.TabIndex;
38013724 if (FActiveContent <> nil) and
@@ -3859,13 +3782,11 @@ begin
38593782
38603783
38613784 try
3862- {
38633785 if ThreadItem.UnRead then begin
38643786 ThreadItem.ParentBoard.UnRead := ThreadItem.ParentBoard.UnRead - 1;
38653787 if ThreadItem.ParentBoard.UnRead < 0 then ThreadItem.ParentBoard.UnRead := 0;
38663788 TreeView.Refresh;
38673789 end;
3868- }
38693790 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
38703791 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
38713792 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
@@ -3898,21 +3819,55 @@ begin
38983819 Self.Caption := CAPTION_NAME + ' - [' + ThreadTitle + ']';
38993820 //Thread.Repaintは、スキン等の設定を変更したとき、Threadをダウンロードしたとき
39003821 //新規にThreadを開いたときに真になっている。
3822+// if(Thread.Repaint) or (Thread.OnlyHundred <> GikoSys.OnlyAHundredRes)then begin
39013823 if Thread.Repaint then begin
39023824 //Thread.LastSize := ThreadItem.Size;
39033825 Thread.Repaint := false;
3904-
3905- Thread.Browser.OnStatusTextChange := nil;
3906- doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
3907- GikoSys.CreateHTML2(doc, ThreadItem, sTitle);
3908- Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
3909- PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
3910- if ThreadItem = nil then begin
3911- FActiveContent := nil;
3912- BrowserTab.Repaint;
3913- Exit;
3826+ try
3827+ Thread.Browser.OnStatusTextChange := nil;
3828+ doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
3829+ GikoSys.CreateHTML2(doc, ThreadItem, sTitle);
3830+
3831+ // if (Assigned(Thread.Browser)) and (Thread.Browser <> nil) then
3832+ Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
3833+ //なぜかここで明示的にDocumentCompleteを呼ばないとうまくいかない
3834+ //追記 200406/19
3835+ //VisibleのときしかDocumentCompleteは呼ばれないらしい
3836+ Thread.FBrowser.OnDocumentComplete(Thread.FBrowser, Thread.FBrowser.Parent, url);
3837+// Thread.OnlyHundred := GikoSys.OnlyAHundredRes;
3838+ Application.ProcessMessages;
3839+ //ここでApplication.ProcessMessagesを呼ぶことによってWebBrowserを更新させる。
3840+ //相しないと一画面分しか描画できてないのでそれ以上のスクロール量を指定しても無効になる
3841+ // byもじゅ(2004/01/20)
3842+ try
3843+ //if (Assigned(Thread)) and (Assigned(ThreadItem))then begin
3844+ if(Thread <> nil) and (ThreadItem <>nil) then begin
3845+ if ThreadUnRead then
3846+ BrowserMovement('new', Thread)
3847+ else if ThreadScrollTop <> 0 then begin
3848+ try
3849+ doc.Body.ScrollTop := ThreadScrollTop;
3850+ except
3851+ on E: Exception do
3852+ MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
3853+ end;
3854+ end;
3855+ // end;
3856+ end else begin
3857+ FActiveContent := nil;
3858+ BrowserTab.Repaint;
3859+ Exit;
3860+ end;
3861+ except
3862+ FActiveContent := nil;
3863+ BrowserTab.Repaint;
3864+ Exit;
3865+ end;
3866+ finally
3867+ // Application.ProcessMessages;
39143868 end;
39153869 end;
3870+ ThreadItem.UnRead := False;
39163871 ListView.Refresh;
39173872 end;
39183873 if (Assigned(Thread)) and (Assigned(Thread.Thread)) and (Thread <> nil) and (ThreadItem <>nil) then begin
@@ -4008,16 +3963,12 @@ end;
40083963 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
40093964 var
40103965 Board: TBoard;
4011- i: Integer;
40123966 begin
40133967 if ActiveList is TBoard then begin
4014- for i := Length( BBSs ) - 1 downto 0 do begin
4015- BBSs[i].SelectText := SelectText;
4016- BBSs[i].KubetsuChk := KubetsuChk;
4017- end;
40183968 Board := TBoard(ActiveList);
4019-// Board.ParentCategory.ParenTBBS.SelectText := SelectText;
4020-// Board.ParentCategory.ParenTBBS.KubetsuChk := KubetsuChk;
3969+
3970+ Board.ParentCategory.ParenTBBS.SelectText := SelectText;
3971+ Board.ParentCategory.ParenTBBS.KubetsuChk := KubetsuChk;
40213972 // Board.SelectText := SelectText;
40223973 // Board.KubetsuChk := KubetsuChk;
40233974 ViewType := AViewType;
@@ -4596,7 +4547,6 @@ procedure TGikoForm.ListViewMouseDown(Sender: TObject;
45964547 var
45974548 listItem : TListItem;
45984549 threadItem : TThreadItem;
4599- pos : TPoint;
46004550 // t: Cardinal;
46014551 begin
46024552 case Button of
@@ -4620,13 +4570,6 @@ begin
46204570 else
46214571 ListClick;
46224572 end;
4623- mbRight:
4624- begin
4625- pos.X := X;
4626- pos.Y := Y;
4627- Windows.ClientToScreen( ListView.Handle, pos );
4628- ListPopupMenu.Popup( pos.X, pos.Y );
4629- end;
46304573 end;
46314574 { if ssDouble in Shift then begin
46324575 DoubleClickOccurred[Button] := True;
@@ -4753,11 +4696,11 @@ begin
47534696 top := 0;
47544697 nm := AName;
47554698 item := OleVariant( activeBrower.Document as IHTMLDocument2).anchors.item(nm);
4756- item.focus();
47574699 repeat
47584700 top := top + item.offsetTop;
47594701 item := item.offsetParent;
47604702 until AnsiCompareText(item.tagName, 'body' ) = 0;
4703+
47614704 OleVariant(activeBrower.Document as IHTMLDocument2).body.scrollTop := top;
47624705 except
47634706 end;
@@ -4785,7 +4728,6 @@ begin
47854728 top := 0;
47864729 nm := AName;
47874730 item := OleVariant( activeBrower.Document as IHTMLDocument2).anchors.item(nm);
4788- item.focus();
47894731 repeat
47904732 top := top + item.offsetTop;
47914733 item := item.offsetParent;
@@ -6658,13 +6600,11 @@ var
66586600 FDispHtmlDocument: DispHTMLDocument;
66596601 BrowserRecord :TBrowserRecord;
66606602 i :Integer;
6661- doc : Variant;
6662- threadItem : TThreadItem;
66636603 begin
6664-// AddMessageList('DocumentComplete', nil, gmiWhat);
6604+// AddMessageList('DocumentComplete', nil);
66656605 if TObject(Sender) is TWebBrowser then begin
6666- BrowserRecord := nil;
66676606 if TWebBrowser(Sender) <> Browser then begin
6607+ BrowserRecord := nil;
66686608 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
66696609 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
66706610 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
@@ -6680,7 +6620,7 @@ begin
66806620 BrowserRecord.FEvent.OnClick := WebBrowserClick; //追加したOnClickイベント
66816621 end;
66826622 end else begin
6683- if GetActiveContent <> nil then begin
6623+ if GetActiveContent <> nil then begin
66846624 FDispHtmlDocument := Idispatch(OleVariant(Browser.ControlInterface).Document) as DispHTMLDocument;
66856625 if FEvent <> nil then
66866626 FEvent.Free;
@@ -6689,38 +6629,6 @@ begin
66896629 FEvent.OnClick := WebBrowserClick; //追加したOnClickイベント
66906630 end;
66916631 end;
6692-
6693- if (BrowserRecord <> nil) and
6694- Assigned( BrowserRecord.Thread ) then begin
6695- threadItem := BrowserRecord.Thread;
6696-
6697- if (BrowserRecord <> nil) and (Length( BrowserRecord.Movement ) > 0) then begin
6698- if threadItem.UnRead then begin
6699- threadItem.UnRead := False;
6700- threadItem.ParentBoard.UnRead := ThreadItem.ParentBoard.UnRead - 1;
6701- if threadItem.ParentBoard.UnRead < 0 then threadItem.ParentBoard.UnRead := 0;
6702- TreeView.Refresh;
6703- ListView.Refresh;
6704- end;
6705- BrowserMovement( BrowserRecord.Movement, BrowserRecord );
6706- BrowserRecord.Movement := '';
6707- end else if threadItem.UnRead then begin
6708- threadItem.UnRead := False;
6709- threadItem.ParentBoard.UnRead := ThreadItem.ParentBoard.UnRead - 1;
6710- if threadItem.ParentBoard.UnRead < 0 then threadItem.ParentBoard.UnRead := 0;
6711- TreeView.Refresh;
6712- BrowserMovement( 'new', BrowserRecord );
6713- ListView.Refresh;
6714- end else if threadItem.ScrollTop <> 0 then begin
6715- try
6716- doc := Idispatch( OleVariant( BrowserRecord.Browser.ControlInterface ).Document ) as IHTMLDocument2;
6717- doc.Body.ScrollTop := threadItem.ScrollTop;
6718- except
6719- on E: Exception do
6720- MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
6721- end;
6722- end;
6723- end;
67246632 end;
67256633 end;
67266634
@@ -7494,10 +7402,11 @@ begin
74947402 end;
74957403 end;
74967404
7497-procedure TGikoForm.MoveToURL(const inURL: string);
7405+procedure TGikoForm.MoveToURL(URL: string);
7406+
74987407 var
74997408 protocol, host, path, document, port, bookmark : string;
7500- URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
7409+ URL2, protocol2, host2, path2, document2, port2, bookmark2 : string;
75017410 tmp1, tmp2: string;
75027411 BBSID, BBSKey: string;
75037412 tmpBoard, Board: TBoard;
@@ -7510,22 +7419,20 @@ var
75107419 // boardNode : TTreeNode;
75117420 shiftDown : Boolean;
75127421 ctrlDown : Boolean;
7513- stRes, edRes : Int64;
7514- browserRec : TBrowserRecord;
75157422 begin
75167423
7517- GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
7518- GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
7424+ GikoSys.ParseURI( URL, protocol, host, path, document, port, bookmark );
7425+ GikoSys.Parse2chURL( URL, path, document, BBSID, BBSKey );
75197426
75207427
75217428 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
7522- ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
7523- if shiftDown then begin
7524- GikoSys.OpenBrowser(inURL, gbtUserApp);
7525- Exit;
7526- end else if ctrlDown then begin
7527- GikoSys.OpenBrowser(inURL, gbtIE);
7528- Exit;
7429+ ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
7430+ if shiftDown then begin
7431+ GikoSys.OpenBrowser(URL, gbtUserApp);
7432+ Exit;
7433+ end else if ctrlDown then begin
7434+ GikoSys.OpenBrowser(URL, gbtIE);
7435+ Exit;
75297436 end;
75307437
75317438 //===== プラグイン
@@ -7534,16 +7441,15 @@ begin
75347441 bi := High( BoardPlugIns );
75357442 for i := Low( BoardPlugIns ) to bi do begin
75367443 if Assigned( Pointer( BoardPlugIns[ i ].Module ) ) then begin
7537- case BoardPlugIns[ i ].AcceptURL( inURL ) of
7444+ case BoardPlugIns[ i ].AcceptURL( URL ) of
75387445 atThread:
75397446 begin
7540- tmpThread := TThreadItem.Create( BoardPlugIns[ i ], inURL );
7447+ tmpThread := TThreadItem.Create( BoardPlugIns[ i ], URL );
75417448 boardURL := tmpThread.BoardPlugIn.GetBoardURL( DWORD( tmpThread ) );
75427449 Board := BBSsFindBoardFromURL( boardURL );
75437450 if Board = nil then begin
7544- //break;
75457451 // ※作っても追加するところが無いので激しく保留
7546- //GikoSys.OpenBrowser(inURL, gbtUserApp);
7452+ //GikoSys.OpenBrowser(URL, gbtUserApp);
75477453 //Exit;
75487454 {
75497455 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
@@ -7555,40 +7461,34 @@ begin
75557461 GikoSys.ReadSubjectFile( Board );
75567462 Exit;
75577463 end;
7558- ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
7559- if ThreadItem = nil then begin
7560- ThreadItem := tmpThread;
7561- Board.Insert( 0, ThreadItem );
7562- if ActiveList is TBoard then begin
7563- if TBoard(ActiveList) = Board then
7564- ListView.Items.Count := ListView.Items.Count + 1;
7565- end;
7566- GikoSys.GetPopupResNumber( inURL, stRes, edRes );
7567- browserRec := InsertBrowserTab( ThreadItem );
7568- if (browserRec <> nil) and (stRes > 0) then
7569- browserRec.Movement := IntToStr( stRes );
7464+ end;
7465+
7466+ ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
7467+ if ThreadItem = nil then begin
7468+ ThreadItem := tmpThread;
7469+ Board.Insert( 0, ThreadItem );
7470+ if ActiveList is TBoard then begin
7471+ if TBoard(ActiveList) = Board then
7472+ ListView.Items.Count := ListView.Items.Count + 1;
7473+ end;
7474+ InsertBrowserTab( ThreadItem );
7475+ DownloadContent( ThreadItem );
7476+ Exit;
7477+ end else begin
7478+ tmpThread.Free;
7479+ InsertBrowserTab( ThreadItem );
7480+ if not ThreadItem.IsLogFile then begin
75707481 DownloadContent( ThreadItem );
7571- Exit;
7572- end else begin
7573- tmpThread.Free;
7574- GikoSys.GetPopupResNumber( inURL, stRes, edRes );
7575- browserRec := InsertBrowserTab( ThreadItem );
7576- if ThreadItem.IsLogFile then begin
7577- if (browserRec <> nil) and (stRes > 0) then
7578- BrowserMovement( IntToStr( stRes ), browserRec );
7579- end else begin
7580- if (browserRec <> nil) and (stRes > 0) then
7581- browserRec.Movement := IntToStr( stRes );
7582- DownloadContent( ThreadItem );
7583- end;
7584- Exit;
75857482 end;
7483+ Exit;
75867484 end;
7485+
7486+ //Exit;
75877487 end;
75887488
75897489 atBoard:
75907490 begin
7591- tmpBoard := TBoard.Create(BoardPlugIns[ i ], inURL);
7491+ tmpBoard := TBoard.Create(BoardPlugIns[ i ], URL);
75927492 Board := BBSsFindBoardFromURL( tmpBoard.URL );
75937493 tmpBoard.Free;
75947494 if Board <> nil then begin
@@ -7607,7 +7507,7 @@ begin
76077507
76087508
76097509 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
7610- boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
7510+ boardURL := GikoSys.Get2chThreadURL2BoardURL( URL );
76117511 Board := BBSsFindBoardFromURL( boardURL );
76127512 if Board = nil then
76137513 Board := BBSsFindBoardFromBBSID( BBSID );
@@ -7619,23 +7519,23 @@ begin
76197519 end;
76207520 if Board = nil then begin
76217521 // 入るべき板が見つからなかったので、普通のブラウザで開く
7622- GikoSys.OpenBrowser(inURL, gbtUserApp);
7522+ GikoSys.OpenBrowser(URL, gbtUserApp);
76237523 Exit;
76247524 end else begin
76257525 // 外部の板なのに2chのURLにされてしまった奴をここで確認する
7626- URL := Board.URL;
7627- GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
7526+ URL2 := Board.URL;
7527+ GikoSys.ParseURI(URL2 , protocol2, host2, path2, document2, port2, bookmark2 );
76287528 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
76297529 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
76307530 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
7631- GikoSys.OpenBrowser(inURL, gbtUserApp);
7531+ GikoSys.OpenBrowser(URL, gbtUserApp);
76327532 Exit;
76337533 end;
76347534 end;
76357535
76367536 if not Board.IsThreadDatRead then
76377537 GikoSys.ReadSubjectFile(Board);
7638- URL := GikoSys.Get2chBrowsableThreadURL( inURL );
7538+ URL := GikoSys.Get2chBrowsableThreadURL( URL );
76397539 ThreadItem := Board.FindThreadFromURL( URL );
76407540 // 過去ログ倉庫から、ダウソしたスレが発見できないのでここで探すようにする (2004/01/22)
76417541 if ThreadItem = nil then begin
@@ -7648,9 +7548,9 @@ begin
76487548 {shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
76497549 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
76507550 if shiftDown then
7651- GikoSys.OpenBrowser(URL1, gbtUserApp)
7551+ GikoSys.OpenBrowser(URL, gbtUserApp)
76527552 else if ctrlDown then
7653- GikoSys.OpenBrowser(URL1, gbtIE)
7553+ GikoSys.OpenBrowser(URL, gbtIE)
76547554 else begin
76557555 }
76567556 ThreadItem := TThreadItem.Create( nil, URL );
@@ -7664,34 +7564,25 @@ begin
76647564 if TBoard(ActiveList) = Board then
76657565 ListView.Items.Count := ListView.Items.Count + 1;
76667566 end;
7667- GikoSys.GetPopupResNumber( inURL, stRes, edRes );
7668- browserRec := InsertBrowserTab(ThreadItem);
7669- if (browserRec <> nil) and (stRes > 0) then
7670- browserRec.Movement := IntToStr( stRes );
7567+ InsertBrowserTab(ThreadItem);
76717568 DownloadContent(ThreadItem);
76727569 {end;}
76737570 end else begin
7674- if ThreadItem.IsLogFile then begin
7675- GikoSys.GetPopupResNumber( inURL, stRes, edRes );
7676- browserRec := InsertBrowserTab(ThreadItem);
7677- if (browserRec <> nil) and (stRes > 0) then
7678- browserRec.Movement := IntToStr( stRes );
7679- end else begin
7571+ if ThreadItem.IsLogFile then
7572+ InsertBrowserTab(ThreadItem)
7573+ else begin
76807574 if AnsiPos(Host, Board.URL) = 0 then
76817575 ThreadItem.DownloadHost := Host
76827576 else
76837577 ThreadItem.DownloadHost := '';
7684- GikoSys.GetPopupResNumber( inURL, stRes, edRes );
7685- browserRec := InsertBrowserTab(ThreadItem);
7686- if (browserRec <> nil) and (stRes > 0) then
7687- browserRec.Movement := IntToStr( stRes );
7578+ InsertBrowserTab(ThreadItem);
76887579 DownloadContent(ThreadItem);
76897580 end;
76907581 end;
76917582 end else begin
7692- Board := BBSsFindBoardFromURL( inURL );
7583+ Board := BBSsFindBoardFromURL( URL );
76937584 if Board = nil then begin
7694- GikoSys.OpenBrowser(inURL, gbtAuto);
7585+ GikoSys.OpenBrowser(URL, gbtAuto);
76957586 end else begin
76967587 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
76977588 ShowBBSTree( Board.ParentCategory.ParenTBBS );
@@ -7737,9 +7628,6 @@ begin
77377628 end;
77387629
77397630 procedure TGikoForm.WndProc(var Message: TMessage);
7740-var
7741- senderBrowser : TWebBrowser;
7742- url : OleVariant;
77437631 begin
77447632 try
77457633 case Message.Msg of
@@ -7757,12 +7645,6 @@ begin
77577645 OnMinimized;
77587646 USER_SETLINKBAR:
77597647 SetLinkBar;
7760- USER_DOCUMENTCOMPLETE:
7761- if (Message.WParam <> 0) and
7762- (TObject(Message.WParam) is TWebBrowser) then begin
7763- senderBrowser := TWebBrowser( Message.WParam );
7764- BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
7765- end;
77667648 end;
77677649
77687650 inherited;
@@ -8679,7 +8561,7 @@ begin
86798561 end;
86808562 end;
86818563 // 設定
8682- lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
8564+ lResult := SendMessage( bar.Handle, RB_SETBANDINFO, i, Integer( pBandInfo ) );
86838565
86848566 end;
86858567
@@ -8924,11 +8806,12 @@ procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
89248806 var
89258807 Wnd: THandle;
89268808 delta: Integer;
8927-// browserPos : TPoint;
8809+// msg: TMessage;
89288810 const
89298811 ICON_SIZE = 16;
89308812 begin
8931- Wnd := WindowFromPoint(Mouse.CursorPos);
8813+ Handled := False;
8814+ Wnd := WindowFromPoint(MousePos);
89328815 Handled := True;
89338816 if WheelDelta > 0 then
89348817 Delta := -1
@@ -8938,42 +8821,13 @@ begin
89388821 if (Wnd = BrowserTab.Handle) or
89398822 (Wnd = BrowserTab.Parent.Handle) then begin
89408823 BrowserTab.ScrollTabs(Delta);
8824+ end else if Wnd = ListView.Handle then begin
8825+ if ListView.ViewStyle = vsList then
8826+ ListView.Scroll( Delta * Mouse.WheelScrollLines * Abs( ListView.Font.Height ) + Delta * ICON_SIZE, 0 )
8827+ else
8828+ ListView.Scroll( 0, Delta * Mouse.WheelScrollLines * Abs( ListView.Font.Height ) + Delta * ICON_SIZE );
89418829 end else begin
8942- if FIsHandledWheel then begin
8943- FIsHandledWheel := False;
8944- Handled := False;
8945- end else begin
8946- FIsHandledWheel := True;
8947- if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
8948- or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
8949- then
8950- SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
8951- else
8952- Handled := False;
8953-
8954-{
8955-// if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
8956- // TWebBrowser の Handle と比較しても一致しないので座標で TWebBrowser かどうか判定
8957- browserPos.X := 0;
8958- browserPos.Y := 0;
8959- Windows.ClientToScreen( Browser.Handle, browserPos );
8960- if (Longword(Mouse.CursorPos.X - browserPos.X) >= Browser.Width)
8961- or (Longword(Mouse.CursorPos.Y - browserPos.Y) >= Browser.Height)
8962- or (Longword(Mouse.CursorPos.Y - browserPos.Y) < 0)
8963- or (Longword(Mouse.CursorPos.Y - browserPos.Y) < 0) then begin
8964-// or not FActiveContent.Browser.Focused then
8965- // TWebBrowser は無限ループするのでそれ以外ならコントロールに送信
8966- if (Wnd <> BrowserToolBar.Handle) and (Wnd <> BrowserNameToolBar.Handle) then
8967- SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
8968- else
8969- Handled := False;
8970- end else begin
8971- Handled := False;
8972- end;
8973-// end else begin
8974-// SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (MousePos.X shl 16) or MousePos.Y );
8975-// end;
8976-} end;
8830+ Handled := False;
89778831 end;
89788832 end;
89798833
@@ -9010,10 +8864,9 @@ begin
90108864 ModifySelectList;
90118865 end else if Length( SelectComboBox.Text ) = 0 then
90128866 begin
9013- {* SelectComboBox.Textが空でも、入力途中でEscしたとか
9014- * 空のときにDelキーを押したとかなので、スレの絞込みを維持する。
9015- * (ここでは何もしない)
9016- *}
8867+ AllItemAction.Checked := True;
8868+ LogItemAction.Checked := False;
8869+ NewItemAction.Checked := False;
90178870 end else begin
90188871 // チラつくと嫌だから、一応押してあるときだけ処理する
90198872 if AllItemAction.Checked then
@@ -9648,26 +9501,25 @@ end;
96489501 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
96499502 Shift: TShiftState);
96509503 begin
9651- if not TTreeView(Sender).IsEditing then begin
9652- Case Key of
9653- VK_F2:
9654- begin
9655- FClickNode := FavoriteTreeView.Selected;
9656- FavoriteTreeViewRenameActionExecute( Sender );
9657- end;
9658- VK_DELETE:
9659- begin
9660- FClickNode := FavoriteTreeView.Selected;
9661- FavoriteTreeViewDeleteActionExecute( Sender );
9662- end;
9663- VK_RETURN:
9664- begin
9665- FavoriteClick( FavoriteTreeView.Selected );
9666- FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
9667- end;
9668- VK_SPACE:
9669- FavoriteTreeViewDblClick( Sender );
9504+
9505+ Case Key of
9506+ VK_F2:
9507+ begin
9508+ FClickNode := FavoriteTreeView.Selected;
9509+ FavoriteTreeViewRenameActionExecute( Sender );
9510+ end;
9511+ VK_DELETE:
9512+ begin
9513+ FClickNode := FavoriteTreeView.Selected;
9514+ FavoriteTreeViewDeleteActionExecute( Sender );
96709515 end;
9516+ VK_RETURN:
9517+ begin
9518+ FavoriteClick( FavoriteTreeView.Selected );
9519+ FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
9520+ end;
9521+ VK_SPACE:
9522+ FavoriteTreeViewDblClick( Sender );
96719523 end;
96729524
96739525 end;
@@ -10062,7 +9914,7 @@ begin
100629914 ThreadItem := FavThread.Item;
100639915
100649916 try
10065- s := ThreadItem.Title + #13#10 + ThreadItem.URL + #13#10;
9917+ s := ThreadItem.URL + #13#10 + ThreadItem.Title + #13#10;
100669918 if s <> '' then
100679919 Clipboard.AsText := s;
100689920 finally
@@ -10077,7 +9929,7 @@ begin
100779929 GikoSys.ReadSubjectFile(Board);
100789930
100799931 try
10080- s := Board.Title + #13#10 + Board.URL + #13#10;
9932+ s := Board.URL + #13#10 + Board.Title + #13#10;
100819933 if s <> '' then
100829934 Clipboard.AsText := s;
100839935 finally
@@ -10134,12 +9986,7 @@ procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
101349986 begin
101359987 if FDragWFirst <> true then begin
101369988 FDragWFirst := false;
10137-{
10138- end else if (abs( X - FMouseDownPos.X ) < Mouse.DragThreshold)
10139- and (abs( Y - FMouseDownPos.Y ) < Mouse.DragThreshold) then begin
10140-(*}
10141- end else begin
10142-//*)
9989+ end else if (X = FMouseDownPos.X) and (Y = FMouseDownPos.Y) then begin
101439990 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
101449991 if GikoSys.Setting.ListWidthState = glsMin then begin
101459992 BrowserMaxAndFocusAction.Execute;
@@ -10620,6 +10467,8 @@ begin
1062010467 end;
1062110468 // TreeView がクリックされた
1062210469 procedure TGikoForm.TreeClick( Node : TTreeNode );
10470+var
10471+ i: Integer;
1062310472 begin
1062410473
1062510474 if Node = nil then
@@ -10748,6 +10597,7 @@ end;
1074810597
1074910598 // ギコナビのメッセージループを横取りします
1075010599 procedure TGikoForm.HandleAppMessage(var Msg: TMsg; var Handled: Boolean);
10600+
1075110601 //var
1075210602 // key : Word;
1075310603 begin
@@ -11165,16 +11015,12 @@ begin
1116511015 SelectListItem(List);
1116611016 for i := 0 to List.Count - 1 do begin
1116711017 if TObject(List[i]) is TThreadItem then begin
11168- if (TThreadItem(List[i]).UnRead) then begin
11169- TThreadItem(List[i]).UnRead := false;
11170- TThreadItem(List[i]).ParentBoard.UnRead := TThreadItem(List[i]).ParentBoard.UnRead - 1;
11171- end;
11018+ TThreadItem(List[i]).UnRead := false;
11019+ TThreadItem(List[i]).ParentBoard.UnRead := TThreadItem(List[i]).ParentBoard.UnRead - 1;
1117211020 end;
1117311021 end;
1117411022 if TreeView.Visible then
1117511023 TreeView.Refresh;
11176- if ListView.Visible then
11177- ListView.Refresh;
1117811024 finally
1117911025 List.Free;
1118011026 end;
@@ -11190,16 +11036,12 @@ begin
1119011036 SelectListItem(List);
1119111037 for i := 0 to List.Count - 1 do begin
1119211038 if TObject(List[i]) is TThreadItem then begin
11193- if (TThreadItem(List[i]).IsLogFile) and (not TThreadItem(List[i]).UnRead) then begin
11194- TThreadItem(List[i]).UnRead := true;
11195- TThreadItem(List[i]).ParentBoard.UnRead := TThreadItem(List[i]).ParentBoard.UnRead + 1;
11196- end;
11039+ TThreadItem(List[i]).UnRead := true;
11040+ TThreadItem(List[i]).ParentBoard.UnRead := TThreadItem(List[i]).ParentBoard.UnRead + 1;
1119711041 end;
1119811042 end;
1119911043 if TreeView.Visible then
1120011044 TreeView.Refresh;
11201- if ListView.Visible then
11202- ListView.Refresh;
1120311045 finally
1120411046 List.Free;
1120511047 end;
@@ -11211,7 +11053,9 @@ var
1121111053 i: Integer;
1121211054 begin
1121311055 for i := BROWSER_COUNT - 1 downto 0 do begin
11056+ SendMessage(TWebBrowser(FBrowsers[i]).Handle, WM_SETREDRAW, 0, 0); //描画停止
1121411057 SetWindowPos(TWebBrowser(FBrowsers[i]).Handle, HWND_NOTOPMOST, 0, 0, NewWidth, NewHeight, SWP_NOMOVE + SWP_NOZORDER);
11058+ SendMessage(TWebBrowser(FBrowsers[i]).Handle, WM_SETREDRAW, 1, 0); //描画
1121511059 end;
1121611060 end;
1121711061
@@ -11350,7 +11194,7 @@ end;
1135011194 procedure TGikoForm.TabsSaveToFileActionExecute(Sender: TObject);
1135111195 var
1135211196 SaveTabList: TStringList;
11353- Result: Boolean;
11197+ Result: Boolean;
1135411198 begin
1135511199 SaveTabList := TStringList.Create;
1135611200 try
@@ -11751,44 +11595,6 @@ begin
1175111595 SetActiveList( FActiveList );
1175211596
1175311597 end;
11754-//指定した番号のレスにjumpするAction
11755-procedure TGikoForm.JumpToNumOfResActionExecute(Sender: TObject);
11756-var
11757- str: string;
11758- res: integer;
11759-begin
11760- str := '1';
11761- if( InputQuery('指定した番号のレスに飛ぶ', '番号を入力してください', str) ) then begin
11762- str := ZenToHan(str);
11763- res := StrToIntDef(str, -1);
11764- if (res > 0) and (res <= GetActiveContent.Count) then begin
11765- BrowserMovement(IntToStr(res), FActiveContent);
11766- SetFocusForBrowserAction.Execute;
11767- end else if res > GetActiveContent.Count then begin
11768- BrowserMovement(IntToStr(GetActiveContent.Count), FActiveContent);
11769- SetFocusForBrowserAction.Execute;
11770- end;
11771- end;
11772-end;
11773-
11774-procedure TGikoForm.JumpToNumOfResActionUpdate(Sender: TObject);
11775-begin
11776- JumpToNumOfResAction.Enabled := (GetActiveContent <> nil) and (GetActiveContent.IsLogFile);
11777-end;
11778-
11779-procedure TGikoForm.FavoriteTreeViewCollapseActionExecute(Sender: TObject);
11780-var
11781- node : TTreeNode;
11782-begin
11783-
11784- node := FavoriteTreeView.Items.GetFirstNode;
11785- while node <> nil do begin
11786- if node.HasChildren then
11787- node.Expanded := False;
11788- node := node.GetNext;
11789- end;
11790-
11791-end;
1179211598
1179311599 initialization
1179411600 OleInitialize(nil);
--- a/GikoSystem.pas
+++ b/GikoSystem.pas
@@ -187,7 +187,7 @@ type
187187 function Is2chHost(Host: string): Boolean;
188188 function Parse2chURL(const url: string; const path: string; const document: string; var BBSID: string; var BBSKey: string): Boolean;
189189 function Parse2chURL2(URL: string): TPathRec;
190- procedure ParseURI(const URL : string; var Protocol, Host, Path, Document, Port, Bookmark: string);
190+ procedure ParseURI(var URL, Protocol, Host, Path, Document, Port, Bookmark: string);
191191 function GetVersionBuild: Integer;
192192 function GetBrowsableThreadURL( inURL : string ) : string;
193193 function GetThreadURL2BoardURL( inURL : string ) : string;
@@ -3424,7 +3424,7 @@ begin
34243424 end;
34253425 end;
34263426
3427-procedure TGikoSys.ParseURI(const URL : string; var Protocol, Host, Path, Document, Port, Bookmark: string);
3427+procedure TGikoSys.ParseURI(var URL, Protocol, Host, Path, Document, Port, Bookmark: string);
34283428 var
34293429 URI: TIdURI;
34303430 begin
--- a/GikoXMLDoc.pas
+++ b/GikoXMLDoc.pas
@@ -157,6 +157,7 @@ procedure IXMLNode.AddAttribute(
157157 const Value : string
158158 );
159159 var
160+ t : Integer;
160161 index : Integer;
161162 begin
162163
@@ -297,12 +298,15 @@ var
297298
298299 found : PChar;
299300 tag : string;
301+ tagLen : Integer;
300302
301303 isClosed : boolean;
302304
303305 nodeName : string;
304306 attributeName : string;
305307 attributeValue : string;
308+
309+ t, t2 : Integer;
306310 label
307311 NextNode;
308312 begin
--- a/ItemDownload.pas
+++ b/ItemDownload.pas
@@ -156,7 +156,9 @@ var
156156 Idx: Integer;
157157 ATitle: string;
158158 DownloadResult: Boolean;
159+ foundPos: Integer;
159160 boardPlugIn : TBoardPlugIn;
161+ listContent : string;
160162 lastContent : string;
161163 logFile : TFileStream;
162164 adjustMargin : Integer;
@@ -1259,10 +1261,8 @@ begin
12591261 OldCnt := Body.IndexOf(oldBody.Strings[ LastIdx ]) + 1;
12601262 until ( OldCnt <> 0 ) or (LastIdx = 0);
12611263
1262- if OldCnt >= Body.Count then OldCnt := Body.Count - 1;
12631264 NewRes := Body.Count - OldCnt;
12641265
1265-
12661266 finally
12671267 oldBody.Free;
12681268 end;
@@ -1299,10 +1299,8 @@ begin
12991299 ThreadItem.AllResCount := ThreadItem.Count;
13001300 ThreadItem.IsLogFile := True;
13011301 ThreadItem.RoundDate := Now;
1302- if not ThreadItem.UnRead then begin
1303- ThreadItem.UnRead := True;
1304- ThreadItem.ParentBoard.UnRead := ThreadItem.ParentBoard.UnRead + 1;
1305- end;
1302+ ThreadItem.UnRead := True;
1303+ ThreadItem.ParentBoard.UnRead := ThreadItem.ParentBoard.UnRead + 1;
13061304 // if ThreadItem.RoundNo = 6 then
13071305 // ThreadItem.RoundNo := 0;
13081306
--- a/KuroutSetting.dfm
+++ b/KuroutSetting.dfm
@@ -1,6 +1,6 @@
11 object KuroutOption: TKuroutOption
2- Left = 43
3- Top = 114
2+ Left = 260
3+ Top = 167
44 Width = 525
55 Height = 457
66 Caption = #35443#32048#35373#23450
@@ -140,182 +140,6 @@ object KuroutOption: TKuroutOption
140140 TabOrder = 3
141141 end
142142 end
143- object GroupBox1: TGroupBox
144- Left = 14
145- Top = 232
146- Width = 475
147- Height = 57
148- Caption = #12395#12385#12419#12435#35486#26696#20869#27231#33021
149- TabOrder = 2
150- Visible = False
151- object Label5: TLabel
152- Left = 8
153- Top = 16
154- Width = 234
155- Height = 12
156- Caption = #12395#12385#12419#12435#35486#12434#20351#12387#12390#12462#12467#12490#12499#12434#12469#12509#12540#12488#12375#12414#12377#12290
157- end
158- object GengoSupport: TCheckBox
159- Left = 8
160- Top = 32
161- Width = 201
162- Height = 17
163- Caption = #12395#12385#12419#12435#35486#26696#20869#27231#33021#12434#26377#21177#12395#12377#12427
164- TabOrder = 0
165- end
166- end
167- end
168- object ColumnTabSheet: TTabSheet
169- Caption = #35443#32048#35373#23450'2'
170- ImageIndex = 1
171- object CategoryColumnGroupBox: TGroupBox
172- Left = 8
173- Top = 16
174- Width = 481
175- Height = 145
176- Caption = #34920#31034#12459#12521#12512#35373#23450'('#12459#12486#12468#12522#12540')'
177- TabOrder = 0
178- object Label1: TLabel
179- Left = 80
180- Top = 16
181- Width = 60
182- Height = 12
183- Caption = #38750#34920#31034#38917#30446
184- end
185- object Label2: TLabel
186- Left = 312
187- Top = 16
188- Width = 48
189- Height = 12
190- Caption = #34920#31034#38917#30446
191- end
192- object CUnVisibledListBox: TListBox
193- Left = 32
194- Top = 33
195- Width = 161
196- Height = 65
197- ItemHeight = 12
198- TabOrder = 0
199- end
200- object CVisibledListBox: TListBox
201- Left = 264
202- Top = 33
203- Width = 161
204- Height = 65
205- ItemHeight = 12
206- TabOrder = 1
207- end
208- object CAddButton: TButton
209- Left = 200
210- Top = 38
211- Width = 57
212- Height = 25
213- Caption = '>>'
214- TabOrder = 2
215- OnClick = CAddButtonClick
216- end
217- object CDeleteButton: TButton
218- Left = 200
219- Top = 70
220- Width = 57
221- Height = 25
222- Caption = '<<'
223- TabOrder = 3
224- OnClick = CDeleteButtonClick
225- end
226- object CUpButton: TButton
227- Left = 264
228- Top = 104
229- Width = 75
230- Height = 25
231- Caption = #19978#12408
232- TabOrder = 4
233- OnClick = CUpButtonClick
234- end
235- object CDownButton: TButton
236- Left = 352
237- Top = 104
238- Width = 75
239- Height = 25
240- Caption = #19979#12504
241- TabOrder = 5
242- OnClick = CDownButtonClick
243- end
244- end
245- object BoardColumnGroupBox: TGroupBox
246- Left = 8
247- Top = 168
248- Width = 481
249- Height = 185
250- Caption = #34920#31034#12459#12521#12512#35373#23450'('#26495')'
251- TabOrder = 1
252- object Label3: TLabel
253- Left = 80
254- Top = 16
255- Width = 60
256- Height = 12
257- Caption = #38750#34920#31034#38917#30446
258- end
259- object Label4: TLabel
260- Left = 312
261- Top = 16
262- Width = 48
263- Height = 12
264- Caption = #34920#31034#38917#30446
265- end
266- object BUnVisibledListBox: TListBox
267- Left = 32
268- Top = 31
269- Width = 161
270- Height = 113
271- ItemHeight = 12
272- TabOrder = 0
273- end
274- object BVisibledListBox: TListBox
275- Left = 264
276- Top = 31
277- Width = 161
278- Height = 113
279- ItemHeight = 12
280- TabOrder = 1
281- end
282- object BAddButton: TButton
283- Left = 200
284- Top = 48
285- Width = 57
286- Height = 25
287- Caption = '>>'
288- TabOrder = 2
289- OnClick = BAddButtonClick
290- end
291- object BDeleteButton: TButton
292- Left = 200
293- Top = 80
294- Width = 57
295- Height = 25
296- Caption = '<<'
297- TabOrder = 3
298- OnClick = BDeleteButtonClick
299- end
300- object BUpButton: TButton
301- Left = 264
302- Top = 152
303- Width = 75
304- Height = 25
305- Caption = #19978#12408
306- TabOrder = 4
307- OnClick = BUpButtonClick
308- end
309- object BDownButton: TButton
310- Left = 352
311- Top = 152
312- Width = 75
313- Height = 25
314- Caption = #19979#12504
315- TabOrder = 5
316- OnClick = BDownButtonClick
317- end
318- end
319143 end
320144 end
321145 object OkBotton: TButton
--- a/KuroutSetting.pas
+++ b/KuroutSetting.pas
@@ -8,67 +8,35 @@ uses
88
99 type
1010 TKuroutOption = class(TForm)
11- PageControl1: TPageControl;
12- TabSheet1: TTabSheet;
13- GroupBox11: TGroupBox;
14- Label17: TLabel;
15- Label18: TLabel;
16- RecvBufferSize: TEdit;
17- ProxyProtocolCheckBox: TCheckBox;
18- ProtocolCheckBox: TCheckBox;
19- GroupBox13: TGroupBox;
20- Label24: TLabel;
21- Label25: TLabel;
22- PostTimeLabel: TLabel;
23- Label27: TLabel;
24- PostTimeCheckBox: TCheckBox;
25- PostTimeEdit: TEdit;
26- PutPostTimeRadioButton: TRadioButton;
27- BackPostTimeRadioButton: TRadioButton;
28- OkBotton: TButton;
29- CancelBotton: TButton;
30- ApplyButton: TButton;
31- ColumnTabSheet: TTabSheet;
32- CategoryColumnGroupBox: TGroupBox;
33- CUnVisibledListBox: TListBox;
34- CVisibledListBox: TListBox;
35- CAddButton: TButton;
36- CDeleteButton: TButton;
37- BoardColumnGroupBox: TGroupBox;
38- BUnVisibledListBox: TListBox;
39- BVisibledListBox: TListBox;
40- BAddButton: TButton;
41- BDeleteButton: TButton;
42- Label1: TLabel;
43- Label2: TLabel;
44- Label3: TLabel;
45- Label4: TLabel;
46- CUpButton: TButton;
47- CDownButton: TButton;
48- BUpButton: TButton;
49- BDownButton: TButton;
50- GroupBox1: TGroupBox;
51- GengoSupport: TCheckBox;
52- Label5: TLabel;
53- procedure OkBottonClick(Sender: TObject);
54- procedure FormCreate(Sender: TObject);
55- procedure CDeleteButtonClick(Sender: TObject);
56- procedure CAddButtonClick(Sender: TObject);
57- procedure BAddButtonClick(Sender: TObject);
58- procedure BDeleteButtonClick(Sender: TObject);
59- procedure CUpButtonClick(Sender: TObject);
60- procedure CDownButtonClick(Sender: TObject);
61- procedure BUpButtonClick(Sender: TObject);
62- procedure BDownButtonClick(Sender: TObject);
11+ PageControl1: TPageControl;
12+ TabSheet1: TTabSheet;
13+ GroupBox11: TGroupBox;
14+ Label17: TLabel;
15+ Label18: TLabel;
16+ RecvBufferSize: TEdit;
17+ ProxyProtocolCheckBox: TCheckBox;
18+ ProtocolCheckBox: TCheckBox;
19+ GroupBox13: TGroupBox;
20+ Label24: TLabel;
21+ Label25: TLabel;
22+ PostTimeLabel: TLabel;
23+ Label27: TLabel;
24+ PostTimeCheckBox: TCheckBox;
25+ PostTimeEdit: TEdit;
26+ PutPostTimeRadioButton: TRadioButton;
27+ BackPostTimeRadioButton: TRadioButton;
28+ OkBotton: TButton;
29+ CancelBotton: TButton;
30+ ApplyButton: TButton;
31+ procedure OkBottonClick(Sender: TObject);
32+ procedure FormCreate(Sender: TObject);
6333 private
64- { Private 宣言 }
34+ { Private 宣言 }
6535 procedure SetValue;
6636 procedure SaveSetting;
6737 procedure RecvBufferSizeExit(Sender: TObject);
6838 procedure PostTimeEditExit(Sender: TObject);
6939 procedure PostTimeCheckBoxClick(Sender: TObject);
70- procedure SetColumnData();
71- procedure PostColumnData();
7240 public
7341 { Public 宣言 }
7442 end;
@@ -78,9 +46,6 @@ var
7846
7947 implementation
8048
81-uses
82- Giko, Setting;
83-
8449 {$R *.dfm}
8550
8651 procedure TKuroutOption.SetValue;
@@ -99,10 +64,6 @@ begin
9964 PutPostTimeRadioButton.Checked := True
10065 else
10166 BackPostTimeRadioButton.Checked := True;
102-
103- SetColumnData();
104-
105- PageControl1.ActivePageIndex := GikoSys.Setting.KuroutSettingTabIndex;
10667 end;
10768
10869 procedure TKuroutOption.SaveSetting;
@@ -120,10 +81,6 @@ begin
12081 else
12182 GikoSys.Setting.TimeAdjustSec := 0;
12283 GikoSys.Setting.TimeAdjust := PutPostTimeRadioButton.Checked;
123-
124- GikoSys.Setting.GengoSupport := GengoSupport.Checked;
125-
126- GikoSys.Setting.KuroutSettingTabIndex := PageControl1.ActivePageIndex;
12784 end;
12885
12986 procedure TKuroutOption.RecvBufferSizeExit(Sender: TObject);
@@ -152,7 +109,6 @@ procedure TKuroutOption.OkBottonClick(Sender: TObject);
152109 begin
153110 RecvBufferSizeExit(Sender);
154111 PostTimeEditExit(Sender);
155- PostColumnData();
156112 SaveSetting;
157113 end;
158114
@@ -162,191 +118,5 @@ begin
162118 PostTimeCheckBoxClick(Sender);
163119
164120 end;
165-procedure TKuroutOption.SetColumnData();
166-var
167- i, j : Integer;
168- flag : Boolean;
169-begin
170-
171- //===== 板リスト =====
172- for i := 0 to GikoSys.Setting.CategoryColumnOrder.Count - 1 do begin
173- for j := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
174- if GikoSys.Setting.CategoryColumnOrder[ i ] = TGikoCategoryColumnID( j ) then begin
175- CVisibledListBox.AddItem(GikoCategoryColumnCaption[ j ], nil);
176- break;
177- end;
178- end;
179- end;
180-
181- for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
182- flag := false;
183- for j := 0 to GikoSys.Setting.CategoryColumnOrder.Count - 1 do begin
184- if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
185- flag := true;
186- break;
187- end;
188- end;
189- if not flag then
190- CUnVisibledListBox.AddItem(GikoCategoryColumnCaption[ i ], nil);
191- end;
192-
193- //===== スレリスト =====
194- for i := 0 to GikoSys.Setting.BoardColumnOrder.Count - 1 do begin
195- for j := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
196- if GikoSys.Setting.BoardColumnOrder[ i ] = TGikoBoardColumnID( j ) then begin
197- BVisibledListBox.AddItem(GikoBoardColumnCaption[ j ], nil);
198- Break;
199- end;
200- end;
201- end;
202-
203- for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
204- flag := false;
205- for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
206- if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
207- flag := true;
208- Break;
209- end;
210- end;
211- if not flag then
212- BUnVisibledListBox.AddItem(GikoBoardColumnCaption[ i ], nil);
213-
214- end;
215-end;
216-procedure TKuroutOption.CDeleteButtonClick(Sender: TObject);
217-var
218- i: Integer;
219-begin
220- for i := 0 to CVisibledListBox.Count - 1 do begin
221- if CVisibledListBox.Selected[i] then begin
222- CUnVisibledListBox.AddItem( CVisibledListBox.Items.Strings[ i ], nil);
223- CVisibledListBox.DeleteSelected;
224- break;
225- end;
226- end;
227-end;
228-
229-procedure TKuroutOption.CAddButtonClick(Sender: TObject);
230-var
231- i: Integer;
232-begin
233- for i := 0 to CUnVisibledListBox.Count - 1 do begin
234- if CUnVisibledListBox.Selected[i] then begin
235- CVisibledListBox.AddItem( CUnVisibledListBox.Items.Strings[ i ], nil);
236- CUnVisibledListBox.DeleteSelected;
237- break;
238- end;
239- end;
240-end;
241-
242-procedure TKuroutOption.BAddButtonClick(Sender: TObject);
243-var
244- i: Integer;
245-begin
246- for i := 0 to BUnVisibledListBox.Count - 1 do begin
247- if BUnVisibledListBox.Selected[i] then begin
248- BVisibledListBox.AddItem( BUnVisibledListBox.Items.Strings[ i ], nil);
249- BUnVisibledListBox.DeleteSelected;
250- break;
251- end;
252- end;
253-end;
254-
255-procedure TKuroutOption.BDeleteButtonClick(Sender: TObject);
256-var
257- i: Integer;
258-begin
259- for i := 0 to BVisibledListBox.Count - 1 do begin
260- if BVisibledListBox.Selected[i] then begin
261- BUnVisibledListBox.AddItem( BVisibledListBox.Items.Strings[ i ], nil);
262- BVisibledListBox.DeleteSelected;
263- break;
264- end;
265- end;
266-end;
267-
268-procedure TKuroutOption.CUpButtonClick(Sender: TObject);
269-var
270- i: Integer;
271-begin
272- for i := 1 to CVisibledListBox.Count - 1 do begin
273- if CVisibledListBox.Selected[i] then begin
274- CVisibledListBox.Items.Exchange(i, i -1);
275- break;
276- end;
277- end;
278-end;
279-
280-procedure TKuroutOption.CDownButtonClick(Sender: TObject);
281-var
282- i: Integer;
283-begin
284- for i := 0 to CVisibledListBox.Count - 2 do begin
285- if CVisibledListBox.Selected[i] then begin
286- CVisibledListBox.Items.Exchange(i, i + 1);
287- break;
288- end;
289- end;
290-end;
291-
292-procedure TKuroutOption.BUpButtonClick(Sender: TObject);
293-var
294- i: Integer;
295-begin
296- for i := 1 to BVisibledListBox.Count - 1 do begin
297- if BVisibledListBox.Selected[i] then begin
298- BVisibledListBox.Items.Exchange(i, i -1);
299- break;
300- end;
301- end;
302-end;
303-
304-procedure TKuroutOption.BDownButtonClick(Sender: TObject);
305-var
306- i: Integer;
307-begin
308- for i := 0 to BVisibledListBox.Count - 2 do begin
309- if BVisibledListBox.Selected[i] then begin
310- BVisibledListBox.Items.Exchange(i, i + 1);
311- break;
312- end;
313- end;
314-end;
315-
316-
317-procedure TKuroutOption.PostColumnData();
318-var
319- i, j : Integer;
320-begin
321- GikoForm.ActiveListColumnSave;
322-
323- //===== 板リスト =====
324- for i := GikoSys.Setting.CategoryColumnOrder.Count -1 downto 1 do
325- GikoSys.Setting.CategoryColumnOrder.Delete(i);
326-
327- for i := 0 to CVisibledListBox.Count - 1 do begin
328- for j := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
329- if CVisibledListBox.Items.Strings[ i ] = GikoCategoryColumnCaption[ j ] then begin
330- GikoSys.Setting.CategoryColumnOrder.Add( TGikoCategoryColumnID(j) );
331- break;
332- end;
333- end;
334- end;
335-
336- //===== スレリスト =====
337- for i := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 1 do
338- GikoSys.Setting.BoardColumnOrder.Delete(i);
339-
340- for i := 0 to BVisibledListBox.Count - 1 do begin
341- for j := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
342- if BVisibledListBox.Items.Strings[ i ] = GikoBoardColumnCaption[ j ] then begin
343- GikoSys.Setting.BoardColumnOrder.Add( TGikoBoardColumnID(j) );
344- Break;
345- end;
346- end;
347- end;
348- //スレ一覧の描画の更新
349- GikoForm.SetActiveList(GikoForm.ActiveList);
350-end;
351121
352122 end.
--- a/Option.dfm
+++ b/Option.dfm
@@ -1,6 +1,6 @@
11 object OptionDialog: TOptionDialog
2- Left = 188
3- Top = 128
2+ Left = 410
3+ Top = 236
44 BorderStyle = bsDialog
55 Caption = #12458#12503#12471#12519#12531
66 ClientHeight = 428
@@ -60,9 +60,9 @@ object OptionDialog: TOptionDialog
6060 Top = 4
6161 Width = 509
6262 Height = 389
63- ActivePage = TabSheet3
63+ ActivePage = ThreadSheet
6464 MultiLine = True
65- TabIndex = 3
65+ TabIndex = 4
6666 TabOrder = 3
6767 OnChange = OptionTabChange
6868 object ConnectSheet: TTabSheet
@@ -252,7 +252,7 @@ object OptionDialog: TOptionDialog
252252 Top = 43
253253 Width = 417
254254 Height = 20
255- ItemHeight = 12
255+ ItemHeight = 0
256256 TabOrder = 0
257257 Text = 'BoardURLComboBox'
258258 end
@@ -654,7 +654,7 @@ object OptionDialog: TOptionDialog
654654 Left = 12
655655 Top = 8
656656 Width = 477
657- Height = 41
657+ Height = 64
658658 Caption = #34920#31034#35373#23450
659659 TabOrder = 0
660660 object ThreadListIconCheckBox: TCheckBox
@@ -665,10 +665,18 @@ object OptionDialog: TOptionDialog
665665 Caption = #12473#12524#12483#12489#26356#26032#12450#12452#12467#12531#12434#34920#31034#12377#12427'(&I)'
666666 TabOrder = 0
667667 end
668+ object NonAcquiredCountCheckBox: TCheckBox
669+ Left = 12
670+ Top = 40
671+ Width = 217
672+ Height = 17
673+ Caption = #21462#24471#25968#12398#20195#12431#12426#12395#26410#21462#24471#25968#12434#34920#31034#12377#12427
674+ TabOrder = 1
675+ end
668676 end
669677 object GroupBox16: TGroupBox
670678 Left = 12
671- Top = 52
679+ Top = 76
672680 Width = 477
673681 Height = 64
674682 Caption = #12473#12524#20316#25104#26085#26178#34920#31034#35373#23450
@@ -692,7 +700,7 @@ object OptionDialog: TOptionDialog
692700 end
693701 object GroupBox5: TGroupBox
694702 Left = 12
695- Top = 121
703+ Top = 145
696704 Width = 477
697705 Height = 86
698706 Caption = #12502#12521#12454#12470#12398#26368#22823#21270
@@ -720,7 +728,7 @@ object OptionDialog: TOptionDialog
720728 end
721729 object GroupBox17: TGroupBox
722730 Left = 12
723- Top = 212
731+ Top = 236
724732 Width = 477
725733 Height = 63
726734 Caption = #12502#12521#12454#12470#12479#12502#38750#34920#31034#26178#35373#23450
@@ -758,9 +766,9 @@ object OptionDialog: TOptionDialog
758766 end
759767 object GroupBox18: TGroupBox
760768 Left = 12
761- Top = 278
769+ Top = 302
762770 Width = 477
763- Height = 43
771+ Height = 41
764772 Caption = 'dat'#33853#12385#12473#12524#12477#12540#12488#38918
765773 TabOrder = 4
766774 object DatOchiSortCombo: TComboBox
@@ -778,9 +786,7 @@ object OptionDialog: TOptionDialog
778786 #21462#24471#26085#26178'('#26119#38918')'
779787 #21462#24471#26085#26178'('#38477#38918')'
780788 #12473#12524#20316#25104#26085#26178'('#26119#38918')'
781- #12473#12524#20316#25104#26085#26178'('#38477#38918')'
782- #12473#12524#26368#32066#26356#26032#26085#26178#65288#26119#38918#65289
783- #12473#12524#26368#32066#26356#26032#26085#26178#65288#38477#38918#65289)
789+ #12473#12524#20316#25104#26085#26178'('#38477#38918')')
784790 end
785791 end
786792 end
--- a/Option.pas
+++ b/Option.pas
@@ -90,6 +90,7 @@ type
9090 TabSheet3: TTabSheet;
9191 GroupBox9: TGroupBox;
9292 ThreadListIconCheckBox: TCheckBox;
93+ NonAcquiredCountCheckBox: TCheckBox;
9394 GroupBox16: TGroupBox;
9495 CreationTimeLogsCheckBox: TCheckBox;
9596 FutureThreadCheckBox: TCheckBox;
@@ -765,32 +766,28 @@ begin
765766
766767 //スレッド一覧更新アイコン
767768 ThreadListIconCheckBox.Checked := GikoSys.Setting.ListIconVisible;
769+ NonAcquiredCountCheckBox.Checked := GikoSys.Setting.NonAcquiredCount;
768770 CreationTimeLogsCheckBox.Checked := GikoSys.Setting.CreationTimeLogs;
769771 FutureThreadCheckBox.Checked := GikoSys.Setting.FutureThread;
770772 SelectIntervalEdit.Text := IntToStr(GikoSys.Setting.SelectInterval);
771773
772774 //dat落ちスレソート順
773- case TGikoBoardColumnID( GikoSys.Setting.DatOchiSortIndex ) of
774- gbcTitle:
775+ case GikoSys.Setting.DatOchiSortIndex of
776+ 0:
775777 if GikoSys.Setting.DatOchiSortOrder then
776778 DatOchiSortCombo.ItemIndex := 1
777779 else
778780 DatOchiSortCombo.ItemIndex := 2;
779- gbcRoundDate://gbcLastModified:
781+ 6:
780782 if GikoSys.Setting.DatOchiSortOrder then
781783 DatOchiSortCombo.ItemIndex := 3
782784 else
783785 DatOchiSortCombo.ItemIndex := 4;
784- gbcCreated:
786+ 7:
785787 if GikoSys.Setting.DatOchiSortOrder then
786788 DatOchiSortCombo.ItemIndex := 5
787789 else
788790 DatOchiSortCombo.ItemIndex := 6;
789- gbcLastModified:
790- if GikoSys.Setting.DatOchiSortOrder then
791- DatOchiSortCombo.ItemIndex := 7
792- else
793- DatOchiSortCombo.ItemIndex := 8;
794791 else
795792 DatOchiSortCombo.ItemIndex := 0;
796793 end;
@@ -805,6 +802,7 @@ begin
805802
806803 //TabAutoLoad
807804 TabLoadSave.Checked := Gikosys.Setting.TabAutoLoadSave;
805+
808806 end;
809807
810808 procedure TOptionDialog.SaveSetting;
@@ -997,6 +995,11 @@ begin
997995 //スレッド一覧更新アイコン
998996 GikoSys.Setting.ListIconVisible := ThreadListIconCheckBox.Checked;
999997
998+ //取得数、未取得数
999+ if (GikoSys.Setting.NonAcquiredCount <> NonAcquiredCountCheckBox.Checked) and (GikoForm.ActiveList Is TBoard) then
1000+ FRepaintList := true;
1001+ GikoSys.Setting.NonAcquiredCount := NonAcquiredCountCheckBox.Checked;
1002+
10001003 GikoSys.Setting.CreationTimeLogs := CreationTimeLogsCheckBox.Checked;
10011004 GikoSys.Setting.FutureThread := FutureThreadCheckBox.Checked;
10021005 if StrToIntDef(SelectIntervalEdit.Text, 110) > 55 then
@@ -1009,36 +1012,28 @@ begin
10091012 0: GikoSys.Setting.DatOchiSortIndex := -1; //並び替えしない
10101013 1: begin //スレ番号(昇順)
10111014 GikoSys.Setting.DatOchiSortOrder := true;
1012- GikoSys.Setting.DatOchiSortIndex := Ord( gbcTitle );
1015+ GikoSys.Setting.DatOchiSortIndex := 0;
10131016 end;
10141017 2: begin //スレ番号(降順)
10151018 GikoSys.Setting.DatOchiSortOrder := false;
1016- GikoSys.Setting.DatOchiSortIndex := Ord( gbcTitle );
1019+ GikoSys.Setting.DatOchiSortIndex := 0;
10171020 end;
10181021 3: begin //取得日時(昇順)
10191022 GikoSys.Setting.DatOchiSortOrder := true;
1020- GikoSys.Setting.DatOchiSortIndex := Ord( gbcRoundDate );{gbcLastModified}
1023+ GikoSys.Setting.DatOchiSortIndex := 6;
10211024 end;
10221025 4: begin //取得日時(降順)
10231026 GikoSys.Setting.DatOchiSortOrder := false;
1024- GikoSys.Setting.DatOchiSortIndex := Ord( gbcRoundDate );{gbcLastModified}
1027+ GikoSys.Setting.DatOchiSortIndex := 6;
10251028 end;
10261029 5: begin //スレ作成日時(昇順)
10271030 GikoSys.Setting.DatOchiSortOrder := true;
1028- GikoSys.Setting.DatOchiSortIndex := Ord( gbcCreated );
1031+ GikoSys.Setting.DatOchiSortIndex := 7;
10291032 end;
10301033 6: begin //スレ作成日時(降順)
10311034 GikoSys.Setting.DatOchiSortOrder := false;
1032- GikoSys.Setting.DatOchiSortIndex := Ord( gbcCreated );
1035+ GikoSys.Setting.DatOchiSortIndex := 7;
10331036 end;
1034- 7: begin //スレ最終更新日時(昇順)
1035- GikoSys.Setting.DatOchiSortOrder := true;
1036- GikoSys.Setting.DatOchiSortIndex := Ord( gbcLastModified );{gbcLastModified}
1037- end;
1038- 8: begin //スレ最終更新日時(降順)
1039- GikoSys.Setting.DatOchiSortOrder := false;
1040- GikoSys.Setting.DatOchiSortIndex := Ord( gbcLastModified );{gbcLastModified}
1041- end;
10421037 end;
10431038
10441039 GikoSys.Setting.WriteSystemSettingFile;
--- a/Setting.pas
+++ b/Setting.pas
@@ -67,7 +67,7 @@ type
6767 procedure SetItem( index : integer; value : TGikoBBSColumnID);
6868 public
6969 constructor Create;
70- destructor Destroy; override;
70+ destructor Destroy;
7171 function Add( value : TGikoBBSColumnID ) : Integer;
7272 property Items[index : integer]: TGikoBBSColumnID read GetItem write SetItem; default;
7373 end;
@@ -83,21 +83,21 @@ type
8383 procedure SetItem( index : integer; value : TGikoCategoryColumnID);
8484 public
8585 constructor Create;
86- destructor Destroy; override;
86+ destructor Destroy;
8787 function Add( value : TGikoCategoryColumnID ) : Integer;
8888 property Items[index : integer]: TGikoCategoryColumnID read GetItem write SetItem; default;
8989 end;
9090 /// スレリストのカラム ID
9191 type TGikoBoardColumnID = (gbcTitle, gbcAllCount, gbcLocalCount, gbcNonAcqCount,
92- gbcNewCount, gbcUnReadCount, gbcRoundName, gbcRoundDate, gbcCreated, gbcLastModified );{gbcLastModified,}
92+ gbcNewCount, gbcUnReadCount, gbcRoundName, gbcLastModified, gbcCreated );
9393 /// スレリストのカラム名
94- const GikoBoardColumnCaption : array[0..9] of string =
94+ const GikoBoardColumnCaption : array[0..8] of string =
9595 ( 'スレッド名', 'カウント', '取得', '未取得', '新着',
96- '未読', '巡回予約', '取得日時', 'スレ作成日時', '最終更新日時' );
97- const GikoBoardColumnAlignment : array[0..9] of TAlignment = (
96+ '未読', '巡回予約', '取得日時', 'スレ作成日時' );
97+ const GikoBoardColumnAlignment : array[0..8] of TAlignment = (
9898 taLeftJustify, taRightJustify, taRightJustify, taRightJustify,
9999 taRightJustify, taRightJustify, taLeftJustify, taLeftJustify,
100- taLeftJustify, taLeftJustify);
100+ taLeftJustify );
101101 /// スレリストカラム配列
102102 type TGikoBoardColumnList = class( TList )
103103 private
@@ -105,7 +105,7 @@ type
105105 procedure SetItem( index : integer; value : TGikoBoardColumnID);
106106 public
107107 constructor Create;
108- destructor Destroy; override;
108+ destructor Destroy;
109109 function Add( value : TGikoBoardColumnID ) : Integer;
110110 property Items[index : integer]: TGikoBoardColumnID read GetItem write SetItem; default;
111111 end;
@@ -272,7 +272,7 @@ type
272272 //リストカラムヘッダーサイズ
273273 FBBSColumnWidth: array[0..0] of Integer;
274274 FCategoryColumnWidth: array[0..2] of Integer;
275- FBoardColumnWidth: array[0..9] of Integer;
275+ FBoardColumnWidth: array[0..8] of Integer;
276276
277277 /// カテゴリリストカラム順序
278278 FBBSColumnOrder : TGikoBBSColumnList;
@@ -346,6 +346,8 @@ type
346346
347347 //スレッド一覧更新アイコン表示
348348 FListIconVisible: Boolean;
349+ //取得数ではなく未取得を表示する
350+ FNonAcquiredCount: Boolean;
349351
350352 //スレッド一覧でLogのあるスレッドのみスレ作成日を表示するか
351353 FCreationTimeLogs: Boolean;
@@ -390,19 +392,12 @@ type
390392
391393 //Tab自動保存
392394 FTabAutoLoadSave : Boolean;
393-
394- //にちゃん語案内サポート機能
395- F2chSupport : Boolean;
396-
397395 // エディタ
398396 FSpaceToNBSP : Boolean; ///< 半角スペース、Tab を &nbsp; に置換
399397 FAmpToCharRef : Boolean; ///< '&' を &amp; に置換
400398
401399 //ブラウザタブ非表示の時のスレ一覧でのカーソルキー移動の無反応時間
402400 FSelectInterval : Integer;
403-
404- //KuroutSettingTab 詳細設定タブのActiveTab
405- FKuroutSettingTabIndex: Integer;
406401
407402 function GetMainCoolSet(Index: Integer): TCoolSet;
408403 function GetBoardCoolSet(Index: Integer): TCoolSet;
@@ -648,6 +643,7 @@ type
648643 property BrowserAutoMaximize: TGikoBrowserAutoMaximize read FBrowserAutoMaximize write FBrowserAutoMaximize;
649644
650645 property ListIconVisible: Boolean read FListIconVisible write FListIconVisible;
646+ property NonAcquiredCount: Boolean read FNonAcquiredCount write FNonAcquiredCount;
651647 property CreationTimeLogs: Boolean read FCreationTimeLogs write FCreationTimeLogs;
652648 property FutureThread: Boolean read FFutureThread write FFutureThread;
653649
@@ -685,10 +681,8 @@ type
685681 property AmpToCharRef : Boolean read FAmpToCharRef write FAmpToCharRef;
686682
687683 property SelectInterval : Integer read FSelectInterval write FSelectInterval;
688- //Tab保存
689- property TabAutoLoadSave: Boolean read FTabAutoLoadSave write FTabAutoLoadSave;
690- property GengoSupport : Boolean read F2chSupport write F2chSupport;
691- property KuroutSettingTabIndex: Integer read FKuroutSettingTabIndex write FKuroutSettingTabIndex;
684+ //Tab保存
685+ property TabAutoLoadSave: Boolean read FTabAutoLoadSave write FTabAutoLoadSave;
692686 end;
693687
694688
@@ -850,7 +844,7 @@ procedure TSetting.ReadSettingFile();
850844 const
851845 DEFAULT_BBS_WIDTH: array[0..0] of Integer = (140);
852846 DEFAULT_CATEGORY_WIDTH: array[0..2] of Integer = (150, 80, 130);
853- DEFAULT_BOARD_WIDTH: array[0..9] of Integer = (350, 60, 60, 60, 60, 60, 80, 130, 130, 130);
847+ DEFAULT_BOARD_WIDTH: array[0..8] of Integer = (350, 60, 60, 60, 60, 60, 80, 130, 130);
854848 MAX_WIDTH: Integer = 2000;
855849 var
856850 ini: TMemIniFile;
@@ -1158,6 +1152,7 @@ begin
11581152
11591153 //スレッド一覧更新アイコン
11601154 FListIconVisible := ini.ReadBool('ThreadList', 'StateIconVisible', True);
1155+ FNonAcquiredCount := ini.ReadBool('ThreadList', 'NonAcquiredCount', False);
11611156 FCreationTimeLogs := ini.ReadBool('ThreadList', 'CreationTimeLogs', True);
11621157 FFutureThread := ini.ReadBool('ThreadList', 'FutureThread', True);
11631158 FSelectInterval := ini.ReadInteger('ThreadList', 'SelectInterval', 110);
@@ -1223,13 +1218,11 @@ begin
12231218 FDeleteSyria := ini.ReadBool('Abon','DeleteSyria',false);
12241219
12251220 // エディタ
1226- FSpaceToNBSP := ini.ReadBool( 'Editor', 'SpaceToNBSP', False );
1221+ FSpaceToNBSP := ini.ReadBool( 'Editor', 'SpaceToNBSP', True );
12271222 FAmpToCharRef := ini.ReadBool( 'Editor', 'AmpToCharRef', False );
12281223
1229- //Tab自動保存、読み込み
1230- FTabAutoLoadSave := ini.ReadBool('TabAuto', 'TabAutoLoadSave', False);
1231-
1232- FKuroutSettingTabIndex := ini.ReadInteger('OptionDialog', 'KuroutTabIndex' , 0);
1224+ //Tab自動保存、読み込み
1225+ FTabAutoLoadSave := ini.ReadBool('TabAuto', 'TabAutoLoadSave', False);
12331226
12341227
12351228 finally
@@ -1457,6 +1450,7 @@ begin
14571450
14581451 //スレッド一覧更新アイコン
14591452 ini.WriteBool('ThreadList', 'StateIconVisible', FListIconVisible);
1453+ ini.WriteBool('ThreadList', 'NonAcquiredCount', FNonAcquiredCount);
14601454 ini.WriteBool('ThreadList', 'CreationTimeLogs',FCreationTimeLogs);
14611455 ini.WriteBool('ThreadList', 'FutureThread', FFutureThread);
14621456 ini.WriteInteger('ThreadList', 'SelectInterval', FSelectInterval);
@@ -1555,15 +1549,9 @@ begin
15551549 ini.WriteBool( 'Editor', 'SpaceToNBSP', FSpaceToNBSP );
15561550 ini.WriteBool( 'Editor', 'AmpToCharRef', FAmpToCharRef );
15571551
1558- //タブ自動保存
1559- ini.WriteBool('TabAuto', 'TabAutoLoadSave', FTabAutoLoadSave);
1560- //詳細設定
1561- ini.WriteInteger('OptionDialog', 'KuroutTabIndex', FKuroutSettingTabIndex);
1562-
1563- //にちゃん語案内機能
1564- ini.WriteBool('2chSupport', 'Support', F2chSupport);
1552+ ini.WriteBool('TabAuto', 'TabAutoLoadSave', FTabAutoLoadSave);
15651553
1566- ini.UpdateFile;
1554+ ini.UpdateFile;
15671555 finally
15681556 ini.Free;
15691557 end;
--- a/Sort.pas
+++ b/Sort.pas
@@ -17,6 +17,7 @@ var
1717 SortOrder: Boolean;
1818 SortIndex: Integer;
1919 SortNoFlag: Boolean;
20+ SortNonAcquiredCountFlag: Boolean;
2021
2122 implementation
2223
@@ -34,8 +35,6 @@ begin
3435 Result := CompareInt(CategoryItem1.No, CategoryItem2.No)
3536 else
3637 Result := AnsiCompareText(CategoryItem1.Title, CategoryItem2.Title);
37- else
38- Result := CompareInt(CategoryItem1.No, CategoryItem2.No)
3938 end;
4039
4140 if not SortOrder then
@@ -61,8 +60,6 @@ begin
6160
6261 gccLastModified:
6362 Result := CompareDate(BoardItem1.RoundDate, BoardItem2.RoundDate);
64- else
65- Result := CompareInt(BoardItem1.No, BoardItem2.No)
6663 end;
6764
6865 if not SortOrder then
@@ -102,9 +99,8 @@ begin
10299 gbcNewCount: Result := CompareInt(ThreadItem1.NewResCount, ThreadItem2.NewResCount);
103100 gbcUnReadCount: Result := 0;
104101 gbcRoundName: Result := AnsiCompareText(ThreadItem1.RoundName, ThreadItem2.RoundName);
105- gbcRoundDate: Result := CompareDateTime(ThreadItem1.RoundDate, ThreadItem2.RoundDate); {gbcLastModified:}
102+ gbcLastModified: Result := CompareDateTime(ThreadItem1.RoundDate, ThreadItem2.RoundDate);
106103 gbcCreated: Result := CompareDateTime(ThreadItem1.CreateDate, ThreadItem2.CreateDate);
107- gbcLastModified: Result := CompareDateTime(ThreadItem1.LastModified, ThreadItem2.LastModified); {gbcLastModified:}
108104 else
109105 Result := 0;
110106 end;
--- a/YofUtils.pas
+++ b/YofUtils.pas
@@ -40,38 +40,11 @@ function MatchesMask(
4040 const filename, mask : string
4141 ) : boolean;
4242
43-/// メタキャラクタを正規表現扱いにならないように置換
43+// メタキャラクタを正規表現扱いにならないように置換
4444 function RegExpEncode(
4545 const text : string
4646 ) : string;
4747
48-{*!
49-\brief 表示メッセージの整形
50-\param msg 表示するメッセージ
51-\param elements 置換単語
52-
53-msg の中の置換される単語は '^番号' で表され、
54-elements は改行によって単語分けされます。<br>
55-
56-<pre><code>
57-elements := IntToStr( 10 ) + #10 + 'hoge';
58-m := MessageStyle(
59- '^0 個の“^1”を置換しました。',
60- elements );
61-</code></pre>
62-
63-で出力される m は「10 個の“hoge”を置換しました。」となります。
64-*}
65-function MessageStyle(
66- const msg : string;
67- const elements : string
68-) : string; overload;
69-
70-function MessageStyle(
71- const msg : string;
72- const elements : TStringList
73-) : string; overload;
74-
7548 type
7649 /// Mode 値がおかしい
7750 EMappedFileModeError = class( Exception );
@@ -104,8 +77,6 @@ const
10477 implementation
10578 //==================================================
10679
107-uses MojuUtils;
108-
10980 // とりあえずの代用品なので chrWhite を考慮していないことに注意!!!
11081 procedure ExtractHttpFields(
11182 const chrSep : TSysCharSet;
@@ -420,38 +391,6 @@ begin
420391
421392 end;
422393
423-function MessageStyle(
424- const msg : string;
425- const elements : string
426-) : string;
427-var
428- list : TStringList;
429-begin
430-
431- list := TStringList.Create;
432- try
433- list.Text := elements;
434- Result := MessageStyle( msg, list );
435- finally
436- list.Free;
437- end;
438-
439-end;
440-
441-function MessageStyle(
442- const msg : string;
443- const elements : TStringList
444-) : string;
445-var
446- i : Integer;
447-begin
448-
449- Result := msg;
450- for i := elements.Count - 1 downto 0 do
451- Result := CustomStringReplace( Result, '^' + IntToStr( i ), elements[ i ], false );
452-
453-end;
454-
455394 { TMappedFile }
456395
457396 {*!
Binary files a/gikoNavi.res and b/gikoNavi.res differ
--- a/readme/readme.txt
+++ b/readme/readme.txt
@@ -1,4 +1,4 @@
1-■ギコナビ Version1.00 バタ49 Readme.txt
1+■ギコナビ Version1.00 バタ48 Readme.txt
22
33
44 ------------------------------
@@ -41,7 +41,7 @@
4141 ------------------------------
4242 バグや要望は、ギコナビスレッドで受け付けております。
4343 ギコナビサイト:http://gikonavi.sourceforge.jp/
44-ギコナビスレ:http://pc5.2ch.net/test/read.cgi/software/1094289071/l50
44+ギコナビスレ:http://pc5.2ch.net/test/read.cgi/software/1079685385/l50
4545
4646 ------------------------------
4747 転載について
@@ -89,21 +89,6 @@ Windows Server 2003 Enterprise Edition IE6
8989 ------------------------------
9090 履歴
9191 ------------------------------
92-2004/10/XX
93- Version バタ49
94- お気に入りの読み込みの高速化による起動時間の短縮
95- StatusBarにNGワードファイルの名前が出ない不具合の修正
96- 「指定した番号のレスに飛ぶ」機能追加(キー設定で、スレッドカテゴリの一番最後)
97- ログを削除した際に未読スレッド数 (UnRead) の表示が更新されないバグを修正
98- ここにレスだと、レスエディターのショートカットキーが設定されない不具合の修正
99- あぼーん時にココまで読んだと新着レスを調整するのに不具合があったので修正
100- スレッド一覧の表示カラムの設定ができるようになった。「オプション」->「詳細設定」->「詳細設定2」
101- デフォルトでのレスアンカーポップアップが種種の形式に対応
102- 3ちゃんねる(8ちゃんねる)を登録すると2ちゃんねるの板が表示される不具合の解消
103- お気に入りで編集中にスペースキー入力の不具合の修正
104- したらばJBBSの過去ログに関する不具合の修正
105- スレッドのリンクでレス番があるものを踏んだときに、そのレス番号までスクロールするようにした。
106-
10792 2004/09/05
10893 Version バタ48
10994 レスポップアップあぼ〜ん有効にしていても、透明あぼ〜んを表示する不具合の解消
--- a/res/ExternalBoardPlugIn/ShitarabaJBBSPlugIn.dpr
+++ b/res/ExternalBoardPlugIn/ShitarabaJBBSPlugIn.dpr
@@ -3,7 +3,7 @@ library ShitarabaJBBSPlugIn;
33 {
44 ShitarabaJBBSPlugIn
55 したらば処理ユニット
6- $Id: ShitarabaJBBSPlugIn.dpr,v 1.36 2004/09/30 11:49:44 h677 Exp $
6+ $Id: ShitarabaJBBSPlugIn.dpr,v 1.30 2004/09/06 16:41:41 h677 Exp $
77 }
88
99 uses
@@ -33,7 +33,7 @@ type
3333
3434 private
3535 function Download : TDownloadState;
36- function StorageDownload(AURL : string) : TDownloadState;
36+ function StorageDownload(Path, Document : string) : TDownloadState;
3737 function Write( inName : string; inMail : string; inMessage : string ) : TDownloadState;
3838 function GetRes( inNo : Integer ) : string;
3939 function GetDat( inNo : Integer ) : string;
@@ -281,8 +281,7 @@ var
281281 // i : Integer;
282282 const
283283 BBS_HOST_OLD = 'jbbs.shitaraba.com';
284- BBS_HOST_OLD2 = 'jbbs.livedoor.com';
285- BBS_HOST = 'jbbs.livedoor.jp';
284+ BBS_HOST = 'jbbs.livedoor.com';
286285 THREAD_MARK = '/bbs/read.cgi';
287286 begin
288287
@@ -291,7 +290,7 @@ begin
291290 uri := TIdURI.Create( inURL );
292291 uriList := TStringList.Create;
293292 try
294- if (uri.Host = BBS_HOST_OLD) or (uri.Host = BBS_HOST_OLD2) then
293+ if uri.Host = BBS_HOST_OLD then
295294 uri.Host := BBS_HOST;
296295
297296 ExtractHttpFields( ['/'], [], uri.Path, uriList );
@@ -350,13 +349,12 @@ var
350349
351350 found : Integer;
352351 found2 : Integer;
353- pos : Integer;
354352 board : string;
355353 const
356354 CATEGORY_INPUT = 'カテゴリを入力してください';
357355 KEYWORD_INPUT = '検索する板名を入力してください';
358356 SAVEPATH_SELECT = '保存するファイル名を入力してください';
359- BBS_HOST = 'http://jbbs.livedoor.jp/';
357+ BBS_HOST = 'http://jbbs.livedoor.com/';
360358 label
361359 NextBoard;
362360 begin
@@ -439,12 +437,8 @@ begin
439437
440438 saveText.Add( board );
441439 NextBoard:
442- found := AnsiPos( '<a ', downResult );
440+ found := AnsiPos( '<a ', downResult );
443441 end;
444- pos := saveText.IndexOf('JBBS=/');
445- if pos > 0 then
446- saveText.Delete(pos);
447-
448442 saveText.SaveToFile( savepath );
449443 saveText.Free;
450444 end else begin
@@ -505,14 +499,22 @@ begin
505499 uriList := TStringList.Create;
506500 try
507501 ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
508- if uriList[ 5 ] = 'l100' then begin
509- FileName := uriList[ 4 ] + '.dat';
510- FilePath := MyLogFolder + uriList[ 2 ] + '\' + uriList[ 3 ] + '\' + uriList[ 4 ] + '.dat';
511- IsLogFile := FileExists( FilePath );
512- end else begin
513- FileName := uriList[ 5 ] + '.dat';
514- FilePath := MyLogFolder + uriList[ 3 ] + '\' + uriList[ 4 ] + '\' + uriList[ 5 ] + '.dat';
502+ if (AnsiPos('.html', uri.Document) = 0) then begin //通常
503+ if uriList[ 5 ] = 'l100' then begin
504+ FileName := uriList[ 4 ] + '.dat';
505+ FilePath := MyLogFolder + uriList[ 2 ] + '\' + uriList[ 3 ] + '\' + uriList[ 4 ] + '.dat';
506+ IsLogFile := FileExists( FilePath );
507+ end else begin
508+ FileName := uriList[ 5 ] + '.dat';
509+ FilePath := MyLogFolder + uriList[ 3 ] + '\' + uriList[ 4 ] + '\' + uriList[ 5 ] + '.dat';
510+ IsLogFile := FileExists( FilePath );
511+ end;
512+ end else begin //過去ログ
513+ //http://jbbs.livedoor.com/game/1578/storage/1086710948.html
514+ FileName := Copy(uri.Document, 1, Length(uri.Document) - 5) + '.dat';
515+ FilePath := MyLogFolder + CustomStringReplace(CustomStringReplace(uri.Path, '/storage', ''), '/', '\') + FileName;
515516 IsLogFile := FileExists( FilePath );
517+
516518 end;
517519 finally
518520 uri.Free;
@@ -549,109 +551,115 @@ var
549551 logStream : TFileStream;
550552 uri : TIdURI;
551553 uriList : TStringList;
552- datURL, tmpURL : string;
553- tmpText: string;
554+ datURL : string;
555+ tmpText: string;
554556 begin
555557
556558 Result := dsError;
557559
558560 uri := TIdURI.Create( ReadURL );
559- uriList := TStringList.Create;
560- try
561- ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
562- FileName := uriList[ 5 ] + '.dat';
563- // http://jbbs.livedoor.com/bbs/rawmode.cgi/game/1578/1067968274/l100
564- // protocol://host/1/2/3/4/5/uriList.Count - 1
565- if MyLogFolder = '' then begin
566- // どこに保存していいのか分からないので一時ファイルに保存
567- FilePath := TemporaryFile;
568- FIsTemporary := True;
569- end else begin
570- FilePath := MyLogFolder + uriList[ 3 ] + '\' + uriList[ 4 ] + '\' + uriList[ 5 ] + '.dat';
571- FIsTemporary := False;
572- end;
573- finally
561+ if(( AnsiPos('.html', uri.Document) >0 ) and ( AnsiPos('/storage/', uri.Path) > 0 )) then begin
562+ //過去ログ
563+ Result := StorageDownload(uri.Path, uri.Document);
574564 uri.Free;
575- uriList.Free;
576- end;
565+ end else begin
566+ //現在生きてるスレッド
567+ uriList := TStringList.Create;
568+ try
569+ ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
570+ FileName := uriList[ 5 ] + '.dat';
571+ // http://jbbs.livedoor.com/bbs/rawmode.cgi/game/1578/1067968274/l100
572+ // protocol://host/1/2/3/4/5/uriList.Count - 1
573+ if MyLogFolder = '' then begin
574+ // どこに保存していいのか分からないので一時ファイルに保存
575+ FilePath := TemporaryFile;
576+ FIsTemporary := True;
577+ end else begin
578+ FilePath := MyLogFolder + uriList[ 3 ] + '\' + uriList[ 4 ] + '\' + uriList[ 5 ] + '.dat';
579+ FIsTemporary := False;
580+ end;
581+ finally
582+ uri.Free;
583+ uriList.Free;
584+ end;
577585
578- // 保存用のディレクトリを掘る
579- ForceDirectoriesEx( Copy( FilePath, 1, LastDelimiter( '\', FilePath ) ) );
586+ // 保存用のディレクトリを掘る
587+ ForceDirectoriesEx( Copy( FilePath, 1, LastDelimiter( '\', FilePath ) ) );
580588
581- // 独自にダウンロードやフィルタリングを行わない場合は
582- // InternalDownload に任せることが出来る
583- modified := LastModified;
584- datURL := ReadURL + IntToStr( Count + 1 ) + '-'; // 新着のみ
585- responseCode := InternalDownload( PChar( datURL ), modified, tmp, 0 );
589+ // 独自にダウンロードやフィルタリングを行わない場合は
590+ // InternalDownload に任せることが出来る
591+ modified := LastModified;
592+ datURL := ReadURL + IntToStr( Count + 1 ) + '-'; // 新着のみ
593+ responseCode := InternalDownload( PChar( datURL ), modified, tmp, 0 );
586594
587- try
588- if (responseCode = 200) or (responseCode = 206) then begin
589- downResult := TStringList.Create;
590- try
591- tmpText := CustomStringReplace( string( tmp ), '。?ョ', ',' );
592- downResult.Text := EUCtoSJIS( tmpText );
593- ArrangeDownloadData(Count, downResult);
594- if downResult.Count > 0 then begin
595- if FileExists( FilePath ) then
596- logStream := TFileStream.Create( FilePath, fmOpenReadWrite or fmShareDenyWrite )
597- else
598- logStream := TFileStream.Create( FilePath, fmCreate or fmShareDenyWrite );
599- try
600- logStream.Position := logStream.Size;
601- logStream.Write( PChar( downResult.Text )^, Length( downResult.Text ) );
602- finally
603- logStream.Free;
604- end;
595+ try
596+ if (responseCode = 200) or (responseCode = 206) then begin
597+ downResult := TStringList.Create;
598+ try
599+ tmpText := CustomStringReplace( string( tmp ), '。?ョ', ',' );
600+ downResult.Text := EUCtoSJIS( tmpText );
601+ ArrangeDownloadData(Count, downResult);
602+ if downResult.Count > 0 then begin
603+ if FileExists( FilePath ) then
604+ logStream := TFileStream.Create( FilePath, fmOpenReadWrite or fmShareDenyWrite )
605+ else
606+ logStream := TFileStream.Create( FilePath, fmCreate or fmShareDenyWrite );
607+ try
608+ logStream.Position := logStream.Size;
609+ logStream.Write( PChar( downResult.Text )^, Length( downResult.Text ) );
610+ finally
611+ logStream.Free;
612+ end;
605613
606- if Count = 0 then
607- // 新規
608- Result := dsComplete
609- else
610- // 追記
611- Result := dsDiffComplete;
614+ if Count = 0 then
615+ // 新規
616+ Result := dsComplete
617+ else
618+ // 追記
619+ Result := dsDiffComplete;
612620
613- Size := Size + Length( downResult.Text );
614- // CGI からは正しい日付が得られないので現在に設定
615- LastModified := Now;
621+ Size := Size + Length( downResult.Text );
622+ // CGI からは正しい日付が得られないので現在に設定
623+ LastModified := Now;
616624
617625
618626
619- NewReceive := Count + 1;
620- Count := Count + downResult.Count;
621- NewResCount := downResult.Count;
627+ NewReceive := Count + 1;
628+ Count := Count + downResult.Count;
629+ NewResCount := downResult.Count;
622630
623631
624632
625- end else begin
626- Result := dsNotModify;
633+ end else begin
634+ Result := dsNotModify;
635+ end;
636+ finally
637+ downResult.Free;
627638 end;
628- finally
629- downResult.Free;
630- end;
631- end else if responseCode = 302 then begin
632- //http://jbbs.shitaraba.com/bbs/read.cgi/game/3477/1077473358/
633- //http://jbbs.shitaraba.com/game/bbs/read.cgi?BBS=3477&KEY=1077473358
634- //http://jbbs.shitaraba.com/game/3477/storage/1077473358.html
635- //過去ログ
636- //tmpURL := URL;
637- if Assigned( InternalPrint ) then
638- InternalPrint( '過去ログ倉庫入り' );
639- uri := TIdURI.Create( ReadURL );
640- uriList := TStringList.Create;
641- try
642- ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
643- tmpURL := uri.Protocol + '://' + uri.Host +
644- '/' + uriList[3] + '/' + uriList[4] + '/storage/' + uriList[ 5 ] + '.html';
645- finally
646- uriList.Free;
639+ end else if responseCode = 302 then begin
640+ //http://jbbs.shitaraba.com/bbs/read.cgi/game/3477/1077473358/
641+ //http://jbbs.shitaraba.com/game/bbs/read.cgi?BBS=3477&KEY=1077473358
642+ //http://jbbs.shitaraba.com/game/3477/storage/1077473358.html
643+ //過去ログ
644+ uri := TIdURI.Create( ReadURL );
645+ uriList := TStringList.Create;
646+ try
647+ ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
648+ URL := uri.Protocol + '://' + uri.Host +
649+ '/' + uriList[3] + '/' + uriList[4] + '/storage/' + uriList[ 5 ] + '.html';
650+ finally
651+ uriList.Free;
652+ uri.Free;
653+ end;
654+ uri := TIdURI.Create( ReadURL );
655+ Result := StorageDownload(uri.Path, uri.Document);
647656 uri.Free;
657+ end else if responseCode = 304 then begin
658+ Result := dsNotModify;
648659 end;
649- Result := StorageDownload(tmpURL);
650- end else if responseCode = 304 then begin
651- Result := dsNotModify;
660+ finally
661+ DisposeResultString( tmp );
652662 end;
653- finally
654- DisposeResultString( tmp );
655663 end;
656664
657665 end;
@@ -691,16 +699,17 @@ end;
691699 // 過去ログ用Download関数
692700 // *************************************************************************
693701 function TShitarabaThreadItem.StorageDownload(
694- AURL : string
702+ Path, Document : string
695703 ) : TDownloadState;
696704 var
697705 modified : Double;
698706 tmp : PChar;
699- uri : TIdURI;
700- uriList : TStringList;
701707 downResult : TStringList;
702708 responseCode : Longint;
703709 logStream : TFileStream;
710+ //uri : TIdURI;
711+ //uriList : TStringList;
712+ datURL : string;
704713 tmpText, tmpLine, tmpTitle: string;
705714 tmpHTML: TStringList;
706715
@@ -709,24 +718,23 @@ var
709718 begin
710719
711720 Result := dsError;
712- uri := TIdURI.Create( ReadURL );
713- uriList := TStringList.Create;
721+
722+ //uri := TIdURI.Create( ReadURL );
714723 try
715- ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
716- FileName := uriList[ 5 ] + '.dat';
717- // http://jbbs.livedoor.com/bbs/rawmode.cgi/game/1578/1067968274/l100
718- // protocol://host/1/2/3/4/5/uriList.Count - 1
724+ FileName := Copy(Document, 1, Length(Document) - 5) + '.dat';
719725 if MyLogFolder = '' then begin
720726 // どこに保存していいのか分からないので一時ファイルに保存
721727 FilePath := TemporaryFile;
722728 FIsTemporary := True;
723729 end else begin
724- FilePath := MyLogFolder + uriList[ 3 ] + '\' + uriList[ 4 ] + '\' + uriList[ 5 ] + '.dat';
730+ FilePath := MyLogFolder
731+ + CustomStringReplace(CustomStringReplace(Path, '/storage', ''), '/', '\')
732+ + FileName;
733+
725734 FIsTemporary := False;
726735 end;
727736 finally
728- uri.Free;
729- uriList.Free;
737+ //uri.Free;
730738 end;
731739
732740 // 保存用のディレクトリを掘る
@@ -738,7 +746,8 @@ begin
738746 // InternalDownload に任せることが出来る
739747 modified := LastModified;
740748
741- responseCode := InternalDownload( PChar( AURL ), modified, tmp, 0 );
749+ datURL := ReadURL;
750+ responseCode := InternalDownload( PChar( datURL ), modified, tmp, 0 );
742751
743752 try
744753 if (responseCode = 200) or (responseCode = 206) then begin
@@ -1149,8 +1158,7 @@ var
11491158 tmphost: String;
11501159 const
11511160 BBS_HOST_OLD = 'jbbs.shitaraba.com';
1152- BBS_HOST_OLD2 = 'jbbs.livedoor.com';
1153- BBS_HOST = 'jbbs.livedoor.jp';
1161+ BBS_HOST = 'jbbs.livedoor.com';
11541162 begin
11551163
11561164 uri := TIdURI.Create( ReadURL );
@@ -1160,15 +1168,22 @@ begin
11601168
11611169 tmphost := uri.Host;
11621170
1163- if (tmphost = BBS_HOST_OLD) or (tmphost = BBS_HOST_OLD2) then
1171+ if tmphost = BBS_HOST_OLD then
11641172 tmphost := BBS_HOST;
11651173
1166- FileName := uriList[ 5 ] + '.dat';
1167- // http://jbbs.livedoor.com/bbs/read.cgi/computer/351/1090404452/l100
1168- // http://jbbs.livedoor.com/bbs/read.cgi/game/1578/1067968274/l100
1169- // http://jbbs.livedoor.com/game/1000/subject.txt
1170- Result := CreateResultString(
1171- uri.Protocol + '://' + tmphost + '/' + uriList[ 3 ] + '/' + uriList[ 4 ] + '/' );
1174+ if( AnsiPos('.html', uri.Document) = 0 ) then begin //通常
1175+ FileName := uriList[ 5 ] + '.dat';
1176+ // http://jbbs.livedoor.com/bbs/read.cgi/computer/351/1090404452/l100
1177+ // http://jbbs.livedoor.com/bbs/read.cgi/game/1578/1067968274/l100
1178+ // http://jbbs.livedoor.com/game/1000/subject.txt
1179+ Result := CreateResultString(
1180+ uri.Protocol + '://' + tmphost + '/' + uriList[ 3 ] + '/' + uriList[ 4 ] + '/' );
1181+ end else begin
1182+ //http://jbbs.livedoor.com/game/1578/storage/1086710948.html
1183+ Result := CreateResultString(
1184+ uri.Protocol + '://' + tmphost + CustomStringReplace(uri.Path, '/storage', ''));
1185+ end;
1186+
11721187 finally
11731188 uri.Free;
11741189 uriList.Free;
@@ -1218,8 +1233,7 @@ var
12181233 dir, tmphost : string;
12191234 const
12201235 BBS_HOST_OLD = 'jbbs.shitaraba.com';
1221- BBS_HOST_OLD2 = 'jbbs.livedoor.com';
1222- BBS_HOST = 'jbbs.livedoor.jp';
1236+ BBS_HOST = 'jbbs.livedoor.com';
12231237 begin
12241238
12251239 foundPos := AnsiPos( '?', URL );
@@ -1232,7 +1246,7 @@ begin
12321246 dir := uriList[ 1 ];
12331247
12341248 tmphost := uri.Host;
1235- if (tmphost = BBS_HOST_OLD) or (tmphost = BBS_HOST_OLD2) then
1249+ if tmphost = BBS_HOST_OLD then
12361250 tmphost := BBS_HOST;
12371251
12381252 ExtractHttpFields( ['&'], [], Copy( URL, foundPos + 1, MaxInt ), uriList );
@@ -1254,7 +1268,7 @@ begin
12541268 ExtractHttpFields( ['/'], [], uri.Path, uriList );
12551269
12561270 tmphost := uri.Host;
1257- if (tmphost = BBS_HOST_OLD) or (tmphost = BBS_HOST_OLD2) then
1271+ if tmphost = BBS_HOST_OLD then
12581272 tmphost := BBS_HOST;
12591273
12601274 if( AnsiPos(THREAD_MARK, URL) > 0) and (uriList.Count > 5) then begin
@@ -1265,8 +1279,7 @@ begin
12651279 end else if AnsiPos(THREAD_MARK, URL) = 0 then begin
12661280 //ココで過去ログかどうかチェック?
12671281 if(AnsiPos('.html/', uri.Path) > 0) then begin
1268- Result := uri.Protocol + '://' + tmphost + THREAD_MARK +
1269- CustomStringReplace(CustomStringReplace(uri.Path, '/storage', ''), '.html/', '/') + 'l100';
1282+ Result := uri.Protocol + '://' + tmphost + Copy(uri.Path, 1, Length(uri.Path) - 1);
12701283 end else
12711284 Result := URL;
12721285 end;
@@ -1291,8 +1304,7 @@ var
12911304 dir, tmphost : string;
12921305 const
12931306 BBS_HOST_OLD = 'jbbs.shitaraba.com';
1294- BBS_HOST_OLD2 = 'jbbs.livedoor.com';
1295- BBS_HOST = 'jbbs.livedoor.jp';
1307+ BBS_HOST = 'jbbs.livedoor.com';
12961308 begin
12971309
12981310 foundPos := AnsiPos( '?', URL );
@@ -1305,7 +1317,7 @@ begin
13051317 dir := uriList[ 1 ];
13061318
13071319 tmphost := uri.Host;
1308- if (tmphost = BBS_HOST_OLD) or (tmphost = BBS_HOST_OLD2) then
1320+ if tmphost = BBS_HOST_OLD then
13091321 tmphost := BBS_HOST;
13101322
13111323 ExtractHttpFields( ['&'], [], Copy( URL, foundPos + 1, MaxInt ), uriList );
@@ -1327,13 +1339,19 @@ begin
13271339 ExtractHttpFields( ['/'], [], uri.Path, uriList );
13281340
13291341 tmphost := uri.Host;
1330- if (tmphost = BBS_HOST_OLD) or (tmphost = BBS_HOST_OLD2) then
1342+ if tmphost = BBS_HOST_OLD then
13311343 tmphost := BBS_HOST;
13321344 // http://jbbs.livedoor.com/bbs/read.cgi/game/1578/1067968274/l100
13331345 if( AnsiPos(THREAD_MARK, URL) > 0) and (uriList.Count > 5) then begin
13341346 Result :=
13351347 uri.Protocol + '://' + tmphost + '/bbs/rawmode.cgi/' +
13361348 uriList[ 3 ] + '/' + uriList[ 4 ] + '/' + uriList[ 5 ] + '/';
1349+ end else if AnsiPos(THREAD_MARK, URL) = 0 then begin
1350+ //ココで過去ログかどうかチェック?
1351+ if(AnsiPos('.html/', uri.Path) > 0) then begin
1352+ Result := uri.Protocol + '://' + tmphost + Copy(uri.Path, 1, Length(uri.Path) - 1);
1353+ end else
1354+ Result := URL;
13371355 end;
13381356 finally
13391357 uri.Free;
@@ -1415,8 +1433,7 @@ var
14151433 uriList : TStringList;
14161434 const
14171435 BBS_HOST_OLD = 'jbbs.shitaraba.com';
1418- BBS_HOST_OLD2 = 'jbbs.livedoor.com';
1419- BBS_HOST = 'jbbs.livedoor.jp';
1436+ BBS_HOST = 'jbbs.livedoor.com';
14201437 begin
14211438
14221439 inherited;
@@ -1433,7 +1450,7 @@ begin
14331450 uri := TIdURI.Create( SubjectURL );
14341451 uriList := TStringList.Create;
14351452 try
1436- if (uri.Host = BBS_HOST_OLD) or (uri.Host = BBS_HOST_OLD2) then
1453+ if uri.Host = BBS_HOST_OLD then
14371454 uri.Host := BBS_HOST;
14381455 URL := uri.Protocol + '://' + uri.Host + uri.Path;
14391456
--- a/res/skin/skin30-2G/Header.html
+++ b/res/skin/skin30-2G/Header.html
@@ -15,7 +15,7 @@
1515 var start_time = new Date();
1616 //==========グローバル変数
1717 var anchorHead="";
18-var skinName="skin30-2 v3.3.09xx";
18+var skinName="skin30-2 v3.1.11xx";
1919 var browser="ギコナビ";
2020 //==========ギコナビ用アンカーの判定(0:処理無し,1:ポップアップ,2:ボタン挿入)
2121 // ギコナビでは、レスアンカーは相対アドレスで記述される
@@ -27,22 +27,13 @@ function checkAnchor(href){if(!href){return(0)}
2727 //==========リンク設定
2828 function addAnchor(inner,num){
2929 if(!t_url){threadurl()}
30- var url=document.getElementsByName("ThreadURL")[0].content;
31- if(url.match(/&/)){
32- return('<a href="../test/read.cgi?bbs='+t_bbs+'&key='+t_key+'&st='+inner+'&to='+inner+'&nofirst=true" target="_blank" onclick="blur()">'+num+'</a>')
33- }else{
34- return('<a href="../test/read.cgi/'+t_bbs+'/'+t_key+'/'+inner+'" target="_blank" onclick="blur()">'+num+'</a>')
35- }
30+ return('<a href="../test/read.cgi/'+t_bbs+'/'+t_key+'/'+inner+'" target="_blank" onclick="blur()">'+num+'</a>')
3631 }
3732 // スレッドURLの取得
3833 var t_url=false,t_domain,t_bbs,t_key;
3934 function threadurl(){
4035 var threadurl=document.getElementsByName("ThreadURL")[0].content;
41- if(threadurl.match(/&/)){
42- threadurl.match(/bbs=(.*)&key=(\d*)/);
43- }else{
44- threadurl.match(/^.*\/test\/read.cgi\/(.*)\/(.*)\//);
45- }
36+ threadurl.match(/^.*\/test\/read.cgi\/(.*)\/(.*)\//);
4637 t_url=true;
4738 t_bbs=RegExp.$1;
4839 t_key=RegExp.$2;
--- a/res/skin/skin30-2G/chie_event.js
+++ b/res/skin/skin30-2G/chie_event.js
@@ -2,8 +2,7 @@
22 //外部関数:tohan
33 //外部変数:anchorHead,lightmode,getID,skinName,browser,dts
44 //グローバル変数
5-var buffer=1; // 低速回線や低速マシンの場合にはbufferの数値を増やすとより正確にジャンプ(1増やすと0.1秒遅れる)
6-var newResJump=1; // 新着レスジャンプ(0:ブラウザ任せ、1:読了時のみ、2:常時)*かちゅ、OpenJane、twintailのみの設定
5+var buffer=1; // 低速回線や低速マシンの場合にはbufferの数値を増やすとより正確にジャンプ(1増やすと0.1秒遅れる)
76 //========Click処理→search,他
87 document.onclick = clickEvent;
98 function clickEvent(){
@@ -41,19 +40,10 @@ function mouseOverEvent() {
4140 else if(e.innerText.match(/^あぼ〜ん$/)) {abonePopup(e);}
4241 }
4342 if(e.tagName=='A'){
44- if(!e.innerText.match(/%/)){ // URLエンコードでありがちな%がなければ
45- e.href=e.href.replace(/>/g,"");
46- e.href=e.href.replace(/\/ime.nu/g,"");
47- }else{
48- try{
49- e.title=decodeURI(e.innerText);
50- }catch(err){
51- // ShiftJIS,EUC-JPのデコードは面倒だからつけない。
52- }
53- }
43+ e.href=e.href.replace(/>/g,"");
44+ e.href=e.href.replace(/\/ime.nu/g,"");
5445 if (checkAnchor(e.href)==2){insButton(e);return;}
5546 else if(checkAnchor(e.href)==1){
56- if(event.shiftKey){if(e.rel){e.href=e.rel}return}
5747 // 多段ポップアップ
5848 var aNum=parseInt(e.sourceIndex)+1;
5949 if(!document.getElementById("p"+aNum)){
@@ -106,10 +96,10 @@ function scroll_End(){document.getElementsByTagName("DL")[0].lastChild.scrollInt
10696 // IMG
10797 function imgCommand(mode,s){
10898 if(!waited){
109- var nHTML='<div id="command" onclick="clearCommand()"><input type="button" onclick="allImageLoad(\'all\')" value="全レス一括読込"><br><input type="button" onclick="allImageLoad(\'new\')" value="新レス一括読込"><br><input type="button" onclick="removeError()" value="Error画像削除"><br></div>';
99+ var nHTML='<div id="command" onclick="clearCommand()"><input type="button" onclick="allImageLoad(\'all\')" value="全レス一括読込"><br><input type="button" onclick="allImageLoad(\'new\')" value="新レス一括読込"><br></div>';
110100 event.srcElement.parentElement.insertAdjacentHTML('beforeEnd',nHTML);
111101 if(skinName.match(/30-2/)){
112- //if(!lightmode){document.getElementById("command").insertAdjacentHTML('afterBegin','<input type="button" onclick="changePanel()" value="パネル切替"><br>')}
102+ if(!lightmode){document.getElementById("command").insertAdjacentHTML('afterBegin','<input type="button" onclick="changePanel()" value="パネル切替"><br>')}
113103 document.getElementById("command").insertAdjacentHTML('beforeEnd','<input type="button" onclick="changeMode()" value="モード切替">')
114104 }
115105 waited=true;
@@ -119,7 +109,7 @@ function imgCommand(mode,s){
119109 }
120110 function clearCommand(){
121111 waited=false;
122- document.getElementById("command").removeNode(true);
112+ event.srcElement.parentElement.removeNode(true);
123113 }
124114 //=========左長押処理→copyMenu()
125115 document.onmousedown=mousedownEvent;
@@ -132,7 +122,6 @@ function mousedownEvent(){
132122 clickTimer=setTimeout("copyMenu()",500);
133123 }
134124 }
135-
136125 //コピーメニュー→colorChange(),search::copyText()
137126 function copyMenu(){
138127 clickCancel=true; clearTimeout(clickTimer);
@@ -176,53 +165,27 @@ function key(){
176165 }
177166 }
178167
179-//=========新着レス取得後処理(標準スキン未対応ブラウザ用)←Timer又はFooterから呼び出し
180-//=========かちゅ、ABone、ゾヌ2
168+//=========Load(代替)処理(各Footerもしくは、Headerでのループから呼出し)
181169 var newResNum=parseInt(document.getElementsByName("GetRescount")[0].content)+1;
182170 var k=0;
183-function loadEvent(num){ // Timer又はFooterから
184- //====新着レスジャンプ
185- if(newResJump==0){clearInterval(timerID);return} //「ブラウザ任せ」なら終了
186- //新着レスの開始番号を取得
187- if (browser=="かちゅ〜しゃ"){if(isNaN(newResNum)){while(dts[k]){if(dts[k].className=="new"){newResNum=parseInt(dts[k].firstChild.innerText);break;} k++;}}}
188- else if(browser=="ホットゾヌ2"){newResNum=num+1;}
171+function loadEvent(){
172+ //GetRescount代替 "数字でなければ"
173+ if(isNaN(newResNum)){while(dts[k]){if(dts[k].className=="new"){newResNum=parseInt(dts[k].firstChild.innerText);break;} k++; }}
174+ //新着開始ナンバーを設定してジャンプ
189175 var anc=document.anchors(anchorHead+newResNum);
190- if(!anc || !anc.parentElement){return} // 透明あぼ〜んされてたら終了
191- //新着レスジャンプ
192- scr=lightmode ? document.body : document.getElementById("dl");
193- viewPos=scr.scrollTop+scr.clientHeight;// スクロール後の画面下部位置
194- endPos =anc.offsetTop+20; // 新レスアンカー位置
195- //最後まで読了 or 「常に新着ジャンプ」ならジャンプ
196- if(viewPos>endPos || newResJump==2){clearInterval(timerID);setTimeout("moveToNew("+newResNum+")",buffer*100)}
197- else{firstNew=document.anchors(anchorHead+newResNum).parentElement.nextSibling;}
198-}
199-//=========新着レス取得後処理(標準スキン対応ブラウザ用)←NewMarkから呼び出し
200-//=========OpenJ、twin
201-var scr,viewPos,endPos=0;
202-function reloadEvent(){
203- //====既読化
204- var lastDt=dts[dts.length-2];if(!lastDt){return}// 全部新着なら終了
205- while(lastDt && lastDt.className=="new"){lastDt.className="";lastDt=lastDt.previousSibling.previousSibling;}
206- //====新着レスジャンプ
207- if(newResJump==0){return} //「ブラウザ任せ」なら終了
208- var ancs=document.anchors;
209- var newResNum=parseInt(ancs[ancs.length-1].name)+1;
210- scr=lightmode ? document.body : document.getElementById("dl");
211- viewPos=scr.scrollTop;
212- endPos =scr.scrollHeight-scr.clientHeight-20;
213- //最後まで読了 or 「常に新着ジャンプ」ならジャンプ
214- if(viewPos>endPos || newResJump==2){setTimeout("moveToNew("+newResNum+")",buffer*100);}
176+ if(anc && anc.parentElement){
177+ if(buffer==0){clearInterval(timerID);moveToNew(newResNum);}
178+ else {buffer--;}
179+ }
215180 }
216-
217181 // 新着レス移動+新着レスの位置を記憶
218182 var firstNew;
219183 function moveToNew(num){
220184 firstNew=getDTfromAnc(num);
221- while(!firstNew){num--;firstNew=getDTfromAnc(num);} //対象が透明あぼ〜んなら数を減らす
222- firstNew.scrollIntoView(true);
185+ if(firstNew){firstNew.scrollIntoView(true);}
223186 }
224187
225-//=========DoubleClick処理→defaultPopup()
188+//=========DblClick処理→defaultPopup()
226189 document.ondblclick=defaultPopup;
227190 function defaultPopup(){
228191 var num=document.selection.createRange().text.replace(/\s$/,"");
@@ -237,17 +200,4 @@ function defaultPopup(){
237200 obj.innerText="ID:"+num;
238201 search(obj);
239202 }
240-}
241-
242-//=========Copy処理
243-//headから読むとbodyは見えないので、専用ブラウザの特質を利用してbodyの後ろに書き出す
244-//本来どおりheadに書き出すSkinManager対策で判定を一つ入れる
245- if(document.body) document.write('<script type="text/javascript">document.body.oncopy=copyEvent</script>\n');
246-function copyEvent(){
247- var textarea=document.createElement("TEXTAREA");
248- textarea.value=document.selection.createRange().text.replace(/\s(\r\n|$)/g,"\n");
249- var copyText=textarea.createTextRange();
250- copyText.execCommand("Copy");
251- return false;
252-}
253-
203+}
\ No newline at end of file
--- a/res/skin/skin30-2G/chie_image.js
+++ b/res/skin/skin30-2G/chie_image.js
@@ -2,8 +2,7 @@
22 // 外部関数:addAnchor
33 // 外部変数:cp,tp,vp,dds
44 //======画像読込の設定
5-var onMouseLoad=true; // true:カーソルを合わせただけ、false:LOADボタンをクリックしてから
6-var takeArisk=false; // true:画像読み込み時にモード切替、false:手動でモード切替
5+var onMouseLoad=true; // true:カーソルを合わせただけ、false:LOADボタンをクリックしてから
76 //==========グローバル変数
87 //==========画像処理等
98 var lightmode = true;
@@ -69,13 +68,12 @@ function insButton(a,hRH) {
6968 // 画像読込
7069 function loadImage(btn,href){
7170 if(!panel){changePanel()}
72- if(takeArisk && lightmode){changeMode()}
7371 if(btn.tagName!="A"){
7472 var thumbs = document.images;
7573 var l=thumbs.length;
7674 for(var i=l;i--;){if(thumbs[i].src==href){
7775 if(lightmode){tp.style.visibility="visible";viewed=true;}
78- //thumbs[i].scrollIntoView(true);
76+ thumbs[i].scrollIntoView(true);
7977 imgOver(thumbs[i],100);
8078 return true;
8179 }}
@@ -105,7 +103,7 @@ function loadImage(btn,href){
105103 function imgResult(img){
106104 var btn=img.parentElement.children.item(2);
107105 if(event.type=="load"){btn.value='___'; img.style.display='block';}
108- else {btn.value='NONE';btn.style.color='#C00';setTimeout("viewed=false",3000)}
106+ else {btn.value='NONE';btn.style.color='#C00';}
109107 }
110108 // サイズの切替
111109 function changeSize(btn){
@@ -124,15 +122,6 @@ function changeSize(btn){
124122 }
125123 // サムネイルの削除
126124 function removeThumb(btn){btn.parentElement.removeNode(true);}
127-function removeError(){
128- if(tp){
129- var l=tp.childNodes.length;
130- for(var i=l;i--;){
131- var stateBtn=tp.childNodes[i].childNodes[2];
132- if(stateBtn.tagName=="BUTTON" && stateBtn.innerText=="NONE"){stateBtn.parentElement.removeNode(true);}
133- }
134- }
135-}
136125 // 画像表示の切替
137126 function changeView(mode,href){
138127 if(!href){href=event.srcElement.src}
--- a/res/skin/skin30-2G/chie_popup.js
+++ b/res/skin/skin30-2G/chie_popup.js
@@ -15,7 +15,7 @@ var pb;
1515 function namePopup(e,before,num,after){
1616 var hnum=tohan(num);
1717 //3周年、4周年、Socket774、774KB、21禁、[1-30]、などに対応
18- if(before){if(hnum==5 || hnum==774 || hnum==4 || hnum==21 || hnum==1 || hnum==30){return}}
18+ if(before){if(hnum==3 || hnum==774 || hnum==4 || hnum==21 || hnum==1 || hnum==30){return}}
1919 e.outerHTML = "<b>"+before+"</b><b>"+addAnchor(hnum,num)+"</b><b>"+after+"</b>";
2020 }
2121 //=========弱あぼ〜んのポップアップ
--- a/res/skin/skin30-2G/chie_search.js
+++ b/res/skin/skin30-2G/chie_search.js
@@ -110,7 +110,7 @@ function clearResult(obj){
110110 for(var i=l;i--;){
111111 var dt=eval(arrayElement); var dd=dt.nextSibling;
112112 //Live機能追加 - 透明あぼ〜ん
113- if(browser=="Live2ch"){location.href='func:ABONECLEAR?'+dt.firstChild.innerText;}
113+ if(browser=="Live2ch"){location.href='func:ABONECLEAR?'+dt.firstChild.innerText;continue;}
114114 dt.removeNode(true); dd.removeNode(true);
115115 }
116116 }
@@ -144,7 +144,7 @@ function findIt(word){
144144
145145 //==========逆参照
146146 function searchRef(obj){
147- if(obj.name!='referred'){
147+ if(obj.name!='reffered'){
148148 var num=obj.firstChild.innerText;
149149 var l=dds.length;
150150 var found = new Array;
@@ -171,7 +171,7 @@ function searchRef(obj){
171171 if(exist){
172172 var dt=dds[i].previousSibling.cloneNode(true);
173173 found.unshift(dt.outerHTML.replace(/name=.*?>/,">")+dd.outerHTML.replace(/<a name=.*>/i,""));
174- obj.name="referred";
174+ obj.name="reffered";
175175 }
176176 }
177177 if(found.length){returnRef(obj.nextSibling,found)}
@@ -190,12 +190,13 @@ function returnRef(dd,found){
190190 function copyText(target){
191191 var num=event.srcElement.parentElement.name;
192192 var obj=getDTfromAnc(num);
193+ var decoy=document.createDocumentFragment();
193194 var textarea=document.createElement("TEXTAREA");
194- var message=obj.nextSibling.innerText.replace(/\s(\r\n|$)/g,"\n");
195- if (target=="res") {textarea.value=obj.firstChild.innerText+" :"+obj.childNodes[1].innerText+" :"+obj.lastChild.innerText+"\n"+message;}
195+ if (target=="res") {textarea.value=obj.firstChild.innerText+" :"+obj.childNodes[1].innerText+" :"+obj.lastChild.innerText+"\n"+obj.nextSibling.innerText+"\n";}
196196 else if(target=="name"){textarea.value=obj.childNodes[1].innerText+"\n";}
197- else if(target=="id") {textarea.value="ID:"+(obj.lastChild.innerText.split(/ID:/))[1]+"\n";}
198- var copyText=textarea.createTextRange();
197+ else if(target=="id") {textarea.value=obj.lastChild.innerText.substr(15)+"\n";}
198+ decoy.appendChild(textarea);
199+ var copyText=decoy.getElementsByTagName("TEXTAREA")[0].createTextRange();
199200 copyText.execCommand("Copy")
200201 event.srcElement.parentElement.removeNode(true);
201202 }
--- a/res/skin/skin30-3G/Header.html
+++ b/res/skin/skin30-3G/Header.html
@@ -15,11 +15,11 @@
1515 var start_time = new Date();
1616 //==========グローバル変数
1717 var anchorHead="";
18-var skinName="skin30-3 v3.3.09xx";
18+var skinName="skin30-3 v3.1.11xx";
1919 var browser="ギコナビ";
2020 //==========ギコナビ用アンカーの判定(0:処理無し,1:ポップアップ,2:ボタン挿入)
2121 // ギコナビでは、レスアンカーは相対アドレスで記述される
22-function checkAnchor(href){if(!href){return(0)}
22+function checkAnchor(href){
2323 if (href.match(/decoy:|about:blank/)){return(1)}
2424 else if(href.match(/menu:|read\.cgi|2ch\.net\/.*\/kako/)){return(0)}
2525 else{return(2)}
@@ -27,22 +27,13 @@ function checkAnchor(href){if(!href){return(0)}
2727 //==========リンク設定
2828 function addAnchor(inner,num){
2929 if(!t_url){threadurl()}
30- var url=document.getElementsByName("ThreadURL")[0].content;
31- if(url.match(/&/)){
32- return('<a href="../test/read.cgi?bbs='+t_bbs+'&key='+t_key+'&st='+inner+'&to='+inner+'&nofirst=true" target="_blank" onclick="blur()">'+num+'</a>')
33- }else{
34- return('<a href="../test/read.cgi/'+t_bbs+'/'+t_key+'/'+inner+'" target="_blank" onclick="blur()">'+num+'</a>')
35- }
30+ return('<a href="../test/read.cgi/'+t_bbs+'/'+t_key+'/'+inner+'" target="_blank" onclick="blur()">'+num+'</a>')
3631 }
3732 // スレッドURLの取得
3833 var t_url=false,t_domain,t_bbs,t_key;
3934 function threadurl(){
4035 var threadurl=document.getElementsByName("ThreadURL")[0].content;
41- if(threadurl.match(/&/)){
42- threadurl.match(/bbs=(.*)&key=(\d*)/);
43- }else{
44- threadurl.match(/^.*\/test\/read.cgi\/(.*)\/(.*)\//);
45- }
36+ threadurl.match(/^.*\/test\/read.cgi\/(.*)\/(.*)\//);
4637 t_url=true;
4738 t_bbs=RegExp.$1;
4839 t_key=RegExp.$2;
--- a/res/skin/skin30-3G/chie_event.js
+++ b/res/skin/skin30-3G/chie_event.js
@@ -2,8 +2,7 @@
22 //外部関数:tohan
33 //外部変数:anchorHead,lightmode,getID,skinName,browser,dts
44 //グローバル変数
5-var buffer=1; // 低速回線や低速マシンの場合にはbufferの数値を増やすとより正確にジャンプ(1増やすと0.1秒遅れる)
6-var newResJump=1; // 新着レスジャンプ(0:ブラウザ任せ、1:読了時のみ、2:常時)*かちゅ、OpenJane、twintailのみの設定
5+var buffer=1; // 低速回線や低速マシンの場合にはbufferの数値を増やすとより正確にジャンプ(1増やすと0.1秒遅れる)
76 //========Click処理→search,他
87 document.onclick = clickEvent;
98 function clickEvent(){
@@ -41,19 +40,10 @@ function mouseOverEvent() {
4140 else if(e.innerText.match(/^あぼ〜ん$/)) {abonePopup(e);}
4241 }
4342 if(e.tagName=='A'){
44- if(!e.innerText.match(/%/)){ // URLエンコードでありがちな%がなければ
45- e.href=e.href.replace(/>/g,"");
46- e.href=e.href.replace(/\/ime.nu/g,"");
47- }else{
48- try{
49- e.title=decodeURI(e.innerText);
50- }catch(err){
51- // ShiftJIS,EUC-JPのデコードは面倒だからつけない。
52- }
53- }
43+ e.href=e.href.replace(/>/g,"");
44+ e.href=e.href.replace(/\/ime.nu/g,"");
5445 if (checkAnchor(e.href)==2){insButton(e);return;}
5546 else if(checkAnchor(e.href)==1){
56- if(event.shiftKey){if(e.rel){e.href=e.rel}return}
5747 // 多段ポップアップ
5848 var aNum=parseInt(e.sourceIndex)+1;
5949 if(!document.getElementById("p"+aNum)){
@@ -106,10 +96,10 @@ function scroll_End(){document.getElementsByTagName("DL")[0].lastChild.scrollInt
10696 // IMG
10797 function imgCommand(mode,s){
10898 if(!waited){
109- var nHTML='<div id="command" onclick="clearCommand()"><input type="button" onclick="allImageLoad(\'all\')" value="全レス一括読込"><br><input type="button" onclick="allImageLoad(\'new\')" value="新レス一括読込"><br><input type="button" onclick="removeError()" value="Error画像削除"><br></div>';
99+ var nHTML='<div id="command" onclick="clearCommand()"><input type="button" onclick="allImageLoad(\'all\')" value="全レス一括読込"><br><input type="button" onclick="allImageLoad(\'new\')" value="新レス一括読込"><br></div>';
110100 event.srcElement.parentElement.insertAdjacentHTML('beforeEnd',nHTML);
111101 if(skinName.match(/30-2/)){
112- //if(!lightmode){document.getElementById("command").insertAdjacentHTML('afterBegin','<input type="button" onclick="changePanel()" value="パネル切替"><br>')}
102+ if(!lightmode){document.getElementById("command").insertAdjacentHTML('afterBegin','<input type="button" onclick="changePanel()" value="パネル切替"><br>')}
113103 document.getElementById("command").insertAdjacentHTML('beforeEnd','<input type="button" onclick="changeMode()" value="モード切替">')
114104 }
115105 waited=true;
@@ -119,7 +109,7 @@ function imgCommand(mode,s){
119109 }
120110 function clearCommand(){
121111 waited=false;
122- document.getElementById("command").removeNode(true);
112+ event.srcElement.parentElement.removeNode(true);
123113 }
124114 //=========左長押処理→copyMenu()
125115 document.onmousedown=mousedownEvent;
@@ -132,7 +122,6 @@ function mousedownEvent(){
132122 clickTimer=setTimeout("copyMenu()",500);
133123 }
134124 }
135-
136125 //コピーメニュー→colorChange(),search::copyText()
137126 function copyMenu(){
138127 clickCancel=true; clearTimeout(clickTimer);
@@ -176,53 +165,27 @@ function key(){
176165 }
177166 }
178167
179-//=========新着レス取得後処理(標準スキン未対応ブラウザ用)←Timer又はFooterから呼び出し
180-//=========かちゅ、ABone、ゾヌ2
168+//=========Load(代替)処理(各Footerもしくは、Headerでのループから呼出し)
181169 var newResNum=parseInt(document.getElementsByName("GetRescount")[0].content)+1;
182170 var k=0;
183-function loadEvent(num){ // Timer又はFooterから
184- //====新着レスジャンプ
185- if(newResJump==0){clearInterval(timerID);return} //「ブラウザ任せ」なら終了
186- //新着レスの開始番号を取得
187- if (browser=="かちゅ〜しゃ"){if(isNaN(newResNum)){while(dts[k]){if(dts[k].className=="new"){newResNum=parseInt(dts[k].firstChild.innerText);break;} k++;}}}
188- else if(browser=="ホットゾヌ2"){newResNum=num+1;}
171+function loadEvent(){
172+ //GetRescount代替 "数字でなければ"
173+ if(isNaN(newResNum)){while(dts[k]){if(dts[k].className=="new"){newResNum=parseInt(dts[k].firstChild.innerText);break;} k++; }}
174+ //新着開始ナンバーを設定してジャンプ
189175 var anc=document.anchors(anchorHead+newResNum);
190- if(!anc || !anc.parentElement){return} // 透明あぼ〜んされてたら終了
191- //新着レスジャンプ
192- scr=lightmode ? document.body : document.getElementById("dl");
193- viewPos=scr.scrollTop+scr.clientHeight;// スクロール後の画面下部位置
194- endPos =anc.offsetTop+20; // 新レスアンカー位置
195- //最後まで読了 or 「常に新着ジャンプ」ならジャンプ
196- if(viewPos>endPos || newResJump==2){clearInterval(timerID);setTimeout("moveToNew("+newResNum+")",buffer*100)}
197- else{firstNew=document.anchors(anchorHead+newResNum).parentElement.nextSibling;}
198-}
199-//=========新着レス取得後処理(標準スキン対応ブラウザ用)←NewMarkから呼び出し
200-//=========OpenJ、twin
201-var scr,viewPos,endPos=0;
202-function reloadEvent(){
203- //====既読化
204- var lastDt=dts[dts.length-2];if(!lastDt){return}// 全部新着なら終了
205- while(lastDt && lastDt.className=="new"){lastDt.className="";lastDt=lastDt.previousSibling.previousSibling;}
206- //====新着レスジャンプ
207- if(newResJump==0){return} //「ブラウザ任せ」なら終了
208- var ancs=document.anchors;
209- var newResNum=parseInt(ancs[ancs.length-1].name)+1;
210- scr=lightmode ? document.body : document.getElementById("dl");
211- viewPos=scr.scrollTop;
212- endPos =scr.scrollHeight-scr.clientHeight-20;
213- //最後まで読了 or 「常に新着ジャンプ」ならジャンプ
214- if(viewPos>endPos || newResJump==2){setTimeout("moveToNew("+newResNum+")",buffer*100);}
176+ if(anc && anc.parentElement){
177+ if(buffer==0){clearInterval(timerID);moveToNew(newResNum);}
178+ else {buffer--;}
179+ }
215180 }
216-
217181 // 新着レス移動+新着レスの位置を記憶
218182 var firstNew;
219183 function moveToNew(num){
220184 firstNew=getDTfromAnc(num);
221- while(!firstNew){num--;firstNew=getDTfromAnc(num);} //対象が透明あぼ〜んなら数を減らす
222- firstNew.scrollIntoView(true);
185+ if(firstNew){firstNew.scrollIntoView(true);}
223186 }
224187
225-//=========DoubleClick処理→defaultPopup()
188+//=========DblClick処理→defaultPopup()
226189 document.ondblclick=defaultPopup;
227190 function defaultPopup(){
228191 var num=document.selection.createRange().text.replace(/\s$/,"");
@@ -237,17 +200,4 @@ function defaultPopup(){
237200 obj.innerText="ID:"+num;
238201 search(obj);
239202 }
240-}
241-
242-//=========Copy処理
243-//headから読むとbodyは見えないので、専用ブラウザの特質を利用してbodyの後ろに書き出す
244-//本来どおりheadに書き出すSkinManager対策で判定を一つ入れる
245- if(document.body) document.write('<script type="text/javascript">document.body.oncopy=copyEvent</script>\n');
246-function copyEvent(){
247- var textarea=document.createElement("TEXTAREA");
248- textarea.value=document.selection.createRange().text.replace(/\s(\r\n|$)/g,"\n");
249- var copyText=textarea.createTextRange();
250- copyText.execCommand("Copy");
251- return false;
252-}
253-
203+}
\ No newline at end of file
--- a/res/skin/skin30-3G/chie_popup.js
+++ b/res/skin/skin30-3G/chie_popup.js
@@ -15,7 +15,7 @@ var pb;
1515 function namePopup(e,before,num,after){
1616 var hnum=tohan(num);
1717 //3周年、4周年、Socket774、774KB、21禁、[1-30]、などに対応
18- if(before){if(hnum==5 || hnum==774 || hnum==4 || hnum==21 || hnum==1 || hnum==30){return}}
18+ if(before){if(hnum==3 || hnum==774 || hnum==4 || hnum==21 || hnum==1 || hnum==30){return}}
1919 e.outerHTML = "<b>"+before+"</b><b>"+addAnchor(hnum,num)+"</b><b>"+after+"</b>";
2020 }
2121 //=========弱あぼ〜んのポップアップ
--- a/res/skin/skin30-3G/chie_search.js
+++ b/res/skin/skin30-3G/chie_search.js
@@ -110,7 +110,7 @@ function clearResult(obj){
110110 for(var i=l;i--;){
111111 var dt=eval(arrayElement); var dd=dt.nextSibling;
112112 //Live機能追加 - 透明あぼ〜ん
113- if(browser=="Live2ch"){location.href='func:ABONECLEAR?'+dt.firstChild.innerText;}
113+ if(browser=="Live2ch"){location.href='func:ABONECLEAR?'+dt.firstChild.innerText;continue;}
114114 dt.removeNode(true); dd.removeNode(true);
115115 }
116116 }
@@ -144,7 +144,7 @@ function findIt(word){
144144
145145 //==========逆参照
146146 function searchRef(obj){
147- if(obj.name!='referred'){
147+ if(obj.name!='reffered'){
148148 var num=obj.firstChild.innerText;
149149 var l=dds.length;
150150 var found = new Array;
@@ -171,7 +171,7 @@ function searchRef(obj){
171171 if(exist){
172172 var dt=dds[i].previousSibling.cloneNode(true);
173173 found.unshift(dt.outerHTML.replace(/name=.*?>/,">")+dd.outerHTML.replace(/<a name=.*>/i,""));
174- obj.name="referred";
174+ obj.name="reffered";
175175 }
176176 }
177177 if(found.length){returnRef(obj.nextSibling,found)}
@@ -190,12 +190,13 @@ function returnRef(dd,found){
190190 function copyText(target){
191191 var num=event.srcElement.parentElement.name;
192192 var obj=getDTfromAnc(num);
193+ var decoy=document.createDocumentFragment();
193194 var textarea=document.createElement("TEXTAREA");
194- var message=obj.nextSibling.innerText.replace(/\s(\r\n|$)/g,"\n");
195- if (target=="res") {textarea.value=obj.firstChild.innerText+" :"+obj.childNodes[1].innerText+" :"+obj.lastChild.innerText+"\n"+message;}
195+ if (target=="res") {textarea.value=obj.firstChild.innerText+" :"+obj.childNodes[1].innerText+" :"+obj.lastChild.innerText+"\n"+obj.nextSibling.innerText+"\n";}
196196 else if(target=="name"){textarea.value=obj.childNodes[1].innerText+"\n";}
197- else if(target=="id") {textarea.value="ID:"+(obj.lastChild.innerText.split(/ID:/))[1]+"\n";}
198- var copyText=textarea.createTextRange();
197+ else if(target=="id") {textarea.value=obj.lastChild.innerText.substr(15)+"\n";}
198+ decoy.appendChild(textarea);
199+ var copyText=decoy.getElementsByTagName("TEXTAREA")[0].createTextRange();
199200 copyText.execCommand("Copy")
200201 event.srcElement.parentElement.removeNode(true);
201202 }
Show on old repository browser