• R/O
  • HTTP
  • SSH
  • HTTPS

gikonavi: 提交


Commit MetaInfo

修訂d5d5b0bfc6438a107218a4916799681f7ef1fdf1 (tree)
時間2005-12-28 02:13:00
作者cvs2git <cvs2git>
Commitercvs2git

Log Message

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

Change Summary

差異

--- a/Editor.dfm
+++ b/Editor.dfm
@@ -106,7 +106,7 @@ object EditorForm: TEditorForm
106106 Width = 149
107107 Height = 20
108108 DropDownCount = 20
109- ItemHeight = 12
109+ ItemHeight = 0
110110 TabOrder = 0
111111 end
112112 object MailComboBox: TComboBox
@@ -115,7 +115,7 @@ object EditorForm: TEditorForm
115115 Width = 149
116116 Height = 20
117117 DropDownCount = 20
118- ItemHeight = 12
118+ ItemHeight = 0
119119 TabOrder = 1
120120 OnChange = MailComboBoxChange
121121 end
@@ -358,12 +358,6 @@ object EditorForm: TEditorForm
358358 object N01: TMenuItem
359359 Caption = '-'
360360 end
361- object Samba241: TMenuItem
362- Action = UpdateSambaAction
363- end
364- object N7: TMenuItem
365- Caption = '-'
366- end
367361 object CloseMenu: TMenuItem
368362 Action = CloseAction
369363 end
@@ -1726,13 +1720,6 @@ object EditorForm: TEditorForm
17261720 OnExecute = BeLogInOutEActionExecute
17271721 OnUpdate = BeLogInOutEActionUpdate
17281722 end
1729- object UpdateSambaAction: TAction
1730- Category = #12501#12449#12452#12523
1731- Caption = 'Samba24'#12398#35373#23450#20516#12434#26356#26032#12377#12427
1732- Hint = 'Samba24'#12398#35373#23450#20516#12434#26356#26032#12377#12427
1733- OnExecute = UpdateSambaActionExecute
1734- OnUpdate = UpdateSambaActionUpdate
1735- end
17361723 end
17371724 object IdLogDebug: TIdLogDebug
17381725 OnReceive = IdLogDebugReceive
--- a/Editor.pas
+++ b/Editor.pas
@@ -124,9 +124,6 @@ type
124124 SaveNameMailAction: TAction;
125125 ToolButton7: TToolButton;
126126 BeLogInOutEAction: TAction;
127- UpdateSambaAction: TAction;
128- Samba241: TMenuItem;
129- N7: TMenuItem;
130127
131128 procedure EditorPageChange(Sender: TObject);
132129 procedure FormCreate(Sender: TObject);
@@ -179,8 +176,6 @@ type
179176 procedure SaveNameMailActionExecute(Sender: TObject);
180177 procedure BeLogInOutEActionExecute(Sender: TObject);
181178 procedure BeLogInOutEActionUpdate(Sender: TObject);
182- procedure UpdateSambaActionUpdate(Sender: TObject);
183- procedure UpdateSambaActionExecute(Sender: TObject);
184179 private
185180 FThreadItem: TThreadItem;
186181 FBoard: TBoard;
@@ -210,18 +205,24 @@ type
210205 procedure SaveSendFile;
211206 procedure SetContent(Content: string; ABrowser: TWebBrowser);
212207 function GetResultType(ResponseText: string): TGikoResultType;
208+
209+ procedure ReadSambaTime(const AHost: string); overload;
210+ procedure WriteSambaTime(const AHost: string; ATime: TDateTime); overload;
211+ function ReadSettingTime(const AHost: string): Integer; overload;
212+ function CheckSambaTime(const AHost: string; ATime: TDateTime): Boolean; overload;
213+ procedure SetSamba24(AURL: string); overload;
214+
213215 //Sambaの時間を読み込む
214- procedure ReadSambaTime(const AHost: string);
216+ procedure ReadSambaTime(); overload;
215217 //Sambaに時間を書き込む
216- procedure WriteSambaTime(const AHost: string; ATime: TDateTime);
218+ procedure WriteSambaTime(ATime: TDateTime); overload;
217219 //Sambaの設定値を読み込む
218- function ReadSettingTime(const AHost: string): Integer;
220+ function ReadSettingTime(): Integer ; overload;
219221 //Sambaに引っかかるか検査する
220- function CheckSambaTime(const AHost: string; ATime: TDateTime): Boolean;
222+ function CheckSambaTime(ATime: TDateTime): Boolean; overload;
221223 //Sambaの設定値を書き込む
222- procedure SetSamba24(AURL: string);
223- //Sambaの設定値を更新する
224- procedure UpdateSamba(const AHost: String; value: Integer);
224+ procedure SetSamba24(); overload;
225+
225226 /// 引用符の取得
226227 function GetOEIndentChar : string;
227228 /// 本文の取得
@@ -258,7 +259,7 @@ type
258259 implementation
259260
260261 uses
261- Giko, ItemDownload, MojuUtils, IdGlobal, GikoMessage;
262+ Giko, ItemDownload, MojuUtils, IdGlobal;
262263 const
263264 CAPTION_NAME_NEW: string = 'ギコナビ スレ立てエディタ';
264265 CAPTION_NAME_RES: string = 'ギコナビ レスエディタ';
@@ -967,7 +968,7 @@ begin
967968 if MsgResult = IDNO then begin
968969 Board.SPID := '';
969970 Board.PON := '';
970- FWork := false;
971+ FWork := false;
971972 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
972973 DrawMenuBar(Handle);
973974 Exit;
@@ -976,7 +977,7 @@ begin
976977 end;
977978
978979 if ResultType = grtOK then begin
979- if (GikoSys.Setting.UseSamba) and (Timer1.Enabled) then
980+ if GikoSys.Setting.UseSamba then
980981 WriteSambaTime(FHost, Now());
981982 State := gdsComplete;
982983 end else if ResultType = grtCookie then begin
@@ -1045,8 +1046,8 @@ begin
10451046 Exit;
10461047 end;
10471048 end else begin
1048- if (GikoSys.Setting.UseSamba) and (Timer1.Enabled) then
1049- WriteSambaTime(FHost, Now());
1049+ if GikoSys.Setting.UseSamba then
1050+ WriteSambaTime(FHost, Now());
10501051 State := gdsError;
10511052 raise Exception.Create('');
10521053 end;
@@ -1097,9 +1098,9 @@ begin
10971098 GikoForm.PlaySound('ResEnd');
10981099 SaveSendFile;
10991100 if FThreadItem = nil then
1100- GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, gmiOK)
1101+ GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.Setting.GetMessage(Ord(gmNewSure)), nil, gmiOK)
11011102 else
1102- GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, gmiOK);
1103+ GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.Setting.GetMessage(Ord(gmNewRes)), nil, gmiOK);
11031104 Close;
11041105 Exit;
11051106 end;
@@ -1107,20 +1108,20 @@ begin
11071108 GikoForm.PlaySound('ResEnd');
11081109 SaveSendFile;
11091110 if FThreadItem = nil then
1110- GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, gmiOK)
1111+ GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.Setting.GetMessage(Ord(gmNewSure)), nil, gmiOK)
11111112 else
1112- GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, gmiOK);
1113+ GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.Setting.GetMessage(Ord(gmNewRes)), nil, gmiOK);
11131114 Close;
11141115 end else if State = gdsError then begin
11151116 if FThreadItem = nil then
1116- GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, gmiOK)
1117+ GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.Setting.GetMessage(Ord(gmNewSure)), nil, gmiOK)
11171118 else
1118- GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, gmiOK);
1119+ GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.Setting.GetMessage(Ord(gmNewRes)), nil, gmiOK);
11191120
11201121 EditorPage.ActivePage := PreviewTab;
11211122 SetContent(ResponseText, Browser);
11221123 end else if State = gdsAbort then begin
1123- GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiSAD);
1124+ GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.Setting.GetMessage(Ord(gmAbort)), nil, gmiSAD);
11241125 end;
11251126 end;
11261127
@@ -1279,13 +1280,13 @@ begin
12791280 if state = gdsComplete then begin
12801281 GikoForm.PlaySound('ResEnd');
12811282 SaveSendFile;
1282- GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmNewSure), nil, gmiOK);
1283+ GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.Setting.GetMessage(Ord(gmNewSure)), nil, gmiOK);
12831284 FWork := False;
12841285 Close;
12851286 end else if State = gdsError then begin
1286- GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmSureError), nil, gmiNG);
1287+ GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.Setting.GetMessage(Ord(gmSureError)), nil, gmiNG);
12871288 end else if State = gdsAbort then begin
1288- GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiNG);
1289+ GikoForm.AddMessageList(FBoard.Title + ' ' + GikoSys.Setting.GetMessage(Ord(gmAbort)), nil, gmiNG);
12891290 end;
12901291 end else begin
12911292 // レス
@@ -1295,13 +1296,13 @@ begin
12951296 if state = gdsComplete then begin
12961297 GikoForm.PlaySound('ResEnd');
12971298 SaveSendFile;
1298- GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmNewRes), nil, gmiOK);
1299- FWork := False;
1299+ GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.Setting.GetMessage(Ord(gmNewRes)), nil, gmiOK);
1300+ FWork := False;
13001301 Close;
13011302 end else if State = gdsError then begin
1302- GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmResError), nil, gmiOK);
1303+ GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.Setting.GetMessage(Ord(gmResError)), nil, gmiOK);
13031304 end else if State = gdsAbort then begin
1304- GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
1305+ GikoForm.AddMessageList(FThreadItem.Title + ' ' + GikoSys.Setting.GetMessage(Ord(gmAbort)), nil, gmiOK);
13051306 end;
13061307 end;
13071308 end else begin
@@ -1596,8 +1597,6 @@ begin
15961597 ini.WriteInteger('Setting', AHost, 0);
15971598 ini.UpdateFile;
15981599 end;
1599- //StatusBarにこの鯖の規定値を表示する
1600- StatusBar.Panels[2].Text := 'Samba24規定値' + IntToStr(Result);
16011600 finally
16021601 ini.Free;
16031602 end;
@@ -1633,7 +1632,8 @@ begin
16331632 Host := Copy(Host, 1, AnsiPos('.', Host) - 1);
16341633 FHost := Host; //FHost=鯖名
16351634 ReadSambaTime(FHost); //以前の書き込み時間を読み込む
1636- ReadSettingTime(FHost); //Sambaの設定を読み込む
1635+ //StatusBarにこの鯖の規定値を表示する
1636+ StatusBar.Panels[2].Text := 'Samba24規定値' + IntToStr(ReadSettingTime(FHost));
16371637 end;
16381638 end;
16391639 procedure TEditorForm.FormCloseQuery(Sender: TObject;
@@ -2098,8 +2098,8 @@ begin
20982098
20992099 if ABoard = nil then Exit;
21002100
2101- URL := ABoard.GETHEADTXTFileName;
2102- GikoSys.OpenBrowser(URL, gbtAuto);
2101+ URL := ABoard.GETHEADTXTFileName;
2102+ GikoSys.OpenBrowser(URL, gbtAuto);
21032103 end;
21042104
21052105 procedure TEditorForm.SaveNameMailActionExecute(Sender: TObject);
@@ -2112,8 +2112,8 @@ function TEditorForm.LFusianaGet(s: String): Boolean;
21122112 var
21132113 i: Integer;
21142114 begin
2115- i := AnsiPos('fusianasan', s);
2116- if (i > 0) then Result := True else Result := False;
2115+ i := AnsiPos('fusianasan', s);
2116+ if (i > 0) then Result := True else Result := False;
21172117 end;
21182118
21192119 procedure TEditorForm.BeLogInOutEActionExecute(Sender: TObject);
@@ -2166,49 +2166,101 @@ begin
21662166 end;
21672167 end;
21682168
2169-//! Sambaの設定値を更新する
2170-procedure TEditorForm.UpdateSamba(const AHost: String; value: Integer);
2169+//Sambaの時間を読み込む
2170+procedure TEditorForm.ReadSambaTime();
21712171 var
21722172 ini :TMemIniFile;
2173+ skey: String;
2174+ board: TBoard;
2175+ tmp: string;
21732176 begin
2177+ Timer1.Enabled := false; //経過秒数表示TimerをOffにする(これがONのときSamba24対策On)
21742178 ini := TMemIniFile.Create(GikoSys.GetSambaFileName);
21752179 try
2176- ini.WriteInteger('Setting', AHost, value);
2177- ini.UpdateFile;
2180+ //文字列で読み取って、変換関数でTDateTimeへ
2181+ if( FThreadItem <> nil ) then
2182+ board := FThreadItem.ParentBoard
2183+ else
2184+ board := FBoard;
2185+
2186+ if (board <> nil) then begin
2187+ //BBSIDとホスト名が一致していたら BBSID@ホスト名
2188+ if( board.BBSID = FHost ) then
2189+ skey := board.BBSID + '@' + FHost
2190+ else
2191+ skey := board.BBSID;
2192+
2193+ tmp := ini.ReadString('Send', skey, DateTimeToStr(ZERO_DATE));
2194+
2195+ //BBSIDのキーが無いならFHostに切り替えてみる
2196+ if (tmp = DateTimeToStr(ZERO_DATE)) then begin
2197+ tmp := ini.ReadString('Send', FHost, DateTimeToStr(ZERO_DATE));
2198+ end;
2199+ FSambaTime := ConvertDateTimeString(tmp);
2200+ end;
21782201 finally
21792202 ini.Free;
21802203 end;
2204+ FNow := Now(); //現在時間を取得(Timer表示用で、Checkするときは再びNow()を呼ぶ)
2205+ Timer1.Enabled := true; //経過秒数表示TimerをOnにする(これがONのときSamba24対策On)
21812206 end;
21822207
2183-//! サンバ更新のアクションのUpdateイベント 簡単のためタイマーと同じにしておく
2184-procedure TEditorForm.UpdateSambaActionUpdate(Sender: TObject);
2208+//Sambaに時間を書き込む
2209+procedure TEditorForm.WriteSambaTime(ATime: TDateTime);
2210+var
2211+ ini :TMemIniFile;
21852212 begin
2186- UpdateSambaAction.Enabled := Timer1.Enabled;
2213+ ini := TMemIniFile.Create(GikoSys.GetSambaFileName);
2214+ try
2215+// ini.WriteDateTime('Send', AHost, ATime);
2216+ ini.UpdateFile;
2217+ finally
2218+ ini.Free;
2219+ end;
21872220 end;
2188-
2189-//! サンバ更新アクション
2190-procedure TEditorForm.UpdateSambaActionExecute(Sender: TObject);
2221+//Sambaの設定値を読み込む
2222+function TEditorForm.ReadSettingTime(): Integer ;
21912223 var
2192- input : String;
2193- i : Integer;
2194-begin
2195- if InputQuery('Samba24設定値更新', '新しい設定値を入力してください', input) then begin
2196- input := ZenToHan(input);
2197- if GikoSys.IsNumeric(input) then begin
2198- UpdateSamba(FHost, StrToInt(input));
2199- //全てのフォームから、同じホストのエディタに読み込み指示
2200- for i := 0 to Screen.FormCount - 1 do begin
2201- if Screen.Forms[i] is TEditorForm then begin
2202- if FHost = TEditorForm(Screen.Forms[i]).FHost then begin
2203- TEditorForm(Screen.Forms[i]).ReadSettingTime(FHost);
2204- end;
2205- end;
2224+ ini :TMemIniFile;
2225+ skey: String;
2226+ board: TBoard;
2227+begin
2228+ ini := TMemIniFile.Create(GikoSys.GetSambaFileName);
2229+ try
2230+ if( FThreadItem <> nil ) then
2231+ board := FThreadItem.ParentBoard
2232+ else
2233+ board := FBoard;
2234+
2235+ if (board <> nil) then begin
2236+ //BBSIDとホスト名が一致していたら BBSID@ホスト名
2237+ if( board.BBSID = FHost ) then
2238+ skey := board.BBSID + '@' + FHost
2239+ else
2240+ skey := board.BBSID;
2241+
2242+ Result := ini.ReadInteger('Setting', skey, -1);
2243+ //BBSIDのキーが無いならFHostを使う
2244+ if( Result = -1 ) then
2245+ Result := ini.ReadInteger('Setting', FHost, -1);
2246+
2247+ //規定値が設定されていないときは、ファイルに書きたす。
2248+ if Result = -1 then begin
2249+ ini.WriteInteger('Setting', FHost, 0);
2250+ ini.UpdateFile;
22062251 end;
2207- end else begin
2208- ShowMessage('数値を入力してください');
2209- UpdateSambaActionExecute(Sender);
2210- end;
2252+ end;
2253+ finally
2254+ ini.Free;
22112255 end;
22122256 end;
2257+//Sambaに引っかかるか検査する
2258+function TEditorForm.CheckSambaTime(ATime: TDateTime): Boolean;
2259+begin
2260+end;
2261+//Sambaの設定値を書き込む
2262+procedure TEditorForm.SetSamba24();
2263+begin
2264+end;
22132265
22142266 end.
--- a/Favorite.pas
+++ b/Favorite.pas
@@ -50,7 +50,7 @@ type
5050 { Private 宣言 }
5151 FStack: TStack;
5252 FTreeView: TTreeView;
53- FModified: boolean;
53+
5454 procedure ReadNode(Node: IXMLNode);
5555 procedure AddSaveString(Node: TTreeNode; SaveList: TStringList);
5656 // procedure AddSaveString(Node: TTreeNode; XMLNode: IXMLNode);
@@ -61,15 +61,14 @@ type
6161 // procedure SAXCharacters(Sender: TObject; const PCh: SAXString);
6262 public
6363 { Public 宣言 }
64- procedure Clear;
65- function GetFavoriteFilePath() : String;
66- function SaveFavoriteFile(FileName: String) : Boolean;
64+ procedure Clear;
65+ function GetFavoriteFilePath() : String;
66+ function SaveFavoriteFile(FileName: String) : Boolean;
6767 procedure SetFavTreeView(TreeView: TTreeView);
6868 procedure ReadFavorite;
6969 procedure WriteFavorite;
70- procedure URLReplace(oldURLs: TStringList; newURLs: TStringList);
70+ procedure URLReplace(oldURLs: TStringList; newURLs: TStringList);
7171 property TreeView: TTreeView read FTreeView;
72- property Modified: boolean read FModified write FModified;
7372 end;
7473
7574 var
@@ -288,8 +287,7 @@ begin
288287 end;
289288 TreeView.Items.Clear;
290289 TreeView.Items.EndUpdate;
291-
292- FavoriteDM.Modified := true;
290+ //TreeView.Free;
293291 end;
294292
295293 procedure TFavoriteDM.SetFavTreeView(TreeView: TTreeView);
@@ -307,7 +305,7 @@ var
307305 FavFolder: TFavoriteFolder;
308306 LinkExists: Boolean;
309307 begin
310- FavoriteDM.Modified := true;
308+
311309 FileName := GikoSys.GetConfigDir + FAVORITE_FILE_NAME;
312310
313311 FavFolder := TFavoriteFolder.Create;
@@ -479,7 +477,6 @@ var
479477 SaveList: TStringList;
480478
481479 begin
482- FavoriteDM.Modified := true;
483480 FileName := GikoSys.GetConfigDir + FAVORITE_FILE_NAME;
484481 if FileExists(FileName) then begin
485482 tmpFileName := GikoSys.GetConfigDir + '~' + FAVORITE_FILE_NAME;
@@ -491,10 +488,7 @@ begin
491488 try
492489 SaveList.Add('<?xml version="1.0" encoding="Shift_JIS" standalone="yes"?>');
493490 SaveList.Add('<favorite>');
494- try
495- AddSaveString(TreeView.Items.GetFirstNode.getFirstChild, SaveList);
496- except
497- end;
491+ AddSaveString(TreeView.Items.GetFirstNode.getFirstChild, SaveList);
498492 SaveList.Add('</favorite>');
499493 SaveList.SaveToFile(FileName);
500494 finally
--- a/Gesture.pas
+++ b/Gesture.pas
@@ -130,6 +130,10 @@ begin
130130 FLastTime := GetTickCount;
131131 FLastPoint := Point(x, y);
132132 end;
133+ //マウスを再設定
134+ if (hwnd <> 0) and (hwnd <> FHandle) then
135+ SetCapture(hwnd);
136+
133137 Result := True;
134138 end;
135139 end;
@@ -139,7 +143,7 @@ begin
139143 FLastTime := 0;
140144 FLastPoint := Point(x, y);
141145 FStartPoint := Point(x, y);
142- Result := True;
146+ CheckAction := True;
143147 SetCapture(FHandle);
144148 end;
145149 end;
--- a/Giko.dfm
+++ b/Giko.dfm
@@ -1,6 +1,6 @@
11 object GikoForm: TGikoForm
2- Left = 363
3- Top = 92
2+ Left = 332
3+ Top = 101
44 HorzScrollBar.Visible = False
55 VertScrollBar.Visible = False
66 AutoScroll = False
@@ -39,9 +39,6 @@ object GikoForm: TGikoForm
3939 Width = 500
4040 end
4141 item
42- Width = 80
43- end
44- item
4542 Width = 50
4643 end>
4744 SimplePanel = False
@@ -98,6 +95,7 @@ object GikoForm: TGikoForm
9895 Height = 167
9996 BorderStyle = bsNone
10097 ChangeDelay = 50
98+ DragMode = dmAutomatic
10199 HideSelection = False
102100 Images = ItemIcon16
103101 Indent = 19
@@ -106,12 +104,16 @@ object GikoForm: TGikoForm
106104 RightClickSelect = True
107105 ShowRoot = False
108106 TabOrder = 0
107+ OnClick = TreeViewClick
109108 OnCollapsed = TreeViewCollapsed
109+ OnCollapsing = TreeViewCollapsing
110110 OnCustomDraw = TreeViewCustomDraw
111111 OnCustomDrawItem = TreeViewCustomDrawItem
112+ OnDblClick = TreeViewDblClick
113+ OnExpanding = TreeViewExpanding
112114 OnExpanded = TreeViewExpanded
113115 OnKeyDown = TreeViewKeyDown
114- OnMouseDown = TreeViewMouseDown
116+ OnMouseUp = TreeViewMouseUp
115117 end
116118 object Panel3: TPanel
117119 Left = 0
@@ -226,13 +228,18 @@ object GikoForm: TGikoForm
226228 RightClickSelect = True
227229 ShowRoot = False
228230 TabOrder = 3
231+ OnClick = FavoriteTreeViewClick
232+ OnCollapsing = FavoriteTreeViewCollapsing
233+ OnDblClick = FavoriteTreeViewDblClick
229234 OnDragDrop = FavoriteTreeViewDragDrop
230235 OnDragOver = FavoriteTreeViewDragOver
231236 OnEdited = FavoriteTreeViewEdited
232237 OnEditing = FavoriteTreeViewEditing
233238 OnEndDrag = FavoriteTreeViewEndDrag
239+ OnExpanding = FavoriteTreeViewExpanding
234240 OnKeyDown = FavoriteTreeViewKeyDown
235241 OnMouseDown = FavoriteTreeViewMouseDown
242+ OnMouseUp = FavoriteTreeViewMouseUp
236243 end
237244 object FavoriteToolBar: TToolBar
238245 Left = 0
--- a/Giko.pas
+++ b/Giko.pas
@@ -20,10 +20,6 @@ uses
2020 ExternalBoardPlugInMain, StdActns, Variants, ExtActns,IdTCPConnection,
2121 IdBaseComponent, IdTCPClient, AppEvnts, BrowserRecord;
2222
23-const
24- NGWORDNAME_PANEL = 3;
25- THREADSIZE_PANEL = 2;
26-
2723 type
2824 TGikoTreeType = (gttNone, gtt2ch, gttHistory, gttFavorite);
2925 TToolBarSettingSenderType = (tssNone, tssMain, tssList, tssBrowser);
@@ -358,7 +354,7 @@ type
358354 N63: TMenuItem;
359355 N64: TMenuItem;
360356 dummy1: TMenuItem;
361- TreeSelectLogDeletePopupMenu: TMenuItem;
357+ TreeSelectLogDeletePopupMenu: TMenuItem;
362358 N65: TMenuItem;
363359 BBSSelectPopupMenu: TPopupMenu;
364360 PlugInMenu: TMenuItem;
@@ -378,7 +374,7 @@ type
378374 ResRangeKokoPMenuItem: TMenuItem;
379375 ResRangeNewPMenuItem: TMenuItem;
380376 ResRangeAllPMenuItem: TMenuItem;
381- BrowsBoradHeadAction1: TMenuItem;
377+ BrowsBoradHeadAction1: TMenuItem;
382378 ThreadRangePopupMenu: TPopupMenu;
383379 A15: TMenuItem;
384380 L8: TMenuItem;
@@ -398,7 +394,7 @@ type
398394 N73: TMenuItem;
399395 SelectComboBoxPanel: TPanel;
400396 SelectComboBoxSplitter: TImage;
401- ToolButton1: TToolButton;
397+ ToolButton1: TToolButton;
402398 N74: TMenuItem;
403399 WikiFAQ: TMenuItem;
404400 GikoApplicationEvents: TApplicationEvents;
@@ -423,6 +419,7 @@ type
423419 procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
424420 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
425421 procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
422+ procedure TreeViewDblClick(Sender: TObject);
426423 procedure ListViewCustomDraw(Sender: TCustomListView;
427424 const ARect: TRect; var DefaultDraw: Boolean);
428425 procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
@@ -494,6 +491,7 @@ type
494491 procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
495492 Shift: TShiftState);
496493 procedure FavoriteTreePopupMenuPopup(Sender: TObject);
494+ procedure FavoriteTreeViewDblClick(Sender: TObject);
497495 procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
498496 procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
499497 Shift: TShiftState; X, Y: Integer);
@@ -512,12 +510,15 @@ type
512510 var Handled: Boolean);
513511 procedure BrowserTabPopupMenuPopup(Sender: TObject);
514512 procedure BrowserTabResize(Sender: TObject);
513+ procedure TreeViewClick(Sender: TObject);
515514 procedure TreeViewKeyDown(Sender: TObject; var Key: Word;
516515 Shift: TShiftState);
517516 procedure FavoriteTreeViewMouseDown(Sender: TObject;
518517 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
519518 procedure MessagePanelResize(Sender: TObject);
520519 procedure OnResized;
520+ procedure FavoriteTreeViewMouseUp(Sender: TObject;
521+ Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
521522 procedure SelectTimerTimer(Sender: TObject);
522523 procedure ListViewColumnRightClick(Sender: TObject;
523524 Column: TListColumn; Point: TPoint);
@@ -533,16 +534,27 @@ type
533534 Shift: TShiftState);
534535 procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
535536 var AllowEdit: Boolean);
536- procedure CabinetCloseSpeedButtonClick(Sender: TObject);
537+ procedure CabinetCloseSpeedButtonClick(Sender: TObject);
537538 procedure FavoriteArrangeToolButtonClick(Sender: TObject);
538539 procedure GikoApplicationEventsMessage(var Msg: tagMSG;
539540 var Handled: Boolean);
540541 procedure GikoApplicationEventsDeactivate(Sender: TObject);
541542 procedure GikoApplicationEventsException(Sender: TObject; E: Exception);
542- procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
543+ procedure FavoriteTreeViewClick(Sender: TObject);
544+ procedure FavoriteTreeViewCollapsing(Sender: TObject; Node: TTreeNode;
545+ var AllowCollapse: Boolean);
546+ procedure FavoriteTreeViewExpanding(Sender: TObject; Node: TTreeNode;
547+ var AllowExpansion: Boolean);
548+ procedure TreeViewCollapsing(Sender: TObject; Node: TTreeNode;
549+ var AllowCollapse: Boolean);
550+ procedure TreeViewExpanding(Sender: TObject; Node: TTreeNode;
551+ var AllowExpansion: Boolean);
552+ procedure TreeViewMouseUp(Sender: TObject; Button: TMouseButton;
543553 Shift: TShiftState; X, Y: Integer);
544554 private
545555 { Private 宣言 }
556+ FSortIndex: Integer;
557+ FSortOrder: Boolean;
546558 FEnabledCloseButton: Boolean;
547559 FClickNode: TTreeNode;
548560 FHttpState: Boolean;
@@ -588,7 +600,6 @@ type
588600 FIsHandledWheel : Boolean; ///< 既に受け取った WM_MOUSEWHEEL かどうか
589601 DiffComp: Boolean; //Add by Genyakun スレが更新されたときにTrueになる
590602 FOrigenCaption: String; //お気に入りツリーのアイテム編集時の編集前の文字列
591- FPreviewBrowserRect: TRect; ///< プレビューの表示位置を記憶する
592603 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
593604 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
594605 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
@@ -689,6 +700,8 @@ type
689700 property ToolBarSettingSender : TToolBarSettingSenderType
690701 read FToolBarSettingSender write FToolBarSettingSender;
691702 property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
703+ property SortIndex: Integer read FSortIndex write FSortIndex;
704+ property SortOrder: Boolean read FSortOrder write FSortOrder;
692705 property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
693706 property WorkCount: Integer read FWorkCount write FWorkCount;
694707 procedure SetContent(inThread: TBrowserRecord);
@@ -820,7 +833,7 @@ uses
820833 FavoriteArrange, AddressHistory, Preview, Gesture,
821834 About, Option, Round, Splash, Sort, ListSelect, Imm,
822835 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
823- HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage;
836+ HTMLCreate, ListViewUtils, GikoDataModule;
824837
825838 const
826839 BLANK_HTML: string = 'about:blank';
@@ -859,6 +872,7 @@ var
859872 msg: string;
860873 i: Integer;
861874 wp: TWindowPlacement;
875+ s: string;
862876 begin
863877 {$IFDEF DEBUG}
864878 AllocConsole;
@@ -885,6 +899,7 @@ begin
885899 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
886900
887901 //アドレス履歴読み込み
902+ //AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.AddressHistoryCount);
888903 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
889904
890905 EnabledCloseButton := True;
@@ -1162,7 +1177,9 @@ begin
11621177 MoveToURL(ParamStr(i));
11631178 end;
11641179
1165- GikoDM.RepaintStatusBar;
1180+ s := GikoSys.FAbon.NGwordname;
1181+ StatusBar.Panels[2].Text := s;
1182+ StatusBar.Panels[2].Width := Max(StatusBar.Canvas.TextWidth(s), 100);
11661183 StatusBarResize(Sender);
11671184
11681185 dummy1.Caption := ItemReservPMenu.Caption;
@@ -1188,7 +1205,7 @@ begin
11881205 MouseGesture.SetHook( Handle );
11891206
11901207 //2ch言語読み出し
1191- GikoSys.SetGikoMessage;
1208+ GikoSys.Setting.SetMessages;
11921209
11931210 //オートログイン
11941211 if GikoSys.Setting.AutoLogin then
@@ -1200,7 +1217,6 @@ begin
12001217 FavoriteAddToolButton.Caption := '追加...';
12011218 AntiIndivAbonMenuItem.Caption := '個別あぼ〜ん解除';
12021219
1203-
12041220 end;
12051221
12061222 // CoolBar の設定を変数に保存
@@ -1521,6 +1537,7 @@ begin
15211537 //アドレス履歴保存
15221538 try
15231539 //AddressHistoryDMは自動生成フォームなので、解放は自動的にされる。
1540+ //AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.AddressHistoryCount);
15241541 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
15251542 except
15261543 end;
@@ -1655,6 +1672,7 @@ begin
16551672 GikoSys.Setting.ShowDialogForAllTabClose := false;
16561673 GikoDM.AllTabCloseAction.Execute;
16571674 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1675+
16581676 SetContent(BrowserNullTab);
16591677 //TreeViewクリア(BBS2ch.Freeの後にクリアするとXPスタイル時にエラー出る)
16601678 TreeView.Items.Clear;
@@ -1985,35 +2003,27 @@ procedure TGikoForm.ListViewColumnClick(Sender: TObject;
19852003 var
19862004 id, idx : Integer;
19872005 orderList : TList;
1988- vSortIndex : Integer;
1989- vSortOrder : Boolean;
19902006 begin
19912007 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
1992- if TObject( FActiveList ) is TBBS then begin
1993- orderList := GikoSys.Setting.BBSColumnOrder;
1994- vSortIndex := GikoSys.Setting.BBSSortIndex;
1995- vSortOrder := GikoSys.Setting.BBSSortOrder;
1996- end else if TObject( FActiveList ) is TCategory then begin
1997- orderList := GikoSys.Setting.CategoryColumnOrder;
1998- vSortIndex := GikoSys.Setting.CategorySortIndex;
1999- vSortOrder := GikoSys.Setting.CategorySortOrder;
2000- end else if TObject( FActiveList ) is TBoard then begin
2001- orderList := GikoSys.Setting.BoardColumnOrder;
2002- vSortIndex := GikoSys.Setting.BoardSortIndex;
2003- vSortOrder := GikoSys.Setting.BoardSortOrder;
2004- end else
2008+
2009+ if TObject( FActiveList ) is TBBS then
2010+ orderList := GikoSys.Setting.BBSColumnOrder
2011+ else if TObject( FActiveList ) is TCategory then
2012+ orderList := GikoSys.Setting.CategoryColumnOrder
2013+ else if TObject( FActiveList ) is TBoard then
2014+ orderList := GikoSys.Setting.BoardColumnOrder
2015+ else
20052016 Exit;
20062017
20072018 id := Integer( orderList[ idx ] );
20082019
2009-
2010- if vSortIndex = id then
2011- vSortOrder := not vSortOrder
2020+ if FSortIndex = id then
2021+ FSortOrder := not FSortOrder
20122022 else begin
2013- vSortOrder := id = 0;
2023+ FSortOrder := id = 0;
20142024 end;
20152025
2016- TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2026+ TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, FSortOrder, FSortIndex );
20172027 end;
20182028
20192029 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
@@ -2212,13 +2222,31 @@ begin
22122222 ListView.SetFocus;
22132223 ListView.SelectAll;
22142224 end;
2225+// *************************************************************************
2226+//! ツリービューのダブルクリックイベント
2227+// *************************************************************************
2228+procedure TGikoForm.TreeViewDblClick(Sender: TObject);
2229+var
2230+ pos : TPoint;
2231+ rect: TRect;
2232+begin
2233+ pos := FMouseDownPos;
2234+ if (FClickNode <> nil) and (FClickNode = TreeView.GetNodeAt(pos.X, pos.Y)) then begin
2235+ //マウスがnodeの上にいるか
2236+ rect := FClickNode.DisplayRect(true);
2237+ if ((rect.Left <= pos.X) and (rect.Right >= pos.X)) and
2238+ ((rect.Bottom >= pos.Y) and (rect.Top <= pos.Y)) then begin
2239+ TreeDoubleClick( FClickNode );
2240+ FClickNode := nil;
2241+ end;
2242+ end;
2243+end;
2244+
22152245 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
22162246 begin
22172247 AddMessageList(Msg, nil, Icon);
22182248 end;
2219-// *************************************************************************
2220-//! ダウンロードが完了したときに発生するイベント
2221-// *************************************************************************
2249+
22222250 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
22232251 var
22242252 ATitle: string;
@@ -2234,21 +2262,16 @@ begin
22342262 else
22352263 ATitle := Item.ThreadItem.Title;
22362264 if ATitle = '' then
2237- ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2265+ ATitle := GikoSys.Setting.GetMessage(Ord(gmUnKnown));
22382266
22392267 if Item.State in [gdsComplete, gdsDiffComplete] then begin
22402268 //正常終了
22412269 if Item.DownType = gdtBoard then begin
22422270 //板
22432271 Item.SaveListFile;
2244- AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2272+ AddMessageList(ATitle + ' ' + GikoSys.Setting.GetMessage(Ord(gmSureItiran)), nil, gmiOK);
22452273 if GetActiveList = Item.Board then begin
22462274 FActiveList := nil;
2247- //自動ソートの場合板一覧のソート順をクリアする
2248- if (GikoSys.Setting.AutoSortThreadList) then begin
2249- GikoSys.Setting.BoardSortIndex := 0;
2250- GikoSys.Setting.BoardSortOrder := True;
2251- end;
22522275 SetActiveList(Item.Board);
22532276 end;
22542277 Item.Board.Modified := True;
@@ -2295,12 +2318,12 @@ begin
22952318
22962319 if Item.State = gdsComplete then begin
22972320 PlaySound('New');
2298- AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2321+ AddMessageList(ATitle + ' ' + GikoSys.Setting.GetMessage(Ord(gmSureSyutoku)), nil, gmiOK);
22992322 //Add by Genyakun
23002323 DiffComp := True;
23012324 end else begin
23022325 PlaySound('NewDiff');
2303- AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2326+ AddMessageList(ATitle + ' ' + GikoSys.Setting.GetMessage(Ord(gmSureDiff)), nil, gmiOK);
23042327 //Add by Genyakun
23052328 DiffComp := True;
23062329 end;
@@ -2333,18 +2356,18 @@ begin
23332356 //SetContent(Item.ThreadItem);
23342357 InsertBrowserTab(Item.ThreadItem);
23352358 end;}
2336- AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2359+ AddMessageList(ATitle + ' ' + GikoSys.Setting.GetMessage(Ord(gmNotMod)), nil, gmiSAD);
23372360 PlaySound('NoChange');
23382361 Screen.Cursor := crDefault;
23392362 end else if Item.State = gdsAbort then begin
23402363 //中断
2341- AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2364+ AddMessageList(ATitle + ' ' + GikoSys.Setting.GetMessage(Ord(gmAbort)), nil, gmiOK);
23422365 end else if Item.State = gdsError then begin
23432366 //エラー
23442367 s := Item.ErrText;
23452368 if s <> '' then
23462369 s := ':' + s;
2347- AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2370+ AddMessageList(ATitle + ' ' + GikoSys.Setting.GetMessage(Ord(gmError)) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
23482371 // if Item.ResponseCode = 302 then
23492372 // AddMessageList('板が移転したかもしれないので板更新を行ってください。', nil, gmiNG);
23502373 PlaySound('Error');
@@ -2524,9 +2547,6 @@ begin
25242547 BrowserNullTab := TBrowserRecord.Create;
25252548 BrowserNullTab.Browser := Browser;
25262549 end;
2527- if BrowserNullTab.thread <> ThreadItem then begin
2528- BrowserNullTab.Movement := '';
2529- end;
25302550 BrowserNullTab.thread := ThreadItem;
25312551 Result := BrowserNullTab;
25322552 BrowserTab.TabIndex := -1;
@@ -2556,7 +2576,6 @@ begin
25562576 idx := BrowserTab.TabIndex;
25572577 if (FActiveContent <> nil) and
25582578 (FActiveContent.Thread <> Thread.Thread) and
2559- (FActiveContent.Browser <> nil) and
25602579 (Assigned(FActiveContent.Browser.Document)) then begin
25612580 try
25622581 try
@@ -2575,7 +2594,7 @@ begin
25752594 ItemBoardImage.Picture := nil;
25762595 BrowserNameLabel.Caption := '';
25772596 ItemImage.Picture := nil;
2578- BrowserNullTab.Thread := nil;
2597+ BrowserNullTab.Thread := nil;
25792598 //TOleControl(BrowserNullTab.Browser).Visible := true;
25802599 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
25812600 FActiveContent := nil;
@@ -2632,8 +2651,6 @@ begin
26322651
26332652 if not ThreadIsLog then begin
26342653 Self.Caption := GikoDataModule.CAPTION_NAME ;
2635- //ステータスバーに表示しているスレの容量を消去
2636- StatusBar.Panels[THREADSIZE_PANEL].Text := '';
26372654 try
26382655 s := '<HTML><BODY><CENTER>このスレッドは取得していません</CENTER></BODY></HTML>';
26392656 doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
@@ -2645,10 +2662,6 @@ begin
26452662 end;
26462663 end else begin
26472664 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
2648- //ステータスバーに表示しているスレの容量を表示
2649- StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
2650- StatusBar.Panels[THREADSIZE_PANEL].Width :=
2651- Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
26522665 //Thread.Repaintは、スキン等の設定を変更したとき、Threadをダウンロードしたとき
26532666 //新規にThreadを開いたときに真になっている。
26542667 if Thread.Repaint then begin
@@ -2660,7 +2673,7 @@ begin
26602673 //GikoSys.CreateHTML2(doc, ThreadItem, sTitle);
26612674 HTMLCreater.CreateHTML2(doc, ThreadItem, sTitle);
26622675 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
2663-
2676+
26642677 if ThreadItem = nil then begin
26652678 FActiveContent := nil;
26662679 BrowserTab.Repaint;
@@ -2728,19 +2741,9 @@ begin
27282741 ListView.Selected := nil;
27292742 // ListView.Columns.Clear;
27302743 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
2731- and (FActiveContent.Thread.IsLogFile) then begin
2732- try
2733- Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
2734- except
2735- on E: Exception do begin
2736- //スレ一覧DL後などにFActiveContentの持つThreadが
2737- //削除されている場合があるのでここて処理する
2738- ReleaseBrowser(FActiveContent);
2739- FActiveContent.Thread := nil;
2740- Self.Caption := GikoDataModule.CAPTION_NAME;
2741- end;
2742- end;
2743- end else
2744+ and (FActiveContent.Thread.IsLogFile) then
2745+ Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
2746+ else
27442747 Self.Caption := GikoDataModule.CAPTION_NAME;
27452748 //Application.Title := CAPTION_NAME;
27462749
@@ -2749,11 +2752,14 @@ begin
27492752 Screen.Cursor := crHourGlass;
27502753 try
27512754 if Obj is TBBS then begin
2752- TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2755+ TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked,
2756+ FSortIndex, FSortOrder);
27532757 end else if Obj is TCategory then begin
2754- TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2758+ TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked,
2759+ FSortIndex, FSortOrder);
27552760 end else if Obj is TBoard then begin
2756- TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2761+ TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked,
2762+ FSortIndex, FSortOrder);
27572763 end;
27582764 finally
27592765 Screen.Cursor := crDefault;
@@ -3497,9 +3503,6 @@ begin
34973503 end else if TObject(Node.Data) is TBoard then begin
34983504 TBoard(Node.Data).NodeExpand := False;
34993505 end;
3500- if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3501- TreeClick(TreeView.Selected);
3502- end;
35033506 end;
35043507
35053508 procedure TGikoForm.MessageListViewResize(Sender: TObject);
@@ -3928,11 +3931,14 @@ var
39283931 idx: Integer;
39293932 begin
39303933
3934+// if NewTab = -1 then
3935+// ThreadItem := nil;
39313936 if not BrowserTab.Dragging then begin
39323937 FTabHintIndex := -1;
39333938 BrowserTab.Hint := '';
39343939 idx := BrowserTab.TabIndex;
39353940 if idx = -1 then begin
3941+ BrowserNullTab.Thread := nil;
39363942 SetContent(BrowserNullTab);
39373943
39383944 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
@@ -3958,6 +3964,8 @@ begin
39583964 end;
39593965 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
39603966 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
3967+// GikoSys.OnlyAHundredRes := TBrowserRecord(BrowserTab.Tabs.Objects[idx]).OnlyHundred;
3968+// OnlyAHundredRes.Checked := TBrowserRecord(BrowserTab.Tabs.Objects[idx]).OnlyHundred;
39613969 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
39623970
39633971 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
@@ -4144,11 +4152,6 @@ begin
41444152 FEvent := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
41454153 FEvent.OnContextMenu := OnDocumentContextMenu;
41464154 FEvent.OnClick := WebBrowserClick; //追加したOnClickイベント
4147- end else begin
4148- if FEvent <> nil then begin
4149- FEvent.Free;
4150- FEvent := nil;
4151- end;
41524155 end;
41534156
41544157 end;
@@ -4322,52 +4325,47 @@ procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
43224325 var
43234326 NewMenu: TMenuItem;
43244327 begin
4325- if FavoriteDM.Modified then begin
4326- FavoriteMenu.Clear;
4328+ FavoriteMenu.Clear;
43274329
4328- //お気に入りの追加
4329- NewMenu := TMenuItem.Create(MainMenu);
4330- NewMenu.Action := GikoDM.FavoriteAddAction;
4331- FavoriteMenu.Add(NewMenu);
4332- //お気に入りの整理
4333- NewMenu := TMenuItem.Create(FavoriteMenu);
4334- NewMenu.Action := GikoDM.FavoriteArrangeAction;
4335- FavoriteMenu.Add(NewMenu);
4336- //セパレータ
4337- FavoriteMenu.InsertNewLineAfter(NewMenu);
4338- CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4339- FavoriteDM.Modified := false;
4340- end;
4330+ //お気に入りの追加
4331+ NewMenu := TMenuItem.Create(MainMenu);
4332+ NewMenu.Action := GikoDM.FavoriteAddAction;
4333+ FavoriteMenu.Add(NewMenu);
4334+ //お気に入りの整理
4335+ NewMenu := TMenuItem.Create(FavoriteMenu);
4336+ NewMenu.Action := GikoDM.FavoriteArrangeAction;
4337+ FavoriteMenu.Add(NewMenu);
4338+ //セパレータ
4339+ NewMenu := TMenuItem.Create(FavoriteMenu);
4340+ NewMenu.Caption := '-';
4341+ FavoriteMenu.Add(NewMenu);
4342+
4343+ CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
43414344 end;
43424345
43434346 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
43444347 var
43454348 i: Integer;
4346- NewMenu: array of TMenuItem;
4349+ NewMenu: TMenuItem;
43474350 begin
4348- SetLength(NewMenu, Node.Count);
4349- Node := Node.getFirstChild;
4350- i := 0;
4351- while ( Node <> nil ) do begin
4352- NewMenu[i] := TFavoriteMenuItem.Create(nil);
4353- NewMenu[i].AutoHotkeys := maAutomatic;
4354- NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4355- TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4351+ for i := 0 to Node.Count - 1 do begin
4352+ NewMenu := TFavoriteMenuItem.Create(Self);
4353+ NewMenu.AutoHotkeys := maAutomatic;
4354+ NewMenu.Caption := CustomStringReplace(Node.Item[i].Text, '&', '&&');
4355+ TFavoriteMenuItem(NewMenu).Data := Node.Item[i].Data;
4356+ MenuItem.Add(NewMenu);
43564357
4357- if TObject(Node.Data) is TFavoriteFolder then begin
4358- NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4359- CreateFavMenu(Node, NewMenu[i]);
4360- end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4361- NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4362- NewMenu[i].OnClick := FavoriteClick;
4363- end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4364- NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4365- NewMenu[i].OnClick := FavoriteClick;
4358+ if TObject(Node.Item[i].Data) is TFavoriteFolder then begin
4359+ NewMenu.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4360+ CreateFavMenu(Node.Item[i], NewMenu);
4361+ end else if TObject(Node.Item[i].Data) is TFavoriteBoardItem then begin
4362+ NewMenu.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4363+ NewMenu.OnClick := FavoriteClick;
4364+ end else if TObject(Node.Item[i].Data) is TFavoriteThreadItem then begin
4365+ NewMenu.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4366+ NewMenu.OnClick := FavoriteClick;
43664367 end;
4367- Inc(i);
4368- Node := Node.getNextSibling;
43694368 end;
4370- MenuItem.Add(NewMenu);
43714369 end;
43724370
43734371 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
@@ -4431,7 +4429,9 @@ end;
44314429
44324430 procedure TGikoForm.FavoriteClick(Sender: TObject);
44334431 begin
4432+
44344433 FavoriteClick( Sender, True );
4434+
44354435 end;
44364436
44374437 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
@@ -4950,42 +4950,26 @@ begin
49504950
49514951 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST, ARect.Left, ARect.Top, WindowWidth, WindowHeight, SWP_NOACTIVATE or SWP_HIDEWINDOW);
49524952 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
4953- FPreviewBrowserRect := ARect;
4953+
49544954 // Style := GetWindowLong(FPreviewBrowser.Handle, GWL_EXSTYLE);
49554955 // SetWindowLong(FPreviewBrowser.Handle, GWL_EXSTYLE, Style xor WS_EX_APPWINDOW);
49564956
49574957 end;
49584958
49594959 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
4960-var
4961- Pos : TPoint;
49624960 begin
4963-
49644961 if PreviewTimer.Enabled then
49654962 PreviewTimer.Enabled := False;
49664963 if (FHint <> nil) and (IsWindowVisible(FHint.Handle)) then begin
49674964 FHint.ReleaseHandle;
49684965 FHint.ClearAllRes;
49694966 end;
4970-
4971- if (FPreviewBrowser <> nil)
4972- and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
4973- //ここで消されるのが問題
4974- //たぶんこれで表示範囲判定できているはず
4975- Pos := Mouse.CursorPos;
4976- Pos.X := Pos.X + Left;
4977- Pos.Y := Pos.Y + Top;
4978- if (FPreviewBrowserRect.Left > Pos.X) or
4979- (FPreviewBrowserRect.Right < Pos.X) or
4980- (FPreviewBrowserRect.Top > Pos.Y) or
4981- (FPreviewBrowserRect.Bottom < Pos.Y) then begin
4982- ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
4983- end;
4984- end;
4985-
4967+ if (FPreviewBrowser <> nil) and (IsWindowVisible(FPreviewBrowser.Handle)) then
4968+ ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
49864969 Message.Result := 1;
49874970 inherited;
49884971 end;
4972+
49894973 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
49904974 begin
49914975 GikoDM.MsgBarCloseAction.Execute;
@@ -5913,9 +5897,8 @@ end;
59135897 procedure TGikoForm.StatusBarResize(Sender: TObject);
59145898 begin
59155899 StatusBar.Panels[1].Width := StatusBar.Width -
5916- StatusBar.Panels[0].Width -
5917- StatusBar.Panels[THREADSIZE_PANEL].Width -
5918- StatusBar.Panels[NGWORDNAME_PANEL].Width;
5900+ StatusBar.Panels[0].Width -
5901+ StatusBar.Panels[2].Width;
59195902 end;
59205903 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
59215904 begin
@@ -6053,8 +6036,6 @@ begin
60536036 FDropSpaceNode := nil;
60546037 end;
60556038 end;
6056- //更新したことを教える
6057- FavoriteDM.Modified := true;
60586039
60596040 SetLinkBar;
60606041
@@ -6063,8 +6044,6 @@ end;
60636044 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
60646045 Node: TTreeNode; var S: String);
60656046 begin
6066- //更新したことを教える
6067- FavoriteDM.Modified := true;
60686047
60696048 FavoriteTreeView.ReadOnly := True;
60706049 SetLinkBar;
@@ -6092,10 +6071,7 @@ begin
60926071 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
60936072 end;
60946073 VK_SPACE:
6095- begin
6096- FClickNode := FavoriteTreeView.Selected;
6097- GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
6098- end;
6074+ FavoriteTreeViewDblClick( Sender );
60996075 end;
61006076 end else begin
61016077 //編集中にESCを押したら、編集を終了して、元の文字列に戻す
@@ -6228,6 +6204,27 @@ begin
62286204 end;
62296205
62306206 end;
6207+// *************************************************************************
6208+//! お気に入りツリーのダブルクリックイベント
6209+// *************************************************************************
6210+procedure TGikoForm.FavoriteTreeViewDblClick(Sender: TObject);
6211+var
6212+ pos : TPoint;
6213+ rect: TRect;
6214+begin
6215+ //クリック時の選択イベントと同じならダブルクリック実行
6216+ pos := FMouseDownPos;
6217+ if (FClickNode <> nil) and (FClickNode = FavoriteTreeView.GetNodeAt(pos.X, pos.Y)) then begin
6218+ //マウスがnodeの上にいるか
6219+ rect := FClickNode.DisplayRect(true);
6220+ if ((rect.Left <= pos.X) and (rect.Right >= pos.X)) and
6221+ ((rect.Bottom >= pos.Y) and (rect.Top <= pos.Y)) then begin
6222+ GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
6223+ FClickNode := nil;
6224+ end;
6225+ end;
6226+end;
6227+
62316228 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
62326229 var
62336230 Found: TTreeNode;
@@ -6313,8 +6310,6 @@ begin
63136310 finally
63146311 FDropSpaceNode := nil;
63156312 end;
6316- //更新したことを教える
6317- FavoriteDM.Modified := true;
63186313 SetLinkBar;
63196314 end;
63206315
@@ -6658,8 +6653,13 @@ begin
66586653
66596654 end;
66606655 // *************************************************************************
6661-//! ツリービューのKeyDownイベント
6656+//! ツリービューのクリックイベント
66626657 // *************************************************************************
6658+procedure TGikoForm.TreeViewClick(Sender: TObject);
6659+begin
6660+ FClickNode := TreeView.Selected;
6661+ FMouseDownPos := TreeView.ScreenToClient(Mouse.CursorPos);
6662+end;
66636663 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
66646664 Shift: TShiftState);
66656665 begin
@@ -6672,35 +6672,21 @@ begin
66726672 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
66736673 end;
66746674 end;
6675-//! お気に入りのMouseDownイベント
6675+
66766676 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
66776677 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
66786678 var
66796679 favItem : TTreeNode;
66806680 favThreadItem : TFavoriteThreadItem;
6681- rect: TRect;
66826681 begin
6682+
66836683 case Button of
6684- mbLeft:
6684+{ mbLeft:
66856685 begin
6686- if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6687- (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6688- //マウスがnodeの上にいるか
6689- rect := FavoriteTreeView.Selected.DisplayRect(true);
6690- if ((rect.Left <= X) and (rect.Right >= X)) and
6691- ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6692- if ssDouble in Shift then begin
6693- FClickNode := FavoriteTreeView.Selected;
6694- GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6695- FClickNode := nil;
6696- end else begin
6697- FavoriteClick(
6698- TObject(FavoriteTreeView.Selected));
6699- end;
6700- end;
6701- end;
6686+ FMouseDownPos.X := X;
6687+ FMouseDownPos.Y := Y;
67026688 end;
6703- mbMiddle:
6689+} mbMiddle:
67046690 begin
67056691 favItem := FavoriteTreeView.GetNodeAt( X, Y );
67066692 if favItem = nil then Exit;
@@ -6760,6 +6746,16 @@ end;
67606746 // *************************************************************************
67616747 //! お気に入りツリーのマウスアップイベント
67626748 // *************************************************************************
6749+procedure TGikoForm.FavoriteTreeViewMouseUp(Sender: TObject;
6750+ Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6751+begin
6752+ if (Button = mbLeft) and not (ssDouble in Shift) then begin
6753+ if (FClickNode <> nil) and (FClickNode = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6754+ FavoriteClick( TObject( FClickNode ) );
6755+ end;
6756+ end;
6757+end;
6758+
67636759 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
67646760 var
67656761 p : TPoint;
@@ -6838,21 +6834,18 @@ var
68386834 rec : TBrowserRecord;
68396835 i, bound : Integer;
68406836 begin
6841- bound := BrowserTab.Tabs.Count -1;
6837+ bound := BrowserTab.Tabs.Count -1;
68426838 if bound = -1 then begin
68436839 Result := False;
68446840 Exit; //forに飛ばないで操作を抜ける
6845- end;
6841+ end;
68466842
6847- for i := 0 to bound do begin
6848- try
6849- rec := TBrowserRecord( BrowserTab.Tabs.Objects[ i ] );
6850- if( rec <> nil) and (rec.Thread <> nil) then
6851- AStringList.Add( rec.Thread.URL );
6852- except
6853- end;
6854- end;
6855- Result := True;
6843+ for i := 0 to bound do begin
6844+ rec := TBrowserRecord( BrowserTab.Tabs.Objects[ i ] );
6845+ if( rec <> nil) and (rec.Thread <> nil) then
6846+ AStringList.Add( rec.Thread.URL );
6847+ end;
6848+ Result := True;
68566849 end;
68576850
68586851 function TGikoForm.SaveTabURLs : Boolean;
@@ -6867,15 +6860,12 @@ begin
68676860 SaveStringList := TStringList.Create;
68686861 try
68696862 if GetTabURLs(SaveStringList) then begin
6870- try
6871- if FileExists( GikoSys.GetAppDir + Filename) then begin
6872- if FileExists( GikoSys.GetAppDir + bFilename) then
6873- DeleteFile(GikoSys.GetAppDir + bFilename);
6863+ if FileExists( GikoSys.GetAppDir + Filename) then begin
6864+ if FileExists( GikoSys.GetAppDir + bFilename) then
6865+ DeleteFile(GikoSys.GetAppDir + bFilename);
68746866
6875- //バックアップを作る。
6876- RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6877- end;
6878- except
6867+ //バックアップを作る。
6868+ RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
68796869 end;
68806870 SaveStringList.SaveToFile(GikoSys.GetAppDir + Filename);
68816871 Result := true;
@@ -6886,8 +6876,6 @@ begin
68866876 end;
68876877
68886878 function TGikoForm.LoadTabURLs : Boolean;
6889-const
6890- TABFILE = 'tab.sav';
68916879 var
68926880 i, bound : Integer;
68936881 item : TThreadItem;
@@ -6896,7 +6884,7 @@ var
68966884 fileName : string;
68976885 begin
68986886
6899- fileName := ExtractFilePath(Application.ExeName) + TABFILE;
6887+ fileName := ExtractFilePath(Application.ExeName) + 'tab.sav';
69006888 URLs := TStringList.Create();
69016889 GikoTab := GikoSys.Setting.BrowserTabAppend;
69026890 try
@@ -6912,10 +6900,6 @@ begin
69126900 if item <> nil then
69136901 InsertBrowserTab( item, false );
69146902 end;
6915- //最初の1枚に設定 アドレスの設定のためのカラ呼び
6916- if BrowserTab.Tabs.Count > 0 then begin
6917- BrowserTab.OnChange(nil);
6918- end;
69196903 end else
69206904 Result := False;
69216905 end else
@@ -7635,6 +7619,61 @@ begin
76357619 end;
76367620 end;
76377621 // *************************************************************************
7622+//! お気に入りツリーのクリックイベント
7623+// *************************************************************************
7624+procedure TGikoForm.FavoriteTreeViewClick(Sender: TObject);
7625+begin
7626+ //現在選択されているアイテムを保存
7627+ FClickNode := FavoriteTreeView.Selected;
7628+ FMouseDownPos := FavoriteTreeView.ScreenToClient(Mouse.CursorPos);
7629+end;
7630+// *************************************************************************
7631+//! お気に入りツリーのアイテムの縮小時イベント
7632+// *************************************************************************
7633+procedure TGikoForm.FavoriteTreeViewCollapsing(Sender: TObject;
7634+ Node: TTreeNode; var AllowCollapse: Boolean);
7635+begin
7636+ //縮小されたら保存されているクリック時選択アイテムをクリア
7637+ FClickNode := nil;
7638+end;
7639+// *************************************************************************
7640+//! お気に入りツリーのアイテムの展開時イベント
7641+// *************************************************************************
7642+procedure TGikoForm.FavoriteTreeViewExpanding(Sender: TObject;
7643+ Node: TTreeNode; var AllowExpansion: Boolean);
7644+begin
7645+ //展開されたら保存されているクリック時選択アイテムをクリア
7646+ FClickNode := nil;
7647+end;
7648+// *************************************************************************
7649+//! ツリービューのアイテムの縮小時イベント
7650+// *************************************************************************
7651+procedure TGikoForm.TreeViewCollapsing(Sender: TObject; Node: TTreeNode;
7652+ var AllowCollapse: Boolean);
7653+begin
7654+ FClickNode := nil;
7655+end;
7656+// *************************************************************************
7657+//! ツリービューのアイテムの展開時イベント
7658+// *************************************************************************
7659+procedure TGikoForm.TreeViewExpanding(Sender: TObject; Node: TTreeNode;
7660+ var AllowExpansion: Boolean);
7661+begin
7662+ FClickNode := nil;
7663+end;
7664+// *************************************************************************
7665+//! ツリービューのマウスアップイベント
7666+// *************************************************************************
7667+procedure TGikoForm.TreeViewMouseUp(Sender: TObject; Button: TMouseButton;
7668+ Shift: TShiftState; X, Y: Integer);
7669+begin
7670+ if (Button = mbLeft) and not (ssDouble in Shift) then begin
7671+ if (FClickNode <> nil) and (FClickNode = TreeView.GetNodeAt(X, Y)) then begin
7672+ TreeClick(FClickNode);
7673+ end;
7674+ end;
7675+end;
7676+// *************************************************************************
76387677 //! ダウンロードコントロールスレッドの生成
76397678 // *************************************************************************
76407679 procedure TGikoForm.CreateControlThread();
@@ -7742,32 +7781,6 @@ begin
77427781 except
77437782 end;
77447783 end;
7745-//! キャビネットのマウスダウンイベント
7746-procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7747- Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7748-var
7749- rect : TRect;
7750-begin
7751- case Button of
7752- mbLeft:
7753- begin
7754- if (TreeView.Selected <> nil) and
7755- (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7756- //マウスがnodeの上にいるか
7757- rect := TreeView.Selected.DisplayRect(true);
7758- if ((rect.Left <= X) and (rect.Right >= X)) and
7759- ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7760- // クリックとダブルクリックをココで判定
7761- if ssDouble in Shift then begin
7762- TreeDoubleClick( TreeView.Selected );
7763- end else begin
7764- TreeClick(TreeView.Selected);
7765- end;
7766- end;
7767- end;
7768- end;
7769- end;
7770-end;
77717784
77727785 initialization
77737786 OleInitialize(nil);
--- a/GikoDataModule.dfm
+++ b/GikoDataModule.dfm
@@ -1195,12 +1195,6 @@ object GikoDM: TGikoDM
11951195 Hint = #12462#12467#12490#12499'Wiki'#12398'FAQ'#12434#34920#31034#12377#12427
11961196 OnExecute = WikiFAQWebPageActionExecute
11971197 end
1198- object ThreadSizeCalcForFileAction: TAction
1199- Category = #12484#12540#12523
1200- Caption = #12473#12524#12483#12489#12398#23481#37327#12434#12501#12449#12452#12523#12363#12425#20877#35336#31639#12377#12427
1201- Hint = #12473#12524#12483#12489#12398#23481#37327#12434#12501#12449#12452#12523#12363#12425#20877#35336#31639#12377#12427
1202- OnExecute = ThreadSizeCalcForFileActionExecute
1203- end
12041198 end
12051199 object ToobarImageList: TImageList
12061200 Left = 44
--- a/GikoDataModule.pas
+++ b/GikoDataModule.pas
@@ -211,7 +211,6 @@ type
211211 WikiFAQWebPageAction: TAction;
212212 ToobarImageList: TImageList;
213213 SaveDialog: TSaveDialog;
214- ThreadSizeCalcForFileAction: TAction;
215214 procedure EditNGActionExecute(Sender: TObject);
216215 procedure ReloadActionExecute(Sender: TObject);
217216 procedure GoFowardActionExecute(Sender: TObject);
@@ -393,9 +392,9 @@ type
393392 procedure MidokuActionExecute(Sender: TObject);
394393 procedure AllSelectActionExecute(Sender: TObject);
395394 procedure AllSelectActionUpdate(Sender: TObject);
396- procedure ThreadSizeCalcForFileActionExecute(Sender: TObject);
397395 private
398396 { Private 宣言 }
397+ procedure RepaintStatusBar;
399398 procedure ClearResFilter;
400399 procedure SetResRange(range: Integer);
401400 procedure SetThreadAreaHorNormal;
@@ -404,11 +403,8 @@ type
404403 procedure SetThreadAreaVertical(gls : TGikoListState);
405404 procedure SetThreadReadProperty(read: Boolean);
406405 procedure SelectThreadSaveToFile(dat: Boolean);
407- function GetSortProperties(List: TObject;var vSortOrder: Boolean): Boolean;
408- procedure RecalcThreadSize(limit : Integer);
409406 public
410407 { Public 宣言 }
411- procedure RepaintStatusBar;
412408 published
413409 { Published 宣言 }
414410 //! TActionでGetActiveContentがnil以外で有効になる
@@ -434,7 +430,7 @@ uses
434430 ToolBarUtil, NewBoard, HTMLCreate, IndividualAbon,
435431 GikoBayesian, About, ShellAPI,
436432 RoundName, RoundData, Menus, ListViewUtils,
437- ThreadControl, GikoMessage;
433+ ThreadControl;
438434
439435
440436 {$R *.dfm}
@@ -520,10 +516,9 @@ var
520516 begin
521517 //ステータスに表示されるNGワードファイル名を更新
522518 s := GikoSys.FAbon.NGwordname;
523- GikoForm.StatusBar.Panels.Items[GiKo.NGWORDNAME_PANEL].Text := s;
519+ GikoForm.StatusBar.Panels.Items[2].Text := s;
524520 //ステータスの表示サイズのリサイズ
525- GikoForm.StatusBar.Panels[GiKo.NGWORDNAME_PANEL].Width
526- := Max(GikoForm.StatusBar.Canvas.TextWidth(s), 100);
521+ GikoForm.StatusBar.Panels[2].Width := Max(GikoForm.StatusBar.Canvas.TextWidth(s), 100);
527522 GikoForm.StatusBarResize(nil);
528523 end;
529524 // *************************************************************************
@@ -615,8 +610,7 @@ begin
615610 end else begin
616611 GikoForm.ClickNode.Text := InputBox( '名前の変更', 'お気に入りの新しい名前を入力してください', GikoForm.ClickNode.Text );
617612 end;
618- //更新したことを教える
619- FavoriteDM.Modified := true;
613+
620614 GikoForm.SetLinkBar;
621615 end;
622616 // *************************************************************************
@@ -644,8 +638,6 @@ begin
644638 // FClickNode.Selected.Expanded := True;
645639 GikoForm.FavoriteTreeView.Selected := Node;
646640 GikoForm.ClickNode := Node;
647- //更新したことを教える
648- FavoriteDM.Modified := true;
649641 FavoriteTreeViewRenameAction.Execute;
650642 finally
651643 end;
@@ -676,8 +668,6 @@ begin
676668 end;
677669
678670 GikoForm.ClickNode.Delete;
679- //更新したことを教える
680- FavoriteDM.Modified := true;
681671
682672 GikoForm.SetLinkBar;
683673
@@ -695,21 +685,26 @@ end;
695685 // *************************************************************************
696686 procedure TGikoDM.FavoriteTreeViewReloadActionExecute(Sender: TObject);
697687 var
688+ ThreadItem: TThreadItem;
698689 FavThread: TFavoriteThreadItem;
690+ Board: TBoard;
699691 FavBoard: TFavoriteBoardItem;
700692 shiftDown: Boolean;
701693 begin
702- if (GikoForm.ClickNode = nil) then Exit;
694+
695+ if GikoForm.ClickNode = nil then Exit;
703696
704697 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
705698
706699 if TObject( GikoForm.ClickNode.Data ) is TFavoriteThreadItem then begin
707700 FavThread := TFavoriteThreadItem( GikoForm.ClickNode.Data );
708- if FavThread.Item <> nil then
709- GikoForm.DownloadContent(FavThread.Item, shiftDown);
701+ ThreadItem := FavThread.Item;
702+ if ThreadItem <> nil then
703+ GikoForm.DownloadContent(ThreadItem, shiftDown);
710704 end else if TObject( GikoForm.ClickNode.Data ) is TFavoriteBoardItem then begin
711705 FavBoard := TFavoriteBoardItem( GikoForm.ClickNode.Data );
712- GikoForm.DownloadList(FavBoard.Item, shiftDown);
706+ Board := FavBoard.Item;
707+ GikoForm.DownloadList(Board, shiftDown);
713708 end;
714709
715710 end;
@@ -1822,7 +1817,7 @@ begin
18221817 //ログアウト
18231818 GikoSys.Dolib.Disconnect;
18241819 LoginAction.Checked := False;
1825- GikoForm.AddMessageList(GikoSys.GetGikoMessage(gmLogout), nil, gmiOK);
1820+ GikoForm.AddMessageList(GikoSys.Setting.GetMessage(Ord(gmLogout)), nil, gmiOK);
18261821 LoginAction.Caption := 'ログイン(&L)';
18271822 end else begin
18281823 TmpCursor := GikoForm.ScreenCursor;
@@ -1842,7 +1837,7 @@ begin
18421837 end;
18431838 if GikoSys.Dolib.Connect then begin
18441839 LoginAction.Checked := True;
1845- GikoForm.AddMessageList(GikoSys.GetGikoMessage(gmLogin) + GikoSys.Setting.UserID, nil, gmiOK);
1840+ GikoForm.AddMessageList(GikoSys.Setting.GetMessage(Ord(gmLogin)) + GikoSys.Setting.UserID, nil, gmiOK);
18461841 LoginAction.Caption := 'ログアウト(&L)';
18471842 //LoginToolButton.Style := tbsCheck;
18481843 end else begin
@@ -1872,7 +1867,7 @@ begin
18721867 GikoSys.Dolib.ForcedConnect;
18731868 if GikoSys.Dolib.Connect then begin
18741869 LoginAction.Checked := True;
1875- GikoForm.AddMessageList(GikoSys.GetGikoMessage(gmForceLogin) + GikoSys.Setting.UserID, nil, gmiOK);
1870+ GikoForm.AddMessageList(GikoSys.Setting.GetMessage(Ord(gmForceLogin)) + GikoSys.Setting.UserID, nil, gmiOK);
18761871 LoginAction.Caption := 'ログアウト(&L)';
18771872 //LoginToolButton.Style := tbsCheck;
18781873 end else begin
@@ -3048,44 +3043,26 @@ begin
30483043
30493044 end;
30503045 // *************************************************************************
3051-//! スレ一覧の表示している内容にしたがって、ソートカラムの位置と方向を取得する
3052-// *************************************************************************
3053-function TGikoDM.GetSortProperties(List: TObject;
3054- var vSortOrder: Boolean): Boolean;
3055-begin
3056- Result := True;
3057- if (List <> nil) then begin
3058- if (List is TBBS) then begin
3059- vSortOrder := GikoSys.Setting.BBSSortOrder;
3060- end else if (List is TCategory) then begin
3061- vSortOrder := GikoSys.Setting.CategorySortOrder;
3062- end else if (List is TBoard) then begin
3063- vSortOrder := GikoSys.Setting.BoardSortOrder;
3064- end else begin
3065- Result := False;
3066- end;
3067- end else begin
3068- Result := False;
3069- end;
3070-end;
3071-// *************************************************************************
30723046 //! 現在のカラムをソートする
30733047 // *************************************************************************
30743048 procedure TGikoDM.SortActiveColumnActionExecute(Sender: TObject);
30753049 var
30763050 i : Integer;
30773051 so : boolean;
3052+ si : Integer;
30783053 begin
3079- if GetSortProperties(GikoForm.GetActiveList, so) then begin
3080- for i := 0 to GikoForm.ListView.Columns.Count - 1 do begin
3081- if (GikoForm.ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT1) or
3082- (GikoForm.ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT2) then begin
3083- so := not so;
3084- TListViewUtils.ListViewSort(nil, GikoForm.ListView,
3085- GikoForm.ListView.Column[ i ], ListNumberVisibleAction.Checked,
3086- so);
3087- break;
3088- end;
3054+ for i := 0 to GikoForm.ListView.Columns.Count - 1 do begin
3055+ if (GikoForm.ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT1) or
3056+ (GikoForm.ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT2) then begin
3057+ GikoForm.SortOrder := not GikoForm.SortOrder;
3058+ so := GikoForm.SortOrder;
3059+ si := GikoForm.SortIndex;
3060+ TListViewUtils.ListViewSort(nil, GikoForm.ListView,
3061+ GikoForm.ListView.Column[ i ], ListNumberVisibleAction.Checked,
3062+ so, si );
3063+ GikoForm.SortIndex := si;
3064+ GikoForm.SortOrder := so;
3065+ break;
30893066 end;
30903067 end;
30913068 end;
@@ -3095,6 +3072,8 @@ end;
30953072 procedure TGikoDM.SortNextColumnActionExecute(Sender: TObject);
30963073 var
30973074 i, id : Integer;
3075+ so : boolean;
3076+ si : Integer;
30983077 begin
30993078 for i := 0 to GikoForm.ListView.Columns.Count - 1 do begin
31003079 if (GikoForm.ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT1) or
@@ -3102,9 +3081,14 @@ begin
31023081 id := i + 1;
31033082 if id > GikoForm.ListView.Columns.Count - 1 then
31043083 id := 0;
3084+ GikoForm.SortOrder := id = 0;
3085+ so := GikoForm.SortOrder;
3086+ si := GikoForm.SortIndex;
31053087 TListViewUtils.ListViewSort( nil, GikoForm.ListView,
31063088 GikoForm.ListView.Column[ id ], ListNumberVisibleAction.Checked,
3107- id = 0);
3089+ so, si );
3090+ GikoForm.SortIndex := si;
3091+ GikoForm.SortOrder := so;
31083092 break;
31093093 end;
31103094 end;
@@ -3115,6 +3099,8 @@ end;
31153099 procedure TGikoDM.SortPrevColumnActionExecute(Sender: TObject);
31163100 var
31173101 i, id : Integer;
3102+ so : boolean;
3103+ si : Integer;
31183104 begin
31193105 for i := 0 to GikoForm.ListView.Columns.Count - 1 do begin
31203106 if (GikoForm.ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT1) or
@@ -3122,9 +3108,14 @@ begin
31223108 id := i - 1;
31233109 if id < 0 then
31243110 id := GikoForm.ListView.Columns.Count - 1;
3111+ GikoForm.SortOrder := id = 0;
3112+ so := GikoForm.SortOrder;
3113+ si := GikoForm.SortIndex;
31253114 TListViewUtils.ListViewSort( nil, GikoForm.ListView,
31263115 GikoForm.ListView.Column[ id ], ListNumberVisibleAction.Checked,
3127- id = 0);
3116+ so, si );
3117+ GikoForm.SortIndex := si;
3118+ GikoForm.SortOrder := so;
31283119 break;
31293120 end;
31303121 end;
@@ -3700,88 +3691,5 @@ begin
37003691 AllSelectAction.Enabled := GikoForm.ListView.SelCount > 0;
37013692 end;
37023693 ////////////////////////////////編集までおしまい/////////////////////
3703-//! スレッドのサイズを再計算する
3704-procedure TGikoDM.ThreadSizeCalcForFileActionExecute(Sender: TObject);
3705-const
3706- RECALC_MES : String = 'スレッドの容量をファイルから再計算します。'#13#10 +
3707- 'この操作中、ギコナビの他の操作をするとデータが破壊される恐れがあります。' +
3708- 'またこの操作は、非常に時間がかかる場合がありますが、よろしいですか?';
3709- RECALC_TITLE : String = 'スレッドの容量をファイルから再計算';
3710- LIMIT_SIZE = 1024;
3711-var
3712- limitSize : Integer;
3713- limitStr : String;
3714-begin
3715-{ まず、時間がかかることを警告するメッセージを出力
3716- 再計算するスレッドのサイズの閾値(デフォルト1024B)を確認
3717- プラグインを利用しないところで全てのログ有りスレッドを検索
3718- 閾値以下のサイズの場合、DATのファイルサイズと比較、ずれていれば、
3719- DATのファイルサイズで更新する
3720-}
3721- if MsgBox(GikoForm.Handle, RECALC_MES,
3722- RECALC_TITLE, MB_YESNO or MB_ICONWARNING) = ID_YES then begin
3723- //閾値の確認
3724- limitSize := LIMIT_SIZE;
3725- limitStr := IntToStr(limitSize);
3726- if InputQuery('閾値入力', '指定した数値 B以下の容量のスレッドのみ再計算します', limitStr) then begin
3727- limitSize := StrToInt(MojuUtils.ZenToHan(limitStr));
3728- if (limitSize < 0) then begin
3729- ShowMessage('閾値に負は指定できません!');
3730- ThreadSizeCalcForFileActionExecute(nil);
3731- end else begin
3732- RecalcThreadSize(limitSize);
3733- end;
3734- end;
3735- end;
3736-end;
3737-//! limitよりもサイズの小さいスレッドの容量をDATファイルから計算
3738-procedure TGikoDM.RecalcThreadSize(limit : Integer);
3739-var
3740- i, j, tmpSize : Integer;
3741- Obj : TObject;
3742- Board : TBoard;
3743- Thread: TThreadItem;
3744- dat : TStringList;
3745-begin
3746- // 再計算スタート プラグインを利用しないところを全部見る!
3747- GikoForm.ScreenCursor := crHourGlass;
3748- try
3749- GikoForm.ProgressBar.Max := BoardGroups[0].Count;
3750- for i := 0 to BoardGroups[0].Count - 1 do begin
3751- Obj := BoardGroups[0].Objects[i];
3752- if (Obj <> nil) then begin
3753- Board := TBoard(Obj);
3754- if not Board.IsThreadDatRead then begin
3755- GikoSys.ReadSubjectFile(Board);
3756- end;
3757- for j := 0 to Board.Count - 1 do begin
3758- Thread := Board.Items[j];
3759- if (Thread <> nil) and (Thread.IsLogFile)
3760- and (Thread.Size <= limit) then begin
3761- dat := TStringList.Create;
3762- try
3763- tmpSize := Thread.Size;
3764- try
3765- dat.LoadFromFile(Thread.GetThreadFileName);
3766- tmpSize := Length(dat.Text);
3767- tmpSize := tmpSize - dat.Count;
3768- except
3769- end;
3770- Thread.Size := tmpSize;
3771- finally
3772- dat.Free;
3773- end;
3774- end;
3775- end;
3776- end;
3777- GikoForm.ProgressBar.StepBy(1);
3778- end;
3779- finally
3780- GikoForm.ScreenCursor := crDefault;
3781- end;
3782- GikoForm.ProgressBar.Position := 0;
3783- ShowMessage('計算終了しました。');
3784-end;
3785-
37863694 end.
37873695
--- a/GikoMessage.pas
+++ /dev/null
@@ -1,68 +0,0 @@
1-unit GikoMessage;
2-
3-interface
4-
5-uses
6- Classes, IniFiles;
7-
8-type
9- //! MessageList
10- TGikoMessageListType = (gmLogout, gmLogin, gmForceLogin, gmSureItiran,
11- gmUnKnown, gmSureSyutoku, gmSureDiff, gmNotMod, gmAbort, gmError,
12- gmNewRes, gmNewSure, gmResError, gmSureError);
13-
14- TGikoMessage = class(THashedStringList)
15- private
16- public
17- constructor Create;
18- function GetMessage(MesType: TGikoMessageListType): String;
19- end;
20-
21-implementation
22-
23-const
24- DEF_MESSAGES : array[0..13] of string = ( 'ログアウトしました',
25- 'ログインしました - ',
26- '強制ログインしました - ',
27- '[スレ一覧取得完了]',
28- '(名称不明)',
29- '[スレ取得完了]',
30- '[スレ差分取得完了]',
31- '[未更新]',
32- '[中断]',
33- '[エラー]',
34- '[レス送信終了]',
35- '[新スレ送信終了]',
36- '[レス送信失敗]',
37- '[新スレ送信失敗]');
38-
39- MESSAGE_KEYS : array[0..13] of String = ( 'Logout', 'Login',
40- 'ForceLogin', 'SureItiran',
41- 'UnKnown', 'SureSyutoku',
42- 'SureDiff', 'NotMod',
43- 'Abort', 'Error',
44- 'NewRes', 'NewSure',
45- 'ResError', 'SureError');
46-
47-constructor TGikoMessage.Create;
48-begin
49- inherited Create;
50- Self.Sorted := true;
51- Self.Duplicates := dupIgnore;
52-end;
53-//! MesTypeで指定されたメッセージ文字列を取得する
54-function TGikoMessage.GetMessage(MesType: TGikoMessageListType): String;
55-begin
56- Result := '';
57- if MesType in [gmLogout..gmSureError] then begin
58- //Keyで検索して見つかればそれを返す
59- Result := Self.Values[MESSAGE_KEYS[Ord(MesType)]];
60- if Result = '' then begin
61- //見つからないので、デフォルトで返す
62- Result := DEF_MESSAGES[Ord(MesType)];
63- end;
64- end;
65-end;
66-
67-end.
68-
\ No newline at end of file
--- a/GikoSystem.pas
+++ b/GikoSystem.pas
@@ -15,7 +15,7 @@ uses
1515 {HttpApp,} URLMon, IdGlobal, IdURI, {Masks,}
1616 Setting, BoardGroup, gzip, Dolib, bmRegExp, AbonUnit,
1717 ExternalBoardManager, ExternalBoardPlugInMain,
18- GikoBayesian, GikoMessage;
18+ GikoBayesian;
1919
2020 type
2121 TVerResourceKey = (
@@ -102,6 +102,11 @@ type
102102 FNoParam: Boolean; //!< レス番パラメータなし
103103 end;
104104
105+ //! MessageList
106+ TGikoMessageListType = (gmLogout, gmLogin, gmForceLogin, gmSureItiran,
107+ gmUnKnown, gmSureSyutoku, gmSureDiff, gmNotMod, gmAbort, gmError,
108+ gmNewRes, gmNewSure, gmResError, gmSureError);
109+
105110 TGikoSys = class(TObject)
106111 private
107112 { Private 宣言 }
@@ -111,7 +116,8 @@ type
111116 FResRange : Longint;
112117 FBayesian : TGikoBayesian; //!< ベイジアンフィルタ
113118 FVersion : String; //!< ファイルバージョン
114- FGikoMessage: TGikoMessage;
119+// FExitWrite: TStringList;
120+// function StrToFloatDef(s: string; Default: Double): Double;
115121 public
116122 { Public 宣言 }
117123 FAbon : TAbon;
@@ -241,10 +247,7 @@ type
241247 //! IEのバージョン情報の取得
242248 function GetIEVersion: string;
243249 function SetUserOptionalStyle(): string;
244- //! ギコナビのメッセージを設定する
245- procedure SetGikoMessage;
246- //! ギコナビのメッセージを取得する
247- function GetGikoMessage(MesType: TGikoMessageListType): String;
250+
248251 end;
249252
250253 var
@@ -321,8 +324,6 @@ begin
321324 FVersion := Trim(GetVersionInfo(vrFileVersion));
322325 FBayesian := TGikoBayesian.Create;
323326 //FBoardURLList := TStringList.Create;
324- //メッセージの作成
325- FGikoMessage := TGikoMessage.Create;
326327 end;
327328
328329 // *************************************************************************
@@ -343,7 +344,6 @@ begin
343344 FDolib.Free;
344345 FAbon.Free;
345346 FSelectResFilter.Free;
346- FGikoMessage.Free;
347347 //FBoardURLList.Free;
348348 //テンポラリHTMLを削除
349349 FileList := TStringList.Create;
@@ -720,7 +720,7 @@ begin
720720 ThreadItem.RoundDate := ZERO_DATE;
721721 ThreadItem.LastModified := ZERO_DATE;
722722 ThreadItem.Kokomade := -1;
723- ThreadItem.NewReceive := 0;
723+ ThreadItem.NewReceive := ThreadItem.Count;
724724 ThreadItem.ParentBoard := Board;
725725 ThreadItem.IsLogFile := True;
726726 ThreadItem.Round := False;
@@ -3249,33 +3249,6 @@ begin
32493249 Result := Setting.GetEditorKeyFileName;
32503250 end;
32513251
3252-//! ギコナビのメッセージを設定する
3253-procedure TGikoSys.SetGikoMessage;
3254-begin
3255- if FGikoMessage = nil then begin
3256- FGikoMessage := TGikoMessage.Create;
3257- end else begin
3258- FGikoMessage.Clear;
3259- end;
3260-
3261- if (Setting.GengoSupport) then begin
3262- try
3263- if (FileExists(Setting.GetLanguageFileName)) then begin
3264- FGikoMessage.LoadFromFile(Setting.GetLanguageFileName);
3265- end;
3266- except
3267- FGikoMessage.Clear;
3268- end;
3269- end;
3270-end;
3271-//! ギコナビのメッセージを取得する
3272-function TGikoSys.GetGikoMessage(MesType: TGikoMessageListType): String;
3273-begin
3274- Result := '';
3275- if FGikoMessage <> nil then begin
3276- Result := FGikoMessage.GetMessage(MesType);
3277- end;
3278-end;
32793252
32803253 initialization
32813254 GikoSys := TGikoSys.Create;
--- a/ItemDownload.pas
+++ b/ItemDownload.pas
@@ -53,7 +53,7 @@ type
5353 function ParseCgiStatus(Content: string): TCgiStatus;
5454 function CgiDownload(ItemType: TGikoDownloadType; URL: string; Modified: TDateTime): Boolean;
5555 function DatDownload(ItemType: TGikoDownloadType; URL: string; Modified: TDateTime; RangeStart: Integer; AdjustLen: Integer): Boolean;
56- procedure DeleteStatusLine(Item: TDownloadItem);
56+ function DeleteStatusLine(Content: string): string;
5757 procedure InitHttpClient(client: TIdHttp);
5858 procedure ClearHttpClient(client: TIdHttp);
5959 protected
@@ -532,7 +532,8 @@ begin
532532 Writeln('CGIStatus: OK');
533533 {$ENDIF}
534534 Item.ResponseCode := 200;
535- DeleteStatusLine(Item);
535+ Item.Content := DeleteStatusLine(Item.Content);
536+ Item.ContentLength := CgiStatus.FSize;
536537 end;
537538 gcsINCR: begin
538539 //今はありえない
@@ -540,7 +541,8 @@ begin
540541 Writeln('CGIStatus: 206');
541542 {$ENDIF}
542543 Item.ResponseCode := 206;
543- DeleteStatusLine(Item);
544+ Item.Content := DeleteStatusLine(Item.Content);
545+ Item.ContentLength := CgiStatus.FSize;
544546 end;
545547 gcsERR: begin
546548 {$IFDEF DEBUG}
@@ -889,20 +891,17 @@ begin
889891 end;
890892 end;
891893
892-//1行目を消して、コンテンツサイズを設定する
893-procedure TDownloadThread.DeleteStatusLine(Item: TDownloadItem);
894+//手抜きな処理で1行目を消す
895+function TDownloadThread.DeleteStatusLine(Content: string): string;
894896 var
895897 SList: TStringList;
896898 begin
897899 SList := TStringList.Create;
898900 try
899- SList.Text := Item.Content;
900- //1行目を削除
901+ SList.Text := Content;
901902 if SList.Count > 1 then
902903 SList.Delete(0);
903- Item.Content := SList.Text;
904- //改行コードをCRLF -> LFと考えて、行数分だけマイナス
905- Item.ContentLength := Length(SList.Text) - SList.Count;
904+ Result := SList.Text;
906905 finally
907906 SList.Free;
908907 end;
--- a/KuroutSetting.pas
+++ b/KuroutSetting.pas
@@ -136,7 +136,7 @@ begin
136136 GikoSys.Setting.TimeAdjust := PutPostTimeRadioButton.Checked;
137137 //2ch言語サポート
138138 GikoSys.Setting.GengoSupport := GengoSupport.Checked;
139- GikoSys.SetGikoMessage;
139+ GikoSys.Setting.SetMessages;
140140 //ローカル・リモートフシアナ警告
141141 GikoSys.Setting.LocalTrapAtt := LocalTrapAtt.Checked;
142142 GikoSys.Setting.RemoteTrapAtt := RemoteTrapAtt.Checked;
--- a/ListViewUtils.pas
+++ b/ListViewUtils.pas
@@ -10,24 +10,20 @@ type
1010 TListViewUtils = class(TObject)
1111 private
1212 {Private 宣言}
13- class procedure DrawCategoryItem(BBS: TBBS; Item: TListItem; ListView: TListView);
14- class procedure DrawBoardItem(Category: TCategory; Item: TListItem; ListView: TListView);
15- class procedure DrawThreadItem(Board: TBoard; Item: TListItem; ListView: TListView);
16- class procedure DrawItemLogThread(Thread: TThreadItem; Item: TListItem; ColumnCount: Integer);
17- class procedure DrawItemNoLogThread(Thread: TThreadItem; Item: TListItem; ColumnCount: Integer);
1813 public
1914 {Public 宣言}
2015 class procedure SetBoardTreeNode(inBBS : TBBS; treeView: TTreeView);
2116 class function SetCategoryListItem(ABBS2ch: TBBS; ListView: TListView;
22- NumberVisible: Boolean): Integer;
17+ NumberVisible: Boolean; var vSortIndex: Integer; var vSortOrder: Boolean): Integer;
2318 class procedure ListViewSort(Sender: TObject; ListView: TListView; Column: TListColumn;
24- NumberVisible: Boolean; vSortOrder: Boolean);
19+ NumberVisible: Boolean; var vSortOrder: Boolean; var vSortIndex: Integer);
2520 class function ActiveListTrueColumn( column : TListColumn ) : TListColumn;
2621 class function SetBoardListItem(Category: TCategory; ListView: TListView;
27- NumberVisible: Boolean): Integer;
22+ NumberVisible: Boolean; var vSortIndex: Integer; var vSortOrder: Boolean): Integer;
2823 class function SetThreadListItem(Board: TBoard; ListView: TListView;
29- NumberVisible: Boolean): Integer;
24+ NumberVisible: Boolean; var vSortIndex: Integer; var vSortOrder: Boolean): Integer;
3025 class procedure ListViewData(Sender: TObject; Item: TListItem);
26+
3127 end;
3228
3329
@@ -141,7 +137,9 @@ end;
141137 class function TListViewUtils.SetCategoryListItem(
142138 ABBS2ch: TBBS;
143139 ListView: TListView;
144- NumberVisible: Boolean
140+ NumberVisible: Boolean;
141+ var vSortIndex: Integer;
142+ var vSortOrder: Boolean
145143 ): Integer;
146144 var
147145 TitleColumn : TListColumn;
@@ -181,13 +179,12 @@ begin
181179 GikoForm.FolderImage.Picture := nil;
182180 GikoForm.ItemIcon16.GetBitmap(1, GikoForm.FolderImage.Picture.Bitmap);
183181
182+ vSortIndex := GikoSys.Setting.BBSSortIndex;
183+ vSortOrder := GikoSys.Setting.BBSSortOrder;
184184 for i := ListView.Columns.Count - 1 downto 0 do begin
185- if (GikoSys.Setting.BBSSortIndex
186- = Integer(GikoSys.Setting.BBSColumnOrder[ ListView.Column[ i ].Tag ])) then begin
187- ListViewSort( nil, ListView, ListView.Column[ i ],
188- NumberVisible, GikoSys.Setting.BBSSortOrder);
189- Break;
190- end;
185+ idx := ListView.Column[ i ].Tag;
186+ if vSortIndex = Ord( GikoSys.Setting.BBSColumnOrder[ idx ] ) then
187+ ListViewSort( nil, ListView, ListView.Column[ i ], NumberVisible, vSortOrder, vSortIndex );
191188 end;
192189
193190 Result := ABBS2ch.Count;
@@ -201,10 +198,11 @@ class procedure TListViewUtils.ListViewSort(
201198 ListView: TListView;
202199 Column: TListColumn;
203200 NumberVisible: Boolean;
204- vSortOrder: Boolean
201+ var vSortOrder: Boolean;
202+ var vSortIndex: Integer
205203 );
206204 var
207- i, idx : Integer;
205+ i, id, idx : Integer;
208206 orderList : TList;
209207 wkBBS: TBBS;
210208 wkCategory: TCategory;
@@ -215,41 +213,53 @@ begin
215213 for i := 0 to ListView.Columns.Count - 1 do begin
216214 ListView.Column[i].ImageIndex := -1;
217215 end;
218- if vSortOrder then
216+
217+ if SortOrder then
219218 ListView.Column[ idx ].ImageIndex := ITEM_ICON_SORT1
220219 else
221220 ListView.Column[ idx ].ImageIndex := ITEM_ICON_SORT2;
222221
223-
224222 Sort.SortNoFlag := NumberVisible;
225223
224+ //if TObject(TreeView.Selected.Data) is TBBS then begin
226225 if TObject( GikoForm.ActiveList ) is TBBS then begin
226+ //wkBBS := TBBS(TreeView.Selected.Data);
227227 wkBBS := TBBS( GikoForm.ActiveList );
228228 orderList := GikoSys.Setting.BBSColumnOrder;
229+ id := Integer( orderList[ idx ] );
229230 Sort.SortOrder := vSortOrder;
230- Sort.SortIndex := Integer( orderList[ idx ] );
231- GikoSys.Setting.BBSSortIndex := Sort.SortIndex;
232- GikoSys.Setting.BBSSortOrder := Sort.SortOrder;
231+ Sort.SortIndex := id;
232+ GikoSys.Setting.BBSSortIndex := id;
233+ GikoSys.Setting.BBSSortOrder := vSortOrder;
233234 wkBBS.Sort(Sort.CategorySortProc);
235+ //end else if TObject(TreeView.Selected.Data) is TCategory then begin
234236 end else if TObject( GikoForm.ActiveList ) is TCategory then begin
237+ //wkCategory := TCategory(TreeView.Selected.Data);
235238 wkCategory := TCategory( GikoForm.ActiveList );
236239 orderList := GikoSys.Setting.CategoryColumnOrder;
240+ id := Integer( orderList[ idx ] );
237241 Sort.SortOrder := vSortOrder;
238- Sort.SortIndex := Integer( orderList[ idx ] );
239- GikoSys.Setting.CategorySortIndex := Sort.SortIndex;
240- GikoSys.Setting.CategorySortOrder := Sort.SortOrder;
242+ Sort.SortIndex := id;
243+ GikoSys.Setting.CategorySortIndex := id;
244+ GikoSys.Setting.CategorySortOrder := vSortOrder;
241245 wkCategory.CustomSort(BoardSortProc);
246+ //end else if TObject(TreeView.Selected.Data) is TBoard then begin
242247 end else if TObject( GikoForm.ActiveList ) is TBoard then begin
248+ //wkBoard := TBoard(TreeView.Selected.Data);
243249 wkBoard := TBoard( GikoForm.ActiveList );
244250 orderList := GikoSys.Setting.BoardColumnOrder;
251+ id := Integer( orderList[ idx ] );
245252 Sort.SortOrder := vSortOrder;
246- Sort.SortIndex := Integer( orderList[ idx ] );
247- GikoSys.Setting.BoardSortIndex := Sort.SortIndex;
248- GikoSys.Setting.BoardSortOrder := Sort.SortOrder;
253+ Sort.SortIndex := id;
254+ GikoSys.Setting.BoardSortIndex := id;
255+ GikoSys.Setting.BoardSortOrder := vSortOrder;
249256 wkBoard.CustomSort(ThreadItemSortProc);
257+ end else begin
258+ id := 0;
250259 end;
251260
252261 ListView.Refresh;
262+ vSortIndex := id;
253263 end;
254264
255265 {!
@@ -259,16 +269,49 @@ Delphi 6 Personal
259269 正しいカラムが渡されないため、正しいカラムに変換します。
260270 }
261271 class function TListViewUtils.ActiveListTrueColumn( column : TListColumn ) : TListColumn;
272+{*
273+var
274+ i, idx : Integer;
275+ orderList : TList;
276+*}
262277 begin
278+
263279 // 正しく変換する方法が分からないので保留
264280 Result := column;
265281 Exit;
282+{*
283+ Result := column;
284+
285+ if TObject( FActiveList ) is TBBS then
286+ orderList := GikoSys.Setting.BBSColumnOrder
287+ else if TObject( FActiveList ) is TCategory then
288+ orderList := GikoSys.Setting.CategoryColumnOrder
289+ else if TObject( FActiveList ) is TBoard then
290+ orderList := GikoSys.Setting.BoardColumnOrder
291+ else
292+ Exit;
293+
294+ idx := column.Tag;
295+
296+ for i := 0 to ListView.Columns.Count - 1 do begin
297+ if Integer( orderList[ ListView.Column[ i ].Tag ] ) = 0 then begin
298+ if idx = 0 then
299+ Result := ListView.Column[ i ]
300+ else if idx <= i then
301+ Result := ListView.Column[ idx - 1 ];
302+ Exit;
303+ end;
304+ end;
305+*}
306+
266307 end;
267308 //ListViewにBoardItemを設定する
268309 class function TListViewUtils.SetBoardListItem(
269310 Category: TCategory;
270311 ListView: TListView;
271- NumberVisible: Boolean
312+ NumberVisible: Boolean;
313+ var vSortIndex: Integer;
314+ var vSortOrder: Boolean
272315 ): Integer;
273316 var
274317 TitleColumn : TListColumn;
@@ -323,13 +366,12 @@ begin
323366 GikoForm.FolderImage.Picture := nil;
324367 GikoForm.ItemIcon16.GetBitmap(3, GikoForm.FolderImage.Picture.Bitmap);
325368
369+ vSortIndex := GikoSys.Setting.CategorySortIndex;
370+ vSortOrder := GikoSys.Setting.CategorySortOrder;
326371 for i := ListView.Columns.Count - 1 downto 0 do begin
327- if (GikoSys.Setting.CategorySortIndex =
328- Integer( GikoSys.Setting.CategoryColumnOrder[ ListView.Columns[i].Tag ] )) then begin
329- ListViewSort( nil, ListView, ListView.Column[ i ],
330- NumberVisible, GikoSys.Setting.CategorySortOrder);
331- Break;
332- end;
372+ idx := ListView.Column[ i ].Tag;
373+ if vSortIndex = Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] ) then
374+ ListViewSort( nil, ListView, ListView.Column[ i ], NumberVisible, vSortOrder, vSortIndex );
333375 end;
334376
335377 Result := Category.Count;
@@ -341,7 +383,9 @@ end;
341383 class function TListViewUtils.SetThreadListItem(
342384 Board: TBoard;
343385 ListView: TListView;
344- NumberVisible: Boolean
386+ NumberVisible: Boolean;
387+ var vSortIndex: Integer;
388+ var vSortOrder: Boolean
345389 ): Integer;
346390 var
347391 TitleColumn : TListColumn;
@@ -416,13 +460,12 @@ begin
416460 GikoForm.FolderImage.Picture := nil;
417461 GikoForm.ItemIcon16.GetBitmap(5, GikoForm.FolderImage.Picture.Bitmap);
418462
463+ vSortIndex := GikoSys.Setting.BoardSortIndex;
464+ vSortOrder := GikoSys.Setting.BoardSortOrder;
419465 for i := ListView.Columns.Count - 1 downto 0 do begin
420- if (GikoSys.Setting.BoardSortIndex
421- = Integer( GikoSys.Setting.BoardColumnOrder[ ListView.Columns[ i ].Tag ] )) then begin
422- ListViewSort( nil, ListView, ListView.Column[ i ],
423- NumberVisible, GikoSys.Setting.BoardSortOrder);
424- Break;
425- end;
466+ idx := ListView.Column[ i ].Tag;
467+ if vSortIndex = Ord( GikoSys.Setting.BoardColumnOrder[ idx ] ) then
468+ ListViewSort( nil, ListView, ListView.Column[ i ], NumberVisible, vSortOrder, vSortIndex );
426469 end;
427470
428471 Result := Board.Count;
@@ -433,268 +476,285 @@ end;
433476
434477 class procedure TListViewUtils.ListViewData(Sender: TObject; Item: TListItem);
435478 var
436- ActivListObj : TObject;
479+// FileName: string;
480+// DateTime: TDateTime;
481+ BoardCnt: Integer;
482+ BBS: TBBS;
483+ Category: TCategory;
484+ Board: TBoard;
485+ ThreadItem: TThreadItem;
486+ RepStr: string;
487+ ActivListObj : TObject;
488+ i, idx : Integer;
437489 ListView : TListView;
438490 begin
439491 if (Sender <> nil) and (Sender is TListView) then begin
440- ListView := TListView(Sender);
441- ActivListObj := GikoForm.ActiveList;
442- if ActivListObj is TBBS then begin
443- DrawCategoryItem(TBBS(ActivListObj), Item, ListView);
444- end else if ActivListObj is TCategory then begin
445- DrawBoardItem(TCategory(ActivListObj), Item, ListView);
446- end else if ActivListObj is TBoard then begin
447- DrawThreadItem(TBoard(ActivListObj), Item, ListView);
448- end;
492+ ListView := TListView(Sender)
493+ end else begin
494+ Exit;
449495 end;
450-end;
451-//! リストビューのアイテムを描画する(カテゴリー用)
452-class procedure TListViewUtils.DrawCategoryItem(
453- BBS: TBBS; Item: TListItem; ListView: TListView
454-);
455-var
456- Category : TCategory;
457-begin
458496
459- //===== カテゴリリスト =====
460- ListView.StateImages := nil;
497+ ActivListObj := GikoForm.ActiveList;
498+ if ActivListObj is TBBS then begin
499+ //===== カテゴリリスト =====
500+ BBS := TBBS(ActivListObj);
461501
462- if (BBS = nil) or (BBS.Count <= 0) or (Item = nil)
463- or (Item.Index >= BBS.Count) or (ListView.Items.Count = 0)
464- or (not (BBS.Items[Item.index] is TCategory)) then Exit;
502+ GikoForm.ListView.StateImages := nil;
465503
466- Category := TCategory(BBS.Items[Item.index]);
504+ if (BBS = nil) or (BBS.Count <= 0) or (Item = nil)
505+ or (Item.Index >= BBS.Count) or (ListView.Items.Count = 0)
506+ or (not (BBS.Items[Item.index] is TCategory)) then Exit;
507+ //if BBS.Count <= 0 then Exit;
508+ //if Item = nil then Exit;
509+ //if Item.Index >= BBS.Count then Exit;
510+ //if ListView.Items.Count = 0 then Exit;
467511
468- if (Category = nil) then Exit;
512+ //if not (BBS.Items[Item.index] is TCategory) then Exit;
513+ Category := TCategory(BBS.Items[Item.index]);
469514
470- if GikoDM.ListNumberVisibleAction.Checked then
471- Item.Caption := IntToStr(Category.No) + ': ' + Category.Title
472- else
473- Item.Caption := Category.Title;
515+ if Category = nil then Exit;
474516
475- Item.ImageIndex := ITEM_ICON_CATEGORY1;
476- Item.Data := Category;
477-end;
478-//! リストビューのアイテムを描画する(板用)
479-class procedure TListViewUtils.DrawBoardItem(
480- Category: TCategory; Item: TListItem; ListView: TListView
481-);
482-var
483- Board: TBoard;
484- i, idx : Integer;
485-begin
486- //===== 板リスト =====
487- ListView.StateImages := nil;
517+ if GikoDM.ListNumberVisibleAction.Checked then
518+ Item.Caption := IntToStr(Category.No) + ': ' + Category.Title
519+ else
520+ Item.Caption := Category.Title;
488521
489- if (Category = nil) or (Category.Count <= 0) or (Item = nil)
490- or (Item.Index >= Category.Count) or (ListView.Items.Count = 0)
491- or (not (Category.Items[Item.Index] is TBoard)) then Exit;
522+ Item.ImageIndex := ITEM_ICON_CATEGORY1;
523+ Item.Data := Category;
492524
493- Board := TBoard(Category.Items[Item.Index]);
525+ end else if ActivListObj is TCategory then begin
494526
495- if (Board = nil) then Exit;
527+ //===== 板リスト =====
528+ Category := TCategory(ActivListObj);
496529
497- if GikoDM.ListNumberVisibleAction.Checked then
498- Item.Caption := IntToStr(Board.No) + ': ' + Board.Title
499- else
500- Item.Caption := Board.Title;
530+ ListView.StateImages := nil;
501531
502- if Item.SubItems.Count <> ListView.Columns.Count then begin
503- Item.SubItems.Clear;
504- Item.SubItems.Capacity := GikoSys.Setting.CategoryColumnOrder.Count;
505- for i := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 1 do
506- Item.SubItems.Add('');
507- end;
532+ if (Category = nil) or (Category.Count <= 0) or (Item = nil)
533+ or (Item.Index >= Category.Count) or (ListView.Items.Count = 0)
534+ or (not (Category.Items[Item.Index] is TBoard)) then Exit;
535+ //if Category.Count <= 0 then Exit;
536+ //if Item = nil then Exit;
537+ //if Item.Index >= Category.Count then Exit;
538+ //if ListView.Items.Count = 0 then Exit;
508539
509- Item.ImageIndex := ITEM_ICON_BOARD1;
510- idx := 0;
511- for i := 0 to ListView.Columns.Count - 1 do begin
512- if GikoSys.Setting.CategoryColumnOrder.Count <= i then
513- Break;
514- case GikoSys.Setting.CategoryColumnOrder[ i ] of
515- gccTitle:
516- // Item.Caption は SubItems に含まれ無いので
517- Dec( idx );
518-
519- gccRoundName:
520- if Board.Round then
521- Item.SubItems[ idx ] := Board.RoundName // '予約'
522- else
523- Item.SubItems[ idx ] := '';
540+ //if not (Category.Items[Item.Index] is TBoard) then Exit;
541+ Board := TBoard(Category.Items[Item.Index]);
524542
525- gccLastModified:
526- if Board.RoundDate = ZERO_DATE then begin
527- Item.SubItems[ idx ] := '';
528- end else
529- Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', Board.RoundDate);
530- end;
531- Inc( idx );
532- end;
543+ if Board = nil then Exit;
533544
534- Item.Data := Board;
545+ if GikoDM.ListNumberVisibleAction.Checked then
546+ Item.Caption := IntToStr(Board.No) + ': ' + Board.Title
547+ //Item.Caption := IntToStr(Item.Index + 1) + ': ' + Board.Title
548+ else
549+ Item.Caption := Board.Title;
535550
536-end;
537-//! リストビューのアイテムを描画する(スレッド用)
538-class procedure TListViewUtils.DrawThreadItem(
539- Board: TBoard; Item: TListItem;ListView : TListView
540-);
541-var
542- ThreadItem: TThreadItem;
543- BoardCnt: Integer;
544- RepStr: String;
545- i: Integer;
546-begin
547- //===== スレリスト =====
548- if GikoSys.Setting.ListIconVisible then
549- ListView.StateImages := GikoForm.StateIconImageList
550- else
551- ListView.StateImages := nil;
551+ if Item.SubItems.Count <> ListView.Columns.Count then begin
552+ Item.SubItems.Clear;
553+ Item.SubItems.Capacity := GikoSys.Setting.CategoryColumnOrder.Count;
554+ for i := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 1 do
555+ Item.SubItems.Add('');
556+ end;
552557
558+ Item.ImageIndex := ITEM_ICON_BOARD1;
559+ idx := 0;
560+ for i := 0 to ListView.Columns.Count - 1 do begin
561+ if GikoSys.Setting.CategoryColumnOrder.Count <= i then
562+ Break;
563+// case TGikoCategoryColumnID( ListView.Column[ i ].Tag ) of
564+ case GikoSys.Setting.CategoryColumnOrder[ i ] of
565+ gccTitle:
566+ // Item.Caption は SubItems に含まれ無いので
567+ Dec( idx );
568+
569+ gccRoundName:
570+ if Board.Round then
571+ Item.SubItems[ idx ] := Board.RoundName // '予約'
572+ else
573+ Item.SubItems[ idx ] := '';
574+
575+ gccLastModified:
576+ if Board.RoundDate = ZERO_DATE then begin
577+ Item.SubItems[ idx ] := '';
578+ end else
579+ Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', Board.RoundDate);
580+ end;
581+ Inc( idx );
582+ end;
553583
554- case GikoForm.ViewType of
555- gvtAll: BoardCnt := Board.Count;
556- gvtLog: BoardCnt := Board.LogThreadCount;
557- gvtNew: BoardCnt := Board.NewThreadCount;
558- gvtUser: BoardCnt := Board.UserThreadCount;
559- else
560- BoardCnt := 0;
561- end;
584+ Item.Data := Board;
562585
563- if (BoardCnt <= 0) or (Item = nil) or (Item.Index > BoardCnt)
564- or (ListView.Items.Count = 0) or (not (Board.Items[Item.Index] is TThreadItem)) then Exit;
565-
566- //改善すべきブロック/////////////////////////////////////////////////////
567- ThreadItem := nil;
568- case GikoForm.ViewType of
569- gvtAll: if Item.Index >= Board.Count then Exit else
570- ThreadItem := TThreadItem(Board.Items[Item.Index]);
571- gvtLog: ThreadItem := Board.GetLogThread(Item.Index);
572- gvtNew: ThreadItem := Board.GetNewThread(Item.Index);
573- gvtUser: ThreadItem := Board.GetUserThread(Item.Index);
574- end;
575- //////////////////////////////////////////////////////////////////////////
576-
577- if (ThreadItem = nil) then Exit;
578-
579- RepStr := CustomStringReplace(ThreadItem.Title, '&lt;', '<' );
580- RepStr := CustomStringReplace(RepStr, '&gt;', '>' );
581- RepStr := CustomStringReplace(RepStr, '&quot;', '"' );
582- RepStr := CustomStringReplace(RepStr, '&amp;', '&' );
583- //RepStr := StringReplace(RepStr, '@`', ',', [rfReplaceAll]);
584- if Item.SubItems.Count <> ListView.Columns.Count then begin
585- Item.SubItems.Clear;
586- Item.SubItems.Capacity := GikoSys.Setting.BoardColumnOrder.Count;
587- for i := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 1 do
588- Item.SubItems.Add('');
589- end;
586+ end else if ActivListObj is TBoard then begin
590587
591- if GikoDM.ListNumberVisibleAction.Checked then
592- Item.Caption := IntToStr(ThreadItem.No) + ': ' + RepStr
593- else
594- Item.Caption := RepStr;
588+ //===== スレリスト =====
589+ Board := TBoard(ActivListObj);
595590
596- case ThreadItem.AgeSage of
597- gasNone: Item.StateIndex := -1;
598- gasNew: Item.StateIndex := 0;
599- gasAge: Item.StateIndex := 1;
600- gasSage: Item.StateIndex := 2;
601- end;
591+ if GikoSys.Setting.ListIconVisible then
592+ ListView.StateImages := GikoForm.StateIconImageList
593+ else
594+ ListView.StateImages := nil;
602595
603- if ThreadItem.IsLogFile then begin
604- DrawItemLogThread(ThreadItem, Item, ListView.Columns.Count);
605- end else begin
606- DrawItemNoLogThread(ThreadItem, Item, GikoSys.Setting.BoardColumnOrder.Count);
607- end;
608596
609- Item.Data := ThreadItem;
610-end;
611-//! ログ有りスレッドを描画する
612-class procedure TListViewUtils.DrawItemLogThread(Thread: TThreadItem; Item: TListItem; ColumnCount: Integer);
613-var
614- i, idx : Integer;
615-begin
616- idx := 0;
617- for i := 0 to ColumnCount - 1 do begin
618- if GikoSys.Setting.BoardColumnOrder.Count <= i then
619- Break;
620-
621- case GikoSys.Setting.BoardColumnOrder[ i ] of
622- gbcTitle:
623- // Item.Caption は SubItems に含まれ無いので
624- Dec( idx );
625- gbcAllCount:
626- Item.SubItems[ idx ] := IntToStr(Thread.AllResCount);
627- gbcLocalCount:
628- Item.SubItems[ idx ] := IntToStr(Thread.Count);
629- gbcNonAcqCount:
630- Item.SubItems[ idx ] := IntToStr(Thread.AllResCount - Thread.Count);
631- gbcNewCount:
632- if Thread.NewResCount = 0 then
633- Item.SubItems[ idx ] := ''
597+ case GikoForm.ViewType of
598+ gvtAll: BoardCnt := Board.Count;
599+ gvtLog: BoardCnt := Board.LogThreadCount;
600+ gvtNew: BoardCnt := Board.NewThreadCount;
601+ gvtUser: BoardCnt := Board.UserThreadCount;
634602 else
635- Item.SubItems[ idx ] := IntToStr(Thread.NewResCount);
636- gbcUnReadCount:
637- Item.SubItems[ idx ] := '';
638- gbcRoundName:
639- if Thread.Round then
640- Item.SubItems[ idx ] := Thread.RoundName
603+ BoardCnt := 0;
604+ end;
605+ {
606+ case GikoForm.ViewType of
607+ gvtAll: BoardCnt := Board.Count;
608+ gvtLog: BoardCnt := Board.GetLogThreadCount;
609+ gvtNew: BoardCnt := Board.GetNewThreadCount;
610+ gvtUser: BoardCnt := Board.GetUserThreadCount;
641611 else
642- Item.SubItems[ idx ] := '';
643- gbcRoundDate://gbcLastModified:
644- if (Thread.RoundDate = ZERO_DATE) then begin
645- Item.SubItems[ idx ] := '';
646- end else
647- Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', Thread.RoundDate);
648- gbcCreated:
649- if Thread.CreateDate = ZERO_DATE then begin
650- Item.SubItems[ idx ] := '';
651- end else
652- Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', Thread.CreateDate);
653- gbcLastModified:
654- if (Thread.LastModified = ZERO_DATE) then begin
655- Item.SubItems[ idx ] := '';
656- end else
657- Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', Thread.LastModified);
612+ BoardCnt := 0;
658613 end;
659- Inc( idx );
660- end;
614+ }
615+// if Board = nil then Exit;
616+ if (BoardCnt <= 0) or (Item = nil) or (Item.Index > BoardCnt)
617+ or (ListView.Items.Count = 0) or (not (Board.Items[Item.Index] is TThreadItem)) then Exit;
661618
662- if Thread.NewArrival then
663- Item.ImageIndex := ITEM_ICON_THREADNEW1
664- else
665- Item.ImageIndex := ITEM_ICON_THREADLOG1;
666-end;
667-//! ログなしスレッドを描画する
668-class procedure TListViewUtils.DrawItemNoLogThread(Thread: TThreadItem; Item: TListItem; ColumnCount: Integer);
669-var
670- i, idx: Integer;
671-begin
672- idx := 0;
673- for i := 0 to ColumnCount - 1do begin
674- case GikoSys.Setting.BoardColumnOrder[ i ] of
675- gbcTitle:
676- // Item.Caption は SubItems に含まれ無いので
677- Dec( idx );
678- gbcAllCount:
679- Item.SubItems[ idx ] := IntToStr(Thread.AllResCount);
680- gbcRoundDate://gbcLastModified:
681- Item.SubItems[ idx ] := '';
682- gbcCreated:
683- if Thread.CreateDate = ZERO_DATE then begin
684- Item.SubItems[ idx ] := '';
685- end else
686- Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', Thread.CreateDate);
687- gbcLastModified:
688- Item.SubItems[ idx ] := '';
619+ //改善すべきブロック/////////////////////////////////////////////////////
620+ ThreadItem := nil;
621+ case GikoForm.ViewType of
622+ gvtAll: if Item.Index >= Board.Count then Exit else
623+ ThreadItem := TThreadItem(Board.Items[Item.Index]);
624+ gvtLog: ThreadItem := Board.GetLogThread(Item.Index);
625+ gvtNew: ThreadItem := Board.GetNewThread(Item.Index);
626+ gvtUser: ThreadItem := Board.GetUserThread(Item.Index);
627+ end;
628+ //////////////////////////////////////////////////////////////////////////
629+
630+ if ThreadItem = nil then Exit;
631+
632+ RepStr := CustomStringReplace(ThreadItem.Title, '&lt;', '<' );
633+ RepStr := CustomStringReplace(RepStr, '&gt;', '>' );
634+ RepStr := CustomStringReplace(RepStr, '&quot;', '"' );
635+ RepStr := CustomStringReplace(RepStr, '&amp;', '&' );
636+ //RepStr := StringReplace(RepStr, '@`', ',', [rfReplaceAll]);
637+ if Item.SubItems.Count <> ListView.Columns.Count then begin
638+ Item.SubItems.Clear;
639+ Item.SubItems.Capacity := GikoSys.Setting.BoardColumnOrder.Count;
640+ for i := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 1 do
641+ Item.SubItems.Add('');
642+ end;
643+
644+ if GikoDM.ListNumberVisibleAction.Checked then
645+ Item.Caption := IntToStr(ThreadItem.No) + ': ' + RepStr
689646 else
690- Item.SubItems[ idx ] := '';
647+ Item.Caption := RepStr;
648+
649+ case ThreadItem.AgeSage of
650+ gasNone: Item.StateIndex := -1;
651+ gasNew: Item.StateIndex := 0;
652+ gasAge: Item.StateIndex := 1;
653+ gasSage: Item.StateIndex := 2;
654+ end;
655+
656+ if ThreadItem.IsLogFile then begin
657+ idx := 0;
658+ for i := 0 to ListView.Columns.Count - 1 do begin
659+ if GikoSys.Setting.BoardColumnOrder.Count <= i then
660+ Break;
661+// case TGikoBoardColumnID( ListView.Column[ i ].Tag ) of
662+ case GikoSys.Setting.BoardColumnOrder[ i ] of
663+ gbcTitle:
664+ // Item.Caption は SubItems に含まれ無いので
665+ Dec( idx );
666+
667+ gbcAllCount:
668+ Item.SubItems[ idx ] := IntToStr(ThreadItem.AllResCount);
669+
670+ gbcLocalCount:
671+ Item.SubItems[ idx ] := IntToStr(ThreadItem.Count);
672+
673+ gbcNonAcqCount:
674+ Item.SubItems[ idx ] := IntToStr(ThreadItem.AllResCount - ThreadItem.Count);
675+
676+ gbcNewCount:
677+ if ThreadItem.NewResCount = 0 then
678+ Item.SubItems[ idx ] := ''
679+ else
680+ Item.SubItems[ idx ] := IntToStr(ThreadItem.NewResCount);
681+
682+ gbcUnReadCount:
683+ Item.SubItems[ idx ] := '';
684+
685+ gbcRoundName:
686+ if ThreadItem.Round then
687+ Item.SubItems[ idx ] := ThreadItem.RoundName
688+ else
689+ Item.SubItems[ idx ] := '';
690+
691+ gbcRoundDate://gbcLastModified:
692+ if (ThreadItem.RoundDate = ZERO_DATE) then begin
693+ Item.SubItems[ idx ] := '';
694+ end else
695+ Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.RoundDate);
696+
697+ gbcCreated:
698+ if ThreadItem.CreateDate = ZERO_DATE then begin
699+ Item.SubItems[ idx ] := '';
700+ end else
701+ Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.CreateDate);
702+
703+ gbcLastModified:
704+ if (ThreadItem.LastModified = ZERO_DATE) then begin
705+ Item.SubItems[ idx ] := '';
706+ end else
707+ Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.LastModified);
708+
709+
710+ end;
711+ Inc( idx );
712+ end;
713+
714+ if ThreadItem.NewArrival then
715+ Item.ImageIndex := ITEM_ICON_THREADNEW1
716+ else
717+ Item.ImageIndex := ITEM_ICON_THREADLOG1;
718+
719+
720+ end else begin
721+ idx := 0;
722+ for i := 0 to GikoSys.Setting.BoardColumnOrder.Count - 1 do begin
723+// case TGikoBoardColumnID( ListView.Column[ i ].Tag ) of
724+ case GikoSys.Setting.BoardColumnOrder[ i ] of
725+ gbcTitle:
726+ // Item.Caption は SubItems に含まれ無いので
727+ Dec( idx );
728+
729+ gbcAllCount:
730+ Item.SubItems[ idx ] := IntToStr(ThreadItem.AllResCount);
731+
732+ gbcRoundDate://gbcLastModified:
733+ Item.SubItems[ idx ] := '';
734+
735+ gbcCreated:
736+ if ThreadItem.CreateDate = ZERO_DATE then begin
737+ Item.SubItems[ idx ] := '';
738+ end else
739+ Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.CreateDate);
740+
741+ gbcLastModified:
742+ Item.SubItems[ idx ] := '';
743+
744+ else
745+ Item.SubItems[ idx ] := '';
746+ end;
747+ Inc( idx );
748+ end;
749+ if ThreadItem.NewArrival then
750+ Item.ImageIndex := ITEM_ICON_THREADNEW1
751+ else
752+ Item.ImageIndex := ITEM_ICON_THREAD1;
691753 end;
692- Inc( idx );
754+
755+ Item.Data := ThreadItem;
756+
693757 end;
694- if Thread.NewArrival then
695- Item.ImageIndex := ITEM_ICON_THREADNEW1
696- else
697- Item.ImageIndex := ITEM_ICON_THREAD1;
698758 end;
699759
700760 end.
--- a/NewBoard.pas
+++ b/NewBoard.pas
@@ -36,9 +36,8 @@ type
3636 { Private 宣言 }
3737 IgnoreLists : TStringList;
3838 FAbort: Boolean;
39- function BoardDownload(const URL: String): TNewBoardItem;
40- function BoardLoardFromFile(const FilePath: String): String;
41- function UpdateURL(s: string): boolean;
39+ function BoardDownload: TNewBoardItem;
40+ procedure UpdateURL(s: string);
4241 procedure SetIgnoreCategory(b: boolean);
4342 procedure EditIgnoreList(Sender: TObject);
4443 procedure UpdateIgnoreList(Sender: TObject);
@@ -59,24 +58,15 @@ uses Giko, IdHeaderList, MojuUtils, GikoDataModule;
5958 procedure TNewBoardDialog.UpdateButtonClick(Sender: TObject);
6059 var
6160 Item: TNewBoardItem;
62- URL : String;
63- protocol, host, path, document, port, bookmark: String;
6461 begin
6562 try
66- MessageMemo.Clear;
6763 GikoSys.Setting.BoardURLSelected := BoardURLComboBox.ItemIndex + 1;
6864 FAbort := False;
6965 UpdateButton.Enabled := False;
7066 StopButton.Enabled := True;
7167 CloseButton.Enabled := False;
7268 EditIgnoreListsButton.Enabled := False;
73- URL := BoardURLComboBox.Text;
74- GikoSys.ParseURI(URL, protocol, host, path, document, port, bookmark);
75- if (protocol = '') then begin
76- Item.FContent := BoardLoardFromFile(URL);
77- end else if (AnsiPos('http', protocol) > 0) then begin
78- Item := BoardDownload(URL);
79- end;
69+ Item := BoardDownload;
8070 StopButton.Enabled := False;
8171 if FAbort then
8272 Exit;
@@ -84,9 +74,8 @@ begin
8474 GikoDM.TabsSaveAction.Tag := 1;
8575 GikoDM.TabsOpenAction.Tag := 1;
8676 GikoDM.TabsSaveAction.Execute;
87- if (UpdateURL(Item.FContent)) then begin
88- GikoForm.ReloadBBS;
89- end;
77+ UpdateURL(Item.FContent);
78+ GikoForm.ReloadBBS;
9079 GikoDM.TabsSaveAction.Tag := 0;
9180 GikoDM.TabsOpenAction.Tag := 0;
9281 end else
@@ -110,12 +99,14 @@ begin
11099 Close;
111100 end;
112101
113-function TNewBoardDialog.BoardDownload(const URL: String): TNewBoardItem;
102+function TNewBoardDialog.BoardDownload: TNewBoardItem;
114103 var
104+ URL: string;
115105 Stream: TMemoryStream;
116106 s: string;
117107 i: Integer;
118108 begin
109+ MessageMemo.Clear;
119110 Indy.Request.Clear;
120111 Indy.RecvBufferSize := Gikosys.Setting.RecvBufferSize;
121112 Indy.ProxyParams.BasicAuthentication := False;
@@ -141,7 +132,7 @@ begin
141132 Indy.ProxyParams.ProxyPassword := '';
142133 end;
143134 //URL := GikoSys.Setting.BoardURL2ch;
144- //URL := BoardURLComboBox.Text;
135+ URL := BoardURLComboBox.Text;
145136 Indy.Request.UserAgent := GikoSys.GetUserAgent;
146137 Indy.Request.Referer := '';
147138 Indy.Request.AcceptEncoding := 'gzip';
@@ -196,9 +187,10 @@ begin
196187 end;
197188 end;
198189
199-function TNewBoardDialog.UpdateURL(s: string): boolean;
190+procedure TNewBoardDialog.UpdateURL(s: string);
200191 var
201192 i: Integer;
193+// j: Integer;
202194 idx: Integer;
203195 idx1: Integer;
204196 idx2: Integer;
@@ -334,7 +326,6 @@ begin
334326 oldURLs.Free;
335327 newURLs.Free;
336328 end;
337- Result := Change;
338329 end;
339330
340331 procedure TNewBoardDialog.FormCreate(Sender: TObject);
@@ -413,21 +404,5 @@ procedure TNewBoardDialog.FormClose(Sender: TObject;
413404 begin
414405 IgnoreLists.Free;
415406 end;
416-//! ローカルファイルをロードする
417-function TNewBoardDialog.BoardLoardFromFile(const FilePath: String): String;
418-var
419- html : TStringList;
420-begin
421- Result := '';
422- // ファイルが存在しているかチェック
423- if (FileExists(FilePath)) then begin
424- html := TStringList.Create();
425- try
426- html.LoadFromFile(FilePath);
427- Result := html.Text;
428- finally
429- html.Free;
430- end;
431- end;
432-end;
407+
433408 end.
--- a/Option.dfm
+++ b/Option.dfm
@@ -61,9 +61,9 @@ object OptionDialog: TOptionDialog
6161 Top = 4
6262 Width = 509
6363 Height = 389
64- ActivePage = TabSheet3
64+ ActivePage = CSSTabSheet
6565 MultiLine = True
66- TabIndex = 3
66+ TabIndex = 2
6767 TabOrder = 3
6868 OnChange = OptionTabChange
6969 object ConnectSheet: TTabSheet
@@ -687,7 +687,7 @@ object OptionDialog: TOptionDialog
687687 Left = 12
688688 Top = 52
689689 Width = 477
690- Height = 45
690+ Height = 64
691691 Caption = #12473#12524#20316#25104#26085#26178#34920#31034#35373#23450
692692 TabOrder = 1
693693 object CreationTimeLogsCheckBox: TCheckBox
@@ -699,8 +699,8 @@ object OptionDialog: TOptionDialog
699699 TabOrder = 0
700700 end
701701 object FutureThreadCheckBox: TCheckBox
702- Left = 204
703- Top = 16
702+ Left = 12
703+ Top = 40
704704 Width = 265
705705 Height = 17
706706 Caption = #26085#20184#12364#26410#26469#12398#12418#12398#12399#34920#31034#12375#12394#12356#65288'492'#12473#12524#31995#65289
@@ -709,7 +709,7 @@ object OptionDialog: TOptionDialog
709709 end
710710 object GroupBox5: TGroupBox
711711 Left = 12
712- Top = 105
712+ Top = 121
713713 Width = 477
714714 Height = 86
715715 Caption = #12502#12521#12454#12470#12398#26368#22823#21270
@@ -737,35 +737,35 @@ object OptionDialog: TOptionDialog
737737 end
738738 object GroupBox17: TGroupBox
739739 Left = 12
740- Top = 196
740+ Top = 212
741741 Width = 477
742- Height = 45
742+ Height = 63
743743 Caption = #12502#12521#12454#12470#12479#12502#38750#34920#31034#26178#35373#23450
744744 TabOrder = 3
745745 object SelectIntervalLabel: TLabel
746- Left = 10
747- Top = 20
746+ Left = 13
747+ Top = 24
748748 Width = 199
749749 Height = 12
750750 Caption = #12459#12540#12477#12523#12461#12540#12391#12398#31227#21205#26178#12398#28961#21453#24540#26178#38291
751751 end
752752 object Label4: TLabel
753- Left = 271
754- Top = 20
753+ Left = 292
754+ Top = 24
755755 Width = 29
756756 Height = 12
757757 Caption = #12511#12522#31186
758758 end
759759 object Label6: TLabel
760- Left = 305
761- Top = 20
760+ Left = 14
761+ Top = 40
762762 Width = 164
763763 Height = 12
764764 Caption = #65288'55'#12511#12522#31186#20197#19978#12395#35373#23450#12375#12390#19979#12373#12356#65289
765765 end
766766 object SelectIntervalEdit: TEdit
767- Left = 214
768- Top = 16
767+ Left = 235
768+ Top = 20
769769 Width = 49
770770 Height = 20
771771 ImeMode = imClose
@@ -775,7 +775,7 @@ object OptionDialog: TOptionDialog
775775 end
776776 object GroupBox18: TGroupBox
777777 Left = 12
778- Top = 246
778+ Top = 278
779779 Width = 477
780780 Height = 43
781781 Caption = 'dat'#33853#12385#12473#12524#12477#12540#12488#38918
@@ -800,29 +800,6 @@ object OptionDialog: TOptionDialog
800800 #12473#12524#26368#32066#26356#26032#26085#26178#65288#38477#38918#65289)
801801 end
802802 end
803- object GroupBox20: TGroupBox
804- Left = 12
805- Top = 291
806- Width = 477
807- Height = 41
808- Caption = #12473#12524#12483#12489#19968#35239#12480#12454#12531#12525#12540#12489#24460#12398#21205#20316
809- TabOrder = 5
810- object Label24: TLabel
811- Left = 219
812- Top = 18
813- Width = 142
814- Height = 12
815- Caption = #65288#12481#12455#12483#12463#12375#12394#12356#22580#21512#28961#20966#29702#65289
816- end
817- object AutoSortCheckBox: TCheckBox
818- Left = 10
819- Top = 16
820- Width = 207
821- Height = 17
822- Caption = #33258#21205#12391#12473#12524#12483#12489#21517#12391#26119#38918#12477#12540#12488#12377#12427
823- TabOrder = 0
824- end
825- end
826803 end
827804 object ThreadSheet: TTabSheet
828805 Caption = #12473#12524#12483#12489#65297
--- a/Option.pas
+++ b/Option.pas
@@ -202,9 +202,6 @@ type
202202 UnFocusedBoldCheckBox: TCheckBox;
203203 IgnoreKanaCheckBox: TCheckBox;
204204 UseKatjuTypeSkinCheckBox: TCheckBox;
205- GroupBox20: TGroupBox;
206- AutoSortCheckBox: TCheckBox;
207- Label24: TLabel;
208205 procedure FormCreate(Sender: TObject);
209206 procedure FormDestroy(Sender: TObject);
210207 procedure ApplyButtonClick(Sender: TObject);
@@ -356,7 +353,7 @@ begin
356353 FClose := False;
357354 Exit;
358355 end;
359- SetAbonpropertys;
356+ SetAbonpropertys;
360357 SaveSetting;
361358 SettingApply;
362359
@@ -824,8 +821,7 @@ begin
824821 else
825822 DatOchiSortCombo.ItemIndex := 0;
826823 end;
827- AutoSortCheckBox.Checked := GikoSys.Setting.AutoSortThreadList;
828-
824+
829825 //あぼ〜ん
830826 RloCheckBox.Checked := GikoSys.Setting.AbonDeleterlo;
831827 ReplaceulCheckBox.Checked := GikoSys.Setting.AbonReplaceul;
@@ -1102,7 +1098,6 @@ begin
11021098 GikoSys.Setting.DatOchiSortIndex := Ord( gbcLastModified );{gbcLastModified}
11031099 end;
11041100 end;
1105- GikoSys.Setting.AutoSortThreadList := AutoSortCheckBox.Checked;
11061101
11071102 GikoSys.Setting.WriteSystemSettingFile;
11081103 GikoSys.Setting.WriteBoardURLSettingFile;
--- a/Setting.pas
+++ b/Setting.pas
@@ -1,6 +1,5 @@
11 unit Setting;
22
3-
43 interface
54
65 uses
@@ -12,7 +11,33 @@ const
1211 LIST_COOLBAND_COUNT = 2; //板CoolBandの数
1312 BROWSER_COOLBAND_COUNT = 3; //ブラウザCoolBandの数
1413
15-
14+ BOARD_FILE_NAME = 'board.2ch';
15+ CUSTOMBOARD_FILE_NAME = 'custom.2ch';
16+ BOARD_DIR_NAME = 'Board';
17+ KEY_SETTING_FILE_NAME = 'key.ini';
18+ EKEY_SETTING_FILE_NAME = 'Ekey.ini';
19+ TEMP_FOLDER = 'Temp';
20+ OUTBOX_FILE_NAME = 'outbox.ini';
21+ SENT_FILE_NAME = 'sent.ini';
22+ CONFIG_DIR_NAME = 'config';
23+ CSS_DIR_NAME = 'css';
24+ SKIN_DIR_NAME = 'skin';
25+ SKIN_HEADER_FILE_NAME = 'Header.html';
26+ SKIN_FOOTER_FILE_NAME = 'Footer.html';
27+ SKIN_NEWRES_FILE_NAME = 'NewRes.html';
28+ SKIN_RES_FILE_NAME = 'Res.html';
29+ SKIN_BOOKMARK_FILE_NAME = 'Bookmark.html';
30+ SKIN_NEWMARK_FILE_NAME = 'Newmark.html';
31+ NGWORDs_DIR_NAME : String = 'NGwords';
32+ BOARD_PLUGIN_DIR_NAME = 'BoardPlugin';
33+ SAMBATIME_FILE_NAME : String = 'Samba.ini';
34+ IGNORE_FILE_NAME : String = 'Ignore.txt';
35+// DOLIB_LOGIN_URL = '/~tora3n2c/futen.cgi';
36+ MAX_POPUP_RES : Integer = 10;
37+ GESTURE_FILE_NAME = 'Gestures.ini';
38+ SPAMFILTER_FILE_NAME = 'SpamFilter.ini';
39+ LANGUAGE_FILE_NAME = 'language.ini';
40+
1641 type
1742 TGikoTabPosition = (gtpTop, gtpBottom); // タブ位置
1843 TGikoTabAppend = (gtaFirst, gtpLast); // タブ追加位置
@@ -399,6 +424,9 @@ type
399424 //! マウスジェスチャーを使用するかどうか
400425 FGestureEnabled : Boolean;
401426
427+ //2ch言語設定
428+ //F2chLanguage : TStringList;
429+
402430 //フシアナトラップ設定
403431 FLocalTrapAtt : Boolean;
404432 FRemoteTrapAtt : Boolean;
@@ -410,6 +438,8 @@ type
410438 FMute: Boolean;
411439 //スレ絞込みで未確定文字も有効にするか
412440 FUseUndecided: Boolean;
441+ //MessageListに出力されるメッセージ
442+ FMessageList : array[0..13] of string;
413443
414444 //Be2ch
415445 //認証用ユーザID・パスワード
@@ -420,8 +450,6 @@ type
420450 //履歴の最大保存件数
421451 FMaxRecordCount : Integer;
422452
423- //スレッド一覧をダウンロード後にソートするか
424- FAutoSortThreadList : Boolean;
425453 function GetMainCoolSet(Index: Integer): TCoolSet;
426454 function GetBoardCoolSet(Index: Integer): TCoolSet;
427455 function GetBrowserCoolSet(Index: Integer): TCoolSet;
@@ -487,7 +515,9 @@ type
487515 function GetIgnoreFileName: string;
488516 function GetGestureFileName : string;
489517 function GetSpamFilterFileName : string;
490- function GetLanguageFileName: string;
518+ function GetLanguageFileName: string;
519+ procedure SetMessages;
520+ function GetMessage(AType :Integer): string;
491521 function GetMainKeyFileName: String;
492522 function GetEditorKeyFileName: String;
493523 procedure WriteLogFolder(AVal : String);
@@ -737,42 +767,8 @@ type
737767 property BeAutoLogin: Boolean read FBeAutoLogin write FBeAutoLogin;
738768 property BeLogin: Boolean read FBeLogin write FBeLogin;
739769 property MaxRecordCount : Integer read FMaxRecordCount write FMaxRecordCount;
740- //! スレッド一覧ダウンロード後にスレッド名で昇順ソートするか
741- property AutoSortThreadList : Boolean read FAutoSortThreadList write FAutoSortThreadList;
742-end;
743770
744-
745-const
746-// MAIN_COOLBAND_COUNT = 4; //メインCoolBandの数
747-// LIST_COOLBAND_COUNT = 2; //板CoolBandの数
748-// BROWSER_COOLBAND_COUNT = 3; //ブラウザCoolBandの数
749-
750- BOARD_FILE_NAME = 'board.2ch';
751- CUSTOMBOARD_FILE_NAME = 'custom.2ch';
752- BOARD_DIR_NAME = 'Board';
753- KEY_SETTING_FILE_NAME = 'key.ini';
754- EKEY_SETTING_FILE_NAME = 'Ekey.ini';
755- TEMP_FOLDER = 'Temp';
756- OUTBOX_FILE_NAME = 'outbox.ini';
757- SENT_FILE_NAME = 'sent.ini';
758- CONFIG_DIR_NAME = 'config';
759- CSS_DIR_NAME = 'css';
760- SKIN_DIR_NAME = 'skin';
761- SKIN_HEADER_FILE_NAME = 'Header.html';
762- SKIN_FOOTER_FILE_NAME = 'Footer.html';
763- SKIN_NEWRES_FILE_NAME = 'NewRes.html';
764- SKIN_RES_FILE_NAME = 'Res.html';
765- SKIN_BOOKMARK_FILE_NAME = 'Bookmark.html';
766- SKIN_NEWMARK_FILE_NAME = 'Newmark.html';
767- NGWORDs_DIR_NAME : String = 'NGwords';
768- BOARD_PLUGIN_DIR_NAME = 'BoardPlugin';
769- SAMBATIME_FILE_NAME : String = 'Samba.ini';
770- IGNORE_FILE_NAME : String = 'Ignore.txt';
771-// DOLIB_LOGIN_URL = '/~tora3n2c/futen.cgi';
772- MAX_POPUP_RES : Integer = 10;
773- GESTURE_FILE_NAME = 'Gestures.ini';
774- SPAMFILTER_FILE_NAME = 'SpamFilter.ini';
775- LANGUAGE_FILE_NAME = 'language.ini';
771+end;
776772
777773
778774
@@ -798,8 +794,25 @@ const
798794 DEFAULT_TAB_FONT_NAME: string = 'MS Pゴシック';
799795 DEFAULT_TAB_FONT_SIZE: Integer = 9;
800796 DEFAULT_2CH_BOARD_URL1: string = 'http://menu.2ch.net/bbsmenu.html';
797+ //OCNを削除しました
798+ //DEFAULT_2CH_BOARD_URL2: string = 'http://menu.2ch.net/bbsmenu.html';
799+ //2005/10/1にiij4uの方は消滅 //'http://www.2ch.net/newbbsmenu.html';
801800 GIKO_ENCRYPT_TEXT: string = 'gikoNaviEncryptText';
802801
802+ DEF_MESSAGES : array[0..13] of string = ( 'ログアウトしました',
803+ 'ログインしました - ',
804+ '強制ログインしました - ',
805+ '[スレ一覧取得完了]',
806+ '(名称不明)',
807+ '[スレ取得完了]',
808+ '[スレ差分取得完了]',
809+ '[未更新]',
810+ '[中断]',
811+ '[エラー]',
812+ '[レス送信終了]',
813+ '[新スレ送信終了]',
814+ '[レス送信失敗]',
815+ '[新スレ送信失敗]');
803816 var
804817 SOUND_NAME: array[0..4] of TSoundName = (
805818 (Name: 'New'; ViewName: '取得成功'; FileName: ''),
@@ -1256,8 +1269,6 @@ begin
12561269 FCategorySortOrder := ini.ReadBool('ThreadList', 'CategorySortOrder', True);
12571270 FBoardSortIndex := ini.ReadInteger('ThreadList', 'BoardSortIndex', 0);
12581271 FBoardSortOrder := ini.ReadBool('ThreadList', 'BoardSortOrder', True);
1259- // DL後の自動ソート
1260- FAutoSortThreadList := ini.ReadBool('ThreadList', 'AutoSort', True);
12611272 //Dat落ちスレソート順
12621273 FDatOchiSortIndex := ini.ReadInteger('ThreadList', 'DatOchiSortIndex', -1);
12631274 FDatOchiSortOrder := ini.ReadBool('ThreadList', 'DatOchiSortOrder', False);
@@ -1592,8 +1603,6 @@ begin
15921603 ini.WriteBool('ThreadList', 'BoardSortOrder', FBoardSortOrder);
15931604 ini.WriteInteger('ThreadList', 'DatOchiSortIndex', FDatOchiSortIndex);
15941605 ini.WriteBool('ThreadList', 'DatOchiSortOrder', FDatOchiSortOrder);
1595- // DL後の自動ソート
1596- ini.WriteBool('ThreadList', 'AutoSort', FAutoSortThreadList);
15971606
15981607 //書き込み時マシン時刻使用設定
15991608 ini.WriteBool('PostTime', 'UseMachineTime', FUseMachineTime);
@@ -2164,6 +2173,62 @@ function TSetting.GetLanguageFileName: string;
21642173 begin
21652174 Result := GetConfigDir + LANGUAGE_FILE_NAME;
21662175 end;
2176+//Messagelistに出力されるメッセージの設定
2177+procedure TSetting.SetMessages;
2178+var
2179+ i :Integer;
2180+ ini : TMemIniFile;
2181+begin
2182+ //2ch言語読み出し
2183+ if (GengoSupport) and (FileExists(GetLanguageFileName)) then begin
2184+ ini := TmemIniFile.Create(GetLanguageFileName);
2185+ try
2186+ {
2187+ 'ログアウトしました',
2188+ 'ログインしました - ',
2189+ '強制ログインしました - ',
2190+ '[スレ一覧取得完了]',
2191+ '(名称不明)',
2192+ '[スレ取得完了]',
2193+ '[スレ差分取得完了]',
2194+ '[未更新]',
2195+ '[中断]',
2196+ '[エラー]',
2197+ '[レス送信終了]',
2198+ '[新スレ送信終了]',
2199+ '[レス送信失敗]',
2200+ '[新スレ送信失敗]'); }
2201+ FMessageList[0] := ini.ReadString('Language', 'Logout', DEF_MESSAGES[0]);
2202+ FMessageList[1] := ini.ReadString('Language', 'Login', DEF_MESSAGES[1]);
2203+ FMessageList[2] := ini.ReadString('Language', 'ForceLogin', DEF_MESSAGES[2]);
2204+ FMessageList[3] := ini.ReadString('Language', 'ThreadList', DEF_MESSAGES[3]);
2205+ FMessageList[4] := ini.ReadString('Language', 'UnKnown', DEF_MESSAGES[4]);
2206+ FMessageList[5] := ini.ReadString('Language', 'ThreadGet', DEF_MESSAGES[5]);
2207+ FMessageList[6] := ini.ReadString('Language', 'ThreadDiffGet', DEF_MESSAGES[6]);
2208+ FMessageList[7] := ini.ReadString('Language', 'NotMod', DEF_MESSAGES[7]);
2209+ FMessageList[8] := ini.ReadString('Language', 'Abort', DEF_MESSAGES[8]);
2210+ FMessageList[9] := ini.ReadString('Language', 'Error', DEF_MESSAGES[9]);
2211+ FMessageList[10] := ini.ReadString('Language', 'NewReply', DEF_MESSAGES[10]);
2212+ FMessageList[11] := ini.ReadString('Language', 'NewThread', DEF_MESSAGES[11]);
2213+ FMessageList[12] := ini.ReadString('Language', 'ReplyError', DEF_MESSAGES[12]);
2214+ FMessageList[13] := ini.ReadString('Language', 'ThreadError', DEF_MESSAGES[13]);
2215+ finally
2216+ ini.Free;
2217+ end;
2218+
2219+ end else begin
2220+ for i := 0 to 13 do begin
2221+ FMessageList[i] := DEF_MESSAGES[i];
2222+ end;
2223+ end;
2224+end;
2225+function TSetting.GetMessage(AType :Integer): string;
2226+begin
2227+ if (AType >= 0) and (AType <= Length(FMessageList)) then
2228+ Result := FMessageList[AType]
2229+ else
2230+ Result := '';
2231+end;
21672232 procedure TSetting.WriteLogFolder(AVal : String);
21682233 begin
21692234 FLogFolder := AVal;
--- a/gikoNavi.dpr
+++ b/gikoNavi.dpr
@@ -70,8 +70,7 @@ uses
7070 HTMLCreate in 'HTMLCreate.pas',
7171 ListViewUtils in 'ListViewUtils.pas',
7272 GikoDataModule in 'GikoDataModule.pas' {GikoDM: TDataModule},
73- BrowserRecord in 'BrowserRecord.pas',
74- GikoMessage in 'GikoMessage.pas';
73+ BrowserRecord in 'BrowserRecord.pas';
7574
7675 {$R *.RES}
7776 {$R gikoResource.res}
Binary files a/gikoNavi.res and b/gikoNavi.res differ
--- a/readme/language.ini
+++ /dev/null
@@ -1,15 +0,0 @@
1-[Language]
2-Logout=ログアウトしますた
3-Login=ログインしますた -
4-ForceLogin=強制ログインしますた -
5-SureItiran=[スレ一覧取得しますた]
6-Unknown=(名称不明でつ)
7-SureSyutoku=[スレ取得完了しますた]
8-SureDiff=[スレ差分取得完了しますた]
9-NotMod=[未更新 もちけつ]
10-Abort=[中断・・・_| ̄|○]
11-Error=[エラー発生キタ━(゚∀゚)━!!]
12-NewRes=[新レス送信終了しますた(`・ω・´)]
13-NewSure=[新スレ送信終了しますた(`・ω・´)]
14-ResError=[レス送信失敗(´・ω・`)]
15-SureError= [新スレ送信失敗(´・ω・`)]
--- a/readme/readme.txt
+++ b/readme/readme.txt
@@ -109,19 +109,6 @@ LICENSE
109109 ------------------------------
110110 200X/XX/XX
111111 Version バタ51
112- スレッド描画処理の最適化
113- レス番指定URLをクリックしたときの動作で、取得済み外のレス番の場合自動でDLするように変更
114- レスエディタからSambaの設定値を変更できるように変更
115- キャビネット上でクリック・ダブルクリックイベントが過剰に発生する不具合の修正
116- マウスジェスチャー有効時にプレビュー上で右クリックできない不具合の修正
117- メインフォーム上でのショートカットキーの優先順位がギコナビ自体が最上位に変更
118- メインメニューのお気に入りの描画の高速化
119- ステータスバーに現在表示しているスレッドの容量を表示するようにした
120- DAT落ちしたスレの容量を取得できない不具合の修正
121- 板更新でローカルファイルを指定できるように変更
122- スレッド一覧ダウンロード後のソートをオプション化
123- NGワードに全半角ひらがなカタカナの違いを同一視するオプションの追加
124- レスの絞込みで全半角ひらがなカタカタの違いを無視するように変更
125112
126113 2005/10/10
127114 Version バタ50 リリース3
Show on old repository browser