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.630 - (show annotations) (download) (as text)
Sun Feb 18 08:09:21 2007 UTC (17 years, 2 months ago) by h677
Branch: MAIN
CVS Tags: v1_55_0_696, v1_55_0_694, v1_55_0_695
Changes since 1.629: +3 -1 lines
File MIME type: text/x-pascal
セキュリティソフトの誤反応対策機能を追加

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