Develop and Download Open Source Software

Browse CVS Repository

Contents of /gikonavigoeson/gikonavi/Giko.pas

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.575 - (show annotations) (download) (as text)
Sat Dec 24 07:00:59 2005 UTC (18 years, 3 months ago) by h677
Branch: MAIN
Changes since 1.574: +13 -3 lines
File MIME type: text/x-pascal
スレ一覧から消えたスレを取得使用として失敗した状態で、スレ一覧を更新すると、
以後の操作がおかしくなる不具合の修正。

1 unit Giko;
2
3 interface
4
5 uses
6 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
7 OleCtrls, ComCtrls, ExtCtrls, Menus, StdCtrls, MMSystem, DateUtils,
8 {$IF Defined(DELPRO) }
9 SHDocVw,
10 MSHTML,
11 {$ELSE}
12 SHDocVw_TLB,
13 MSHTML_TLB,
14 {$IFEND}
15 IdHTTP, ActiveX, ActnList, ImgList,
16 ToolWin, Buttons, IdComponent, UrlMon, Tabs, IdGlobal, StrUtils,
17 CommCtrl, Dialogs, GikoSystem, Setting, BoardGroup, ThreadControl, ItemDownload,
18 Editor, RoundData, GikoPanel, Favorite, HTMLDocumentEvent,
19 HintWindow, GikoCoolBar, GikoListView, Search, ExternalBoardManager,
20 ExternalBoardPlugInMain, StdActns, Variants, ExtActns,IdTCPConnection,
21 IdBaseComponent, IdTCPClient, AppEvnts, BrowserRecord;
22
23 const
24 NGWORDNAME_PANEL = 3;
25 THREADSIZE_PANEL = 2;
26
27 type
28 TGikoTreeType = (gttNone, gtt2ch, gttHistory, gttFavorite);
29 TToolBarSettingSenderType = (tssNone, tssMain, tssList, tssBrowser);
30 TMinimizeType = (mtNone, mtMinimizing, mtMinimized);
31 TResizeType = (rtNone, rtResizing);
32
33 // TBrowserRecord = class;
34
35 TGikoForm = class(TForm)
36 StatusBar: TStatusBar;
37 MainPanel: TPanel;
38 ClientPanel: TPanel;
39 TreeSplitter: TSplitter;
40 CabinetPanel: TPanel;
41 TreeView: TTreeView;
42 ThreadMainPanel: TPanel;
43 ListSplitter: TSplitter;
44 ViewPanel: TPanel;
45 ListView: TGikoListView;
46 ThreadPanel: TPanel;
47 MessagePanel: TPanel;
48 MessageBar: TPanel;
49 MessageHideButton: TSpeedButton;
50 MessageListView: TListView;
51 MessageSplitter: TSplitter;
52 Panel3: TPanel;
53 CabinetCloseSpeedButton: TSpeedButton;
54 ToolBar1: TToolBar;
55 CabinetSelectToolButton: TToolButton;
56 HistoryToolBar: TToolBar;
57 HistoryShowToolButton: TToolButton;
58 HistoryAllClearToolButton: TToolButton;
59 ItemIcon16: TImageList;
60 ItemIcon32: TImageList;
61 HotToobarImageList: TImageList;
62 ItemImageList: TImageList;
63 MainMenu: TMainMenu;
64 FileMenu: TMenuItem;
65 DeleteMenu: TMenuItem;
66 ExitMenu: TMenuItem;
67 KidokuMenu: TMenuItem;
68 MidokuMenu: TMenuItem;
69 AllSelectMenu: TMenuItem;
70 ViewMenu: TMenuItem;
71 StdToolBarMenu: TMenuItem;
72 CabinetMenu: TMenuItem;
73 H1: TMenuItem;
74 N4: TMenuItem;
75 CabinetVisibleMenu: TMenuItem;
76 MessageMenu: TMenuItem;
77 StatusBarMenu: TMenuItem;
78 MMSep03: TMenuItem;
79 LargeIconMenu: TMenuItem;
80 SmallIconMenu: TMenuItem;
81 ListMenu: TMenuItem;
82 DetailMenu: TMenuItem;
83 ToolMenu: TMenuItem;
84 Find1: TMenuItem;
85 RoundMenu: TMenuItem;
86 MMSep04: TMenuItem;
87 OptionMenu: TMenuItem;
88 HelpMenu: TMenuItem;
89 G1: TMenuItem;
90 N1: TMenuItem;
91 AboutMenu: TMenuItem;
92 BrowserPopupMenu: TPopupMenu;
93 ShowThreadMenu: TMenuItem;
94 ShowBoardMenu: TMenuItem;
95 ListIconPopupMenu: TPopupMenu;
96 LargeIconPMenu: TMenuItem;
97 SmallIconPMenu: TMenuItem;
98 ListPMenu: TMenuItem;
99 DetailPMenu: TMenuItem;
100 ClosePopupMenu: TPopupMenu;
101 CloseMenu: TMenuItem;
102 U1: TMenuItem;
103 N3: TMenuItem;
104 B1: TMenuItem;
105 S1: TMenuItem;
106 N2: TMenuItem;
107 A1: TMenuItem;
108 L1: TMenuItem;
109 N5: TMenuItem;
110 S2: TMenuItem;
111 ListPopupMenu: TPopupMenu;
112 ListRoundPMenu: TMenuItem;
113 ListReservPMenu: TMenuItem;
114 LPMSep01: TMenuItem;
115 ItemRoundPMenu: TMenuItem;
116 LPMSep02: TMenuItem;
117 KidokuPMenu: TMenuItem;
118 MidokuPMenu: TMenuItem;
119 AllSelectPMenu: TMenuItem;
120 UrlCopyPMenu: TMenuItem;
121 LPMSep05: TMenuItem;
122 DeletePMenu: TMenuItem;
123 LPMSep06: TMenuItem;
124 ViewPMenu: TMenuItem;
125 LargeIconLPMenu: TMenuItem;
126 SmallIconLPMenu: TMenuItem;
127 ListLPMenu: TMenuItem;
128 DetailLPMenu: TMenuItem;
129 T1: TMenuItem;
130 B2: TMenuItem;
131 N8: TMenuItem;
132 URLC1: TMenuItem;
133 N9: TMenuItem;
134 N10: TMenuItem;
135 G2: TMenuItem;
136 N11: TMenuItem;
137 T3: TMenuItem;
138 L2: TMenuItem;
139 N12: TMenuItem;
140 K1: TMenuItem;
141 N13: TMenuItem;
142 N14: TMenuItem;
143 R1: TMenuItem;
144 A2: TMenuItem;
145 N15: TMenuItem;
146 KokoPopupMenu: TPopupMenu;
147 KokomadePMenu: TMenuItem;
148 AllPMenu: TMenuItem;
149 MenuItem1: TMenuItem;
150 MenuItem2: TMenuItem;
151 BrowserTabPopupMenu: TPopupMenu;
152 Close1: TMenuItem;
153 A3: TMenuItem;
154 N16: TMenuItem;
155 A4: TMenuItem;
156 TreePopupMenu: TPopupMenu;
157 TreeSelectThreadPupupMenu: TMenuItem;
158 TreeSelectBoardPupupMenu: TMenuItem;
159 TPMSep01: TMenuItem;
160 TreeSelectURLPupupMenu: TMenuItem;
161 T2: TMenuItem;
162 L3: TMenuItem;
163 B3: TMenuItem;
164 BrowserBottomPanel: TGikoPanel;
165 CabinetSelectPopupMenu: TPopupMenu;
166 H2: TMenuItem;
167 ItemReservPMenu: TMenuItem;
168 RoundNamePopupMenu: TPopupMenu;
169 N7: TMenuItem;
170 B4: TMenuItem;
171 L4: TMenuItem;
172 K2: TMenuItem;
173 A5: TMenuItem;
174 A6: TMenuItem;
175 C1: TMenuItem;
176 V1: TMenuItem;
177 N19: TMenuItem;
178 D1: TMenuItem;
179 D2: TMenuItem;
180 MessageImageList: TImageList;
181 ProgressBar: TProgressBar;
182 URL1: TMenuItem;
183 NameUrlCopyPMenu: TMenuItem;
184 URLC2: TMenuItem;
185 URLN1: TMenuItem;
186 N21: TMenuItem;
187 URLC3: TMenuItem;
188 URLN2: TMenuItem;
189 N23: TMenuItem;
190 ListCoolBar: TGikoCoolBar;
191 ListToolBar: TToolBar;
192 BrowserCoolBar: TGikoCoolBar;
193 BrowserToolBar: TToolBar;
194 ToolButton3: TToolButton;
195 ToolButton9: TToolButton;
196 ToolButton11: TToolButton;
197 ToolButton5: TToolButton;
198 ListNameToolBar: TToolBar;
199 ListNameLabel: TLabel;
200 FolderImage: TImage;
201 BrowserNameToolBar: TToolBar;
202 ItemBoardImage: TImage;
203 BrowserBoardNameLabel: TLabel;
204 ItemImage: TImage;
205 BrowserNameLabel: TLabel;
206 D3: TMenuItem;
207 N25: TMenuItem;
208 N26: TMenuItem;
209 D4: TMenuItem;
210 S3: TMenuItem;
211 R2: TMenuItem;
212 TreeSelectNameURLPupupMenu: TMenuItem;
213 N27: TMenuItem;
214 H3: TMenuItem;
215 I1: TMenuItem;
216 BrowserTabToolBar: TToolBar;
217 BrowserTab: TTabControl;
218 About1: TMenuItem;
219 N28: TMenuItem;
220 S4: TMenuItem;
221 N29: TMenuItem;
222 N30: TMenuItem;
223 N31: TMenuItem;
224 L5: TMenuItem;
225 L6: TMenuItem;
226 A7: TMenuItem;
227 R3: TMenuItem;
228 FavoriteMenu: TMenuItem;
229 N32: TMenuItem;
230 BoardFavoriteAddMenu: TMenuItem;
231 ThreadFavoriteAddMenu: TMenuItem;
232 N33: TMenuItem;
233 TreeSelectFavoriteAddPupupMenu: TMenuItem;
234 FavoriteTreeView: TTreeView;
235 StateIconImageList: TImageList;
236 TopPanel: TPanel;
237 TopRightPanel: TPanel;
238 AnimePanel: TPanel;
239 Animate: TAnimate;
240 TopCoolPanel: TPanel;
241 MainCoolBar: TGikoCoolBar;
242 MenuToolBar: TToolBar;
243 StdToolBar: TToolBar;
244 AddressToolBar: TToolBar;
245 AddressComboBox: TComboBox;
246 MoveToToolButton: TToolButton;
247 AddressImageList: TImageList;
248 AddressToolBarMenu: TMenuItem;
249 T4: TMenuItem;
250 Show1: TMenuItem;
251 N34: TMenuItem;
252 T5: TMenuItem;
253 B5: TMenuItem;
254 N35: TMenuItem;
255 A8: TMenuItem;
256 U2: TMenuItem;
257 F1: TMenuItem;
258 PreviewTimer: TTimer;
259 MonazillaWebPageAction1: TMenuItem;
260 N36: TMenuItem;
261 H4: TMenuItem;
262 K3: TMenuItem;
263 L7: TMenuItem;
264 N37: TMenuItem;
265 A9: TMenuItem;
266 ChevronPopupMenu: TPopupMenu;
267 N2N1: TMenuItem;
268 N38: TMenuItem;
269 F2: TMenuItem;
270 LinkToolBar: TToolBar;
271 a10: TMenuItem;
272 N39: TMenuItem;
273 T6: TMenuItem;
274 N40: TMenuItem;
275 LinkBarPopupMenu: TPopupMenu;
276 T7: TMenuItem;
277 ThreadPopupMenu: TPopupMenu;
278 MenuItem4: TMenuItem;
279 MenuItem5: TMenuItem;
280 MenuItem6: TMenuItem;
281 T8: TMenuItem;
282 URLN3: TMenuItem;
283 SelectItemNameCopyAction1: TMenuItem;
284 B6: TMenuItem;
285 T9: TMenuItem;
286 C2: TMenuItem;
287 SelectComboBox: TComboBox;
288 MainCoolBarPopupMenu: TPopupMenu;
289 StdToolBarVisiblePMenu: TMenuItem;
290 AddressToolBarVisiblePMenu: TMenuItem;
291 LinkToolBarVisiblePMenu: TMenuItem;
292 NG1: TMenuItem;
293 NG2: TMenuItem;
294 N43: TMenuItem;
295 N44: TMenuItem;
296 L9: TMenuItem;
297 I3: TMenuItem;
298 N45: TMenuItem;
299 B9: TMenuItem;
300 R5: TMenuItem;
301 T12: TMenuItem;
302 Show3: TMenuItem;
303 N46: TMenuItem;
304 T13: TMenuItem;
305 B10: TMenuItem;
306 N47: TMenuItem;
307 A12: TMenuItem;
308 U4: TMenuItem;
309 F4: TMenuItem;
310 N48: TMenuItem;
311 T14: TMenuItem;
312 ToolButton16: TToolButton;
313 N50: TMenuItem;
314 A11: TMenuItem;
315 S5: TMenuItem;
316 Reload: TMenuItem;
317 GoBack: TMenuItem;
318 GoFoward: TMenuItem;
319 IndividualAbon1: TMenuItem;
320 N41: TMenuItem;
321 IndividualAbon2: TMenuItem;
322 AntiIndivAbonMenuItem: TMenuItem;
323 AntiIndividualAbon: TMenuItem;
324 N49: TMenuItem;
325 N51: TMenuItem;
326 N52: TMenuItem;
327 SearchBoardName: TMenuItem;
328 TreeSelectLogDeleteSeparator: TMenuItem;
329 N54: TMenuItem;
330 A13: TMenuItem;
331 FavoriteTreePopupMenu: TPopupMenu;
332 FavoriteTreeRenamePopupMenu: TMenuItem;
333 FavoriteTreeNewFolderPopupMenu: TMenuItem;
334 N56: TMenuItem;
335 FavoriteTreeDeletePopupMenu: TMenuItem;
336 FavoriteToolBar: TToolBar;
337 FavoriteAddToolButton: TToolButton;
338 FavoriteArrangeToolButton: TToolButton;
339 FavoriteTreeBrowseFolderPopupMenu: TMenuItem;
340 N57: TMenuItem;
341 FavoriteTreeReloadPopupMenu: TMenuItem;
342 N58: TMenuItem;
343 FavoriteTreeURLCopyPopupMenu: TMenuItem;
344 FavoriteTreeNameCopyPopupMenu: TMenuItem;
345 FavoriteTreeLogDeletePopupMenu: TMenuItem;
346 N59: TMenuItem;
347 FavoriteTreeNameURLCopyPopupMenu: TMenuItem;
348 ToolButton20: TToolButton;
349 N60: TMenuItem;
350 ExportFavoriteFileAction1: TMenuItem;
351 N6: TMenuItem;
352 N17: TMenuItem;
353 N18: TMenuItem;
354 N20: TMenuItem;
355 N24: TMenuItem;
356 N62: TMenuItem;
357 N61: TMenuItem;
358 N63: TMenuItem;
359 N64: TMenuItem;
360 dummy1: TMenuItem;
361 TreeSelectLogDeletePopupMenu: TMenuItem;
362 N65: TMenuItem;
363 BBSSelectPopupMenu: TPopupMenu;
364 PlugInMenu: TMenuItem;
365 TreeSelectNamePupupMenu: TMenuItem;
366 BrowserPanel: TPanel;
367 SelectTimer: TTimer;
368 SelectThreadSave: TMenuItem;
369 N55: TMenuItem;
370 N66: TMenuItem;
371 dat1: TMenuItem;
372 OpenLogFolder: TMenuItem;
373 Browser: TWebBrowser;
374 TabSave: TMenuItem;
375 TabOpen: TMenuItem;
376 ResRangePopupMenu: TPopupMenu;
377 ResRangeHundPMenuItem: TMenuItem;
378 ResRangeKokoPMenuItem: TMenuItem;
379 ResRangeNewPMenuItem: TMenuItem;
380 ResRangeAllPMenuItem: TMenuItem;
381 BrowsBoradHeadAction1: TMenuItem;
382 ThreadRangePopupMenu: TPopupMenu;
383 A15: TMenuItem;
384 L8: TMenuItem;
385 N67: TMenuItem;
386 N68: TMenuItem;
387 S6: TMenuItem;
388 N69: TMenuItem;
389 ResRangeSelectPMenuItem: TMenuItem;
390 ListColumnPopupMenu: TPopupMenu;
391 N70: TMenuItem;
392 ID1: TMenuItem;
393 ID2: TMenuItem;
394 N53: TMenuItem;
395 ID3: TMenuItem;
396 N71: TMenuItem;
397 N72: TMenuItem;
398 N73: TMenuItem;
399 SelectComboBoxPanel: TPanel;
400 SelectComboBoxSplitter: TImage;
401 ToolButton1: TToolButton;
402 N74: TMenuItem;
403 WikiFAQ: TMenuItem;
404 GikoApplicationEvents: TApplicationEvents;
405 procedure FormCreate(Sender: TObject);
406 procedure FormDestroy(Sender: TObject);
407 procedure BrowserStatusTextChange(Sender: TObject;
408 const Text: WideString);
409 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
410 procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
411 var AllowChange: Boolean);
412 procedure ListViewKeyDown(Sender: TObject; var Key: Word;
413 Shift: TShiftState);
414 procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
415 procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
416 Button: TToolButton; State: TCustomDrawState;
417 var DefaultDraw: Boolean);
418 procedure BrowserBeforeNavigate2(Sender: TObject;
419 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
420 Headers: OleVariant; var Cancel: WordBool);
421 procedure TreeViewCustomDraw(Sender: TCustomTreeView;
422 const ARect: TRect; var DefaultDraw: Boolean);
423 procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
424 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
425 procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
426 procedure ListViewCustomDraw(Sender: TCustomListView;
427 const ARect: TRect; var DefaultDraw: Boolean);
428 procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
429 Shift: TShiftState; X, Y: Integer);
430 procedure TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
431 procedure MessageListViewResize(Sender: TObject);
432 procedure CabinetVisible( isVisible : Boolean );
433 procedure FormResize(Sender: TObject);
434 procedure ListPopupMenuPopup(Sender: TObject);
435 procedure TreePopupMenuPopup(Sender: TObject);
436 procedure BrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
437 var Cancel: WordBool);
438 procedure ListSplitterMoved(Sender: TObject);
439 procedure BrowserTabChange(Sender: TObject);
440 procedure BrowserTabMouseDown(Sender: TObject; Button: TMouseButton;
441 Shift: TShiftState; X, Y: Integer);
442 procedure BrowserTabDragOver(Sender, Source: TObject; X, Y: Integer;
443 State: TDragState; var Accept: Boolean);
444 procedure BrowserTabDragDrop(Sender, Source: TObject; X, Y: Integer);
445 procedure BrowserTabMouseMove(Sender: TObject; Shift: TShiftState; X,
446 Y: Integer);
447 procedure BrowserDocumentComplete(Sender: TObject;
448 const pDisp: IDispatch; var URL: OleVariant);
449 procedure RoundNamePopupMenuPopup(Sender: TObject);
450 procedure FormShow(Sender: TObject);
451 procedure BrowserTabToolBarResize(Sender: TObject);
452 procedure FavoriteMenuClick(Sender: TObject);
453 procedure MainCoolBarResize(Sender: TObject);
454 procedure AddressToolBarResize(Sender: TObject);
455 procedure AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
456 Shift: TShiftState);
457 procedure BrowserEnter(Sender: TObject);
458 procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
459 procedure PreviewTimerTimer(Sender: TObject);
460 procedure MessageHideButtonClick(Sender: TObject);
461 procedure HistoryAllClearToolButtonClick(Sender: TObject);
462 procedure MainCoolBarBandInfo(Sender: TObject;
463 var BandInfo: PReBarBandInfoA);
464 procedure MainCoolBarChevronClick(Sender: TObject;
465 RebarChevron: PNMRebarChevron);
466 procedure ListCoolBarBandInfo(Sender: TObject;
467 var BandInfo: PReBarBandInfoA);
468 procedure ListCoolBarChevronClick(Sender: TObject;
469 RebarChevron: PNMRebarChevron);
470 procedure BrowserCoolBarBandInfo(Sender: TObject;
471 var BandInfo: PReBarBandInfoA);
472 procedure BrowserCoolBarChevronClick(Sender: TObject;
473 RebarChevron: PNMRebarChevron);
474 procedure ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
475 procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
476 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
477 procedure SelectComboBoxChange(Sender: TObject);
478 procedure SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
479 Shift: TShiftState);
480 procedure SelectComboBoxExit(Sender: TObject);
481 procedure SelectComboBoxSplitterMouseMove(Sender: TObject;
482 Shift: TShiftState; X, Y: Integer);
483 procedure SelectComboBoxSplitterMouseDown(Sender: TObject;
484 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
485 procedure SelectComboBoxSplitterMouseUp(Sender: TObject;
486 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
487 procedure StatusBarResize(Sender: TObject);
488 procedure SelectComboBoxEnter(Sender: TObject);
489 procedure FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
490 Y: Integer);
491 procedure FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
492 procedure FavoriteTreeViewEdited(Sender: TObject; Node: TTreeNode;
493 var S: String);
494 procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
495 Shift: TShiftState);
496 procedure FavoriteTreePopupMenuPopup(Sender: TObject);
497 procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
498 procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
499 Shift: TShiftState; X, Y: Integer);
500 procedure LinkToolBarDragOver(Sender, Source: TObject; X, Y: Integer;
501 State: TDragState; var Accept: Boolean);
502 procedure FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
503 Y: Integer);
504 procedure ListCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
505 var Handled: Boolean);
506 procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
507 var Handled: Boolean);
508 procedure BrowserCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
509 var Handled: Boolean);
510 procedure FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
511 procedure BrowserTabContextPopup(Sender: TObject; MousePos: TPoint;
512 var Handled: Boolean);
513 procedure BrowserTabPopupMenuPopup(Sender: TObject);
514 procedure BrowserTabResize(Sender: TObject);
515 procedure TreeViewKeyDown(Sender: TObject; var Key: Word;
516 Shift: TShiftState);
517 procedure FavoriteTreeViewMouseDown(Sender: TObject;
518 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
519 procedure MessagePanelResize(Sender: TObject);
520 procedure OnResized;
521 procedure SelectTimerTimer(Sender: TObject);
522 procedure ListViewColumnRightClick(Sender: TObject;
523 Column: TListColumn; Point: TPoint);
524 procedure ListViewCustomDrawItem(Sender: TCustomListView;
525 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
526 procedure FormActivate(Sender: TObject);
527 procedure BrowserPanelResize(Sender: TObject);
528 procedure MenuToolBarResize(Sender: TObject);
529 procedure ListToolBarResize(Sender: TObject);
530 procedure BrowserToolBarResize(Sender: TObject);
531 procedure KokoPopupMenuPopup(Sender: TObject);
532 procedure ListViewKeyUp(Sender: TObject; var Key: Word;
533 Shift: TShiftState);
534 procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
535 var AllowEdit: Boolean);
536 procedure CabinetCloseSpeedButtonClick(Sender: TObject);
537 procedure FavoriteArrangeToolButtonClick(Sender: TObject);
538 procedure GikoApplicationEventsMessage(var Msg: tagMSG;
539 var Handled: Boolean);
540 procedure GikoApplicationEventsDeactivate(Sender: TObject);
541 procedure GikoApplicationEventsException(Sender: TObject; E: Exception);
542 procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
543 Shift: TShiftState; X, Y: Integer);
544 private
545 { Private 鐃緒申鐃緒申 }
546 FEnabledCloseButton: Boolean;
547 FClickNode: TTreeNode;
548 FHttpState: Boolean;
549 FHint: TResPopup;
550 FPreviewBrowser: TWebBrowser;
551 FPreviewURL: string;
552 FBrowserSizeHeight: Integer;
553 FBrowserSizeWidth: Integer;
554 FTabHintIndex: Integer;
555 FListStyle: TViewStyle; //鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃?鐃緒申
556 FItemNoVisible: Boolean; //鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?
557 FViewType: TGikoViewType; //鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?
558 FActiveList: TObject;
559 FActiveContent: TBrowserRecord; //
560 FActiveBBS : TBBS;
561 FHistoryList: TList; //鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃?
562 FTreeType: TGikoTreeType;
563 FWorkCount: Integer;
564 FNameCookie: string;
565 FMailCookie: string;
566 FDownloadTitle: string; //鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申
567 FDownloadMax: Integer; //鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?
568 FEvent: THTMLDocumentEventSink;//鐃?鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃?
569 IsDraggingSelectComboBox : Boolean;
570 DraggingSelectComboBoxPosition : TPoint;
571 FSearchDialog: TSearchDialog;
572 FDropSpaceNode: TTreeNode;
573 FDragTime : Cardinal; ///< 鐃緒申鐃緒申鐃?鐃緒申D&D鐃?
574 FDragButton : TToolButton; ///< 鐃緒申鐃緒申鐃?鐃緒申D&D鐃?鐃緒申Drag鐃緒申鐃緒申鐃緒申Button鐃緒申鐃緒申
575 FDragWFirst : Boolean; ///< WebTab鐃緒申D&D鐃?
576 FListViewBackGroundColor : TColor; ///< ListView鐃緒申BackGroundColor
577 FUseOddResOddColor : Boolean; ///< 鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申
578 FOddColor : TColor; ///< 鐃緒申鐃緒申鐃?
579 FSelectResWord : string; ///< 鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?
580 FIsIgnoreResize : TResizeType; ///< 鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
581 FIsMinimize : TMinimizeType; ///< 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
582 FOldFormWidth : Integer; ///< 鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申
583 FToolBarSettingSender : TToolBarSettingSenderType; ///< 鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃?
584 FMouseDownPos : TPoint; ///< 鐃?鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?
585 FBrowsers: TList;
586 FResRangeMenuSelect : Longint; ///< ResRangeButton 鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 (鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申 ResRange 鐃緒申鐃緒申)
587 FStartUp : Boolean;
588 FIsHandledWheel : Boolean; ///< 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 WM_MOUSEWHEEL 鐃緒申鐃緒申鐃緒申鐃緒申
589 DiffComp: Boolean; //Add by Genyakun 鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申True鐃緒申鐃緒申鐃緒申
590 FOrigenCaption: String; //鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申
591 FPreviewBrowserRect: TRect; ///< 鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申
592 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
593 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
594 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
595 procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
596 procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
597 procedure ListClick;
598 procedure ListDoubleClick(Shift: TShiftState);
599 function Hook(var Message: TMessage): Boolean;
600 procedure AddRoundNameMenu(MenuItem: TMenuItem);
601 procedure SetMenuFont;
602 procedure CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
603 procedure FavoriteClick(Sender: TObject; ActiveTab: Boolean); overload;
604 procedure FavoriteClick(Sender: TObject); overload;
605 procedure FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
606 function OnDocumentContextMenu(Sender: TObject): WordBool;
607 procedure ShowTextPopup;
608 function GetWidthAllToolButton(ToolBar: TToolBar): Integer;
609 procedure MenuBarChevronMenu;
610 procedure LinkBarChevronMenu;
611 procedure ToolBarChevronMenu(ToolBar: TToolBar);
612 procedure LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
613 procedure LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
614 procedure LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
615 procedure LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
616 procedure LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
617 function TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
618 procedure FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
619 procedure FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
620 procedure FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
621 //
622 procedure SetListViewBackGroundColor(value: TColor);
623 procedure BBSMenuItemOnClick( Sender : TObject );
624 /// CoolBar 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
625 procedure SaveCoolBarSettings;
626 procedure SaveMainCoolBarSettings;
627 procedure SaveBoardCoolBarSettings;
628 procedure SaveBrowserCoolBarSettings;
629 /// CoolBar 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
630 procedure LoadCoolBarSettings;
631 /// 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
632 procedure OnMinimize;
633 /// 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
634 procedure OnMinimized;
635 /// TreeView 鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申
636 procedure TreeClick( Node : TTreeNode );
637 /// TreeView 鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申
638 procedure TreeDoubleClick( Node : TTreeNode );
639 /// 鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃? BBS 鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?
640 procedure SetBBSMenu;
641 /// 鐃?鐃?鐃緒申鐃緒申
642 function GetTabURLs(AStringList: TStringList) : Boolean;
643 /// ListColumnPopupMenu 鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃?
644 procedure ListColumnPopupMenuOnClick( Sender : TObject );
645 //! 鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
646 procedure SetSelectWord( const text : string );
647 //鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
648 function GetScreenCursor(): TCursor;
649 //鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
650 procedure SetScreenCursor(Cursor : TCursor);
651 //! 鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
652 procedure InitActionChecked();
653 //! 鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申
654 procedure CreateControlThread();
655 //! 鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申
656 procedure CreateBrowsers(count: Integer);
657 protected
658 procedure CreateParams(var Params: TCreateParams); override;
659 procedure WndProc(var Message: TMessage); override;
660 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
661 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
662 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
663
664 public
665 { Public 鐃緒申鐃緒申 }
666 LastRoundTime: TDateTime;
667 BrowserNullTab: TBrowserRecord;
668 FControlThread: TThreadControl;
669 procedure MoveToURL(const inURL: string);
670 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
671 procedure ReloadBBS;
672 function GetHttpState: Boolean;
673 procedure SetEnabledCloseButton(Enabled: Boolean);
674 function GetTreeNode(Data: TObject): TTreeNode;
675 procedure ListViewAllSelect;
676 property ListStyle: TViewStyle read FListStyle write FListStyle;
677 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
678 property ViewType: TGikoViewType read FViewType write FViewType;
679 property NameCookie: string read FNameCookie write FNameCookie;
680 property MailCookie: string read FMailCookie write FMailCookie;
681 property ClickNode: TTreeNode read FClickNode write FClickNode;
682 property TreeType: TGikoTreeType read FTreeType write FTreeType;
683 property ActiveContent: TBrowserRecord read FActiveContent write FActiveContent;
684 property ResRangeMenuSelect: Longint read FResRangeMenuSelect write FResRangeMenuSelect;
685 property SelectResWord : string read FSelectResWord write FSelectResWord;
686 property BrowserSizeWidth: Integer read FBrowserSizeWidth write FBrowserSizeWidth;
687 property BrowserSizeHeight: Integer read FBrowserSizeHeight write FBrowserSizeHeight;
688 property SearchDialog: TSearchDialog read FSearchDialog write FSearchDialog;
689 property ToolBarSettingSender : TToolBarSettingSenderType
690 read FToolBarSettingSender write FToolBarSettingSender;
691 property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
692 property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
693 property WorkCount: Integer read FWorkCount write FWorkCount;
694 procedure SetContent(inThread: TBrowserRecord);
695 function GetActiveContent: TThreadItem;
696 function GetActiveList: TObject;
697
698 procedure SetListViewType(AViewType: TGikoViewType); overload;
699 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
700 procedure PlaySound(SoundEventName: string);
701 function AddHistory( FavItem: TFavoriteThreadItem ): Boolean;
702 procedure ClearHistory;
703 procedure SaveHistory;
704 procedure LoadHistory;
705 procedure ShowBBSTree( inBBS : TBBS );
706 procedure ShowBBSTreeOld( inBBS : TBBS );
707 procedure ShowHistoryTree;
708 procedure SetHistoryTreeNode;
709 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
710 procedure SetBrowserTabState;
711 procedure SetToolBarPopup;
712 procedure ShowFavoriteAddDialog( Item : TObject );
713 procedure FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
714 procedure RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
715 property ListViewBackGroundColor: TColor read FListViewBackGroundColor write SetListViewBackGroundColor;
716 property UseOddResOddColor : Boolean read FUseOddResOddColor write FUseOddResOddColor;
717 property OddColor : TColor read FOddColor write FOddColor;
718 function FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
719 procedure OnPlugInMenuItem( Sender : TObject );
720 procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
721 /// ListView 鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申 KuroutSetting鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
722 procedure ActiveListColumnSave;
723 procedure SetActiveList(Obj: TObject);
724 property ActiveList: TObject read GetActiveList write SetActiveList;
725 /// CoolBar 鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申
726 procedure CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
727 //鐃緒申鐃緒申ID鐃緒申鐃緒申鐃緒申鐃?鐃緒申
728 procedure IndividualAbonID(Atype : Integer);
729 //鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申
730 procedure IndividualAbon(Atag, Atype : Integer);
731 //鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申 true:鐃?鐃緒申鐃緒申鐃?鐃? false:鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申
732 procedure RepaintAllTabsBrowser();
733 //鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申
734 procedure SetLinkBar;
735 procedure FavoriteBrowseFolder( node: TTreeNode );
736 //鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?
737 procedure DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
738 //鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?
739 procedure DownloadList(Board: TBoard; ForceDownload: Boolean = False);
740 //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
741 procedure DeleteHistory( threadItem: TThreadItem );
742 //鐃?鐃?鐃緒申鐃緒申鐃緒申
743 procedure DeleteTab(ThreadItem: TThreadItem); overload;
744 procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
745 //鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申
746 procedure BrowserMovement(const AName: string);
747 //Application鐃緒申MainForm鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
748 function GetMainForm(): TComponent;
749 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
750 //! 鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃?
751 procedure OnGestureStart(Sender: TObject);
752 //! 鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申
753 procedure OnGestureMove(Sender: TObject);
754 //! 鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申
755 procedure OnGestureEnd(Sender: TObject);
756 /// 鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
757 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
758 //鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申EditorForm鐃緒申鐃緒申鐃緒申鐃緒申
759 function EditorFormExists(): boolean;
760 //鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申EditorForm鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
761 procedure AllEditroFormNameTextClearClear();
762 //鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申EditorForm鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
763 procedure AllEditroFormMailTextClearClear();
764 //ListView鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
765 procedure SelectListItem(List: TList);
766 /// 鐃?鐃?鐃緒申鐃緒申
767 function SaveTabURLs : Boolean;
768 /// 鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申
769 function LoadTabURLs : Boolean;
770 //鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申
771 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
772 //
773 procedure ModifySelectList;
774 //
775 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
776 //
777 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
778 //
779 procedure SetSelectRoundName(Sender: TObject);
780 //
781 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
782 //
783 function WebBrowserClick(Sender: TObject): WordBool;
784 //! 鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
785 procedure SetSelectComboBox();
786 published
787 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
788 end;
789
790 TFavoriteMenuItem = class(TMenuItem)
791 private
792 FData : Pointer;
793 public
794 property Data: Pointer read FData write FData;
795 end;
796
797 TBBSMenuItem = class(TMenuItem)
798 private
799 FData : Pointer;
800 public
801 property Data: Pointer read FData write FData;
802 end;
803
804 TLinkToolButton = class(TToolButton)
805 private
806 FData : Pointer;
807 public
808 property Data: Pointer read FData write FData;
809 end;
810
811 var
812 GikoForm: TGikoForm;
813
814 implementation
815
816 uses
817 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
818 YofUtils, ShellAPI, ToolBarUtil, ToolBarSetting,
819 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
820 FavoriteArrange, AddressHistory, Preview, Gesture,
821 About, Option, Round, Splash, Sort, ListSelect, Imm,
822 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
823 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage;
824
825 const
826 BLANK_HTML: string = 'about:blank';
827 BROWSER_COUNT = 5; //鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申
828 //D&D鐃緒申鐃?
829 DandD_THRESHOLD = 5; //D&D鐃緒申鐃緒申鐃?鐃?pixcel)
830 //鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申
831 HTML_FILE_NAME = 'temp_preview.html';
832 ITEM_ICON_THREADLOG1 = 6; //鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃?
833 ITEM_ICON_THREADLOG2 = 7; //鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃?
834 //鐃緒申鐃?鐃?鐃?鐃?ID
835 USER_TREECLICK = WM_USER + 2000;
836 USER_RESIZED = WM_USER + 2001;
837 USER_MINIMIZED = WM_USER + 2002;
838 USER_SETLINKBAR = WM_USER + 2003;
839 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
840 {$R *.DFM}
841
842 procedure TGikoForm.CreateParams(var Params: TCreateParams);
843 begin
844 inherited;
845 if FormStyle in [fsNormal, fsStayOnTop] then begin
846 if BorderStyle in [bsSingle, bsSizeable] then begin
847 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
848 Params.WndParent := 0;
849 end;
850 end;
851 end;
852
853 procedure TGikoForm.FormCreate(Sender: TObject);
854 const
855 TVS_NOTOOLTIPS = $0080;
856 var
857 FileName: string;
858 Style: DWORD;
859 msg: string;
860 i: Integer;
861 wp: TWindowPlacement;
862 begin
863 {$IFDEF DEBUG}
864 AllocConsole;
865 Writeln('============================================================');
866 Writeln(' 鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃? 鐃?鐃緒申鐃?鐃?鐃緒申');
867 Writeln('');
868 Writeln(' 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?');
869 Writeln(' 鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申');
870 Writeln('============================================================');
871 {$ENDIF}
872 FTreeType := gttNone;
873 // 鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
874 FStartUp := true;
875 Application.HookMainWindow(Hook);
876 FIsIgnoreResize := rtResizing;
877
878 FSearchDialog := nil;
879 CreateBrowsers(BROWSER_COUNT);
880
881 //鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃?
882 SetMenuFont;
883
884 //鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申
885 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
886
887 //鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
888 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
889
890 EnabledCloseButton := True;
891
892 //鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申
893 ListView.ViewStyle := GikoSys.Setting.ListStyle;
894
895 //鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?
896 AnimePanel.Top := 0;
897 AnimePanel.Left := 0;
898
899 //鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
900
901 //鐃?鐃緒申鐃?鐃?鐃?鐃?
902 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
903
904 //鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?
905 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
906 GikoDM.MsgBarVisibleActionExecute(nil);
907 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
908
909 //鐃?鐃?鐃?鐃?鐃?鐃?鐃?
910 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
911 GikoDM.StatusBarVisibleActionExecute(nil);
912
913 //鐃?鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申
914 TreeView.Items.BeginUpdate;
915 FavoriteTreeView.Items.BeginUpdate;
916 ListView.Items.BeginUpdate;
917 try
918 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
919 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
920 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
921 TreeView.Color := GikoSys.Setting.CabinetBackColor;
922 FavoriteTreeView.Font.Assign(TreeView.Font);
923 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
924
925 ListView.Font.Name := GikoSys.Setting.ListFontName;
926 ListView.Font.Size := GikoSys.Setting.ListFontSize;
927 ListView.Font.Color := GikoSys.Setting.ListFontColor;
928 ListView.Font.Style := [];
929 if GikoSys.Setting.ListFontBold then
930 ListView.Font.Style := [fsbold];
931 if GikoSys.Setting.ListFontItalic then
932 ListView.Font.Style := ListView.Font.Style + [fsitalic];
933
934 ListViewBackGroundColor := clWhite; // 鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
935 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; // 鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃?
936 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
937 FOddColor := GikoSys.Setting.OddColor;
938
939 finally
940 TreeView.Items.EndUpdate;
941 FavoriteTreeView.Items.EndUpdate;
942 ListView.Items.EndUpdate;
943 end;
944 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
945 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
946
947 //鐃?鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?
948 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
949 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
950 BrowserTab.Font.Style := [];
951 if GikoSys.Setting.BrowserTabFontBold then
952 BrowserTab.Font.Style := [fsBold];
953 if GikoSys.Setting.BrowserTabFontItalic then
954 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
955 FDragWFirst := false;
956 SetContent(BrowserNullTab); //鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申
957
958 //鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申
959 ProgressBar.Parent := StatusBar;
960 ProgressBar.Top := 2;
961 ProgressBar.Left := 0;
962 ProgressBar.Width := StatusBar.Panels[0].Width;
963 ProgressBar.Height := StatusBar.Height - 2;
964 ProgressBar.Position := 0;
965
966 // 鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?(ReadBoardFile, LoadHistory 鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申)
967 InitializeBoardPlugIns;
968
969 // 鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申(ReadFavorite 鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申)
970 GikoSys.ListBoardFile;
971
972 // 鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申
973 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
974
975 // 鐃緒申鐃緒申鐃緒申鐃緒申BBS鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
976 for i := Length(BBSs) - 1 downto 0 do begin
977 if not BBSs[i].IsBoardFileRead then
978 GikoSys.ReadBoardFile(BBSs[i]);
979
980 if SplashWindow <> nil then begin
981 SplashWindow.ProgressBar.StepBy(20);
982 SplashWindow.Update;
983 end;
984 end;
985 //鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申
986 RoundList := TRoundList.Create;
987 RoundList.LoadRoundBoardFile;
988 RoundList.LoadRoundThreadFile;
989
990 //TreeView鐃緒申鐃緒申鐃緒申鐃?鐃緒申ToolTip鐃緒申鐃緒申鐃?鐃緒申
991 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
992 Style := Style or TVS_NOTOOLTIPS;
993 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
994
995 // 鐃?鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
996 TreeView.Align := alClient;
997 FavoriteTreeView.Align := alClient;
998 FavoriteTreeView.Visible := False;
999
1000 // 鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申
1001 SetBBSMenu;
1002
1003 //鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申
1004 wp.length := sizeof(wp);
1005 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1006 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1007 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1008 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1009 wp.showCmd := SW_HIDE;
1010 SetWindowPlacement(Handle, @wp);
1011 //Self.Update;
1012
1013 if GikoSys.Setting.WindowMax then
1014 WindowState := wsMaximized;
1015
1016 //鐃?鐃?鐃?鐃?鐃緒申
1017 try
1018 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1019 if FileExists(FileName) then
1020 Animate.FileName := FileName;
1021 except
1022 end;
1023
1024 //鐃?鐃?鐃?鐃?
1025 FNameCookie := '';
1026 FMailCookie := '';
1027
1028 //鐃?鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申
1029 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1030 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1031
1032
1033 // 鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃?(LoadHistory 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申)
1034 FHistoryList := TList.Create;
1035
1036 // 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1037 LoadHistory;
1038
1039 //鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1040 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1041 FavoriteDM.ReadFavorite;
1042
1043 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1044 GikoDM.ArrangeAction.Execute;
1045
1046 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1047 case GikoSys.Setting.ListWidthState of
1048 glsMax: begin
1049 ViewPanel.Width := 1;
1050 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1051 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1052 end;
1053 glsMin: begin
1054 ViewPanel.Width := GikoSys.Setting.ListWidth;
1055 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1056 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1057 end;
1058 else begin
1059 ViewPanel.Width := GikoSys.Setting.ListWidth;
1060 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1061 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1062 end;
1063 end;
1064 end else begin
1065 case GikoSys.Setting.ListHeightState of
1066 glsMax: begin
1067 ViewPanel.Height := 1;
1068 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1069 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1070 end;
1071 glsMin: begin
1072 ViewPanel.Height := GikoSys.Setting.ListHeight;
1073 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1074 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1075 end;
1076 else begin
1077 ViewPanel.Height := GikoSys.Setting.ListHeight;
1078 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1079 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1080 end;
1081 end;
1082 end;
1083
1084 //鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃?
1085 CreateControlThread();
1086
1087 // 鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1088 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1089
1090 //鐃?鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申
1091 SetBrowserTabState;
1092
1093 BrowserBoardNameLabel.Caption := '';
1094 BrowserNameLabel.Caption := '';
1095 FWorkCount := 0;
1096
1097 FTabHintIndex := -1;
1098
1099 //鐃?鐃?鐃緒申鐃?鐃?Wrapable
1100 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1101 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1102
1103 MakeDefaultINIFile();
1104 //鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1105 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1106 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1107 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1108 SetToolBarPopup;
1109
1110 //ListToolBar鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申ComboBox鐃緒申鐃?鐃?
1111 SetSelectComboBox();
1112
1113 //鐃?鐃?鐃緒申鐃?鐃?鐃?
1114 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1115
1116 //鐃緒申鐃緒申鐃?鐃?鐃?
1117 SetLinkBar;
1118 //鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申FormShow鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1119
1120 //鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申
1121 if not FileExists(GikoSys.GetBoardFileName) then begin
1122 msg := '鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申' + #13#10#13#10
1123 + '鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申' + #13#10
1124 + '鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?';
1125 MsgBox(SplashWindow.Handle, msg, '鐃?鐃?鐃?鐃?', MB_OK or MB_ICONINFORMATION);
1126 GikoDM.NewBoardAction.Execute;
1127 end;
1128
1129 //鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1130 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1131
1132 //鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申
1133 // FLastRoundTime := 0;
1134
1135 //ResHint
1136 FHint := TResPopup.Create(Self);
1137
1138 ListView.OnData := TListViewUtils.ListViewData;
1139
1140 // 鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申
1141 CabinetVisible( False );
1142 if GikoSys.Setting.CabinetVisible then begin
1143 i := CabinetSelectPopupMenu.Items.Count - 1;
1144 if GikoSys.Setting.CabinetIndex = i - 1 then
1145 GikoDM.CabinetHistoryAction.Execute
1146 else if GikoSys.Setting.CabinetIndex = i then
1147 GikoDM.CabinetFavoriteAction.Execute
1148 else begin
1149 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1150 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1151 // 鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 2
1152 FIsIgnoreResize := rtResizing;
1153 GikoDM.CabinetBBSAction.Execute;
1154 end;
1155 end else begin
1156 ShowBBSTreeOld( BBSs[ 0 ] );
1157 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1158 end;
1159
1160 //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?
1161 for i := 1 to ParamCount do begin
1162 MoveToURL(ParamStr(i));
1163 end;
1164
1165 GikoDM.RepaintStatusBar;
1166 StatusBarResize(Sender);
1167
1168 dummy1.Caption := ItemReservPMenu.Caption;
1169 dummy1.Hint := ItemReservPMenu.Hint;
1170
1171 //Samba24鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃?鐃?鐃?
1172 GikoSys.SambaFileExists();
1173
1174 {$IFDEF SPAM_FILTER_ENABLED}
1175 // 鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申
1176 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1177 {$ENDIF}
1178
1179 // 鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?
1180 MouseGesture := TMouseGesture.Create;
1181 GikoSys.Setting.Gestures.LoadGesture(
1182 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
1183 MouseGesture.Margin := GikoSys.Setting.Gestures.Margin;
1184 MouseGesture.OnGestureStart := OnGestureStart;
1185 MouseGesture.OnGestureMove := OnGestureMove;
1186 MouseGesture.OnGestureEnd := OnGestureEnd;
1187 if GikoSys.Setting.GestureEnabled then
1188 MouseGesture.SetHook( Handle );
1189
1190 //2ch鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申
1191 GikoSys.SetGikoMessage;
1192
1193 //鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申
1194 if GikoSys.Setting.AutoLogin then
1195 GikoDM.LoginAction.Execute;
1196
1197 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1198
1199 //鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1200 FavoriteAddToolButton.Caption := '鐃緒申鐃緒申...';
1201 AntiIndivAbonMenuItem.Caption := '鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申';
1202
1203
1204 end;
1205
1206 // CoolBar 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1207 procedure TGikoForm.SaveCoolBarSettings;
1208 begin
1209
1210 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1211 Exit;
1212 SaveMainCoolBarSettings;
1213 SaveBoardCoolBarSettings;
1214 SaveBrowserCoolBarSettings;
1215
1216 end;
1217 procedure TGikoForm.SaveMainCoolBarSettings;
1218 var
1219 i : Integer;
1220 CoolSet : TCoolSet;
1221 begin
1222 //鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申(Main)
1223 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1224 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1225 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1226 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1227 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1228 end;
1229 end;
1230 procedure TGikoForm.SaveBoardCoolBarSettings;
1231 var
1232 i : Integer;
1233 CoolSet : TCoolSet;
1234 begin
1235 //鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申(Board)
1236 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1237 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1238 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1239 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1240 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1241 end;
1242 end;
1243 procedure TGikoForm.SaveBrowserCoolBarSettings;
1244 var
1245 i : Integer;
1246 CoolSet : TCoolSet;
1247 begin
1248 //鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申(Browser)
1249 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1250 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1251 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1252 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1253 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1254 end;
1255 end;
1256 // CoolBar 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1257 procedure TGikoForm.LoadCoolBarSettings;
1258 var
1259 i : Integer;
1260 CoolSet : TCoolSet;
1261 begin
1262
1263 //鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申(Main)
1264 MainCoolBar.Bands.BeginUpdate;
1265 try
1266 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1267 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1268 CoolSet := GikoSys.Setting.MainCoolSet[i];
1269 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1270 FIsIgnoreResize := rtNone;
1271 SaveCoolBarSettings;
1272 Exit;
1273 end;
1274 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1275 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1276 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1277 end;
1278 finally
1279 MainCoolBar.Bands.EndUpdate;
1280 end;
1281
1282 //鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申(Board)
1283 ListCoolBar.Bands.BeginUpdate;
1284 try
1285 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1286 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1287 CoolSet := GikoSys.Setting.ListCoolSet[i];
1288 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1289 FIsIgnoreResize := rtNone;
1290 SaveCoolBarSettings;
1291 Exit;
1292 end;
1293 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1294 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1295 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1296 end;
1297 finally
1298 ListCoolBar.Bands.EndUpdate;
1299 end;
1300
1301 //鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申(Browser)
1302 BrowserCoolBar.Bands.BeginUpdate;
1303 try
1304 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1305 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1306 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1307 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1308 FIsIgnoreResize := rtNone;
1309 SaveCoolBarSettings;
1310 Exit;
1311 end;
1312 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1313 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1314 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1315 end;
1316 finally
1317 BrowserCoolBar.Bands.EndUpdate;
1318 end;
1319
1320 end;
1321 //
1322 procedure TGikoForm.FormShow(Sender: TObject);
1323 begin
1324 if FStartUp then begin
1325 ShowWindow(Application.Handle, SW_HIDE);
1326
1327 //FormCreate鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申FormShow鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1328 //鐃?鐃?鐃緒申鐃?鐃?鐃?鐃緒申
1329 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1330 GikoDM.StdToolBarVisibleActionExecute( nil );
1331 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1332 GikoDM.AddressBarVisibleActionExecute( nil );
1333 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1334 GikoDM.LinkBarVisibleActionExecute( nil );
1335 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1336 GikoDM.ListToolBarVisibleActionExecute( nil );
1337 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1338 GikoDM.ListNameBarVisibleActionExecute( nil );
1339 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1340 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1341 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1342 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1343
1344 //鐃?鐃緒申鐃?鐃?鐃?鐃?
1345 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1346 GikoDM.BrowserTabVisibleActionExecute(nil);
1347
1348 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1349 GikoDM.BrowserTabTopAction.Checked := True;
1350 GikoDM.BrowserTabTopActionExecute(nil);
1351 end else begin
1352 GikoDM.BrowserTabBottomAction.Checked := True;
1353 GikoDM.BrowserTabBottomActionExecute(nil);
1354 end;
1355
1356 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1357 GikoDM.BrowserTabTabStyleAction.Checked := True;
1358 GikoDM.BrowserTabTabStyleActionExecute(nil);
1359 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1360 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1361 GikoDM.BrowserTabButtonStyleActionExecute(nil);
1362 end else begin
1363 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1364 GikoDM.BrowserTabFlatStyleActionExecute(nil);
1365 end;
1366
1367 // ListView 鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?
1368 // ListView.FullDrag := True;
1369
1370 // CoolBar 鐃緒申鐃緒申
1371 LoadCoolBarSettings;
1372
1373 //鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1374 // ResetBandInfo( ListCoolBar, ListToolBar );
1375 FIsIgnoreResize := rtNone;
1376 //鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1377 //鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1378 InitActionChecked();
1379
1380 //FormCrete鐃緒申鐃緒申鐃緒申鐃緒申鐃?
1381 if GikoSys.Setting.TabAutoLoadSave then begin
1382 GikoDM.TabAutoLoadAction.Execute;
1383 end;
1384 //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?
1385 if GikoSys.Setting.GengoSupport then begin
1386 //鐃?鐃緒申鐃?
1387 //Test鐃緒申鐃緒申
1388 end;
1389
1390 FStartUp := false;
1391 end;
1392 end;
1393
1394 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1395 begin
1396 // if GikoForm.WindowState <> wsMinimized then
1397 // SaveCoolBarSettings;
1398 if ( GikoSys.Setting.ShowDialogForEnd ) and
1399 (MessageDlg('鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?', mtConfirmation,[mbOk, mbCancel], 0) = mrCancel ) then begin
1400 CanClose := false;
1401 Exit;
1402 end else begin
1403 CanClose := True;
1404 if GikoSys.Setting.TabAutoLoadSave then begin
1405 GikoDM.TabAutoSaveAction.Execute;
1406 end;
1407 end;
1408 { //2ch鐃緒申鐃緒申鐃緒申鐃緒申Free
1409 if GikoSys.Setting.Gengo <> nil then begin
1410 GikoSys.Setting.Gengo.Free;
1411 end;
1412 }
1413 Application.UnhookMainWindow(Hook);
1414 Application.Terminate;
1415 end;
1416
1417 procedure TGikoForm.FormDestroy(Sender: TObject);
1418 var
1419 i : Integer;
1420 // CoolSet: TCoolSet;
1421 wp : TWindowPlacement;
1422 tmpBool : Boolean;
1423 begin
1424 // 鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申
1425 try
1426 MouseGesture.UnHook;
1427 except
1428 end;
1429 try
1430 ActiveListColumnSave;
1431 except
1432 end;
1433 try
1434 //鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申
1435 wp.length := sizeof(wp);
1436 GetWindowPlacement(Handle, @wp);
1437 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1438 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1439 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1440 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1441 GikoSys.Setting.WindowMax := WindowState = wsMaximized;
1442
1443 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1444 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1445 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1446 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1447 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1448 if GikoDM.ArrangeAction.Checked then
1449 GikoSys.Setting.ListOrientation := gloVertical
1450 else
1451 GikoSys.Setting.ListOrientation := gloHorizontal;
1452 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1453 except
1454 end;
1455
1456 try
1457 // 鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申
1458 if not GikoSys.Setting.ResRangeHold then
1459 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1460 except
1461 end;
1462 if WindowState <> wsNormal then
1463 WindowState := wsNormal;
1464 SaveCoolBarSettings;
1465 try
1466 GikoSys.Setting.WriteWindowSettingFile;
1467 GikoSys.Setting.WriteNameMailSettingFile;
1468 except
1469 end;
1470 // 鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申 CoolBar 鐃緒申鐃緒申
1471 // 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1472
1473 // 鐃緒申FormDestroy鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?2004/04/09鐃?
1474 // CoolBar 鐃緒申鐃緒申
1475 //if (GikoForm.WindowState <> wsMinimized) and (GikoForm.WindowState <> wsMaximized) then
1476
1477
1478 //鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1479 try
1480 //FavoriteDM鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申
1481 FavoriteDM.WriteFavorite;
1482 FavoriteDM.Clear;
1483 except
1484 end;
1485 LockWindowUpdate(Self.Handle);
1486 try
1487 //鐃?鐃?鐃?鐃緒申鐃?鐃?
1488 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1489 GikoSys.Setting.ShowDialogForAllTabClose := false;
1490 GikoDM.AllTabCloseAction.Execute;
1491 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1492 except
1493 end;
1494 try
1495 for i := FBrowsers.Count - 1 downto 0 do begin
1496 TWebBrowser(FBrowsers[i]).Free;
1497 end;
1498 FBrowsers.Clear;
1499 FBrowsers.Capacity := 0;
1500 finally
1501 FBrowsers.Free;
1502 end;
1503 try
1504 if BrowserNullTab <> nil then begin
1505 BrowserNullTab.Browser := nil; {*BrowserNullTab鐃緒申Browser鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?
1506 *鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申Free鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?
1507 *}
1508 BrowserNullTab.Free;
1509 end;
1510 except
1511 end;
1512
1513 try
1514 TreeView.Items.BeginUpdate;
1515 TreeView.Items.GetFirstNode.Free;
1516 TreeView.Items.Clear;
1517 TreeView.Items.EndUpdate;
1518 except
1519 end;
1520
1521 //鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申
1522 try
1523 //AddressHistoryDM鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?
1524 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1525 except
1526 end;
1527
1528 //鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申
1529 try
1530 SaveHistory;
1531 except
1532 end;
1533 try
1534 try
1535 ClearHistory;
1536 except
1537 end;
1538 finally
1539 FHistoryList.Free;
1540 end;
1541
1542 //鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申&鐃?鐃緒申
1543 try
1544 RoundList.SaveRoundFile;
1545 except
1546 end;
1547 try
1548 try
1549 RoundList.Clear;
1550 except
1551 end;
1552 finally
1553 RoundList.Free;
1554 end;
1555
1556 try
1557 try
1558 FControlThread.Terminate;
1559 FControlThread.WaitFor;
1560 except
1561 end;
1562 finally
1563 FControlThread.Free;
1564 end;
1565
1566 // TBBS 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 TCategory, TBoard, TThreadItem 鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申
1567 // TBoard, TThreadItem 鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申
1568 // BoardPluteIns 鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申
1569 for i := Length(BoardGroups) - 1 downto 0 do begin
1570 //BoardGroups[i].Clear;
1571 BoardGroups[i].Free;
1572 end;
1573
1574 try
1575 for i := Length( BBSs ) - 1 downto 0 do begin
1576 if BBSs[ i ] <> nil then
1577 BBSs[ i ].Free;
1578 BBSs[ i ] := nil;
1579 end;
1580 except
1581 end;
1582
1583 try
1584 if FEvent <> nil then
1585 FEvent.Free;
1586
1587 //Hint鐃?鐃緒申
1588 if FHint <> nil then begin
1589 FHint.ReleaseHandle;
1590 FHint.Free;
1591 FHint := nil;
1592 end;
1593 //Preview鐃?鐃緒申
1594 if TPreviewBrowser <> nil then begin
1595 FPreviewBrowser.Free;
1596 FPreviewBrowser := nil;
1597 end;
1598 except
1599 end;
1600 LockWindowUpdate(0);
1601 end;
1602
1603 // 鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃? BBS 鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?
1604 procedure TGikoForm.SetBBSMenu;
1605 var
1606 i : Integer;
1607 item : TBBSMenuItem;
1608 begin
1609
1610 // 鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申
1611 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1612 try
1613 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1614 CabinetSelectPopupMenu.Items[ i ].Free;
1615 CabinetMenu.Items[ i ].Free;
1616 BBSSelectPopupMenu.Items[ i ].Free;
1617 end;
1618 except
1619 end;
1620 end;
1621
1622 // 鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申
1623 for i := Length( BBSs ) - 1 downto 0 do begin
1624 try
1625 item := TBBSMenuItem.Create( PopupMenu );
1626 item.Caption := BBSs[ i ].Title;
1627 item.Data := BBSs[ i ];
1628 item.OnClick := BBSMenuItemOnClick;
1629 CabinetSelectPopupMenu.Items.Insert( 0, item );
1630 item := TBBSMenuItem.Create( PopupMenu );
1631 item.Caption := BBSs[ i ].Title;
1632 item.Data := BBSs[ i ];
1633 item.OnClick := BBSMenuItemOnClick;
1634 CabinetMenu.Insert( 0, item );
1635 item := TBBSMenuItem.Create( PopupMenu );
1636 item.Caption := BBSs[ i ].Title;
1637 item.Data := BBSs[ i ];
1638 item.OnClick := BBSMenuItemOnClick;
1639 BBSSelectPopupMenu.Items.Insert( 0, Item );
1640 except
1641 end;
1642 end;
1643
1644 end;
1645
1646 procedure TGikoForm.ReloadBBS;
1647 var
1648 i : Integer;
1649 tmpBool: Boolean;
1650 begin
1651 LockWindowUpdate(Self.Handle);
1652
1653 //鐃?鐃?鐃?鐃緒申鐃?鐃?
1654 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1655 GikoSys.Setting.ShowDialogForAllTabClose := false;
1656 GikoDM.AllTabCloseAction.Execute;
1657 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1658 SetContent(BrowserNullTab);
1659 //TreeView鐃?鐃緒申鐃?鐃?BBS2ch.Free鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申XP鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃?
1660 TreeView.Items.Clear;
1661
1662 //鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申
1663 try
1664 RoundList.SaveRoundFile;
1665 except
1666 end;
1667 //鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申
1668 try
1669 RoundList.Clear;
1670 except
1671 end;
1672
1673 //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申
1674 try
1675 SaveHistory;
1676 ClearHistory;
1677 except
1678 end;
1679
1680 //鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申
1681 try
1682 FavoriteDM.WriteFavorite;
1683 FavoriteDM.Clear;
1684 except
1685 end;
1686
1687 //鐃緒申鐃?鐃?鐃緒申鐃?PLUGIN鐃緒申鐃?鐃緒申
1688 for i := Length(BoardGroups) - 1 downto 0 do begin
1689 try
1690 BoardGroups[i].Free;
1691 except
1692 end;
1693 end;
1694 //BBS鐃?鐃緒申
1695 try
1696 for i := Length( BBSs ) - 1 downto 0 do begin
1697 if BBSs[ i ] <> nil then
1698 BBSs[ i ].Free;
1699 BBSs[ i ] := nil;
1700 end;
1701 except
1702 end;
1703
1704 ActiveList := nil;
1705
1706 FTreeType := gttNone;
1707
1708 //============鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申================================//
1709
1710 // 鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?(ReadBoardFile, LoadHistory 鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申)
1711 InitializeBoardPlugIns;
1712
1713 GikoSys.ListBoardFile; //鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申
1714
1715 // 鐃緒申鐃緒申鐃緒申鐃緒申BBS鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1716 for i := Length(BBSs) - 1 downto 0 do begin
1717 if not BBSs[i].IsBoardFileRead then
1718 GikoSys.ReadBoardFile(BBSs[i]);
1719 end;
1720
1721 // BBS 鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃?
1722 SetBBSMenu;
1723
1724 ShowBBSTree( BBSs[ 0 ] );
1725
1726 // 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1727 LoadHistory;
1728
1729 //鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1730 FavoriteDM.ReadFavorite;
1731
1732 SetLinkBar;
1733
1734 //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1735 RoundList.LoadRoundBoardFile;
1736 RoundList.LoadRoundThreadFile;
1737
1738 LockWindowUpdate(0);
1739 //
1740 GikoDM.TabsOpenAction.Execute;
1741 end;
1742
1743
1744 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1745 var
1746 p: TPoint;
1747 s: string;
1748 tmp2: string;
1749 URL: string;
1750 ATitle: Boolean;
1751
1752 threadItem : TThreadItem;
1753 board : TBoard;
1754 Protocol, Host, Path, Document, Port, Bookmark: string;
1755
1756 wkInt: Integer;
1757 wkIntSt: Integer;
1758 wkIntTo: Integer;
1759 ActiveFileName: string;
1760 e: IHTMLElement;
1761 Ext: string;
1762 PathRec: TPathRec;
1763 begin
1764 if not( TObject(Sender) is TWebBrowser )then
1765 Exit;
1766 try
1767 try
1768 if (TWebBrowser(Sender) <> nil) and (not TWebBrowser(Sender).Busy) and (Assigned(TWebBrowser(Sender).Document)) then begin
1769 if LowerCase(OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset) <> 'shift_jis' then begin
1770 OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset := 'shift_jis';
1771 end;
1772 end;
1773 except
1774 end;
1775 finally
1776 end;
1777 if PreviewTimer.Enabled then
1778 PreviewTimer.Enabled := False;
1779 Application.CancelHint;
1780 try
1781 if GetActiveContent <> nil then
1782 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
1783 else
1784 ActiveFileName := '';
1785 except
1786 FActiveContent := nil;
1787 Exit;
1788 end;
1789
1790 StatusBar.Panels[1].Text := Text;
1791
1792 if FHint <> nil then begin
1793 FHint.ReleaseHandle;
1794 FHint.ClearAllRes;
1795 end;
1796 if FPreviewBrowser <> nil then
1797 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1798
1799 if not GikoSys.Setting.UnActivePopup then
1800 if not GikoForm.Active then
1801 Exit;
1802
1803 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
1804 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
1805
1806 s := '';
1807 Ext := AnsiLowerCase(ExtractFileExt(Text));
1808 if (Pos('http://', Text) = 1) and (GikoSys.Setting.PreviewVisible) and
1809 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) then begin
1810 if FPreviewBrowser = nil then begin
1811 FPreviewBrowser := TPreviewBrowser.Create(Self);
1812 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1813 TOleControl(FPreviewBrowser).Parent := nil;
1814 end;
1815 FPreviewBrowser.Navigate(BLANK_HTML);//鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?
1816 FPreviewURL := Text;
1817 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
1818 PreviewTimer.Enabled := True;
1819 end else if (Pos('about:blank', Text) = 1) or (Pos('http://', Text) = 1) or (Pos('mailto:', Text) = 1) then begin
1820 if Pos('mailto:', Text) = 1 then begin
1821 s := StringReplace(Text, 'mailto:', '', [rfIgnoreCase]);
1822 //鐃?鐃?鐃?鐃?鐃?鐃緒申 鐃?鐃?鐃?3鐃緒申466鐃緒申鐃緒申鐃緒申鐃緒申
1823 GetCursorPos(p);
1824 p.x := p.x - TWebBrowser(Sender).ClientOrigin.x;
1825 p.y := p.y - TWebBrowser(Sender).ClientOrigin.y;
1826 e := IHTMLDocument2(TWebBrowser(Sender).Document).elementFromPoint(p.x, p.y);
1827 if (Assigned(e)) then begin
1828 tmp2 := ZenToHan(e.Get_outerText);
1829 if (GikoSys.IsNumeric(tmp2)) then begin
1830 //鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?
1831 wkIntSt := StrToInt(tmp2);
1832 wkIntTo := StrToInt(tmp2);
1833 //s := GetThreadText(wkBBS, wkKey, wkIntSt, wkIntTo, False, False);
1834 FHint.PopupType := gptThread;
1835 HTMLCreater.SetResPopupText(FHint, GetActiveContent, wkIntSt, wkIntTo, False, False);
1836 end else begin
1837 FHint.PopupType := gptRaw;
1838 FHint.Caption := s;
1839 end;
1840 end;
1841 end else begin
1842 threadItem := GetActiveContent;
1843 URL := THTMLCreate.GetRespopupURL(Text, threadItem.URL);
1844 PathRec := Gikosys.Parse2chURL2(URL);
1845 if (PathRec.FNoParam) then begin
1846 PathRec.FSt := 1;
1847 PathRec.FTo := 1;
1848 end else begin
1849 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
1850 end;
1851 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
1852
1853 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
1854
1855 URL := GikoSys.GetBrowsableThreadURL( URL );
1856 wkIntSt := PathRec.FSt;
1857 wkIntTo := PathRec.FTo;
1858
1859 if (wkIntSt = 0) and (wkIntTo = 0) then begin
1860 wkIntSt := 1;
1861 wkIntTo := 1;
1862 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
1863 wkIntSt := wkIntTo;
1864 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
1865 wkIntTo := wkIntSt;
1866 end else if wkIntSt > wkIntTo then begin
1867 wkInt := wkIntTo;
1868 wkIntTo := wkIntSt;
1869 wkIntSt := wkInt;
1870 end;
1871 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
1872 ATitle := false
1873 else
1874 ATitle := true;
1875
1876 threadItem := BBSsFindThreadFromURL( URL );
1877
1878 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
1879 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
1880 if board <> nil then begin
1881 if not board.IsThreadDatRead then
1882 GikoSys.ReadSubjectFile( board );
1883 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
1884 end;
1885 end;
1886
1887 if threadItem <> nil then begin
1888 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
1889 //URL鐃緒申鐃緒申鐃緒申鐃緒申/鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?
1890 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
1891 wkIntSt := 1;
1892 wkIntTo := 1;
1893 end;
1894 FHint.PopupType := gptThread;
1895 HTMLCreater.SetResPopupText(FHint, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
1896 end;
1897 end;
1898 end;
1899
1900 if FHint.PopupType = gptRaw then begin
1901 if FHint.Caption <> '' then
1902 ShowTextPopup;
1903 end else begin
1904 if (FHint.ResCount <> 0) or (FHint.Title <> '') then
1905 ShowTextPopup;
1906 end;
1907 end;
1908 end;
1909
1910 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
1911 var
1912 SysMenu: HMenu;
1913 begin
1914 FEnabledCloseButton := Enabled;
1915 SysMenu := GetSystemMenu(Handle, False);
1916
1917 if Enabled then begin
1918 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
1919 end else begin
1920 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
1921 end;
1922
1923 DrawMenuBar(Handle);
1924 end;
1925
1926 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
1927 var AllowChange: Boolean);
1928 begin
1929 //鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1930 // if FTreeType = gtt2ch then
1931 // FSortIndex := -1;
1932 end;
1933
1934 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
1935 Shift: TShiftState);
1936 var
1937 pos : TPoint;
1938 begin
1939 if GetActiveList is TBoard then begin
1940 case Key of
1941 VK_BACK:; // UpFolderButtonClick(Sender);
1942 VK_SPACE: ListDoubleClick(Shift);
1943 VK_RETURN: ListClick;
1944 VK_APPS:
1945 begin
1946 if ListView.Selected <> nil then begin
1947 pos.X := ListView.Column[ 0 ].Width;
1948 pos.Y := ListView.Selected.Top;
1949 end else begin
1950 pos.X := ListView.Left;
1951 pos.Y := ListView.Top;
1952 end;
1953 Windows.ClientToScreen( ListView.Handle, pos );
1954 ListPopupMenu.Popup( pos.X, pos.Y );
1955 end;
1956 end;
1957 end else begin // TBBS, TCategory
1958 case Key of
1959 VK_BACK:; // UpFolderButtonClick(Sender);
1960 VK_SPACE: ListClick;
1961 VK_RETURN: ListDoubleClick(Shift);
1962 VK_APPS:
1963 begin
1964 if ListView.Selected <> nil then begin
1965 pos.X := ListView.Column[ 0 ].Width;
1966 pos.Y := ListView.Selected.Top;
1967 end else begin
1968 pos.X := ListView.Left;
1969 pos.Y := ListView.Top;
1970 end;
1971 Windows.ClientToScreen( ListView.Handle, pos );
1972 ListPopupMenu.Popup( pos.X, pos.Y );
1973 end;
1974 end;
1975 end;
1976 end;
1977
1978 function TGikoForm.GetHttpState: Boolean;
1979 begin
1980 Result := FHttpState;
1981 end;
1982
1983 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
1984 Column: TListColumn);
1985 var
1986 id, idx : Integer;
1987 orderList : TList;
1988 vSortIndex : Integer;
1989 vSortOrder : Boolean;
1990 begin
1991 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
2005 Exit;
2006
2007 id := Integer( orderList[ idx ] );
2008
2009
2010 if vSortIndex = id then
2011 vSortOrder := not vSortOrder
2012 else begin
2013 vSortOrder := id = 0;
2014 end;
2015
2016 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2017 end;
2018
2019 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2020 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2021 var
2022 ARect: TRect;
2023 begin
2024 DefaultDraw := True;
2025 Exit;
2026 DefaultDraw := False;
2027 if (cdsSelected in State) or (cdsHot in State) then begin
2028 Sender.Canvas.Brush.Color := clHighlight;
2029 Sender.Canvas.Font.Color := clHighlightText;
2030 end else begin
2031 Sender.Canvas.Brush.Color := clBtnFace;
2032 Sender.Canvas.Font.Color := clBtnText;
2033 end;
2034 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2035 Sender.Canvas.FillRect(ARect);
2036 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2037 end;
2038
2039 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2040 var
2041 Nodes: TTreeNodes;
2042 i: integer;
2043 begin
2044 Nodes := TreeView.Items;
2045
2046 for i := 0 to Nodes.Count - 1 do begin
2047 if Nodes.Item[i].Data = Data then begin
2048 Result := Nodes.Item[i];
2049 Exit;
2050 end;
2051 end;
2052 Result := nil;
2053 end;
2054
2055 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2056 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2057 Headers: OleVariant; var Cancel: WordBool);
2058 var
2059 sNo: string;
2060 p: TPoint;
2061 const
2062 kMenuName: string = 'menu:';
2063 begin
2064
2065 if Pos(kMenuName, URL) <> 0 then begin
2066 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2067
2068 if not GikoSys.IsNumeric(sNo) then Exit;
2069
2070 Cancel := True;
2071 GetCursorpos(p);
2072 KokoPopupMenu.Tag := StrToInt(sNo);
2073 KokoPopupMenu.Popup(p.x, p.y);
2074 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2075 Cancel := not GikoSys.Setting.OpenMailer;
2076 end;
2077
2078 end;
2079
2080 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2081 const ARect: TRect; var DefaultDraw: Boolean);
2082 var
2083 NodeRect: TRect;
2084 i, j: Integer;
2085 IsBoardNode: Boolean;
2086 Cnt: Integer;
2087 CntText: string;
2088 TextWidth: Integer;
2089 TextRect: TRect;
2090 Board: TBoard;
2091 Category: TCategory;
2092 Bitmap: TBitmap;
2093 NodeWidth: Integer;
2094 begin
2095 DefaultDraw := True;
2096
2097 if FTreeType = gttHistory then Exit;
2098
2099 TreeView.Canvas.Font.Color := clBlue;
2100 IsBoardNode := False;
2101 for i := 0 to TreeView.Items.Count - 1 do begin
2102 Cnt := 0;
2103 if not TreeView.Items[i].IsVisible then
2104 continue;
2105
2106 if TObject(TreeView.Items[i].Data) is TCategory then begin
2107 if TreeView.Items[i].Expanded then
2108 continue;
2109
2110 IsBoardNode := False;
2111 Category := TCategory(TreeView.Items[i].Data);
2112 for j := 0 to Category.Count - 1 do begin
2113 Board := Category.Items[j];
2114 if Board <> nil then begin
2115 if Board.UnRead > 0 then begin
2116 Cnt := 1;
2117 Break;
2118 end;
2119 end;
2120 end;
2121 if Cnt <> 1 then
2122 continue;
2123 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2124 IsBoardNode := True;
2125 Board := TBoard(TreeView.Items[i].Data);
2126
2127 Cnt := Board.UnRead;
2128 if Cnt <= 0 then
2129 continue;
2130 end else
2131 continue;
2132
2133 Bitmap := TBitmap.Create;
2134 try
2135 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2136 Bitmap.Canvas.Font.Style := [fsBold];
2137 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2138 finally
2139 Bitmap.Free;
2140 end;
2141
2142 NodeRect := TreeView.Items[i].DisplayRect(True);
2143
2144 if IsBoardNode then
2145 CntText := '(' + IntToStr(Cnt) + ')'
2146 else if Cnt = 1 then
2147 CntText := '(+)';
2148
2149
2150 TextWidth := TreeView.Canvas.TextWidth(CntText);
2151
2152 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2153 NodeRect.Top,
2154 NodeRect.Left + NodeWidth + TextWidth + 8,
2155 NodeRect.Bottom);
2156 DrawText(TreeView.Canvas.Handle,
2157 PChar(CntText),
2158 -1,
2159 TextRect,
2160 DT_SINGLELINE or DT_VCENTER);
2161 end;
2162 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2163 end;
2164
2165 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2166 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2167 var
2168 Board: TBoard;
2169 Category: TCategory;
2170 i: Integer;
2171 begin
2172 DefaultDraw := True;
2173
2174 if FTreeType = gttHistory then Exit;
2175
2176 TreeView.Canvas.Font.Style := [];
2177 if Node <> nil then begin
2178 if TObject(Node.Data) is TCategory then begin
2179 Category := TCategory(Node.Data);
2180 for i := 0 to Category.Count - 1 do begin
2181 Board := Category.Items[i];
2182 if Board <> nil then begin
2183 if Board.UnRead > 0 then begin
2184 TreeView.Canvas.Font.Style := [fsBold];
2185 Break;
2186 end;
2187 end;
2188 end;
2189 end else if TObject(Node.Data) is TBoard then begin
2190 Board := TBoard(Node.Data);
2191 if Board.UnRead > 0 then
2192 TreeView.Canvas.Font.Style := [fsBold];
2193 end;
2194 end;
2195 end;
2196
2197 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2198 begin
2199 TreeView.Invalidate;
2200
2201 if TObject(Node.Data) is TBBS then begin
2202 TBBS(Node.Data).NodeExpand := True;
2203 end else if TObject(Node.Data) is TCategory then begin
2204 TCategory(Node.Data).NodeExpand := True;
2205 end else if TObject(Node.Data) is TBoard then begin
2206 TBoard(Node.Data).NodeExpand := True;
2207 end;
2208 end;
2209
2210 procedure TGikoForm.ListViewAllSelect;
2211 begin
2212 ListView.SetFocus;
2213 ListView.SelectAll;
2214 end;
2215 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2216 begin
2217 AddMessageList(Msg, nil, Icon);
2218 end;
2219 // *************************************************************************
2220 //! 鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?
2221 // *************************************************************************
2222 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2223 var
2224 ATitle: string;
2225 s: string;
2226 boardPlugIn : TBoardPlugIn;
2227 i: Integer;
2228 browserRec : TBrowserRecord;
2229 Res : TResRec;
2230 begin
2231 try
2232 if Item.DownType = gdtBoard then
2233 ATitle := Item.Board.Title
2234 else
2235 ATitle := Item.ThreadItem.Title;
2236 if ATitle = '' then
2237 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2238
2239 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2240 //鐃緒申鐃緒申鐃?鐃緒申
2241 if Item.DownType = gdtBoard then begin
2242 //鐃緒申
2243 Item.SaveListFile;
2244 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2245 if GetActiveList = Item.Board then begin
2246 FActiveList := nil;
2247 //鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申
2248 if (GikoSys.Setting.AutoSortThreadList) then begin
2249 GikoSys.Setting.BoardSortIndex := 0;
2250 GikoSys.Setting.BoardSortOrder := True;
2251 end;
2252 SetActiveList(Item.Board);
2253 end;
2254 Item.Board.Modified := True;
2255 Item.Board.IsThreadDatRead := True;
2256 PlaySound('New');
2257 end else if Item.DownType = gdtThread then begin
2258 //鐃?鐃緒申
2259 Item.SaveItemFile;
2260 Item.ThreadItem.NewArrival := True;
2261 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2262 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2263 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2264 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2265 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2266 Item.ThreadItem.Title := Res.FTitle;
2267 ATitle := Item.ThreadItem.Title;
2268 end else if ATitle = '鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?' then begin
2269 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2270 ATitle := Res.FTitle;
2271 end;
2272 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2273 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2274 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2275 break;
2276 end;
2277 end;
2278 if GikoSys.Setting.BrowserTabVisible then begin
2279 if GetActiveContent = Item.ThreadItem then
2280 browserRec := InsertBrowserTab(Item.ThreadItem)
2281 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2282 browserRec := InsertBrowserTab(Item.ThreadItem, True)
2283 else
2284 browserRec := InsertBrowserTab(Item.ThreadItem, False);
2285 if browserRec.Thread = BrowserNullTab.Thread then begin
2286 browserRec.Movement := BrowserNullTab.Movement;
2287 BrowserNullTab.Movement := '';
2288 end;
2289 end else begin
2290 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2291 InsertBrowserTab(Item.ThreadItem);
2292 end;
2293
2294 Application.ProcessMessages;
2295
2296 if Item.State = gdsComplete then begin
2297 PlaySound('New');
2298 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2299 //Add by Genyakun
2300 DiffComp := True;
2301 end else begin
2302 PlaySound('NewDiff');
2303 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2304 //Add by Genyakun
2305 DiffComp := True;
2306 end;
2307
2308 //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2309 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2310 Item.ThreadItem.Round := False;
2311 //Item.ThreadItem.RoundName := '';
2312 AddMessageList('鐃緒申1000鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 - [' + Item.ThreadItem.Title + ']', nil, gmiOK);
2313 end;
2314 TreeView.Refresh;
2315 //ListView鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申
2316 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
2317 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
2318 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
2319 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
2320 //ListView鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?
2321 case GikoForm.ViewType of
2322 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
2323 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
2324 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
2325 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
2326 end;
2327 end;
2328 end;
2329 ListView.Refresh;
2330 end else if Item.State = gdsNotModify then begin
2331 //鐃緒申鐃?鐃?鐃?
2332 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2333 //SetContent(Item.ThreadItem);
2334 InsertBrowserTab(Item.ThreadItem);
2335 end;}
2336 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2337 PlaySound('NoChange');
2338 Screen.Cursor := crDefault;
2339 end else if Item.State = gdsAbort then begin
2340 //鐃緒申鐃?
2341 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2342 end else if Item.State = gdsError then begin
2343 //鐃?鐃緒申鐃?
2344 s := Item.ErrText;
2345 if s <> '' then
2346 s := ':' + s;
2347 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2348 // if Item.ResponseCode = 302 then
2349 // AddMessageList('鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?', nil, gmiNG);
2350 PlaySound('Error');
2351 end;
2352 finally
2353 Item.Free;
2354 Dec(FWorkCount);
2355 if FWorkCount < 0 then FWorkCount := 0;
2356 if FWorkCount = 0 then begin
2357 try
2358 Animate.Active := False;
2359 finally
2360 Screen.Cursor := crDefault;
2361 end;
2362 end;
2363
2364 end;
2365 end;
2366
2367 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2368 begin
2369 // SetProgressValue(Number, 0, AWorkCountMax);
2370 // ProgressBar.Visible := True;
2371 ProgressBar.Position := 0;
2372 ProgressBar.Max := AWorkCountMax;
2373 FDownloadTitle := AWorkTitle;
2374 StatusBar.Panels[1].Text := FDownloadTitle + ' - 鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申';
2375 FDownloadMax := AWorkCountMax;
2376 end;
2377
2378 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2379 begin
2380 ProgressBar.Position := 0;
2381 if FDownloadMax <> 0 then
2382 StatusBar.Panels[1].Text := FDownloadTitle + ' - 鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申';
2383 end;
2384
2385 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2386 begin
2387 ProgressBar.Position := AWorkCount;
2388 // SetProgressValue(Number, AWorkCount);
2389 StatusBar.Panels[1].Text := FDownloadTitle + ' - 鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2390 end;
2391
2392 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2393 var
2394 ListItem: TListItem;
2395 begin
2396 MessageListView.Items.BeginUpdate;
2397 try
2398 ListItem := MessageListView.Items.Add;
2399 ListItem.Caption := ACaption;
2400 ListItem.Data := AObject;
2401 ListItem.MakeVisible(False);
2402 case Icon of
2403 gmiOK: ListItem.ImageIndex := 0;
2404 gmiSAD: ListItem.ImageIndex := 1;
2405 gmiNG: ListItem.ImageIndex := 2;
2406 gmiWhat: ListItem.ImageIndex := 3;
2407 end;
2408 finally
2409 MessageListView.Items.EndUpdate;
2410 end;
2411 end;
2412
2413
2414 function TGikoForm.InsertBrowserTab(
2415 ThreadItem : TThreadItem;
2416 ActiveTab : Boolean = True
2417 ) : TBrowserRecord;
2418 var
2419 i, j, idx : Integer;
2420 favItem : TFavoriteThreadItem;
2421 newBrowser : TBrowserRecord;
2422 begin
2423
2424 Result := nil;
2425 if Threaditem = nil then Exit;
2426
2427 if ThreadItem.IsLogFile then begin
2428 //鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申browser鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2429 //鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申Active鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2430 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2431 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2432 j := FBrowsers.IndexOf(FActiveContent.Browser);
2433 if j = BROWSER_COUNT - 1 then
2434 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2435 end;
2436 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2437 if not AddHistory( favItem ) then
2438 favItem.Free;
2439
2440 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2441 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2442 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2443 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2444 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2445 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2446 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2447 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2448 break;
2449 end;
2450 end;
2451 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2452 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2453 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2454 end;
2455 if ActiveTab then begin
2456 BrowserTab.TabIndex := i;
2457 BrowserTab.OnChange(nil);
2458 BrowserTab.Repaint;
2459 end;
2460 Exit;
2461 end;
2462 end;
2463 end;
2464 idx := BrowserTab.TabIndex;
2465 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2466 newBrowser := TBrowserRecord.Create;
2467 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2468 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2469 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2470 break;
2471 end;
2472 end;
2473 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2474 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2475 //newBrowser.Browser.Navigate(BLANK_HTML);
2476 newBrowser.thread := ThreadItem;
2477 newBrowser.Repaint := true;
2478 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
2479
2480 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2481 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2482 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2483 end;// else begin
2484 //end;
2485 BrowserTab.Repaint;
2486 if ActiveTab then begin
2487 BrowserTab.TabIndex := 0;
2488 end;
2489
2490 end else begin
2491 newBrowser := TBrowserRecord.Create;
2492 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2493 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2494 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2495 break;
2496 end;
2497 end;
2498 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2499 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2500 //newBrowser.Browser.Navigate(BLANK_HTML);
2501 newBrowser.thread := ThreadItem;
2502 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
2503 newBrowser.Repaint := true;
2504
2505 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2506 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2507 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2508 end;
2509 //end;
2510 BrowserTab.Repaint;
2511 if ActiveTab then begin
2512 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2513 BrowserTab.TabIndex := 0
2514 else
2515 BrowserTab.TabIndex := i;
2516 end;
2517 end;
2518 Result := newBrowser;
2519 if(ActiveTab) or (idx = -1) then begin
2520 BrowserTab.OnChange(nil);
2521 end;
2522 end else begin
2523 if BrowserNullTab = nil then begin
2524 BrowserNullTab := TBrowserRecord.Create;
2525 BrowserNullTab.Browser := Browser;
2526 end;
2527 BrowserNullTab.thread := ThreadItem;
2528 Result := BrowserNullTab;
2529 BrowserTab.TabIndex := -1;
2530 SetContent(BrowserNullTab);
2531 end;
2532
2533 if GikoSys.Setting.URLDisplay then
2534 AddressComboBox.Text := ThreadItem.URL;
2535
2536 end;
2537
2538 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2539 var
2540 BBSID: string;
2541 FileName: string;
2542 sTitle: string;
2543 doc: Variant;
2544 s: string;
2545 i: Integer;
2546 idx: Integer;
2547 ThreadItem: TThreadItem;
2548 Thread: TBrowserRecord;
2549 ThreadTitle, ThreadPTitle: string;
2550 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2551 begin
2552 Thread := inThread;
2553 idx := BrowserTab.TabIndex;
2554 if (FActiveContent <> nil) and
2555 (FActiveContent.Thread <> Thread.Thread) and
2556 (Assigned(FActiveContent.Browser.Document)) then begin
2557 try
2558 try
2559 Sleep(1);
2560 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document).Body).ScrollTop;
2561 except
2562 on E: Exception do
2563 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2564 end;
2565 finally
2566 end;
2567 end;
2568 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2569 Thread.Browser.Navigate(BLANK_HTML);
2570 BrowserBoardNameLabel.Caption := '';
2571 ItemBoardImage.Picture := nil;
2572 BrowserNameLabel.Caption := '';
2573 ItemImage.Picture := nil;
2574 BrowserNullTab.Thread := nil;
2575 //TOleControl(BrowserNullTab.Browser).Visible := true;
2576 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2577 FActiveContent := nil;
2578 Exit;
2579 end else if Thread.Browser = nil then begin
2580 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2581 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2582 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2583 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2584 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2585 break;
2586 end;
2587 end;
2588 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2589 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2590 end;
2591
2592 ThreadTitle := Thread.Thread.Title;
2593 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2594 //ThreadScrollTop := Thread.Thread.ScrollTop;
2595 ThreadIsLog := Thread.Thread.IsLogFile;
2596 ThreadItem := Thread.Thread;
2597 ThreadNewArraical := Thread.Thread.NewArrival;
2598 //ThreadUnRead := Thread.Thread.UnRead;
2599 BBSID := ThreadItem.ParentBoard.BBSID;
2600 FileName := ThreadItem.FileName;
2601
2602 if GetCapture = ListView.Handle then
2603 ReleaseCapture;
2604
2605 Screen.Cursor := crHourGlass;
2606
2607
2608 try
2609 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2610 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2611 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2612 end;
2613 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2614 if (not Assigned(Thread.Browser.Document)) then begin
2615 Thread.Browser.Navigate('about:blank');
2616 end;
2617
2618 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2619 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2620 Application.ProcessMessages;
2621 if idx <> BrowserTab.TabIndex then begin
2622 Exit;
2623 end;
2624 end;
2625
2626 //ActiveContent鐃?鐃緒申鐃?鐃?
2627 FActiveContent := Thread;
2628
2629 if not ThreadIsLog then begin
2630 Self.Caption := GikoDataModule.CAPTION_NAME ;
2631 //鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申
2632 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
2633 try
2634 s := '<HTML><BODY><CENTER>鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申</CENTER></BODY></HTML>';
2635 doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
2636 doc.open;
2637 doc.charset := 'Shift_JIS';
2638 doc.Write(s);
2639 doc.Close;
2640 finally
2641 end;
2642 end else begin
2643 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
2644 //鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申
2645 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
2646 StatusBar.Panels[THREADSIZE_PANEL].Width :=
2647 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
2648 //Thread.Repaint鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?Thread鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申
2649 //鐃?鐃?鐃緒申Thread鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?
2650 if Thread.Repaint then begin
2651 Thread.Repaint := false;
2652
2653 Thread.Browser.OnStatusTextChange := nil;
2654 doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
2655
2656 //GikoSys.CreateHTML2(doc, ThreadItem, sTitle);
2657 HTMLCreater.CreateHTML2(doc, ThreadItem, sTitle);
2658 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
2659
2660 if ThreadItem = nil then begin
2661 FActiveContent := nil;
2662 BrowserTab.Repaint;
2663 Exit;
2664 end;
2665 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
2666 end;
2667 end;
2668 if (Thread <> nil) and (ThreadItem <>nil) then begin
2669 BrowserBoardNameLabel.Caption := ThreadPTitle;
2670 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2671 BrowserNameLabel.Caption := ThreadTitle;
2672 ItemImage.Picture := nil;
2673 if ThreadIsLog then
2674 if ThreadNewArraical then
2675 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
2676 else
2677 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
2678 else
2679 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
2680
2681 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
2682 BrowserNameLabel.Left := ItemImage.Left + 20;
2683
2684 //Thread鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申
2685 if (FActiveList is TBoard) and (TBoard(ActiveList) = ThreadItem.ParentBoard) then
2686 ListView.Refresh;
2687 end else begin
2688 FActiveContent := nil;
2689 end;
2690 finally
2691 Screen.Cursor := crDefault;
2692 end;
2693 end;
2694
2695 function TGikoForm.GetActiveContent: TThreadItem;
2696 begin
2697 try
2698 if FActiveContent <> nil then
2699 Result := FActiveContent.Thread
2700 else
2701 Result := nil;
2702 except
2703 Result := nil;
2704 end;
2705
2706 end;
2707
2708 procedure TGikoForm.SetActiveList(Obj: TObject);
2709 var
2710 idx : Integer;
2711 begin
2712 // if FActiveList <> Obj then begin
2713 FActiveList := Obj;
2714 try
2715 if ListView.Selected <> nil then
2716 idx := ListView.Selected.Index
2717 else
2718 idx := -1;
2719 except
2720 idx := -1;
2721 end;
2722 ListView.Items.Count := 0;
2723 ListView.Items.Clear;
2724 ListView.Selected := nil;
2725 // ListView.Columns.Clear;
2726 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
2727 and (FActiveContent.Thread.IsLogFile) then begin
2728 try
2729 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
2730 except
2731 on E: Exception do begin
2732 //鐃?鐃緒申鐃緒申鐃緒申DL鐃緒申鐃緒申鐃緒申鐃緒申FActiveContent鐃緒申鐃緒申鐃緒申Thread鐃緒申
2733 //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2734 ReleaseBrowser(FActiveContent);
2735 FActiveContent.Thread := nil;
2736 Self.Caption := GikoDataModule.CAPTION_NAME;
2737 end;
2738 end;
2739 end else
2740 Self.Caption := GikoDataModule.CAPTION_NAME;
2741 //Application.Title := CAPTION_NAME;
2742
2743 // ActiveListColumnSave;
2744
2745 Screen.Cursor := crHourGlass;
2746 try
2747 if Obj is TBBS then begin
2748 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2749 end else if Obj is TCategory then begin
2750 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2751 end else if Obj is TBoard then begin
2752 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2753 end;
2754 finally
2755 Screen.Cursor := crDefault;
2756 end;
2757
2758 if idx >= 0 then begin
2759 if idx >= ListView.Items.Count then
2760 idx := ListView.Items.Count - 1;
2761 ListView.ItemIndex := idx;
2762 ListView.ItemFocused := ListView.Items.Item[ idx ];
2763 end;
2764 // end;
2765 end;
2766
2767
2768 //鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申
2769 //鐃緒申鐃緒申鐃緒申鐃緒申interface鐃緒申鐃?鐃緒申
2770 function TGikoForm.GetActiveList: TObject;
2771 begin
2772 Result := FActiveList;
2773 end;
2774
2775 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
2776 begin
2777 SetListViewType(AViewType, '', False);
2778 end;
2779
2780 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
2781 var
2782 Board: TBoard;
2783 i: Integer;
2784 begin
2785 for i := Length( BBSs ) - 1 downto 0 do begin
2786 BBSs[i].SelectText := SelectText;
2787 BBSs[i].KubetsuChk := KubetsuChk;
2788 end;
2789 ViewType := AViewType;
2790 if ActiveList is TBoard then begin
2791 Board := TBoard(ActiveList);
2792 case ViewType of
2793 //gvtAll: ListView.Items.Count := Board.Count;
2794 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
2795 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
2796 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
2797 end;
2798
2799 SetActiveList(Board);
2800 end;
2801 end;
2802
2803 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
2804 const ARect: TRect; var DefaultDraw: Boolean);
2805 var
2806 s: string;
2807 p: TPoint;
2808 // Board: TBoard;
2809 begin
2810 if ListView.Items.Count = 0 then begin
2811 DefaultDraw := true;
2812 ListView.Canvas.Brush.Color := ListView.Color;
2813 ListView.Canvas.FillRect(ARect);
2814
2815 case ViewType of
2816 gvtAll: begin
2817 ListView.Canvas.Font.Color := clWindowText;
2818 s := '鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?';
2819 end;
2820 gvtLog: begin
2821 ListView.Canvas.Font.Color := clBlue;
2822 s := '鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?';
2823 end;
2824 gvtNew: begin
2825 ListView.Canvas.Font.Color := clGreen;
2826 s := '鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?';
2827 end;
2828 gvtUser: begin
2829 ListView.Canvas.Font.Color := clNavy;
2830 s := '鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃?%s鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?';
2831 if GetActiveList is TBoard then
2832 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
2833 // SelectText]);
2834 end;
2835 else begin
2836 s := '';
2837 end;
2838 end;
2839
2840 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
2841 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
2842 ListView.Canvas.TextOut(p.X, p.Y, s);
2843 end else begin
2844 DefaultDraw := True;
2845 end;
2846 end;
2847
2848 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
2849 var
2850 Item: TDownloadItem;
2851 begin
2852 if not Board.IsThreadDatRead then
2853 GikoSys.ReadSubjectFile(Board);
2854 Item := TDownloadItem.Create;
2855 try
2856 Item.Board := Board;
2857 Item.DownType := gdtBoard;
2858 Item.ForceDownload := ForceDownload;
2859 FControlThread.AddItem(Item);
2860 if FWorkCount = 0 then begin
2861 try
2862 Animate.Active := True;
2863 except
2864 end;
2865 Screen.Cursor := crAppStart;
2866 end;
2867 Inc(FWorkCount);
2868 finally
2869 //Item.Free;
2870 end;
2871 end;
2872
2873 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
2874 var
2875 Item: TDownloadItem;
2876 begin
2877 Item := TDownloadItem.Create;
2878 try
2879 Item.ThreadItem := ThreadItem;
2880 Item.DownType := gdtThread;
2881 Item.ForceDownload := ForceDownload;
2882 FControlThread.AddItem(Item);
2883 if FWorkCount = 0 then begin
2884 try
2885 Animate.Active := True;
2886 except
2887 end;
2888 Screen.Cursor := crAppStart;
2889 end;
2890 Inc(FWorkCount);
2891 finally
2892 // Item.Free;
2893 end;
2894 end;
2895
2896 procedure TGikoForm.PlaySound(SoundEventName: string);
2897 var
2898 FileName: string;
2899 begin
2900 if not GikoSys.Setting.Mute then begin
2901 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
2902 if FileExists(FileName) then begin
2903 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
2904 sndPlaySound(nil, SND_SYNC);
2905 Application.