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.701 - (show annotations) (download) (as text)
Sat Oct 22 03:39:22 2011 UTC (12 years, 6 months ago) by h677
Branch: MAIN
CVS Tags: v1_63_0_817
Changes since 1.700: +11 -1 lines
File MIME type: text/x-pascal
IE9の時に、ゼロ割例外を無視するように修正

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