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.696 - (show annotations) (download) (as text)
Sun Sep 13 15:09:07 2009 UTC (14 years, 7 months ago) by h677
Branch: MAIN
CVS Tags: v1_61_0_799
Changes since 1.695: +1 -0 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 //鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1639 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1640
1641 //鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1642 try
1643 //FavoriteDM鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申
1644 // 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1645 if not (FavoriteDM.AbEnd) then begin
1646 FavoriteDM.WriteFavorite;
1647 end;
1648 except
1649 end;
1650
1651 //鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申
1652 try
1653 //AddressHistoryDM鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?
1654 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1655 except
1656 end;
1657
1658 //鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申
1659 try
1660 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1661 except
1662 end;
1663
1664 //鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申
1665 try
1666 RoundList.SaveRoundFile;
1667 except
1668 end;
1669
1670 // 鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申
1671 if (FIconData.uID <> 0) then begin
1672 Shell_NotifyIcon(NIM_DELETE, @FIconData);
1673 end;
1674
1675 end;
1676
1677 procedure TGikoForm.FormDestroy(Sender: TObject);
1678 var
1679 i : Integer;
1680 tmpBool : Boolean;
1681 begin
1682 //鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申CoolBar鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申
1683 //鐃緒申鐃緒申鐃緒申鐃?OnDestroy鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1684 // 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1685 if WindowState <> wsNormal then begin
1686 WindowState := wsNormal;
1687 try
1688 SaveCoolBarSettings;
1689 GikoSys.Setting.WriteWindowSettingFile;
1690 except
1691 end;
1692 end;
1693
1694 // 鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申
1695 try
1696 if GikoSys.Setting.GestureEnabled then begin
1697 MouseGesture.OnGestureStart := nil;
1698 MouseGesture.OnGestureMove := nil;
1699 MouseGesture.OnGestureEnd := nil;
1700 end;
1701 MouseGesture.Clear;
1702 MouseGesture.UnHook;
1703 MouseGesture.Free;
1704 except
1705 end;
1706
1707 //鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申
1708 try
1709 FavoriteDM.Clear;
1710 except
1711 end;
1712
1713 try
1714 //鐃?鐃?鐃?鐃緒申鐃?鐃?
1715 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1716 GikoSys.Setting.ShowDialogForAllTabClose := false;
1717 GikoDM.AllTabCloseAction.Execute;
1718 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1719 except
1720 end;
1721
1722 try
1723 for i := FBrowsers.Count - 1 downto 0 do begin
1724 GikoSys.ShowRefCount('browser' + IntToStr(i), TWebBrowser(FBrowsers[i]).ControlInterface);
1725 GikoSys.ShowRefCount('document' + IntToStr(i), TWebBrowser(FBrowsers[i]).ControlInterface.Document);
1726 end;
1727
1728 for i := FBrowsers.Count - 1 downto 0 do begin
1729 TWebBrowser(FBrowsers[i]).Free;
1730 end;
1731 FBrowsers.Clear;
1732 FBrowsers.Capacity := 0;
1733 finally
1734 FBrowsers.Free;
1735 end;
1736
1737 try
1738 if BrowserNullTab <> nil then begin
1739 BrowserNullTab.Browser := nil; {*BrowserNullTab鐃緒申Browser鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?
1740 *鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申Free鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?
1741 *}
1742 BrowserNullTab.Free;
1743 end;
1744 except
1745 end;
1746
1747 try
1748 TreeView.Items.BeginUpdate;
1749 TreeView.Items.GetFirstNode.Free;
1750 TreeView.Items.Clear;
1751 TreeView.Items.EndUpdate;
1752 except
1753 end;
1754
1755 try
1756 try
1757 FHistoryList.Clear;
1758 except
1759 end;
1760 finally
1761 FHistoryList.Free;
1762 end;
1763
1764
1765 try
1766 try
1767 RoundList.Clear;
1768 except
1769 end;
1770 finally
1771 RoundList.Free;
1772 end;
1773
1774 try
1775 try
1776 //FControlThread.DownloadAbort;
1777 FControlThread.Terminate;
1778 FControlThread.WaitFor;
1779 except
1780 end;
1781 finally
1782 FControlThread.Free;
1783 end;
1784 // 鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申
1785 for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
1786 GikoForm.PlugInMenu.items[i].Free;
1787 end;
1788 GikoForm.PlugInMenu.Clear;
1789
1790
1791 // TBBS 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 TCategory, TBoard, TThreadItem 鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申
1792 // TBoard, TThreadItem 鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申
1793 // BoardPluteIns 鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申
1794 for i := Length(BoardGroups) - 1 downto 0 do begin
1795 //BoardGroups[i].Clear;
1796 BoardGroups[i].Free;
1797 end;
1798
1799 try
1800 for i := Length( BBSs ) - 1 downto 0 do begin
1801 if BBSs[ i ] <> nil then
1802 BBSs[ i ].Free;
1803 BBSs[ i ] := nil;
1804 end;
1805 DestorySpecialBBS(BoardGroup.SpecialBBS);
1806 except
1807 end;
1808
1809 try
1810 if FEvent <> nil then
1811 FEvent.Free;
1812
1813 try
1814 if FResPopupBrowser <> nil then begin
1815 TOleControl(FResPopupBrowser).Parent := nil;
1816 FResPopupBrowser.Free;
1817 end;
1818
1819 except
1820 end;
1821 //Preview鐃?鐃緒申
1822 if FPreviewBrowser <> nil then begin
1823 FPreviewBrowser.Free;
1824 FPreviewBrowser := nil;
1825 end;
1826 except
1827 end;
1828
1829 // Update鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申
1830 if FileExists(FUpdateExePath) then begin
1831 // 鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?
1832 GikoSys.CreateProcess(FUpdateExePath, FUpdateExeArgs);
1833 end;
1834 end;
1835
1836 // 鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃? BBS 鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?
1837 procedure TGikoForm.SetBBSMenu;
1838 var
1839 i : Integer;
1840 item : TBBSMenuItem;
1841 begin
1842
1843 // 鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申
1844 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1845 try
1846 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1847 CabinetSelectPopupMenu.Items[ i ].Free;
1848 CabinetMenu.Items[ i ].Free;
1849 BBSSelectPopupMenu.Items[ i ].Free;
1850 end;
1851 except
1852 end;
1853 end;
1854
1855 // 鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申
1856 for i := Length( BBSs ) - 1 downto 0 do begin
1857 try
1858 item := TBBSMenuItem.Create( PopupMenu );
1859 item.Caption := BBSs[ i ].Title;
1860 item.Data := BBSs[ i ];
1861 item.OnClick := BBSMenuItemOnClick;
1862 CabinetSelectPopupMenu.Items.Insert( 0, item );
1863 item := TBBSMenuItem.Create( PopupMenu );
1864 item.Caption := BBSs[ i ].Title;
1865 item.Data := BBSs[ i ];
1866 item.OnClick := BBSMenuItemOnClick;
1867 CabinetMenu.Insert( 0, item );
1868 item := TBBSMenuItem.Create( PopupMenu );
1869 item.Caption := BBSs[ i ].Title;
1870 item.Data := BBSs[ i ];
1871 item.OnClick := BBSMenuItemOnClick;
1872 BBSSelectPopupMenu.Items.Insert( 0, Item );
1873 except
1874 end;
1875 end;
1876
1877 end;
1878
1879 procedure TGikoForm.ReloadBBS;
1880 var
1881 i : Integer;
1882 tmpBool: Boolean;
1883 begin
1884 LockWindowUpdate(Self.Handle);
1885
1886 //鐃?鐃?鐃?鐃緒申鐃?鐃?
1887 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1888 GikoSys.Setting.ShowDialogForAllTabClose := false;
1889 GikoDM.AllTabCloseAction.Execute;
1890 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1891 SetContent(BrowserNullTab);
1892 //TreeView鐃?鐃緒申鐃?鐃?BBS2ch.Free鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申XP鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃?
1893 TreeView.Items.Clear;
1894
1895 //鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申
1896 try
1897 RoundList.SaveRoundFile;
1898 except
1899 end;
1900 //鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申
1901 try
1902 RoundList.Clear;
1903 except
1904 end;
1905
1906 //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申
1907 try
1908 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1909 FHistoryList.Clear;
1910 except
1911 end;
1912
1913 //鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申
1914 try
1915 FavoriteDM.WriteFavorite;
1916 FavoriteDM.Clear;
1917 except
1918 end;
1919
1920 //鐃緒申鐃?鐃?鐃緒申鐃?PLUGIN鐃緒申鐃?鐃緒申
1921 for i := Length(BoardGroups) - 1 downto 0 do begin
1922 try
1923 BoardGroups[i].Free;
1924 except
1925 end;
1926 end;
1927 //BBS鐃?鐃緒申
1928 try
1929 for i := Length( BBSs ) - 1 downto 0 do begin
1930 if BBSs[ i ] <> nil then
1931 BBSs[ i ].Free;
1932 BBSs[ i ] := nil;
1933 end;
1934 except
1935 end;
1936
1937 ActiveList := nil;
1938
1939 FTreeType := gttNone;
1940
1941 //============鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申================================//
1942
1943 // 鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?(ReadBoardFile, LoadHistory 鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申)
1944 InitializeBoardPlugIns;
1945
1946 GikoSys.ListBoardFile; //鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申
1947
1948 // 鐃緒申鐃緒申鐃緒申鐃緒申BBS鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1949 for i := Length(BBSs) - 1 downto 0 do begin
1950 if not BBSs[i].IsBoardFileRead then
1951 GikoSys.ReadBoardFile(BBSs[i]);
1952 end;
1953
1954 // BBS 鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃?
1955 SetBBSMenu;
1956
1957 ShowBBSTree( BBSs[ 0 ] );
1958
1959 // 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1960 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1961 TreeView, FTreeType);
1962
1963 //鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1964 FavoriteDM.ReadFavorite;
1965
1966 SetLinkBar;
1967
1968 //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1969 RoundList.LoadRoundBoardFile;
1970 RoundList.LoadRoundThreadFile;
1971
1972 LockWindowUpdate(0);
1973 end;
1974
1975 {!
1976 \todo 鐃緒申鐃緒申 IE 7 鐃緒申鐃緒申 about:.. 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1977 (IE 7 鐃緒申 about:.. 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申)
1978 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1979 }
1980 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1981 var
1982 p: TPoint;
1983 s: string;
1984 tmp2: string;
1985 URL: string;
1986 ATitle: Boolean;
1987
1988 threadItem : TThreadItem;
1989 board : TBoard;
1990 Protocol, Host, Path, Document, Port, Bookmark: string;
1991
1992 wkInt: Integer;
1993 wkIntSt: Integer;
1994 wkIntTo: Integer;
1995 ActiveFileName: string;
1996 e: IHTMLElement;
1997 Ext: string;
1998 PathRec: TPathRec;
1999 Text2: string;
2000 cResPopup: TResPopupBrowser;
2001 senderBrowser :TWebBrowser;
2002 doc: IHTMLDocument2;
2003 begin
2004 // 鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申 about:blank.. 鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2005 // IE 7 鐃緒申鐃緒申 about:blank.. 鐃緒申鐃緒申鐃緒申鐃緒申 about:.. 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申(鐃緒申鐃緒申鐃緒申鐃緒申)
2006 if Pos('about:..', Text) = 1 then
2007 Text2 := 'about:blank..' + Copy( Text, Length('about:..')+1, Length(Text) )
2008 else
2009 Text2 := Text;
2010
2011 if not( TObject(Sender) is TWebBrowser )then
2012 Exit;
2013
2014 senderBrowser := TWebBrowser(Sender);
2015 doc := senderBrowser.ControlInterface.Document as IHTMLDocument2;
2016
2017 try
2018 try
2019 if ((not senderBrowser.Busy) and Assigned(doc)) then begin
2020 if LowerCase(doc.charset) <> 'shift_jis' then begin
2021 doc.charset := 'shift_jis';
2022 end;
2023 end;
2024 except
2025 end;
2026 finally
2027 end;
2028
2029 if PreviewTimer.Enabled then
2030 PreviewTimer.Enabled := False;
2031
2032 Application.CancelHint;
2033
2034 try
2035 if GetActiveContent <> nil then
2036 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
2037 else
2038 ActiveFileName := '';
2039 except
2040 FActiveContent := nil;
2041 Exit;
2042 end;
2043
2044 // 鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申
2045 if (StatusBar.Panels[1].Text = Text2) then begin
2046 if Text2 = '' then begin
2047 if FResPopupBrowser <> nil then begin
2048 if not(Sender is TResPopupBrowser) then
2049 FResPopupBrowser.Clear
2050 else begin
2051 TResPopupBrowser(Sender).ChildClear;
2052 end;
2053 end;
2054 end;
2055 Exit;
2056 end;
2057 StatusBar.Panels[1].Text := Text2;
2058
2059
2060 if FPreviewBrowser <> nil then
2061 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2062
2063 if FResPopupBrowser <> nil then begin
2064 if not(Sender is TResPopupBrowser) then begin
2065 if (FResPopupBrowser.Visible) then begin
2066 if ResPopupClearTimer.Interval > 0 then begin
2067 ResPopupClearTimer.Enabled := True;
2068 ResPopupClearTimer.Tag := 0;
2069 end else begin
2070 FResPopupBrowser.Clear;
2071 end;
2072 end;
2073 end else begin
2074 if ResPopupClearTimer.Interval > 0 then begin
2075 ResPopupClearTimer.Enabled := True;
2076 ResPopupClearTimer.Tag := 1;
2077 end else begin
2078 TResPopupBrowser(Sender).ChildClear;
2079 end;
2080 end;
2081 end;
2082 cResPopup := nil;
2083
2084 if not(Sender is TResPopupBrowser) then
2085 if not GikoSys.Setting.UnActivePopup then
2086 if not GikoForm.Active then
2087 Exit;
2088
2089
2090
2091 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
2092 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
2093 // 鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申URL鐃緒申鐃?鐃?
2094 if (ExtPreviewDM.PreviewURL(Text2)) then begin
2095 Exit;
2096 end;
2097 s := '';
2098 Ext := AnsiLowerCase(ExtractFileExt(Text2));
2099 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
2100 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) or
2101 (Pos('http://www.nicovideo.jp/watch/', Text2) = 1) then begin
2102 if FPreviewBrowser = nil then begin
2103 FPreviewBrowser := TPreviewBrowser.Create(Self);
2104 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2105 TOleControl(FPreviewBrowser).Parent := nil;
2106 end;
2107 FPreviewBrowser.Navigate(BLANK_HTML);//鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?
2108 FPreviewURL := Text2;
2109 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
2110 PreviewTimer.Enabled := True;
2111 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
2112 if (Pos('mailto:', Text2) = 1) and (GikoSys.Setting.RespopupMailTo) then begin
2113 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
2114 //鐃?鐃?鐃?鐃?鐃?鐃緒申 鐃?鐃?鐃?3鐃緒申466鐃緒申鐃緒申鐃緒申鐃緒申
2115 GetCursorPos(p);
2116 p.x := p.x - senderBrowser.ClientOrigin.x;
2117 p.y := p.y - senderBrowser.ClientOrigin.y;
2118 e := doc.elementFromPoint(p.x, p.y);
2119 if (Assigned(e)) then begin
2120 CreateResPopupBrowser;
2121
2122 if not(Sender is TResPopupBrowser) then begin
2123 if (FResPopupBrowser.Visible) then begin
2124 FResPopupBrowser.Clear;
2125 end;
2126 end else begin
2127 TResPopupBrowser(Sender).ChildClear;
2128 end;
2129
2130 cResPopup := FResPopupBrowser.CreateNewBrowser;
2131 tmp2 := Trim(ZenToHan(e.Get_outerText));
2132 if (GikoSys.IsNumeric(tmp2)) then begin
2133 //鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?
2134 wkIntSt := StrToInt64(tmp2);
2135 wkIntTo := StrToInt64(tmp2);
2136 cResPopup.PopupType := gptThread;
2137 HTMLCreater.SetResPopupText(cResPopup, GetActiveContent(true), wkIntSt, wkIntTo, False, False);
2138 end else begin
2139 cResPopup.PopupType := gptRaw;
2140 cResPopup.Title := s;
2141 end;
2142 end;
2143 end else begin
2144 CreateResPopupBrowser;
2145
2146 if not(Sender is TResPopupBrowser) then begin
2147 if (FResPopupBrowser.Visible) then begin
2148 FResPopupBrowser.Clear;
2149 end;
2150 end else begin
2151 TResPopupBrowser(Sender).ChildClear;
2152 end;
2153
2154 threadItem := GetActiveContent(true);
2155 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
2156 PathRec := Gikosys.Parse2chURL2(URL);
2157 if (PathRec.FNoParam) then begin
2158 PathRec.FSt := 1;
2159 PathRec.FTo := 1;
2160 end else begin
2161 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
2162 end;
2163 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
2164
2165 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
2166
2167 URL := GikoSys.GetBrowsableThreadURL( URL );
2168 wkIntSt := PathRec.FSt;
2169 wkIntTo := PathRec.FTo;
2170
2171 if (wkIntSt = 0) and (wkIntTo = 0) then begin
2172 wkIntSt := 1;
2173 wkIntTo := 1;
2174 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
2175 wkIntSt := wkIntTo;
2176 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
2177 wkIntTo := wkIntSt;
2178 end else if wkIntSt > wkIntTo then begin
2179 wkInt := wkIntTo;
2180 wkIntTo := wkIntSt;
2181 wkIntSt := wkInt;
2182 end;
2183 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
2184 ATitle := false
2185 else
2186 ATitle := true;
2187
2188 threadItem := BBSsFindThreadFromURL( URL );
2189
2190 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
2191 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
2192 if board <> nil then begin
2193 if not board.IsThreadDatRead then
2194 GikoSys.ReadSubjectFile( board );
2195 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
2196 end;
2197 end;
2198
2199 if threadItem <> nil then begin
2200 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
2201 //URL鐃緒申鐃緒申鐃緒申鐃緒申/鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?
2202 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
2203 wkIntSt := 1;
2204 wkIntTo := 1;
2205 end;
2206 cResPopup := FResPopupBrowser.CreateNewBrowser;
2207 cResPopup.PopupType := gptThread;
2208 HTMLCreater.SetResPopupText(cResPopup, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
2209 end;
2210 end;
2211 end;
2212 if (cResPopup <> nil) then begin
2213 ResPopupClearTimer.Enabled := False;
2214
2215 if cResPopup.PopupType = gptRaw then begin
2216 if cResPopup.Title <> '' then begin
2217 cResPopup.TitlePopup;
2218 end;
2219 end else begin
2220 if cResPopup.RawDocument <> '' then begin
2221 cResPopup.Popup;
2222 end else if cResPopup.Title <> '' then begin
2223 cResPopup.TitlePopup;
2224 end;
2225 end;
2226 end;
2227 end;
2228 end;
2229
2230 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2231 var
2232 SysMenu: HMenu;
2233 begin
2234 FEnabledCloseButton := Enabled;
2235 SysMenu := GetSystemMenu(Handle, False);
2236
2237 if Enabled then begin
2238 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2239 end else begin
2240 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2241 end;
2242
2243 DrawMenuBar(Handle);
2244 end;
2245
2246 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2247 var AllowChange: Boolean);
2248 begin
2249 //鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2250 // if FTreeType = gtt2ch then
2251 // FSortIndex := -1;
2252 end;
2253
2254 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2255 Shift: TShiftState);
2256 var
2257 pos : TPoint;
2258 begin
2259 if GetActiveList is TBoard then begin
2260 case Key of
2261 VK_BACK:; // UpFolderButtonClick(Sender);
2262 VK_SPACE: ListDoubleClick(Shift);
2263 VK_RETURN: ListClick;
2264 VK_APPS:
2265 begin
2266 if ListView.Selected <> nil then begin
2267 pos.X := ListView.Column[ 0 ].Width;
2268 pos.Y := ListView.Selected.Top;
2269 end else begin
2270 pos.X := ListView.Left;
2271 pos.Y := ListView.Top;
2272 end;
2273 Windows.ClientToScreen( ListView.Handle, pos );
2274 ListPopupMenu.Popup( pos.X, pos.Y );
2275 end;
2276 end;
2277 end else begin // TBBS, TCategory
2278 case Key of
2279 VK_BACK:; // UpFolderButtonClick(Sender);
2280 VK_SPACE: ListClick;
2281 VK_RETURN: ListDoubleClick(Shift);
2282 VK_APPS:
2283 begin
2284 if ListView.Selected <> nil then begin
2285 pos.X := ListView.Column[ 0 ].Width;
2286 pos.Y := ListView.Selected.Top;
2287 end else begin
2288 pos.X := ListView.Left;
2289 pos.Y := ListView.Top;
2290 end;
2291 Windows.ClientToScreen( ListView.Handle, pos );
2292 ListPopupMenu.Popup( pos.X, pos.Y );
2293 end;
2294 end;
2295 end;
2296 end;
2297
2298 function TGikoForm.GetHttpState: Boolean;
2299 begin
2300 Result := FHttpState;
2301 end;
2302
2303 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2304 Column: TListColumn);
2305 var
2306 id, idx : Integer;
2307 orderList : TList;
2308 vSortIndex : Integer;
2309 vSortOrder : Boolean;
2310 begin
2311 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2312 if TObject( FActiveList ) is TBBS then begin
2313 orderList := GikoSys.Setting.BBSColumnOrder;
2314 vSortIndex := GikoSys.Setting.BBSSortIndex;
2315 vSortOrder := GikoSys.Setting.BBSSortOrder;
2316 end else if TObject( FActiveList ) is TCategory then begin
2317 orderList := GikoSys.Setting.CategoryColumnOrder;
2318 vSortIndex := GikoSys.Setting.CategorySortIndex;
2319 vSortOrder := GikoSys.Setting.CategorySortOrder;
2320 end else if TObject( FActiveList ) is TBoard then begin
2321 orderList := GikoSys.Setting.BoardColumnOrder;
2322 vSortIndex := GikoSys.Setting.BoardSortIndex;
2323 vSortOrder := GikoSys.Setting.BoardSortOrder;
2324 end else
2325 Exit;
2326
2327 id := Integer( orderList[ idx ] );
2328
2329
2330 if vSortIndex = id then
2331 vSortOrder := not vSortOrder
2332 else begin
2333 vSortOrder := id = 0;
2334 end;
2335
2336 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2337 end;
2338
2339 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2340 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2341 var
2342 ARect: TRect;
2343 begin
2344 DefaultDraw := True;
2345 // 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申Exit鐃緒申鐃緒申鐃緒申鐃緒申
2346 Exit;
2347 DefaultDraw := False;
2348 if (cdsSelected in State) or (cdsHot in State) then begin
2349 Sender.Canvas.Brush.Color := clHighlight;
2350 Sender.Canvas.Font.Color := clHighlightText;
2351 end else begin
2352 Sender.Canvas.Brush.Color := clBtnFace;
2353 Sender.Canvas.Font.Color := clBtnText;
2354 end;
2355 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2356 Sender.Canvas.FillRect(ARect);
2357 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2358 end;
2359
2360 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2361 var
2362 Nodes: TTreeNodes;
2363 i: integer;
2364 begin
2365 Nodes := TreeView.Items;
2366
2367 for i := 0 to Nodes.Count - 1 do begin
2368 if Nodes.Item[i].Data = Data then begin
2369 Result := Nodes.Item[i];
2370 Exit;
2371 end;
2372 end;
2373 Result := nil;
2374 end;
2375
2376 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2377 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2378 Headers: OleVariant; var Cancel: WordBool);
2379 var
2380 sNo: string;
2381 p: TPoint;
2382 const
2383 kMenuName: string = 'menu:';
2384 begin
2385 {$IFDEF DEBUG}
2386 Writeln(URL);
2387 {$ENDIF}
2388 FKokoPopupThreadItem := nil;
2389 if Pos(kMenuName, URL) <> 0 then begin
2390 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2391
2392 if not GikoSys.IsNumeric(sNo) then Exit;
2393
2394 Cancel := True;
2395 GetCursorpos(p);
2396 KokoPopupMenu.PopupComponent := nil;
2397 if (Sender is TComponent) then
2398 KokoPopupMenu.PopupComponent := TComponent(Sender);
2399 // 鐃緒申鐃緒申鐃緒申鐃緒申 鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2400 if not (Sender is TResPopupBrowser) then begin
2401 if (FResPopupBrowser <> nil) and (FResPopupBrowser.CurrentBrowser.Visible = True) then begin
2402 FResPopupBrowser.Clear;
2403 end;
2404 end else begin
2405 if (Sender <> FResPopupBrowser.CurrentBrowser) then begin
2406 TResPopupBrowser(Sender).ChildClear;
2407 end;
2408 end;
2409 FKokoPopupThreadItem := GetActiveContent(true);
2410 KokoPopupMenu.Tag := StrToInt(sNo);
2411 KokoPopupMenu.Popup(p.x, p.y);
2412 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2413 Cancel := not GikoSys.Setting.OpenMailer;
2414
2415 //@鐃緒申.鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申URL鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2416 //鐃緒申鐃緒申age鐃?sage鐃緒申鐃緒申
2417 if (Pos('@', URL) = 0) or (Pos('.', URL) = 0) then begin
2418 Cancel := True;
2419 end;
2420 end;
2421
2422 end;
2423
2424 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2425 const ARect: TRect; var DefaultDraw: Boolean);
2426 var
2427 NodeRect: TRect;
2428 i, j: Integer;
2429 IsBoardNode: Boolean;
2430 Cnt: Integer;
2431 CntText: string;
2432 TextWidth: Integer;
2433 TextRect: TRect;
2434 Board: TBoard;
2435 Category: TCategory;
2436 Bitmap: TBitmap;
2437 NodeWidth: Integer;
2438 begin
2439 DefaultDraw := True;
2440
2441 if FTreeType = gttHistory then Exit;
2442
2443 TreeView.Canvas.Font.Color := clBlue;
2444 IsBoardNode := False;
2445 for i := 0 to TreeView.Items.Count - 1 do begin
2446 Cnt := 0;
2447 if not TreeView.Items[i].IsVisible then
2448 continue;
2449
2450 if TObject(TreeView.Items[i].Data) is TCategory then begin
2451 if TreeView.Items[i].Expanded then
2452 continue;
2453
2454 IsBoardNode := False;
2455 Category := TCategory(TreeView.Items[i].Data);
2456 for j := 0 to Category.Count - 1 do begin
2457 Board := Category.Items[j];
2458 if Board <> nil then begin
2459 if Board.UnRead > 0 then begin
2460 Cnt := 1;
2461 Break;
2462 end;
2463 end;
2464 end;
2465 if Cnt <> 1 then
2466 continue;
2467 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2468 IsBoardNode := True;
2469 Board := TBoard(TreeView.Items[i].Data);
2470
2471 Cnt := Board.UnRead;
2472 if Cnt <= 0 then
2473 continue;
2474 end else
2475 continue;
2476
2477 Bitmap := TBitmap.Create;
2478 try
2479 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2480 Bitmap.Canvas.Font.Style := [fsBold];
2481 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2482 finally
2483 Bitmap.Free;
2484 end;
2485
2486 NodeRect := TreeView.Items[i].DisplayRect(True);
2487
2488 if IsBoardNode then
2489 CntText := '(' + IntToStr(Cnt) + ')'
2490 else if Cnt = 1 then
2491 CntText := '(+)';
2492
2493
2494 TextWidth := TreeView.Canvas.TextWidth(CntText);
2495
2496 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2497 NodeRect.Top,
2498 NodeRect.Left + NodeWidth + TextWidth + 8,
2499 NodeRect.Bottom);
2500 DrawText(TreeView.Canvas.Handle,
2501 PChar(CntText),
2502 -1,
2503 TextRect,
2504 DT_SINGLELINE or DT_VCENTER);
2505 end;
2506 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2507 end;
2508
2509 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2510 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2511 var
2512 Board: TBoard;
2513 Category: TCategory;
2514 i: Integer;
2515 begin
2516 DefaultDraw := True;
2517
2518 if FTreeType = gttHistory then Exit;
2519
2520 TreeView.Canvas.Font.Style := [];
2521 if Node <> nil then begin
2522 if TObject(Node.Data) is TCategory then begin
2523 Category := TCategory(Node.Data);
2524 for i := 0 to Category.Count - 1 do begin
2525 Board := Category.Items[i];
2526 if Board <> nil then begin
2527 if Board.UnRead > 0 then begin
2528 TreeView.Canvas.Font.Style := [fsBold];
2529 Break;
2530 end;
2531 end;
2532 end;
2533 end else if TObject(Node.Data) is TBoard then begin
2534 Board := TBoard(Node.Data);
2535 if Board.UnRead > 0 then
2536 TreeView.Canvas.Font.Style := [fsBold];
2537 end;
2538 end;
2539 end;
2540
2541 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2542 begin
2543 TreeView.Invalidate;
2544
2545 if TObject(Node.Data) is TBBS then begin
2546 TBBS(Node.Data).NodeExpand := True;
2547 end else if TObject(Node.Data) is TCategory then begin
2548 TCategory(Node.Data).NodeExpand := True;
2549 end else if TObject(Node.Data) is TBoard then begin
2550 TBoard(Node.Data).NodeExpand := True;
2551 end;
2552 end;
2553
2554 procedure TGikoForm.ListViewAllSelect;
2555 begin
2556 ListView.SetFocus;
2557 ListView.SelectAll;
2558 end;
2559 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2560 begin
2561 if csDestroying in Self.ComponentState then
2562 Exit;
2563 AddMessageList(Msg, nil, Icon);
2564 end;
2565 // *************************************************************************
2566 //! 鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?
2567 // *************************************************************************
2568 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2569 var
2570 ATitle: string;
2571 s: string;
2572 boardPlugIn : TBoardPlugIn;
2573 i: Integer;
2574 Res : TResRec;
2575 begin
2576 try
2577 if csDestroying in Self.ComponentState then
2578 Exit;
2579 if Item.DownType = gdtBoard then
2580 ATitle := Item.Board.Title
2581 else
2582 ATitle := Item.ThreadItem.Title;
2583 if ATitle = '' then
2584 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2585
2586 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2587 //鐃緒申鐃緒申鐃?鐃緒申
2588 if Item.DownType = gdtBoard then begin
2589 //鐃緒申
2590 Item.SaveListFile;
2591 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2592 if GetActiveList = Item.Board then begin
2593 FActiveList := nil;
2594 //鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申
2595 if (GikoSys.Setting.AutoSortThreadList) then begin
2596 GikoSys.Setting.BoardSortIndex := 0;
2597 GikoSys.Setting.BoardSortOrder := True;
2598 end;
2599 Sort.SetSortDate(Now());
2600 SetActiveList(Item.Board);
2601 end;
2602 Item.Board.Modified := True;
2603 Item.Board.IsThreadDatRead := True;
2604 PlaySound('New');
2605 ListView.Refresh;
2606 end else if Item.DownType = gdtThread then begin
2607 //鐃?鐃緒申
2608 Item.SaveItemFile;
2609 Item.ThreadItem.NewArrival := True;
2610 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2611 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2612 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2613 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2614 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2615 Item.ThreadItem.Title := Res.FTitle;
2616 ATitle := Item.ThreadItem.Title;
2617 end else if ATitle = '鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?' then begin
2618 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2619 ATitle := Res.FTitle;
2620 end;
2621 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2622 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2623 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2624 break;
2625 end;
2626 end;
2627 if GikoSys.Setting.BrowserTabVisible then begin
2628 if GetActiveContent = Item.ThreadItem then
2629 InsertBrowserTab(Item.ThreadItem)
2630 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2631 InsertBrowserTab(Item.ThreadItem, True)
2632 else
2633 InsertBrowserTab(Item.ThreadItem, False);
2634
2635 end else begin
2636 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2637 InsertBrowserTab(Item.ThreadItem);
2638 end;
2639
2640 Application.ProcessMessages;
2641
2642 if Item.State = gdsComplete then begin
2643 PlaySound('New');
2644 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2645 //Add by Genyakun
2646 DiffComp := True;
2647 end else begin
2648 PlaySound('NewDiff');
2649 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2650 //Add by Genyakun
2651 DiffComp := True;
2652 end;
2653
2654 //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2655 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2656 // 2ch鐃緒申鐃?鐃緒申鐃?1000鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?2ch鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2657 if (Item.ThreadItem.ParentBoard.Is2ch) then begin
2658 Item.ThreadItem.Round := False;
2659 AddMessageList('鐃緒申1000鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 - [' + Item.ThreadItem.Title + ']', nil, gmiOK);
2660 end;
2661 end;
2662 TreeView.Refresh;
2663 //ListView鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申
2664 UpdateListView();
2665 RefreshListView(Item.ThreadItem);
2666 end;
2667
2668 end else if Item.State = gdsNotModify then begin
2669 //鐃緒申鐃?鐃?鐃?
2670 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2671 //SetContent(Item.ThreadItem);
2672 InsertBrowserTab(Item.ThreadItem);
2673 end;}
2674 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2675 PlaySound('NoChange');
2676 Screen.Cursor := crDefault;
2677 end else if Item.State = gdsAbort then begin
2678 //鐃緒申鐃?
2679 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2680 end else if Item.State = gdsError then begin
2681 //鐃?鐃緒申鐃?
2682 s := Item.ErrText;
2683 if s <> '' then
2684 s := ':' + s;
2685 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2686 // if Item.ResponseCode = 302 then
2687 // AddMessageList('鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?', nil, gmiNG);
2688 PlaySound('Error');
2689 end;
2690 finally
2691 Item.Free;
2692 Dec(FWorkCount);
2693 if FWorkCount < 0 then FWorkCount := 0;
2694 if FWorkCount = 0 then begin
2695 try
2696 Animate.Active := False;
2697 finally
2698 Screen.Cursor := crDefault;
2699 end;
2700 end;
2701
2702 end;
2703 end;
2704
2705 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2706 begin
2707 // SetProgressValue(Number, 0, AWorkCountMax);
2708 // ProgressBar.Visible := True;
2709 if csDestroying in Self.ComponentState then
2710 Exit;
2711
2712 ProgressBar.Position := 0;
2713 ProgressBar.Max := AWorkCountMax;
2714 FDownloadTitle := AWorkTitle;
2715 StatusBar.Panels[1].Text := FDownloadTitle + ' - 鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申';
2716 FDownloadMax := AWorkCountMax;
2717 end;
2718
2719 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2720 begin
2721 if csDestroying in Self.ComponentState then
2722 Exit;
2723 ProgressBar.Position := 0;
2724 if FDownloadMax <> 0 then
2725 StatusBar.Panels[1].Text := FDownloadTitle + ' - 鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申';
2726 end;
2727
2728 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2729 begin
2730 if csDestroying in Self.ComponentState then
2731 Exit;
2732 ProgressBar.Position := AWorkCount;
2733 // SetProgressValue(Number, AWorkCount);
2734 StatusBar.Panels[1].Text := FDownloadTitle + ' - 鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2735 end;
2736
2737 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2738 var
2739 ListItem: TListItem;
2740 begin
2741 MessageListView.Items.BeginUpdate;
2742 try
2743 ListItem := MessageListView.Items.Add;
2744 ListItem.Caption := ACaption;
2745 ListItem.Data := AObject;
2746 ListItem.MakeVisible(False);
2747 case Icon of
2748 gmiOK: ListItem.ImageIndex := 0;
2749 gmiSAD: ListItem.ImageIndex := 1;
2750 gmiNG: ListItem.ImageIndex := 2;
2751 gmiWhat: ListItem.ImageIndex := 3;
2752 end;
2753 finally
2754 MessageListView.Items.EndUpdate;
2755 end;
2756 end;
2757
2758 //! 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申Browser鐃緒申鐃?鐃緒申
2759 procedure TGikoForm.ReleaseOldestBrowser;
2760 var
2761 i: Integer;
2762 begin
2763 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2764 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2765 TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2766 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2767 break;
2768 end;
2769 end;
2770 end;
2771
2772 function TGikoForm.InsertBrowserTab(
2773 ThreadItem : TThreadItem;
2774 ActiveTab : Boolean = True
2775 ) : TBrowserRecord;
2776 var
2777 i, j, idx : Integer;
2778 favItem : TFavoriteThreadItem;
2779 newBrowser : TBrowserRecord;
2780 ins : Integer;
2781 begin
2782
2783 Result := nil;
2784 if Threaditem = nil then Exit;
2785
2786 if ThreadItem.IsLogFile then begin
2787 //鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申browser鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2788 //鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申Active鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2789 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2790 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2791 j := FBrowsers.IndexOf(FActiveContent.Browser);
2792 if j = BROWSER_COUNT - 1 then
2793 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2794 end;
2795 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2796 if not FHistoryList.AddHistory( favItem, TreeView, FTreeType ) then
2797 favItem.Free;
2798
2799 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2800 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2801 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2802 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2803 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2804 //鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申
2805 ReleaseOldestBrowser;
2806 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2807 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2808 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2809 end;
2810 if ActiveTab then begin
2811 BrowserTab.TabIndex := i;
2812 BrowserTab.OnChange(nil);
2813 BrowserTab.Repaint;
2814 end;
2815 Exit;
2816 end;
2817 end;
2818 end;
2819 idx := BrowserTab.TabIndex;
2820 newBrowser := TBrowserRecord.Create;
2821 // 鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申
2822 ReleaseOldestBrowser;
2823 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2824 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2825 newBrowser.thread := ThreadItem;
2826 newBrowser.Repaint := true;
2827
2828 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2829 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2830 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2831 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2832 end;// else begin
2833 //end;
2834 BrowserTab.Repaint;
2835 if ActiveTab then begin
2836 BrowserTab.TabIndex := 0;
2837 end;
2838 end else if GikoSys.Setting.BrowserTabAppend = gtaLast then begin
2839 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2840 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2841 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2842 end;
2843 //end;
2844 BrowserTab.Repaint;
2845 if ActiveTab then begin
2846 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2847 BrowserTab.TabIndex := 0
2848 else
2849 BrowserTab.TabIndex := i;
2850 end;
2851 end else begin
2852 // 鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申
2853 ins := -1;
2854 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2855 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2856 TWebBrowser(FBrowsers[1]) then begin
2857 ins := i;
2858 break;
2859 end;
2860 end;
2861 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2862 Inc(ins);
2863 end;
2864 // 鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2865 if (ins < 0) then begin
2866 ins := 0;
2867 end;
2868 BrowserTab.Tabs.InsertObject(ins, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2869 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2870 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2871 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2872 end else begin
2873 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2874 end;
2875 end;
2876 //end;
2877 BrowserTab.Repaint;
2878 if ActiveTab then begin
2879 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2880 BrowserTab.TabIndex := 0
2881 else
2882 BrowserTab.TabIndex := ins;
2883 end;
2884 end;
2885 Result := newBrowser;
2886 if(ActiveTab) or (idx = -1) then begin
2887 BrowserTab.OnChange(nil);
2888 end;
2889 end else begin
2890 if BrowserNullTab = nil then begin
2891 BrowserNullTab := TBrowserRecord.Create;
2892 BrowserNullTab.Browser := Browser;
2893 end;
2894 // if BrowserNullTab.thread <> ThreadItem then begin
2895 // BrowserNullTab.Movement := '';
2896 // end;
2897 BrowserNullTab.thread := ThreadItem;
2898 Result := BrowserNullTab;
2899 BrowserTab.TabIndex := -1;
2900 SetContent(BrowserNullTab);
2901 end;
2902
2903 if GikoSys.Setting.URLDisplay then
2904 AddressComboBox.Text := ThreadItem.URL;
2905
2906 end;
2907
2908 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2909 var
2910 BBSID: string;
2911 FileName: string;
2912 sTitle: string;
2913 doc: OleVariant;
2914 s: string;
2915 idx: Integer;
2916 ThreadItem: TThreadItem;
2917 Thread: TBrowserRecord;
2918 ThreadTitle, ThreadPTitle: string;
2919 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2920 begin
2921 Thread := inThread;
2922 idx := BrowserTab.TabIndex;
2923 if (not FStartUp) and
2924 (FActiveContent <> nil) and
2925 (FActiveContent.Thread <> Thread.Thread) and
2926 (FActiveContent.Browser <> nil) and
2927 (Assigned(FActiveContent.Browser.ControlInterface.Document)) then begin
2928 try
2929 try
2930 FActiveContent.Thread.ScrollTop := FActiveContent.Browser.OleObject.Document.Body.ScrollTop;
2931 except
2932 on E: Exception do
2933 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2934 end;
2935 finally
2936 end;
2937 end;
2938 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2939 Thread.Browser.Navigate(BLANK_HTML);
2940 BrowserBoardNameLabel.Caption := '';
2941 ItemBoardImage.Picture := nil;
2942 BrowserNameLabel.Caption := '';
2943 ItemImage.Picture := nil;
2944 BrowserNullTab.Thread := nil;
2945 //TOleControl(BrowserNullTab.Browser).Visible := true;
2946 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2947 FActiveContent := nil;
2948 Exit;