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