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.702 - (show annotations) (download) (as text)
Sun Oct 30 02:48:07 2011 UTC (12 years, 5 months ago) by h677
Branch: MAIN
CVS Tags: v1_63_1_819, v1_63_0_818, HEAD
Branch point for: Bb63
Changes since 1.701: +1 -3 lines
File MIME type: text/x-pascal
IE9以外でも除算エラーを無効にしていたのを修正
リンクバーでD&Dで入れ替えると例外が起きる不具合の修正

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 FCwSave: Word; // 8087CW鐃?鐃緒申鐃緒申
620 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
621 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
622 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
623 procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
624 procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
625 procedure ListClick;
626 procedure ListDoubleClick(Shift: TShiftState);
627 function Hook(var Message: TMessage): Boolean;
628 procedure AddRoundNameMenu(MenuItem: TMenuItem);
629 procedure SetMenuFont;
630 procedure CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
631 procedure FavoriteClick(Sender: TObject; ActiveTab: Boolean); overload;
632 procedure FavoriteClick(Sender: TObject); overload;
633 procedure FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
634 function OnDocumentContextMenu(Sender: TObject): WordBool;
635 function GetWidthAllToolButton(ToolBar: TToolBar): Integer;
636 procedure MenuBarChevronMenu;
637 procedure LinkBarChevronMenu;
638 procedure ToolBarChevronMenu(ToolBar: TToolBar);
639 procedure LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
640 procedure LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
641 procedure LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
642 procedure LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
643 procedure LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
644 function TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
645 procedure FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
646 procedure FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
647 procedure FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
648 //
649 procedure SetListViewBackGroundColor(value: TColor);
650 procedure BBSMenuItemOnClick( Sender : TObject );
651 /// CoolBar 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
652 procedure SaveCoolBarSettings;
653 procedure SaveMainCoolBarSettings;
654 procedure SaveBoardCoolBarSettings;
655 procedure SaveBrowserCoolBarSettings;
656 /// CoolBar 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
657 procedure LoadCoolBarSettings;
658 /// 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
659 procedure OnMinimize;
660 /// 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
661 procedure OnMinimized;
662 /// TreeView 鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申
663 procedure TreeClick( Node : TTreeNode );
664 /// TreeView 鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申
665 procedure TreeDoubleClick( Node : TTreeNode );
666 /// 鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃? BBS 鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?
667 procedure SetBBSMenu;
668 /// ListColumnPopupMenu 鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃?
669 procedure ListColumnPopupMenuOnClick( Sender : TObject );
670 //! 鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
671 procedure SetSelectWord( const text : string );
672 //鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
673 function GetScreenCursor(): TCursor;
674 //鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
675 procedure SetScreenCursor(Cursor : TCursor);
676 //! 鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申
677 procedure CreateControlThread();
678 //! 鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申
679 procedure CreateBrowsers(count: Integer);
680 //! ActionList鐃緒申GroupIndex鐃緒申鐃緒申鐃緒申
681 procedure GetGroupIndex(ActionList: TActionList);
682 //! ActionList鐃緒申GroupIndex鐃緒申鐃緒申鐃緒申
683 procedure SetGroupIndex(ActionList: TActionList);
684 //! 鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申(鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 or 鐃?鐃緒申JUMP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申DL鐃緒申鐃緒申)
685 procedure OpenThreadItem(Thread: TThreadItem; URL: String);
686 //! ListView鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申
687 procedure RefreshListView(Thread: TThreadItem);
688 //! 鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?
689 procedure ClearThreadRengeAction;
690 //! 鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃緒申
691 procedure UnStoredTaskTray;
692 //! 鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申
693 procedure ShowEditors(nCmdShow: Integer);
694 //! 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申Browser鐃緒申鐃?鐃緒申
695 procedure ReleaseOldestBrowser;
696 //! 鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申
697 procedure AddMenuSameBoardThread(MenuItem: TMenuItem);
698 //! 鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃?
699 procedure SameBoardThreadSubItemOnClick(Sender: TObject);
700 //! 鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申
701 procedure CreateResPopupBrowser;
702 //! 鐃?鐃?鐃?鐃緒申鐃?鐃?鐃?鐃?
703 function isValidFile(FileName: String) : boolean;
704 //! ListView鐃緒申D&D鐃緒申鐃緒申鐃緒申鐃緒申
705 procedure AcceptDropFiles(var Msg: TMsg);
706 //! 鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申
707 procedure UpdateListView();
708 //! 鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
709 procedure LoadIcon();
710 //! 鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申
711 procedure LoadPopupMenu();
712 protected
713 procedure CreateParams(var Params: TCreateParams); override;
714 procedure WndProc(var Message: TMessage); override;
715 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
716 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
717 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
718 public
719 { Public 鐃緒申鐃緒申 }
720 LastRoundTime: TDateTime;
721 BrowserNullTab: TBrowserRecord;
722 FControlThread: TThreadControl;
723 FIconData : TNotifyIconData;
724 procedure MoveToURL(const inURL: string; KeyMask: Boolean = False);
725 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
726 procedure ReloadBBS;
727 function GetHttpState: Boolean;
728 procedure SetEnabledCloseButton(Enabled: Boolean);
729 function GetTreeNode(Data: TObject): TTreeNode;
730 procedure ListViewAllSelect;
731 property ListStyle: TViewStyle read FListStyle write FListStyle;
732 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
733 property ViewType: TGikoViewType read FViewType write FViewType;
734 property NameCookie: string read FNameCookie write FNameCookie;
735 property MailCookie: string read FMailCookie write FMailCookie;
736 property ClickNode: TTreeNode read FClickNode write FClickNode;
737 property TreeType: TGikoTreeType read FTreeType write FTreeType;
738 property ActiveContent: TBrowserRecord read FActiveContent write FActiveContent;
739 property ResRangeMenuSelect: Longint read FResRangeMenuSelect write FResRangeMenuSelect;
740 property SelectResWord : string read FSelectResWord write FSelectResWord;
741 property BrowserSizeWidth: Integer read FBrowserSizeWidth write FBrowserSizeWidth;
742 property BrowserSizeHeight: Integer read FBrowserSizeHeight write FBrowserSizeHeight;
743 property SearchDialog: TSearchDialog read FSearchDialog write FSearchDialog;
744 property ToolBarSettingSender : TToolBarSettingSenderType
745 read FToolBarSettingSender write FToolBarSettingSender;
746 property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
747 property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
748 property WorkCount: Integer read FWorkCount write FWorkCount;
749 property UpdateExePath: string read FUpdateExePath write FUpdateExePath;
750 property UpdateExeArgs: string read FUpdateExeArgs write FUpdateExeArgs;
751
752 procedure SetContent(inThread: TBrowserRecord);
753 function GetActiveContent(popup :Boolean = false): TThreadItem;
754 function GetActiveList: TObject;
755
756 procedure SetListViewType(AViewType: TGikoViewType); overload;
757 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
758 procedure PlaySound(SoundEventName: string);
759 procedure ShowBBSTree( inBBS : TBBS );
760 procedure ShowBBSTreeOld( inBBS : TBBS );
761 procedure ShowHistoryTree;
762 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
763 procedure SetBrowserTabState;
764 procedure SetToolBarPopup;
765 procedure ShowFavoriteAddDialog( Item : TObject );
766 procedure FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
767 procedure RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
768 property ListViewBackGroundColor: TColor read FListViewBackGroundColor write SetListViewBackGroundColor;
769 property UseOddResOddColor : Boolean read FUseOddResOddColor write FUseOddResOddColor;
770 property OddColor : TColor read FOddColor write FOddColor;
771 //! 鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申
772 property KokoPopupThreadItem : TThreadItem read FKokoPopupThreadItem;
773
774 function FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
775 procedure OnPlugInMenuItem( Sender : TObject );
776 procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
777 /// ListView 鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申 KuroutSetting鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
778 procedure ActiveListColumnSave;
779 procedure SetActiveList(Obj: TObject);
780 property ActiveList: TObject read GetActiveList write SetActiveList;
781 /// CoolBar 鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申
782 procedure CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
783 //鐃緒申鐃緒申ID鐃緒申鐃緒申鐃緒申鐃?鐃緒申
784 procedure IndividualAbonID(Atype : Integer);
785 //鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申
786 procedure IndividualAbon(Atag, Atype : Integer);
787 //鐃緒申鐃緒申ID鐃緒申NG鐃緒申鐃?鐃?鐃緒申鐃?鐃?
788 procedure AddIDtoNGWord(invisible : boolean);
789 //鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申 true:鐃?鐃緒申鐃緒申鐃?鐃? false:鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申
790 procedure RepaintAllTabsBrowser();
791 //鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申
792 procedure SetLinkBar;
793 procedure FavoriteBrowseFolder( node: TTreeNode );
794 //鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?
795 procedure DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
796 //鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?
797 procedure DownloadList(Board: TBoard; ForceDownload: Boolean = False);
798 //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
799 procedure DeleteHistory( threadItem: TThreadItem );
800 //鐃?鐃?鐃緒申鐃緒申鐃緒申 鐃?鐃緒申鐃?鐃?鐃?鐃緒申
801 procedure DeleteTab(ThreadItem: TThreadItem); overload;
802 //鐃?鐃?鐃緒申鐃緒申鐃緒申 鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申
803 procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
804 // 鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?
805 procedure DeleteTab(index, selectIndex: Integer); overload;
806 //鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申
807 procedure BrowserMovement(const AName: string); overload;
808 //鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申
809 procedure BrowserMovement(scroll: Integer); overload;
810 //Application鐃緒申MainForm鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
811 function GetMainForm(): TComponent;
812 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
813 //! 鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃?
814 procedure OnGestureStart(Sender: TObject);
815 //! 鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申
816 procedure OnGestureMove(Sender: TObject);
817 //! 鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申
818 procedure OnGestureEnd(Sender: TObject);
819 /// 鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
820 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
821 //ListView鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
822 procedure SelectListItem(List: TList);
823 //鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申
824 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
825 //
826 procedure ModifySelectList;
827 //
828 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
829 //
830 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
831 //
832 procedure SetSelectRoundName(Sender: TObject);
833 //
834 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
835 //
836 function WebBrowserClick(Sender: TObject): WordBool;
837 //! 鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
838 procedure SetSelectComboBox();
839
840 //! 鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
841 procedure TaskTrayIconMessage(var Msg : TMsg); message WM_USER + 2010;
842 //! 鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃緒申
843 procedure StoredTaskTray;
844 //! 鐃緒申ID鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃?鐃緒申
845 procedure ShowSameIDAncher(const AID: String);
846 published
847 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
848 end;
849
850 TFavoriteMenuItem = class(TMenuItem)
851 private
852 FData : Pointer;
853 public
854 property Data: Pointer read FData write FData;
855 end;
856
857 TBBSMenuItem = class(TMenuItem)
858 private
859 FData : Pointer;
860 public
861 property Data: Pointer read FData write FData;
862 end;
863
864 TLinkToolButton = class(TToolButton)
865 private
866 FData : Pointer;
867 public
868 property Data: Pointer read FData write FData;
869 end;
870
871 var
872 GikoForm: TGikoForm;
873
874 implementation
875
876 uses
877 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
878 YofUtils, ToolBarUtil, ToolBarSetting,
879 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
880 FavoriteArrange, AddressHistory, Gesture,
881 About, Option, Round, Splash, Sort, ListSelect, Imm,
882 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
883 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
884 InputAssistDataModule, Types, ReplaceDataModule, PopupMenuUtil;
885
886 const
887 BLANK_HTML: string = 'about:blank';
888 BROWSER_COUNT = 5; //鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申
889 //D&D鐃緒申鐃?
890 DandD_THRESHOLD = 5; //D&D鐃緒申鐃緒申鐃?鐃?pixcel)
891 //鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申
892 HTML_FILE_NAME = 'temp_preview.html';
893 //鐃緒申鐃?鐃?鐃?鐃?ID
894 USER_TREECLICK = WM_USER + 2000;
895 USER_RESIZED = WM_USER + 2001;
896 USER_MINIMIZED = WM_USER + 2002;
897 USER_SETLINKBAR = WM_USER + 2003;
898 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
899 USER_TASKTRAY = WM_USER + 2010;
900 {$R *.DFM}
901
902 procedure TGikoForm.CreateParams(var Params: TCreateParams);
903 begin
904 inherited;
905 if FormStyle in [fsNormal, fsStayOnTop] then begin
906 if BorderStyle in [bsSingle, bsSizeable] then begin
907 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
908 Params.WndParent := 0;
909 end;
910 end;
911 end;
912
913 procedure TGikoForm.FormCreate(Sender: TObject);
914 const
915 TVS_NOTOOLTIPS = $0080;
916 var
917 FileName: string;
918 Style: DWORD;
919 msg: string;
920 i: Integer;
921 wp: TWindowPlacement;
922 begin
923 {$IFDEF DEBUG}
924 AllocConsole;
925 Writeln('============================================================');
926 Writeln(' 鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃? 鐃?鐃緒申鐃?鐃?鐃緒申');
927 Writeln('');
928 Writeln(' 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?');
929 Writeln(' 鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申');
930 Writeln('============================================================');
931 {$ENDIF}
932 //try
933 // 鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
934 FCwSave := Get8087CW;
935 if ( AnsiPos('9.0', GikoSys.GetIEVersion()) = 1 ) then begin
936 // IE 9鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申
937 Set8087CW(FCwSave or $0004);
938 end;
939 Sort.SetSortDate(Now());
940
941 FTreeType := gttNone;
942 // 鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
943 FStartUp := true;
944 Application.HookMainWindow(Hook);
945 FIsIgnoreResize := rtResizing;
946 //ActionList鐃緒申GuoupIndex鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?0鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃?
947 //(鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申Down鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申GroupIndex鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申)
948 //鐃緒申鐃緒申鐃緒申鐃緒申Set鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?Action鐃緒申Checked鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?
949 GetGroupIndex(GikoDM.GikoFormActionList);
950 FSearchDialog := nil;
951 FResPopupBrowser := nil;
952 CreateBrowsers(BROWSER_COUNT);
953 FIconData.uID := 0;
954 FUpdateExePath := '';
955 FUpdateExeArgs := '';
956
957 //鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃?
958 SetMenuFont;
959
960 //鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申
961 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
962
963 // 鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
964 LoadIcon;
965
966 //鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
967 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
968
969 EnabledCloseButton := True;
970
971 //鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申
972 ListView.ViewStyle := GikoSys.Setting.ListStyle;
973
974 //鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?
975 AnimePanel.Top := 0;
976 AnimePanel.Left := 0;
977
978 //鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
979
980 //鐃?鐃緒申鐃?鐃?鐃?鐃?
981 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
982
983 //鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?
984 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
985 GikoDM.MsgBarVisibleActionExecute(nil);
986 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
987
988 //鐃?鐃?鐃?鐃?鐃?鐃?鐃?
989 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
990 GikoDM.StatusBarVisibleActionExecute(nil);
991
992 //鐃?鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申
993 TreeView.Items.BeginUpdate;
994 FavoriteTreeView.Items.BeginUpdate;
995 ListView.Items.BeginUpdate;
996 try
997 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
998 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
999 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
1000 TreeView.Color := GikoSys.Setting.CabinetBackColor;
1001 FavoriteTreeView.Font.Assign(TreeView.Font);
1002 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
1003
1004 ListView.Font.Name := GikoSys.Setting.ListFontName;
1005 ListView.Font.Size := GikoSys.Setting.ListFontSize;
1006 ListView.Font.Color := GikoSys.Setting.ListFontColor;
1007 ListView.Font.Style := [];
1008 if GikoSys.Setting.ListFontBold then
1009 ListView.Font.Style := [fsbold];
1010 if GikoSys.Setting.ListFontItalic then
1011 ListView.Font.Style := ListView.Font.Style + [fsitalic];
1012
1013 ListViewBackGroundColor := clWhite; // 鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1014 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; // 鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃?
1015 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
1016 FOddColor := GikoSys.Setting.OddColor;
1017
1018 finally
1019 TreeView.Items.EndUpdate;
1020 FavoriteTreeView.Items.EndUpdate;
1021 ListView.Items.EndUpdate;
1022 end;
1023 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
1024 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
1025
1026 //鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1027 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
1028
1029 // 鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申
1030 FResRangeMenuSelect := GikoSys.ResRange;
1031 case GikoSys.ResRange of
1032 Ord( grrAll ):
1033 begin
1034 GikoDM.AllResAction.Execute;
1035 end;
1036 Ord( grrSelect ):
1037 begin
1038 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
1039 GikoDM.SelectResAction.Checked := True;
1040 end;
1041 else
1042 case FResRangeMenuSelect of
1043 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
1044 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
1045 10..65535:
1046 begin
1047 GikoDM.OnlyAHundredResAction.Checked := True;
1048 GikoSys.ResRange := GikoSys.Setting.ResRangeExCount;
1049 end;
1050 end;
1051 end;
1052
1053 // 鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申
1054 case GikoSys.Setting.ThreadRange of
1055 gtrAll:
1056 begin
1057 GikoDM.AllItemAction.Checked := True;
1058 ViewType := gvtAll;
1059 end;
1060 gtrLog:
1061 begin
1062 GikoDM.LogItemAction.Checked := True;
1063 ViewType := gvtLog;
1064 end;
1065 gtrNew:
1066 begin
1067 GikoDM.NewItemAction.Checked := True;
1068 ViewType := gvtNew;
1069 end;
1070 gtrLive:
1071 begin
1072 GikoDM.LiveItemAction.Checked := True;
1073 ViewType := gvtLive;
1074 end;
1075 gtrArch:
1076 begin
1077 GikoDM.ArchiveItemAction.Checked := True;
1078 ViewType := gvtArch;
1079 end;
1080 end;
1081
1082
1083 //鐃?鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?
1084 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1085 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1086 BrowserTab.Font.Style := [];
1087 if GikoSys.Setting.BrowserTabFontBold then
1088 BrowserTab.Font.Style := [fsBold];
1089 if GikoSys.Setting.BrowserTabFontItalic then
1090 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1091
1092 BrowserTab.DoubleBuffered := True;
1093 FDragWFirst := false;
1094 SetContent(BrowserNullTab); //鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申
1095
1096 //鐃?鐃緒申鐃?鐃?鐃?鐃?
1097 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1098
1099 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1100 GikoDM.BrowserTabTopAction.Checked := True;
1101 end else begin
1102 GikoDM.BrowserTabBottomAction.Checked := True;
1103 end;
1104
1105 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1106 GikoDM.BrowserTabTabStyleAction.Checked := True;
1107 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1108 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1109 end else begin
1110 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1111 end;
1112
1113 //鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申
1114 ProgressBar.Parent := StatusBar;
1115 ProgressBar.Top := 2;
1116 ProgressBar.Left := 0;
1117 ProgressBar.Width := StatusBar.Panels[0].Width;
1118 ProgressBar.Height := StatusBar.Height - 2;
1119 ProgressBar.Position := 0;
1120
1121 // 鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?(ReadBoardFile, LoadHistory 鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申)
1122 InitializeBoardPlugIns;
1123
1124 // 鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申(ReadFavorite 鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申)
1125 GikoSys.ListBoardFile;
1126 //鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申
1127 try
1128 // 鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申
1129 if (SplashWindow <> nil) then begin
1130 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1131 end;
1132 except
1133 end;
1134 // 鐃緒申鐃緒申鐃緒申鐃緒申BBS鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1135 for i := Length(BBSs) - 1 downto 0 do begin
1136 if not BBSs[i].IsBoardFileRead then
1137 GikoSys.ReadBoardFile(BBSs[i]);
1138
1139 if SplashWindow <> nil then begin
1140 SplashWindow.ProgressBar.StepBy(20);
1141 SplashWindow.Update;
1142 end;
1143 end;
1144
1145 //鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申
1146 RoundList := TRoundList.Create;
1147 RoundList.LoadRoundBoardFile;
1148 RoundList.LoadRoundThreadFile;
1149
1150 //TreeView鐃緒申鐃緒申鐃緒申鐃?鐃緒申ToolTip鐃緒申鐃緒申鐃?鐃緒申
1151 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1152 Style := Style or TVS_NOTOOLTIPS;
1153 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1154
1155 // 鐃?鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1156 TreeView.Align := alClient;
1157 FavoriteTreeView.Align := alClient;
1158 FavoriteTreeView.Visible := False;
1159
1160 // 鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申
1161 SetBBSMenu;
1162
1163 //鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申
1164 wp.length := sizeof(wp);
1165 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1166 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1167 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1168 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1169 wp.showCmd := SW_HIDE;
1170 SetWindowPlacement(Handle, @wp);
1171 //Self.Update;
1172
1173 if GikoSys.Setting.WindowMax then
1174 WindowState := wsMaximized;
1175
1176 //鐃?鐃?鐃?鐃?鐃緒申
1177 try
1178 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1179 if FileExists(FileName) then
1180 Animate.FileName := FileName;
1181 except
1182 end;
1183
1184 //鐃?鐃?鐃?鐃?
1185 FNameCookie := '';
1186 FMailCookie := '';
1187
1188 //鐃?鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申
1189 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1190 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1191
1192
1193 // 鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃?(LoadHistory 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申)
1194 FHistoryList := THistoryList.Create;
1195
1196 // 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1197 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1198 TreeView, FTreeType);
1199
1200 //鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1201 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1202 FavoriteDM.ReadFavorite;
1203
1204 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1205 GikoDM.ArrangeAction.Execute;
1206
1207 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1208 case GikoSys.Setting.ListWidthState of
1209 glsMax: begin
1210 ViewPanel.Width := 1;
1211 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1212 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1213 end;
1214 glsMin: begin
1215 ViewPanel.Width := GikoSys.Setting.ListWidth;
1216 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1217 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1218 end;
1219 else begin
1220 ViewPanel.Width := GikoSys.Setting.ListWidth;
1221 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1222 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1223 end;
1224 end;
1225 end else begin
1226 case GikoSys.Setting.ListHeightState of
1227 glsMax: begin
1228 ViewPanel.Height := 1;
1229 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1230 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1231 end;
1232 glsMin: begin
1233 ViewPanel.Height := GikoSys.Setting.ListHeight;
1234 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1235 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1236 end;
1237 else begin
1238 ViewPanel.Height := GikoSys.Setting.ListHeight;
1239 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1240 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1241 end;
1242 end;
1243 end;
1244
1245 //鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃?
1246 CreateControlThread();
1247
1248 // 鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1249 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1250
1251 //鐃?鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申
1252 SetBrowserTabState;
1253
1254 BrowserBoardNameLabel.Caption := '';
1255 BrowserNameLabel.Caption := '';
1256 FWorkCount := 0;
1257
1258 FTabHintIndex := -1;
1259
1260 //鐃?鐃?鐃緒申鐃?鐃?Wrapable
1261 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1262 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1263
1264 MakeDefaultINIFile();
1265 //鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1266 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1267 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1268 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1269 SetToolBarPopup;
1270
1271 //ListToolBar鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申ComboBox鐃緒申鐃?鐃?
1272 SetSelectComboBox();
1273
1274 //鐃?鐃?鐃緒申鐃?鐃?鐃?
1275 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1276
1277 //鐃緒申鐃緒申鐃?鐃?鐃?
1278 SetLinkBar;
1279 //鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申FormShow鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1280
1281 //鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申
1282 if not FileExists(GikoSys.GetBoardFileName) then begin
1283 msg := '鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申' + #13#10#13#10
1284 + '鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申' + #13#10
1285 + '鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?';
1286 MsgBox(SplashWindow.Handle, msg, '鐃?鐃?鐃?鐃?', MB_OK or MB_ICONINFORMATION);
1287 GikoDM.NewBoardAction.Execute;
1288 end;
1289
1290 //鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1291 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1292
1293 //鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申
1294 // FLastRoundTime := 0;
1295
1296 ListView.OnData := TListViewUtils.ListViewData;
1297
1298 // 鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申
1299 CabinetVisible( False );
1300 if GikoSys.Setting.CabinetVisible then begin
1301 i := CabinetSelectPopupMenu.Items.Count - 1;
1302 if GikoSys.Setting.CabinetIndex = i - 1 then
1303 GikoDM.CabinetHistoryAction.Execute
1304 else if GikoSys.Setting.CabinetIndex = i then
1305 GikoDM.CabinetFavoriteAction.Execute
1306 else begin
1307 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1308 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1309 // 鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 2
1310 FIsIgnoreResize := rtResizing;
1311 GikoDM.CabinetBBSAction.Execute;
1312 end;
1313 end else begin
1314 ShowBBSTreeOld( BBSs[ 0 ] );
1315 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1316 end;
1317
1318 //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?
1319 for i := 1 to ParamCount do begin
1320 MoveToURL(ParamStr(i));
1321 end;
1322
1323 GikoDM.RepaintStatusBar;
1324 StatusBarResize(Sender);
1325
1326 // dummy1.Caption := ItemReservPMenu.Caption;
1327 // dummy1.Hint := ItemReservPMenu.Hint;
1328 // 鐃?鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申
1329 PopupMenuUtil.ReadSetting(GikoDM.GikoFormActionList, BrowserTabPopupMenu);
1330 // 鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?
1331 MouseGesture := TMouseGesture.Create;
1332
1333 {$IFDEF SPAM_FILTER_ENABLED}
1334 // 鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申
1335 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1336 {$ENDIF}
1337
1338 //2ch鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申
1339 GikoSys.SetGikoMessage;
1340
1341 //鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申
1342 if GikoSys.Setting.AutoLogin then
1343 GikoDM.LoginAction.Execute;
1344
1345 if GikoSys.Setting.BeAutoLogin then
1346 GikoDM.BeLogInOutAction.Execute;
1347
1348 //鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1349 FavoriteAddToolButton.Caption := '鐃緒申鐃緒申...';
1350 AntiIndivAbonMenuItem.Caption := '鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申';
1351
1352 //鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申
1353 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1354
1355 //鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1356 ReplaceDM.LoadFromFile(GikoSys.GetReplaceFileName);
1357
1358 //鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃?
1359 ResPopupClearTimer.Interval := GikoSys.Setting.RespopupWait;
1360
1361 // D&D鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1362 DragAcceptFiles(ListView.Handle, True);
1363
1364
1365 // 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?
1366 if (FavoriteDM.AbEnd) then begin
1367 GikoUtil.MsgBox(Self.Handle,
1368 '鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?'#13#10 +
1369 '鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?config/' + Favorite.FAVORITE_FILE_NAME +
1370 ' 鐃緒申 config/~' + Favorite.FAVORITE_FILE_NAME + '(鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申)鐃緒申'#13#10 +
1371 '鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?',
1372 '鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申');
1373 GikoDM.GikoFolderOpenAction.Execute;
1374 Self.Close;
1375 end;
1376
1377 end;
1378
1379 // CoolBar 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1380 procedure TGikoForm.SaveCoolBarSettings;
1381 begin
1382
1383 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1384 Exit;
1385 SaveMainCoolBarSettings;
1386 SaveBoardCoolBarSettings;
1387 SaveBrowserCoolBarSettings;
1388
1389 end;
1390 procedure TGikoForm.SaveMainCoolBarSettings;
1391 var
1392 i : Integer;
1393 CoolSet : TCoolSet;
1394 begin
1395 //鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申(Main)
1396 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1397 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1398 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1399 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1400 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1401 end;
1402 end;
1403 procedure TGikoForm.SaveBoardCoolBarSettings;
1404 var
1405 i : Integer;
1406 CoolSet : TCoolSet;
1407 begin
1408 //鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申(Board)
1409 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1410 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1411 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1412 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1413 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1414 end;
1415 end;
1416 procedure TGikoForm.SaveBrowserCoolBarSettings;
1417 var
1418 i : Integer;
1419 CoolSet : TCoolSet;
1420 begin
1421 //鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申(Browser)
1422 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1423 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1424 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1425 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1426 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1427 end;
1428 end;
1429 // CoolBar 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1430 procedure TGikoForm.LoadCoolBarSettings;
1431 var
1432 i : Integer;
1433 CoolSet : TCoolSet;
1434 begin
1435
1436 //鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申(Main)
1437 MainCoolBar.Bands.BeginUpdate;
1438 try
1439 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1440 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1441 CoolSet := GikoSys.Setting.MainCoolSet[i];
1442 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1443 FIsIgnoreResize := rtNone;
1444 SaveCoolBarSettings;
1445 Exit;
1446 end;
1447 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1448 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1449 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1450 end;
1451 finally
1452 MainCoolBar.Bands.EndUpdate;
1453 end;
1454
1455 //鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申(Board)
1456 ListCoolBar.Bands.BeginUpdate;
1457 try
1458 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1459 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1460 CoolSet := GikoSys.Setting.ListCoolSet[i];
1461 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1462 FIsIgnoreResize := rtNone;
1463 SaveCoolBarSettings;
1464 Exit;
1465 end;
1466 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1467 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1468 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1469 end;
1470 finally
1471 ListCoolBar.Bands.EndUpdate;
1472 end;
1473
1474 //鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申(Browser)
1475 BrowserCoolBar.Bands.BeginUpdate;
1476 try
1477 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1478 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1479 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1480 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1481 FIsIgnoreResize := rtNone;
1482 SaveCoolBarSettings;
1483 Exit;
1484 end;
1485 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1486 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1487 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1488 end;
1489 finally
1490 BrowserCoolBar.Bands.EndUpdate;
1491 end;
1492
1493 end;
1494 //
1495 procedure TGikoForm.FormShow(Sender: TObject);
1496 var
1497 item : TThreadItem;
1498 begin
1499 if FStartUp then begin
1500 FStartUp := false;
1501 ShowWindow(Application.Handle, SW_HIDE);
1502 //FormCreate鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申FormShow鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1503 //鐃?鐃?鐃緒申鐃?鐃?鐃?鐃緒申
1504 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1505 GikoDM.StdToolBarVisibleActionExecute( nil );
1506 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1507 GikoDM.AddressBarVisibleActionExecute( nil );
1508 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1509 GikoDM.LinkBarVisibleActionExecute( nil );
1510 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1511 GikoDM.ListToolBarVisibleActionExecute( nil );
1512 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1513 GikoDM.ListNameBarVisibleActionExecute( nil );
1514 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1515 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1516 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1517 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1518
1519 // CoolBar 鐃緒申鐃緒申
1520 LoadCoolBarSettings;
1521
1522 //鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1523 // ResetBandInfo( ListCoolBar, ListToolBar );
1524 FIsIgnoreResize := rtNone;
1525
1526 //ActionList鐃緒申GroupIndex鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1527 SetGroupIndex(GikoDM.GikoFormActionList);
1528
1529 //FormCrete鐃緒申鐃緒申鐃緒申鐃緒申鐃?
1530 if GikoSys.Setting.TabAutoLoadSave then begin
1531 GikoDM.TabsOpenAction.Tag := 1;
1532 GikoDM.TabsOpenAction.Execute;
1533 GikoDM.TabsOpenAction.Tag := 0;
1534 if (GikoSys.Setting.LastCloseTabURL <> '') then begin
1535 if ( FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
1536 while (FActiveContent.Browser.ReadyState <> READYSTATE_COMPLETE) and
1537 (FActiveContent.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
1538 // 鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?
1539 Sleep(1);
1540 end;
1541 end;
1542 item := BBSsFindThreadFromURL( GikoSys.Setting.LastCloseTabURL );
1543 GikoSys.Setting.LastCloseTabURL := '';
1544 if (item <> nil) and (item.IsLogFile) then begin
1545 OpenThreadItem(item, item.URL);
1546 end;
1547 //ShowWindow(Self.Handle, SW_SHOW);
1548 end;
1549 end;
1550 end;
1551 end;
1552
1553 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1554 begin
1555 // if GikoForm.WindowState <> wsMinimized then
1556 // SaveCoolBarSettings;
1557 CanClose := True;
1558 if ( GikoSys.Setting.ShowDialogForEnd ) and
1559 (MessageDlg('鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?', mtConfirmation,[mbOk, mbCancel], 0) = mrCancel ) then begin
1560 CanClose := false;
1561 Exit;
1562 end;
1563
1564 GikoSys.Setting.LastCloseTabURL := '';
1565 if GikoSys.Setting.TabAutoLoadSave then begin
1566 GikoDM.TabsSaveAction.Execute;
1567 if (GetActiveContent <> nil) and
1568 (GetActiveContent.IsLogFile) then begin
1569 GikoSys.Setting.LastCloseTabURL := GetActiveContent.URL;
1570 end;
1571 end;
1572
1573 if (SearchDialog <> nil) then begin
1574 if (SearchDialog.Visible) then begin
1575 SearchDialog.Close;
1576 end;
1577 try
1578 SearchDialog.Release;
1579 except
1580 end;
1581 SearchDialog := nil;
1582 end;
1583
1584 //鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?EditorForm鐃緒申鐃緒申鐃緒申鐃緒申
1585 GikoDM.CloseAllEditorAction.Execute;
1586
1587 Application.UnhookMainWindow(Hook);
1588 //鐃?鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申
1589 FControlThread.DownloadAbort;
1590 FControlThread.Terminate;
1591
1592 //OnDestory鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申OnCloseQuery鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1593 SaveSettingAll();
1594
1595 Application.Terminate;
1596 end;
1597
1598 procedure TGikoForm.SaveSettingAll();
1599 var
1600 wp : TWindowPlacement;
1601 WindowPlacement: TWindowPlacement;
1602 begin
1603 try
1604 ActiveListColumnSave;
1605 except
1606 end;
1607
1608 try
1609 WindowPlacement.length := SizeOf(TWindowPlacement);
1610 GetWindowPlacement(Self.Handle, @WindowPlacement);
1611
1612 //鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申
1613 wp.length := sizeof(wp);
1614 GetWindowPlacement(Handle, @wp);
1615 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1616 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1617 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1618 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1619 GikoSys.Setting.WindowMax := (WindowState = wsMaximized) or
1620 (WindowPlacement.flags = WPF_RESTORETOMAXIMIZED);
1621 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1622 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1623 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1624 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1625 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1626 if GikoDM.ArrangeAction.Checked then
1627 GikoSys.Setting.ListOrientation := gloVertical
1628 else
1629 GikoSys.Setting.ListOrientation := gloHorizontal;
1630 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1631 except
1632 end;
1633
1634 try
1635 // 鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申
1636 if not GikoSys.Setting.ResRangeHold then
1637 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1638 except
1639 end;
1640 //鐃緒申鐃緒申winodw鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申CoolBar鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申
1641 SaveCoolBarSettings;
1642 GikoSys.Setting.WriteWindowSettingFile;
1643 // 鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1644 GikoSys.Setting.WriteNameMailSettingFile;
1645 // 鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1646 GikoSys.Setting.WriteBoukenSettingFile;
1647 //鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1648 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1649
1650 //鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1651 try
1652 //FavoriteDM鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申
1653 // 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1654 if not (FavoriteDM.AbEnd) then begin
1655 FavoriteDM.WriteFavorite;
1656 end;
1657 except
1658 end;
1659
1660 //鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申
1661 try
1662 //AddressHistoryDM鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?
1663 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1664 except
1665 end;
1666
1667 //鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申
1668 try
1669 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1670 except
1671 end;
1672
1673 //鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申
1674 try
1675 RoundList.SaveRoundFile;
1676 except
1677 end;
1678
1679 // 鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申
1680 if (FIconData.uID <> 0) then begin
1681 Shell_NotifyIcon(NIM_DELETE, @FIconData);
1682 end;
1683
1684 end;
1685
1686 procedure TGikoForm.FormDestroy(Sender: TObject);
1687 var
1688 i : Integer;
1689 tmpBool : Boolean;
1690 begin
1691 //鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申CoolBar鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申
1692 //鐃緒申鐃緒申鐃緒申鐃?OnDestroy鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1693 // 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1694 if WindowState <> wsNormal then begin
1695 WindowState := wsNormal;
1696 try
1697 SaveCoolBarSettings;
1698 GikoSys.Setting.WriteWindowSettingFile;
1699 except
1700 end;
1701 end;
1702
1703 // 鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申
1704 try
1705 if GikoSys.Setting.GestureEnabled then begin
1706 MouseGesture.OnGestureStart := nil;
1707 MouseGesture.OnGestureMove := nil;
1708 MouseGesture.OnGestureEnd := nil;
1709 end;
1710 MouseGesture.Clear;
1711 MouseGesture.UnHook;
1712 MouseGesture.Free;
1713 except
1714 end;
1715
1716 //鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申
1717 try
1718 FavoriteDM.Clear;
1719 except
1720 end;
1721
1722 try
1723 //鐃?鐃?鐃?鐃緒申鐃?鐃?
1724 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1725 GikoSys.Setting.ShowDialogForAllTabClose := false;
1726 GikoDM.AllTabCloseAction.Execute;
1727 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1728 except
1729 end;
1730
1731 try
1732 for i := FBrowsers.Count - 1 downto 0 do begin
1733 GikoSys.ShowRefCount('browser' + IntToStr(i), TWebBrowser(FBrowsers[i]).ControlInterface);
1734 GikoSys.ShowRefCount('document' + IntToStr(i), TWebBrowser(FBrowsers[i]).ControlInterface.Document);
1735 end;
1736
1737 for i := FBrowsers.Count - 1 downto 0 do begin
1738 TWebBrowser(FBrowsers[i]).Free;
1739 end;
1740 FBrowsers.Clear;
1741 FBrowsers.Capacity := 0;
1742 finally
1743 FBrowsers.Free;
1744 end;
1745
1746 try
1747 if BrowserNullTab <> nil then begin
1748 BrowserNullTab.Browser := nil; {*BrowserNullTab鐃緒申Browser鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?
1749 *鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申Free鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?
1750 *}
1751 BrowserNullTab.Free;
1752 end;
1753 except
1754 end;
1755
1756 try
1757 TreeView.Items.BeginUpdate;
1758 TreeView.Items.GetFirstNode.Free;
1759 TreeView.Items.Clear;
1760 TreeView.Items.EndUpdate;
1761 except
1762 end;
1763
1764 try
1765 try
1766 FHistoryList.Clear;
1767 except
1768 end;
1769 finally
1770 FHistoryList.Free;
1771 end;
1772
1773
1774 try
1775 try
1776 RoundList.Clear;
1777 except
1778 end;
1779 finally
1780 RoundList.Free;
1781 end;
1782
1783 try
1784 try
1785 //FControlThread.DownloadAbort;
1786 FControlThread.Terminate;
1787 FControlThread.WaitFor;
1788 except
1789 end;
1790 finally
1791 FControlThread.Free;
1792 end;
1793 // 鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申
1794 for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
1795 GikoForm.PlugInMenu.items[i].Free;
1796 end;
1797 GikoForm.PlugInMenu.Clear;
1798
1799
1800 // TBBS 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 TCategory, TBoard, TThreadItem 鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申
1801 // TBoard, TThreadItem 鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申
1802 // BoardPluteIns 鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申
1803 for i := Length(BoardGroups) - 1 downto 0 do begin
1804 //BoardGroups[i].Clear;
1805 BoardGroups[i].Free;
1806 end;
1807
1808 try
1809 for i := Length( BBSs ) - 1 downto 0 do begin
1810 if BBSs[ i ] <> nil then
1811 BBSs[ i ].Free;
1812 BBSs[ i ] := nil;
1813 end;
1814 DestorySpecialBBS(BoardGroup.SpecialBBS);
1815 except
1816 end;
1817
1818 try
1819 if FEvent <> nil then
1820 FEvent.Free;
1821
1822 try
1823 if FResPopupBrowser <> nil then begin
1824 TOleControl(FResPopupBrowser).Parent := nil;
1825 FResPopupBrowser.Free;
1826 end;
1827
1828 except
1829 end;
1830 //Preview鐃?鐃緒申
1831 if FPreviewBrowser <> nil then begin
1832 FPreviewBrowser.Free;
1833 FPreviewBrowser := nil;
1834 end;
1835 except
1836 end;
1837
1838 // Update鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申
1839 if FileExists(FUpdateExePath) then begin
1840 // 鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?
1841 GikoSys.CreateProcess(FUpdateExePath, FUpdateExeArgs);
1842 end;
1843 // 鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1844 Set8087CW(FCwSave);
1845 end;
1846
1847 // 鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃? BBS 鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?
1848 procedure TGikoForm.SetBBSMenu;
1849 var
1850 i : Integer;
1851 item : TBBSMenuItem;
1852 begin
1853
1854 // 鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申
1855 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1856 try
1857 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1858 CabinetSelectPopupMenu.Items[ i ].Free;
1859 CabinetMenu.Items[ i ].Free;
1860 BBSSelectPopupMenu.Items[ i ].Free;
1861 end;
1862 except
1863 end;
1864 end;
1865
1866 // 鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申
1867 for i := Length( BBSs ) - 1 downto 0 do begin
1868 try
1869 item := TBBSMenuItem.Create( PopupMenu );
1870 item.Caption := BBSs[ i ].Title;
1871 item.Data := BBSs[ i ];
1872 item.OnClick := BBSMenuItemOnClick;
1873 CabinetSelectPopupMenu.Items.Insert( 0, item );
1874 item := TBBSMenuItem.Create( PopupMenu );
1875 item.Caption := BBSs[ i ].Title;
1876 item.Data := BBSs[ i ];
1877 item.OnClick := BBSMenuItemOnClick;
1878 CabinetMenu.Insert( 0, item );
1879 item := TBBSMenuItem.Create( PopupMenu );
1880 item.Caption := BBSs[ i ].Title;
1881 item.Data := BBSs[ i ];
1882 item.OnClick := BBSMenuItemOnClick;
1883 BBSSelectPopupMenu.Items.Insert( 0, Item );
1884 except
1885 end;
1886 end;
1887
1888 end;
1889
1890 procedure TGikoForm.ReloadBBS;
1891 var
1892 i : Integer;
1893 tmpBool: Boolean;
1894 begin
1895 LockWindowUpdate(Self.Handle);
1896
1897 //鐃?鐃?鐃?鐃緒申鐃?鐃?
1898 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1899 GikoSys.Setting.ShowDialogForAllTabClose := false;
1900 GikoDM.AllTabCloseAction.Execute;
1901 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1902 SetContent(BrowserNullTab);
1903 //TreeView鐃?鐃緒申鐃?鐃?BBS2ch.Free鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申XP鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃?
1904 TreeView.Items.Clear;
1905
1906 //鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申
1907 try
1908 RoundList.SaveRoundFile;
1909 except
1910 end;
1911 //鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申
1912 try
1913 RoundList.Clear;
1914 except
1915 end;
1916
1917 //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申
1918 try
1919 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1920 FHistoryList.Clear;
1921 except
1922 end;
1923
1924 //鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申
1925 try
1926 FavoriteDM.WriteFavorite;
1927 FavoriteDM.Clear;
1928 except
1929 end;
1930
1931 //鐃緒申鐃?鐃?鐃緒申鐃?PLUGIN鐃緒申鐃?鐃緒申
1932 for i := Length(BoardGroups) - 1 downto 0 do begin
1933 try
1934 BoardGroups[i].Free;
1935 except
1936 end;
1937 end;
1938 //BBS鐃?鐃緒申
1939 try
1940 for i := Length( BBSs ) - 1 downto 0 do begin
1941 if BBSs[ i ] <> nil then
1942 BBSs[ i ].Free;
1943 BBSs[ i ] := nil;
1944 end;
1945 except
1946 end;
1947
1948 ActiveList := nil;
1949
1950 FTreeType := gttNone;
1951
1952 //============鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申================================//
1953
1954 // 鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?(ReadBoardFile, LoadHistory 鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申)
1955 InitializeBoardPlugIns;
1956
1957 GikoSys.ListBoardFile; //鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申
1958
1959 // 鐃緒申鐃緒申鐃緒申鐃緒申BBS鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1960 for i := Length(BBSs) - 1 downto 0 do begin
1961 if not BBSs[i].IsBoardFileRead then
1962 GikoSys.ReadBoardFile(BBSs[i]);
1963 end;
1964
1965 // BBS 鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃?
1966 SetBBSMenu;
1967
1968 ShowBBSTree( BBSs[ 0 ] );
1969
1970 // 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1971 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1972 TreeView, FTreeType);
1973
1974 //鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1975 FavoriteDM.ReadFavorite;
1976
1977 SetLinkBar;
1978
1979 //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1980 RoundList.LoadRoundBoardFile;
1981 RoundList.LoadRoundThreadFile;
1982
1983 LockWindowUpdate(0);
1984 end;
1985
1986 {!
1987 \todo 鐃緒申鐃緒申 IE 7 鐃緒申鐃緒申 about:.. 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1988 (IE 7 鐃緒申 about:.. 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申)
1989 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1990 }
1991 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1992 var
1993 p: TPoint;
1994 s: string;
1995 tmp2: string;
1996 URL: string;
1997 ATitle: Boolean;
1998
1999 threadItem : TThreadItem;
2000 board : TBoard;
2001 Protocol, Host, Path, Document, Port, Bookmark: string;
2002
2003 wkInt: Integer;
2004 wkIntSt: Integer;
2005 wkIntTo: Integer;
2006 ActiveFileName: string;
2007 e: IHTMLElement;
2008 Ext: string;
2009 PathRec: TPathRec;
2010 Text2: string;
2011 cResPopup: TResPopupBrowser;
2012 senderBrowser :TWebBrowser;
2013 doc: IHTMLDocument2;
2014 begin
2015 // 鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申 about:blank.. 鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2016 // IE 7 鐃緒申鐃緒申 about:blank.. 鐃緒申鐃緒申鐃緒申鐃緒申 about:.. 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申(鐃緒申鐃緒申鐃緒申鐃緒申)
2017 if Pos('about:..', Text) = 1 then
2018 Text2 := 'about:blank..' + Copy( Text, Length('about:..')+1, Length(Text) )
2019 else
2020 Text2 := Text;
2021
2022 if not( TObject(Sender) is TWebBrowser )then
2023 Exit;
2024
2025 senderBrowser := TWebBrowser(Sender);
2026 doc := senderBrowser.ControlInterface.Document as IHTMLDocument2;
2027
2028 try
2029 try
2030 if ((not senderBrowser.Busy) and Assigned(doc)) then begin
2031 if LowerCase(doc.charset) <> 'shift_jis' then begin
2032 doc.charset := 'shift_jis';
2033 end;
2034 end;
2035 except
2036 end;
2037 finally
2038 end;
2039
2040 if PreviewTimer.Enabled then
2041 PreviewTimer.Enabled := False;
2042
2043 Application.CancelHint;
2044
2045 try
2046 if GetActiveContent <> nil then
2047 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
2048 else
2049 ActiveFileName := '';
2050 except
2051 FActiveContent := nil;
2052 Exit;
2053 end;
2054
2055 // 鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申
2056 if (StatusBar.Panels[1].Text = Text2) then begin
2057 if Text2 = '' then begin
2058 if FResPopupBrowser <> nil then begin
2059 if not(Sender is TResPopupBrowser) then
2060 FResPopupBrowser.Clear
2061 else begin
2062 TResPopupBrowser(Sender).ChildClear;
2063 end;
2064 end;
2065 end;
2066 Exit;
2067 end;
2068 StatusBar.Panels[1].Text := Text2;
2069
2070
2071 if FPreviewBrowser <> nil then
2072 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2073
2074 if FResPopupBrowser <> nil then begin
2075 if not(Sender is TResPopupBrowser) then begin
2076 if ((doc <> nil) and (FResPopupBrowser.Visible)) then begin
2077 if ResPopupClearTimer.Interval > 0 then begin
2078 ResPopupClearTimer.Enabled := True;
2079 ResPopupClearTimer.Tag := 0;
2080 end else begin
2081 FResPopupBrowser.Clear;
2082 end;
2083 end;
2084 end else begin
2085 if ResPopupClearTimer.Interval > 0 then begin
2086 ResPopupClearTimer.Enabled := True;
2087 ResPopupClearTimer.Tag := 1;
2088 end else begin
2089 TResPopupBrowser(Sender).ChildClear;
2090 end;
2091 end;
2092 end;
2093 cResPopup := nil;
2094
2095 if not(Sender is TResPopupBrowser) then
2096 if not GikoSys.Setting.UnActivePopup then
2097 if not GikoForm.Active then
2098 Exit;
2099
2100
2101
2102 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
2103 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
2104 // 鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申URL鐃緒申鐃?鐃?
2105 if (ExtPreviewDM.PreviewURL(Text2)) then begin
2106 Exit;
2107 end;
2108 s := '';
2109 Ext := AnsiLowerCase(ExtractFileExt(Text2));
2110 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
2111 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) or
2112 (Pos('http://www.nicovideo.jp/watch/', Text2) = 1) then begin
2113 if FPreviewBrowser = nil then begin
2114 FPreviewBrowser := TPreviewBrowser.Create(Self);
2115 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2116 TOleControl(FPreviewBrowser).Parent := nil;
2117 end;
2118 FPreviewBrowser.Navigate(BLANK_HTML);//鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?
2119 FPreviewURL := Text2;
2120 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
2121 PreviewTimer.Enabled := True;
2122 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
2123 if (Pos('mailto:', Text2) = 1) and (GikoSys.Setting.RespopupMailTo) then begin
2124 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
2125 //鐃?鐃?鐃?鐃?鐃?鐃緒申 鐃?鐃?鐃?3鐃緒申466鐃緒申鐃緒申鐃緒申鐃緒申
2126 GetCursorPos(p);
2127 p.x := p.x - senderBrowser.ClientOrigin.x;
2128 p.y := p.y - senderBrowser.ClientOrigin.y;
2129 e := doc.elementFromPoint(p.x, p.y);
2130 if (Assigned(e)) then begin
2131 CreateResPopupBrowser;
2132
2133 if not(Sender is TResPopupBrowser) then begin
2134 if (FResPopupBrowser.Visible) then begin
2135 FResPopupBrowser.Clear;
2136 end;
2137 end else begin
2138 TResPopupBrowser(Sender).ChildClear;
2139 end;
2140
2141 cResPopup := FResPopupBrowser.CreateNewBrowser;
2142 tmp2 := Trim(ZenToHan(e.Get_outerText));
2143 if (GikoSys.IsNumeric(tmp2)) then begin
2144 //鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?
2145 wkIntSt := StrToInt64(tmp2);
2146 wkIntTo := StrToInt64(tmp2);
2147 cResPopup.PopupType := gptThread;
2148 HTMLCreater.SetResPopupText(cResPopup, GetActiveContent(true), wkIntSt, wkIntTo, False, False);
2149 end else begin
2150 cResPopup.PopupType := gptRaw;
2151 cResPopup.Title := s;
2152 end;
2153 end;
2154 end else begin
2155 CreateResPopupBrowser;
2156
2157 if not(Sender is TResPopupBrowser) then begin
2158 if (FResPopupBrowser.Visible) then begin
2159 FResPopupBrowser.Clear;
2160 end;
2161 end else begin
2162 TResPopupBrowser(Sender).ChildClear;
2163 end;
2164
2165 threadItem := GetActiveContent(true);
2166 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
2167 PathRec := Gikosys.Parse2chURL2(URL);
2168 if (PathRec.FNoParam) then begin
2169 PathRec.FSt := 1;
2170 PathRec.FTo := 1;
2171 end else begin
2172 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
2173 end;
2174 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
2175
2176 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
2177
2178 URL := GikoSys.GetBrowsableThreadURL( URL );
2179 wkIntSt := PathRec.FSt;
2180 wkIntTo := PathRec.FTo;
2181
2182 if (wkIntSt = 0) and (wkIntTo = 0) then begin
2183 wkIntSt := 1;
2184 wkIntTo := 1;
2185 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
2186 wkIntSt := wkIntTo;
2187 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
2188 wkIntTo := wkIntSt;
2189 end else if wkIntSt > wkIntTo then begin
2190 wkInt := wkIntTo;
2191 wkIntTo := wkIntSt;
2192 wkIntSt := wkInt;
2193 end;
2194 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
2195 ATitle := false
2196 else
2197 ATitle := true;
2198
2199 threadItem := BBSsFindThreadFromURL( URL );
2200
2201 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
2202 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
2203 if board <> nil then begin
2204 if not board.IsThreadDatRead then
2205 GikoSys.ReadSubjectFile( board );
2206 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
2207 end;
2208 end;
2209
2210 if threadItem <> nil then begin
2211 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
2212 //URL鐃緒申鐃緒申鐃緒申鐃緒申/鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?
2213 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
2214 wkIntSt := 1;
2215 wkIntTo := 1;
2216 end;
2217 cResPopup := FResPopupBrowser.CreateNewBrowser;
2218 cResPopup.PopupType := gptThread;
2219 HTMLCreater.SetResPopupText(cResPopup, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
2220 end;
2221 end;
2222 end;
2223 if (cResPopup <> nil) then begin
2224 ResPopupClearTimer.Enabled := False;
2225
2226 if cResPopup.PopupType = gptRaw then begin
2227 if cResPopup.Title <> '' then begin
2228 cResPopup.TitlePopup;
2229 end;
2230 end else begin
2231 if cResPopup.RawDocument <> '' then begin
2232 cResPopup.Popup;
2233 end else if cResPopup.Title <> '' then begin
2234 cResPopup.TitlePopup;
2235 end;
2236 end;
2237 end;
2238 end;
2239 end;
2240
2241 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2242 var
2243 SysMenu: HMenu;
2244 begin
2245 FEnabledCloseButton := Enabled;
2246 SysMenu := GetSystemMenu(Handle, False);
2247
2248 if Enabled then begin
2249 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2250 end else begin
2251 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2252 end;
2253
2254 DrawMenuBar(Handle);
2255 end;
2256
2257 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2258 var AllowChange: Boolean);
2259 begin
2260 //鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2261 // if FTreeType = gtt2ch then
2262 // FSortIndex := -1;
2263 end;
2264
2265 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2266 Shift: TShiftState);
2267 var
2268 pos : TPoint;
2269 begin
2270 if GetActiveList is TBoard then begin
2271 case Key of
2272 VK_BACK:; // UpFolderButtonClick(Sender);
2273 VK_SPACE: ListDoubleClick(Shift);
2274 VK_RETURN: ListClick;
2275 VK_APPS:
2276 begin
2277 if ListView.Selected <> nil then begin
2278 pos.X := ListView.Column[ 0 ].Width;
2279 pos.Y := ListView.Selected.Top;
2280 end else begin
2281 pos.X := ListView.Left;
2282 pos.Y := ListView.Top;
2283 end;
2284 Windows.ClientToScreen( ListView.Handle, pos );
2285 ListPopupMenu.Popup( pos.X, pos.Y );
2286 end;
2287 end;
2288 end else begin // TBBS, TCategory
2289 case Key of
2290 VK_BACK:; // UpFolderButtonClick(Sender);
2291 VK_SPACE: ListClick;
2292 VK_RETURN: ListDoubleClick(Shift);
2293 VK_APPS:
2294 begin
2295 if ListView.Selected <> nil then begin
2296 pos.X := ListView.Column[ 0 ].Width;
2297 pos.Y := ListView.Selected.Top;
2298 end else begin
2299 pos.X := ListView.Left;
2300 pos.Y := ListView.Top;
2301 end;
2302 Windows.ClientToScreen( ListView.Handle, pos );
2303 ListPopupMenu.Popup( pos.X, pos.Y );
2304 end;
2305 end;
2306 end;
2307 end;
2308
2309 function TGikoForm.GetHttpState: Boolean;
2310 begin
2311 Result := FHttpState;
2312 end;
2313
2314 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2315 Column: TListColumn);
2316 var
2317 id, idx : Integer;
2318 orderList : TList;
2319 vSortIndex : Integer;
2320 vSortOrder : Boolean;
2321 begin
2322 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2323 if TObject( FActiveList ) is TBBS then begin
2324 orderList := GikoSys.Setting.BBSColumnOrder;
2325 vSortIndex := GikoSys.Setting.BBSSortIndex;
2326 vSortOrder := GikoSys.Setting.BBSSortOrder;
2327 end else if TObject( FActiveList ) is TCategory then begin
2328 orderList := GikoSys.Setting.CategoryColumnOrder;
2329 vSortIndex := GikoSys.Setting.CategorySortIndex;
2330 vSortOrder := GikoSys.Setting.CategorySortOrder;
2331 end else if TObject( FActiveList ) is TBoard then begin
2332 orderList := GikoSys.Setting.BoardColumnOrder;
2333 vSortIndex := GikoSys.Setting.BoardSortIndex;
2334 vSortOrder := GikoSys.Setting.BoardSortOrder;
2335 end else
2336 Exit;
2337
2338 id := Integer( orderList[ idx ] );
2339
2340
2341 if vSortIndex = id then
2342 vSortOrder := not vSortOrder
2343 else begin
2344 vSortOrder := id = 0;
2345 end;
2346
2347 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2348 end;
2349
2350 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2351 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2352 var
2353 ARect: TRect;
2354 begin
2355 DefaultDraw := True;
2356 // 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申Exit鐃緒申鐃緒申鐃緒申鐃緒申
2357 Exit;
2358 DefaultDraw := False;
2359 if (cdsSelected in State) or (cdsHot in State) then begin
2360 Sender.Canvas.Brush.Color := clHighlight;
2361 Sender.Canvas.Font.Color := clHighlightText;
2362 end else begin
2363 Sender.Canvas.Brush.Color := clBtnFace;
2364 Sender.Canvas.Font.Color := clBtnText;
2365 end;
2366 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2367 Sender.Canvas.FillRect(ARect);
2368 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2369 end;
2370
2371 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2372 var
2373 Nodes: TTreeNodes;
2374 i: integer;
2375 begin
2376 Nodes := TreeView.Items;
2377
2378 for i := 0 to Nodes.Count - 1 do begin
2379 if Nodes.Item[i].Data = Data then begin
2380 Result := Nodes.Item[i];
2381 Exit;
2382 end;
2383 end;
2384 Result := nil;
2385 end;
2386
2387 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2388 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2389 Headers: OleVariant; var Cancel: WordBool);
2390 var
2391 sNo: string;
2392 p: TPoint;
2393 const
2394 kMenuName: string = 'menu:';
2395 begin
2396 {$IFDEF DEBUG}
2397 Writeln(URL);
2398 {$ENDIF}
2399 FKokoPopupThreadItem := nil;
2400 if Pos(kMenuName, URL) <> 0 then begin
2401 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2402
2403 if not GikoSys.IsNumeric(sNo) then Exit;
2404
2405 Cancel := True;
2406 GetCursorpos(p);
2407 KokoPopupMenu.PopupComponent := nil;
2408 if (Sender is TComponent) then
2409 KokoPopupMenu.PopupComponent := TComponent(Sender);
2410 // 鐃緒申鐃緒申鐃緒申鐃緒申 鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2411 if not (Sender is TResPopupBrowser) then begin
2412 if (FResPopupBrowser <> nil) and (FResPopupBrowser.CurrentBrowser.Visible = True) then begin
2413 FResPopupBrowser.Clear;
2414 end;
2415 end else begin
2416 if (Sender <> FResPopupBrowser.CurrentBrowser) then begin
2417 TResPopupBrowser(Sender).ChildClear;
2418 end;
2419 end;
2420 FKokoPopupThreadItem := GetActiveContent(true);
2421 KokoPopupMenu.Tag := StrToInt(sNo);
2422 KokoPopupMenu.Popup(p.x, p.y);
2423 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2424 Cancel := not GikoSys.Setting.OpenMailer;
2425
2426 //@鐃緒申.鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申URL鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2427 //鐃緒申鐃緒申age鐃?sage鐃緒申鐃緒申
2428 if (Pos('@', URL) = 0) or (Pos('.', URL) = 0) then begin
2429 Cancel := True;
2430 end;
2431 end;
2432
2433 end;
2434
2435 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2436 const ARect: TRect; var DefaultDraw: Boolean);
2437 var
2438 NodeRect: TRect;
2439 i, j: Integer;
2440 IsBoardNode: Boolean;
2441 Cnt: Integer;
2442 CntText: string;
2443 TextWidth: Integer;
2444 TextRect: TRect;
2445 Board: TBoard;
2446 Category: TCategory;
2447 Bitmap: TBitmap;
2448 NodeWidth: Integer;
2449 begin
2450 DefaultDraw := True;
2451
2452 if FTreeType = gttHistory then Exit;
2453
2454 TreeView.Canvas.Font.Color := clBlue;
2455 IsBoardNode := False;
2456 for i := 0 to TreeView.Items.Count - 1 do begin
2457 Cnt := 0;
2458 if not TreeView.Items[i].IsVisible then
2459 continue;
2460
2461 if TObject(TreeView.Items[i].Data) is TCategory then begin
2462 if TreeView.Items[i].Expanded then
2463 continue;
2464
2465 IsBoardNode := False;
2466 Category := TCategory(TreeView.Items[i].Data);
2467 for j := 0 to Category.Count - 1 do begin
2468 Board := Category.Items[j];
2469 if Board <> nil then begin
2470 if Board.UnRead > 0 then begin
2471 Cnt := 1;
2472 Break;
2473 end;
2474 end;
2475 end;
2476 if Cnt <> 1 then
2477 continue;
2478 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2479 IsBoardNode := True;
2480 Board := TBoard(TreeView.Items[i].Data);
2481
2482 Cnt := Board.UnRead;
2483 if Cnt <= 0 then
2484 continue;
2485 end else
2486 continue;
2487
2488 Bitmap := TBitmap.Create;
2489 try
2490 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2491 Bitmap.Canvas.Font.Style := [fsBold];
2492 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2493 finally
2494 Bitmap.Free;
2495 end;
2496
2497 NodeRect := TreeView.Items[i].DisplayRect(True);
2498
2499 if IsBoardNode then
2500 CntText := '(' + IntToStr(Cnt) + ')'
2501 else if Cnt = 1 then
2502 CntText := '(+)';
2503
2504
2505 TextWidth := TreeView.Canvas.TextWidth(CntText);
2506
2507 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2508 NodeRect.Top,
2509 NodeRect.Left + NodeWidth + TextWidth + 8,
2510 NodeRect.Bottom);
2511 DrawText(TreeView.Canvas.Handle,
2512 PChar(CntText),
2513 -1,
2514 TextRect,
2515 DT_SINGLELINE or DT_VCENTER);
2516 end;
2517 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2518 end;
2519
2520 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2521 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2522 var
2523 Board: TBoard;
2524 Category: TCategory;
2525 i: Integer;
2526 begin
2527 DefaultDraw := True;
2528
2529 if FTreeType = gttHistory then Exit;
2530
2531 TreeView.Canvas.Font.Style := [];
2532 if Node <> nil then begin
2533 if TObject(Node.Data) is TCategory then begin
2534 Category := TCategory(Node.Data);
2535 for i := 0 to Category.Count - 1 do begin
2536 Board := Category.Items[i];
2537 if Board <> nil then begin
2538 if Board.UnRead > 0 then begin
2539 TreeView.Canvas.Font.Style := [fsBold];
2540 Break;
2541 end;
2542 end;
2543 end;
2544 end else if TObject(Node.Data) is TBoard then begin
2545 Board := TBoard(Node.Data);
2546 if Board.UnRead > 0 then
2547 TreeView.Canvas.Font.Style := [fsBold];
2548 end;
2549 end;
2550 end;
2551
2552 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2553 begin
2554 TreeView.Invalidate;
2555
2556 if TObject(Node.Data) is TBBS then begin
2557 TBBS(Node.Data).NodeExpand := True;
2558 end else if TObject(Node.Data) is TCategory then begin
2559 TCategory(Node.Data).NodeExpand := True;
2560 end else if TObject(Node.Data) is TBoard then begin
2561 TBoard(Node.Data).NodeExpand := True;
2562 end;
2563 end;
2564
2565 procedure TGikoForm.ListViewAllSelect;
2566 begin
2567 ListView.SetFocus;
2568 ListView.SelectAll;
2569 end;
2570 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2571 begin
2572 if csDestroying in Self.ComponentState then
2573 Exit;
2574 AddMessageList(Msg, nil, Icon);
2575 end;
2576 // *************************************************************************
2577 //! 鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?
2578 // *************************************************************************
2579 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2580 var
2581 ATitle: string;
2582 s: string;
2583 boardPlugIn : TBoardPlugIn;
2584 i: Integer;
2585 Res : TResRec;
2586 begin
2587 try
2588 if csDestroying in Self.ComponentState then
2589 Exit;
2590 if Item.DownType = gdtBoard then
2591 ATitle := Item.Board.Title
2592 else
2593 ATitle := Item.ThreadItem.Title;
2594 if ATitle = '' then
2595 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2596
2597 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2598 //鐃緒申鐃緒申鐃?鐃緒申
2599 if Item.DownType = gdtBoard then begin
2600 //鐃緒申
2601 Item.SaveListFile;
2602 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2603 if GetActiveList = Item.Board then begin
2604 FActiveList := nil;
2605 //鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申
2606 if (GikoSys.Setting.AutoSortThreadList) then begin
2607 GikoSys.Setting.BoardSortIndex := 0;
2608 GikoSys.Setting.BoardSortOrder := True;
2609 end;
2610 Sort.SetSortDate(Now());
2611 SetActiveList(Item.Board);
2612 end;
2613 Item.Board.Modified := True;
2614 Item.Board.IsThreadDatRead := True;
2615 PlaySound('New');
2616 ListView.Refresh;
2617 end else if Item.DownType = gdtThread then begin
2618 //鐃?鐃緒申
2619 Item.SaveItemFile;
2620 Item.ThreadItem.NewArrival := True;
2621 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2622 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2623 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2624 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2625 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2626 Item.ThreadItem.Title := Res.FTitle;
2627 ATitle := Item.ThreadItem.Title;
2628 end else if ATitle = '鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?' then begin
2629 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2630 ATitle := Res.FTitle;
2631 end;
2632 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2633 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2634 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2635 break;
2636 end;
2637 end;
2638 if GikoSys.Setting.BrowserTabVisible then begin
2639 if GetActiveContent = Item.ThreadItem then
2640 InsertBrowserTab(Item.ThreadItem)
2641 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2642 InsertBrowserTab(Item.ThreadItem, True)
2643 else
2644 InsertBrowserTab(Item.ThreadItem, False);
2645
2646 end else begin
2647 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2648 InsertBrowserTab(Item.ThreadItem);
2649 end;
2650
2651 Application.ProcessMessages;
2652
2653 if Item.State = gdsComplete then begin
2654 PlaySound('New');
2655 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2656 //Add by Genyakun
2657 DiffComp := True;
2658 end else begin
2659 PlaySound('NewDiff');
2660 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2661 //Add by Genyakun
2662 DiffComp := True;
2663 end;
2664
2665 //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2666 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2667 // 2ch鐃緒申鐃?鐃緒申鐃?1000鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?2ch鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2668 if (Item.ThreadItem.ParentBoard.Is2ch) then begin
2669 Item.ThreadItem.Round := False;
2670 AddMessageList('鐃緒申1000鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 - [' + Item.ThreadItem.Title + ']', nil, gmiOK);
2671 end;
2672 end;
2673 TreeView.Refresh;
2674 //ListView鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申
2675 UpdateListView();
2676 RefreshListView(Item.ThreadItem);
2677 end;
2678
2679 end else if Item.State = gdsNotModify then begin
2680 //鐃緒申鐃?鐃?鐃?
2681 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2682 //SetContent(Item.ThreadItem);
2683 InsertBrowserTab(Item.ThreadItem);
2684 end;}
2685 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2686 PlaySound('NoChange');
2687 Screen.Cursor := crDefault;
2688 end else if Item.State = gdsAbort then begin
2689 //鐃緒申鐃?
2690 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2691 end else if Item.State = gdsError then begin
2692 //鐃?鐃緒申鐃?
2693 s := Item.ErrText;
2694 if s <> '' then
2695 s := ':' + s;
2696 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2697 // if Item.ResponseCode = 302 then
2698 // AddMessageList('鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?', nil, gmiNG);
2699 PlaySound('Error');
2700 end;
2701 finally
2702 Item.Free;
2703 Dec(FWorkCount);
2704 if FWorkCount < 0 then FWorkCount := 0;
2705 if FWorkCount = 0 then begin
2706 try
2707 Animate.Active := False;
2708 finally
2709 Screen.Cursor := crDefault;
2710 end;
2711 end;
2712
2713 end;
2714 end;
2715
2716 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2717 begin
2718 // SetProgressValue(Number, 0, AWorkCountMax);
2719 // ProgressBar.Visible := True;
2720 if csDestroying in Self.ComponentState then
2721 Exit;
2722
2723 ProgressBar.Position := 0;
2724 ProgressBar.Max := AWorkCountMax;
2725 FDownloadTitle := AWorkTitle;
2726 StatusBar.Panels[1].Text := FDownloadTitle + ' - 鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申';
2727 FDownloadMax := AWorkCountMax;
2728 end;
2729
2730 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2731 begin
2732 if csDestroying in Self.ComponentState then
2733 Exit;
2734 ProgressBar.Position := 0;
2735 if FDownloadMax <> 0 then
2736 StatusBar.Panels[1].Text := FDownloadTitle + ' - 鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申';
2737 end;
2738
2739 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2740 begin
2741 if csDestroying in Self.ComponentState then
2742 Exit;
2743 ProgressBar.Position := AWorkCount;
2744 // SetProgressValue(Number, AWorkCount);
2745 StatusBar.Panels[1].Text := FDownloadTitle + ' - 鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2746 end;
2747
2748 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2749 var
2750 ListItem: TListItem;
2751 begin
2752 MessageListView.Items.BeginUpdate;
2753 try
2754 ListItem := MessageListView.Items.Add;
2755 ListItem.Caption := ACaption;
2756 ListItem.Data := AObject;
2757 ListItem.MakeVisible(False);
2758 case Icon of
2759 gmiOK: ListItem.ImageIndex := 0;
2760 gmiSAD: ListItem.ImageIndex := 1;
2761 gmiNG: ListItem.ImageIndex := 2;
2762 gmiWhat: ListItem.ImageIndex := 3;
2763 end;
2764 finally
2765 MessageListView.Items.EndUpdate;
2766 end;
2767 end;
2768
2769 //! 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申Browser鐃緒申鐃?鐃緒申
2770 procedure TGikoForm.ReleaseOldestBrowser;
2771 var
2772 i: Integer;
2773 begin
2774 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2775 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2776 TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2777 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2778 break;
2779 end;
2780 end;
2781 end;
2782
2783 function TGikoForm.InsertBrowserTab(
2784 ThreadItem : TThreadItem;
2785 ActiveTab : Boolean = True
2786 ) : TBrowserRecord;
2787 var
2788 i, j, idx : Integer;
2789 favItem : TFavoriteThreadItem;
2790 newBrowser : TBrowserRecord;
2791 ins : Integer;
2792 begin
2793
2794 Result := nil;
2795 if Threaditem = nil then Exit;
2796
2797 if ThreadItem.IsLogFile then begin
2798 //鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申browser鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2799 //鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申Active鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2800 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2801 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2802 j := FBrowsers.IndexOf(FActiveContent.Browser);
2803 if j = BROWSER_COUNT - 1 then
2804 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2805 end;
2806 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2807 if not FHistoryList.AddHistory( favItem, TreeView, FTreeType ) then
2808 favItem.Free;
2809
2810 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2811 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2812 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2813 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2814 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2815 //鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申
2816 ReleaseOldestBrowser;
2817 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2818 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2819 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2820 end;
2821 if ActiveTab then begin
2822 BrowserTab.TabIndex := i;
2823 BrowserTab.OnChange(nil);
2824 BrowserTab.Repaint;
2825 end;
2826 Exit;
2827 end;
2828 end;
2829 end;
2830 idx := BrowserTab.TabIndex;
2831 newBrowser := TBrowserRecord.Create;
2832 // 鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申
2833 ReleaseOldestBrowser;
2834 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2835 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2836 newBrowser.thread := ThreadItem;
2837 newBrowser.Repaint := true;
2838
2839 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2840 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2841 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2842 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2843 end;// else begin
2844 //end;
2845 BrowserTab.Repaint;
2846 if ActiveTab then begin
2847 BrowserTab.TabIndex := 0;
2848 end;
2849 end else if GikoSys.Setting.BrowserTabAppend = gtaLast then begin
2850 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2851 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2852 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2853 end;
2854 //end;
2855 BrowserTab.Repaint;
2856 if ActiveTab then begin
2857 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2858 BrowserTab.TabIndex := 0
2859 else
2860 BrowserTab.TabIndex := i;
2861 end;
2862 end else begin
2863 // 鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申
2864 ins := -1;
2865 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2866 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2867 TWebBrowser(FBrowsers[1]) then begin
2868 ins := i;
2869 break;
2870 end;
2871 end;
2872 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2873 Inc(ins);
2874 end;
2875 // 鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2876 if (ins < 0) then begin
2877 ins := 0;
2878 end;
2879 BrowserTab.Tabs.InsertObject(ins, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2880 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2881 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2882 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2883 end else begin
2884 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2885 end;
2886 end;
2887 //end;
2888 BrowserTab.Repaint;
2889 if ActiveTab then begin
2890 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2891 BrowserTab.TabIndex := 0
2892 else
2893 BrowserTab.TabIndex := ins;
2894 end;
2895 end;
2896 Result := newBrowser;
2897 if(ActiveTab) or (idx = -1) then begin
2898 BrowserTab.OnChange(nil);
2899 end;
2900 end else begin
2901 if BrowserNullTab = nil then begin
2902 BrowserNullTab := TBrowserRecord.Create;
2903 BrowserNullTab.Browser := Browser;
2904 end;
2905 // if BrowserNullTab.thread <> ThreadItem then begin
2906 // BrowserNullTab.Movement := '';
2907 // end;
2908 BrowserNullTab.thread := ThreadItem;
2909 Result := BrowserNullTab;
2910 BrowserTab.TabIndex := -1;
2911 SetContent(BrowserNullTab);
2912 end;
2913
2914 if GikoSys.Setting.URLDisplay then
2915 AddressComboBox.Text := ThreadItem.URL;
2916
2917 end;
2918
2919 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2920 var
2921 BBSID: string;
2922 FileName: string;
2923 sTitle: string;
2924 doc: OleVariant;
2925 s: string;
2926 idx: Integer;
2927 ThreadItem: TThreadItem;
2928 Thread: TBrowserRecord;
2929 ThreadTitle, ThreadPTitle: string;
2930 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2931 begin
2932 Thread := inThread;
2933 idx := BrowserTab.TabIndex;
2934 if (not FStartUp) and
2935 (FActiveContent <> nil) and
2936 (FActiveContent.Thread <> Thread.Thread) and
2937 (FActiveContent.Browser <> nil) and
2938 (Assigned(FActiveContent.Browser.ControlInterface.Document)) then begin
2939 try
2940 try
2941 FActiveContent.Thread.ScrollTop := FActiveContent.Browser.OleObject.Document.Body.ScrollTop;
2942 except
2943 on E: Exception do
2944 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2945 end;
2946 finally
2947 end;
2948 end;
2949