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.695 - (show annotations) (download) (as text)
Sat Jul 11 04:34:17 2009 UTC (14 years, 9 months ago) by h677
Branch: MAIN
CVS Tags: v1_61_0_798
Changes since 1.694: +26 -18 lines
File MIME type: text/x-pascal
ポップアップメニューのカスタマイズ化への道第一歩。
ブラウザタブを設定可能にした。

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