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.623 - (show annotations) (download) (as text)
Sun Dec 31 01:29:28 2006 UTC (17 years, 3 months ago) by h677
Branch: MAIN
Changes since 1.622: +15 -217 lines
File MIME type: text/x-pascal
履歴を別クラス(THistoryList)に分離

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 C2: 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 procedure FormCreate(Sender: TObject);
420 procedure FormDestroy(Sender: TObject);
421 procedure BrowserStatusTextChange(Sender: TObject;
422 const Text: WideString);
423 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
424 procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
425 var AllowChange: Boolean);
426 procedure ListViewKeyDown(Sender: TObject; var Key: Word;
427 Shift: TShiftState);
428 procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
429 procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
430 Button: TToolButton; State: TCustomDrawState;
431 var DefaultDraw: Boolean);
432 procedure BrowserBeforeNavigate2(Sender: TObject;
433 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
434 Headers: OleVariant; var Cancel: WordBool);
435 procedure TreeViewCustomDraw(Sender: TCustomTreeView;
436 const ARect: TRect; var DefaultDraw: Boolean);
437 procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
438 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
439 procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
440 procedure ListViewCustomDraw(Sender: TCustomListView;
441 const ARect: TRect; var DefaultDraw: Boolean);
442 procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
443 Shift: TShiftState; X, Y: Integer);
444 procedure TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
445 procedure MessageListViewResize(Sender: TObject);
446 procedure CabinetVisible( isVisible : Boolean );
447 procedure FormResize(Sender: TObject);
448 procedure ListPopupMenuPopup(Sender: TObject);
449 procedure TreePopupMenuPopup(Sender: TObject);
450 procedure BrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
451 var Cancel: WordBool);
452 procedure ListSplitterMoved(Sender: TObject);
453 procedure BrowserTabChange(Sender: TObject);
454 procedure BrowserTabMouseDown(Sender: TObject; Button: TMouseButton;
455 Shift: TShiftState; X, Y: Integer);
456 procedure BrowserTabDragOver(Sender, Source: TObject; X, Y: Integer;
457 State: TDragState; var Accept: Boolean);
458 procedure BrowserTabDragDrop(Sender, Source: TObject; X, Y: Integer);
459 procedure BrowserTabMouseMove(Sender: TObject; Shift: TShiftState; X,
460 Y: Integer);
461 procedure BrowserDocumentComplete(Sender: TObject;
462 const pDisp: IDispatch; var URL: OleVariant);
463 procedure RoundNamePopupMenuPopup(Sender: TObject);
464 procedure FormShow(Sender: TObject);
465 procedure BrowserTabToolBarResize(Sender: TObject);
466 procedure FavoriteMenuClick(Sender: TObject);
467 procedure MainCoolBarResize(Sender: TObject);
468 procedure AddressToolBarResize(Sender: TObject);
469 procedure AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
470 Shift: TShiftState);
471 procedure BrowserEnter(Sender: TObject);
472 procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
473 procedure PreviewTimerTimer(Sender: TObject);
474 procedure MessageHideButtonClick(Sender: TObject);
475 procedure HistoryAllClearToolButtonClick(Sender: TObject);
476 procedure MainCoolBarBandInfo(Sender: TObject;
477 var BandInfo: PReBarBandInfoA);
478 procedure MainCoolBarChevronClick(Sender: TObject;
479 RebarChevron: PNMRebarChevron);
480 procedure ListCoolBarBandInfo(Sender: TObject;
481 var BandInfo: PReBarBandInfoA);
482 procedure ListCoolBarChevronClick(Sender: TObject;
483 RebarChevron: PNMRebarChevron);
484 procedure BrowserCoolBarBandInfo(Sender: TObject;
485 var BandInfo: PReBarBandInfoA);
486 procedure BrowserCoolBarChevronClick(Sender: TObject;
487 RebarChevron: PNMRebarChevron);
488 procedure ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
489 procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
490 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
491 procedure SelectComboBoxChange(Sender: TObject);
492 procedure SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
493 Shift: TShiftState);
494 procedure SelectComboBoxExit(Sender: TObject);
495 procedure SelectComboBoxSplitterMouseMove(Sender: TObject;
496 Shift: TShiftState; X, Y: Integer);
497 procedure SelectComboBoxSplitterMouseDown(Sender: TObject;
498 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
499 procedure SelectComboBoxSplitterMouseUp(Sender: TObject;
500 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
501 procedure StatusBarResize(Sender: TObject);
502 procedure SelectComboBoxEnter(Sender: TObject);
503 procedure FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
504 Y: Integer);
505 procedure FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
506 procedure FavoriteTreeViewEdited(Sender: TObject; Node: TTreeNode;
507 var S: String);
508 procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
509 Shift: TShiftState);
510 procedure FavoriteTreePopupMenuPopup(Sender: TObject);
511 procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
512 procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
513 Shift: TShiftState; X, Y: Integer);
514 procedure LinkToolBarDragOver(Sender, Source: TObject; X, Y: Integer;
515 State: TDragState; var Accept: Boolean);
516 procedure FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
517 Y: Integer);
518 procedure FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
519 procedure BrowserTabContextPopup(Sender: TObject; MousePos: TPoint;
520 var Handled: Boolean);
521 procedure BrowserTabPopupMenuPopup(Sender: TObject);
522 procedure BrowserTabResize(Sender: TObject);
523 procedure TreeViewKeyDown(Sender: TObject; var Key: Word;
524 Shift: TShiftState);
525 procedure FavoriteTreeViewMouseDown(Sender: TObject;
526 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
527 procedure MessagePanelResize(Sender: TObject);
528 procedure OnResized;
529 procedure SelectTimerTimer(Sender: TObject);
530 procedure ListViewColumnRightClick(Sender: TObject;
531 Column: TListColumn; Point: TPoint);
532 procedure ListViewCustomDrawItem(Sender: TCustomListView;
533 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
534 procedure FormActivate(Sender: TObject);
535 procedure BrowserPanelResize(Sender: TObject);
536 procedure MenuToolBarResize(Sender: TObject);
537 procedure ListToolBarResize(Sender: TObject);
538 procedure BrowserToolBarResize(Sender: TObject);
539 procedure KokoPopupMenuPopup(Sender: TObject);
540 procedure ListViewKeyUp(Sender: TObject; var Key: Word;
541 Shift: TShiftState);
542 procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
543 var AllowEdit: Boolean);
544 procedure CabinetCloseSpeedButtonClick(Sender: TObject);
545 procedure FavoriteArrangeToolButtonClick(Sender: TObject);
546 procedure GikoApplicationEventsMessage(var Msg: tagMSG;
547 var Handled: Boolean);
548 procedure GikoApplicationEventsDeactivate(Sender: TObject);
549 procedure GikoApplicationEventsException(Sender: TObject; E: Exception);
550 procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
551 Shift: TShiftState; X, Y: Integer);
552 procedure GetResURLMenuClick(Sender: TObject);
553 procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
554 var Handled: Boolean);
555 private
556 { Private 鐃緒申鐃緒申 }
557 FEnabledCloseButton: Boolean;
558 FClickNode: TTreeNode;
559 FHttpState: Boolean;
560 FHint: TResPopup;
561 FPreviewBrowser: TPreviewBrowser;
562 FPreviewURL: string;
563 FBrowserSizeHeight: Integer;
564 FBrowserSizeWidth: Integer;
565 FTabHintIndex: Integer;
566 FListStyle: TViewStyle; //鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃?鐃緒申
567 FItemNoVisible: Boolean; //鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?
568 FViewType: TGikoViewType; //鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?
569 FActiveList: TObject;
570 FActiveContent: TBrowserRecord; //
571 FActiveBBS : TBBS;
572 FHistoryList: THistoryList; //鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃?
573 FTreeType: TGikoTreeType;
574 FWorkCount: Integer;
575 FNameCookie: string;
576 FMailCookie: string;
577 FDownloadTitle: string; //鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申
578 FDownloadMax: Integer; //鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?
579 FEvent: THTMLDocumentEventSink;//鐃?鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃?
580 IsDraggingSelectComboBox : Boolean;
581 DraggingSelectComboBoxPosition : TPoint;
582 FSearchDialog: TSearchDialog;
583 FDropSpaceNode: TTreeNode;
584 FDragTime : Cardinal; ///< 鐃緒申鐃緒申鐃?鐃緒申D&D鐃?
585 FDragButton : TToolButton; ///< 鐃緒申鐃緒申鐃?鐃緒申D&D鐃?鐃緒申Drag鐃緒申鐃緒申鐃緒申Button鐃緒申鐃緒申
586 FDragWFirst : Boolean; ///< WebTab鐃緒申D&D鐃?
587 FListViewBackGroundColor : TColor; ///< ListView鐃緒申BackGroundColor
588 FUseOddResOddColor : Boolean; ///< 鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申
589 FOddColor : TColor; ///< 鐃緒申鐃緒申鐃?
590 FSelectResWord : string; ///< 鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?
591 FIsIgnoreResize : TResizeType; ///< 鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
592 FIsMinimize : TMinimizeType; ///< 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
593 FOldFormWidth : Integer; ///< 鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申
594 FToolBarSettingSender : TToolBarSettingSenderType; ///< 鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃?
595 FMouseDownPos : TPoint; ///< 鐃?鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?
596 FBrowsers: TList;
597 FResRangeMenuSelect : Longint; ///< ResRangeButton 鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 (鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申 ResRange 鐃緒申鐃緒申)
598 FStartUp : Boolean;
599 FIsHandledWheel : Boolean; ///< 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 WM_MOUSEWHEEL 鐃緒申鐃緒申鐃緒申鐃緒申
600 DiffComp: Boolean; //Add by Genyakun 鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申True鐃緒申鐃緒申鐃緒申
601 FOrigenCaption: String; //鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申
602 FPreviewBrowserRect: TRect; ///< 鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申
603 FActionListGroupIndexes: array of Integer; ///<GikoDM鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申GroupIndex鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申
604
605 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
606 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
607 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
608 procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
609 procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
610 procedure ListClick;
611 procedure ListDoubleClick(Shift: TShiftState);
612 function Hook(var Message: TMessage): Boolean;
613 procedure AddRoundNameMenu(MenuItem: TMenuItem);
614 procedure SetMenuFont;
615 procedure CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
616 procedure FavoriteClick(Sender: TObject; ActiveTab: Boolean); overload;
617 procedure FavoriteClick(Sender: TObject); overload;
618 procedure FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
619 function OnDocumentContextMenu(Sender: TObject): WordBool;
620 procedure ShowTextPopup;
621 function GetWidthAllToolButton(ToolBar: TToolBar): Integer;
622 procedure MenuBarChevronMenu;
623 procedure LinkBarChevronMenu;
624 procedure ToolBarChevronMenu(ToolBar: TToolBar);
625 procedure LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
626 procedure LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
627 procedure LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
628 procedure LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
629 procedure LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
630 function TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
631 procedure FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
632 procedure FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
633 procedure FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
634 //
635 procedure SetListViewBackGroundColor(value: TColor);
636 procedure BBSMenuItemOnClick( Sender : TObject );
637 /// CoolBar 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
638 procedure SaveCoolBarSettings;
639 procedure SaveMainCoolBarSettings;
640 procedure SaveBoardCoolBarSettings;
641 procedure SaveBrowserCoolBarSettings;
642 /// CoolBar 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
643 procedure LoadCoolBarSettings;
644 /// 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
645 procedure OnMinimize;
646 /// 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
647 procedure OnMinimized;
648 /// TreeView 鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申
649 procedure TreeClick( Node : TTreeNode );
650 /// TreeView 鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申
651 procedure TreeDoubleClick( Node : TTreeNode );
652 /// 鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃? BBS 鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?
653 procedure SetBBSMenu;
654 /// ListColumnPopupMenu 鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃?
655 procedure ListColumnPopupMenuOnClick( Sender : TObject );
656 //! 鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
657 procedure SetSelectWord( const text : string );
658 //鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
659 function GetScreenCursor(): TCursor;
660 //鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
661 procedure SetScreenCursor(Cursor : TCursor);
662 //! 鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申
663 procedure CreateControlThread();
664 //! 鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申
665 procedure CreateBrowsers(count: Integer);
666 //! ActionList鐃緒申GroupIndex鐃緒申鐃緒申鐃緒申
667 procedure GetGroupIndex(ActionList: TActionList);
668 //! ActionList鐃緒申GroupIndex鐃緒申鐃緒申鐃緒申
669 procedure SetGroupIndex(ActionList: TActionList);
670 //! 鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申(鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 or 鐃?鐃緒申JUMP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申DL鐃緒申鐃緒申)
671 procedure OpenThreadItem(Thread: TThreadItem; URL: String);
672 //! ListView鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申
673 procedure RefreshListView(Thread: TThreadItem);
674 //! 鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?
675 procedure ClearThreadRengeAction;
676 //! 鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃緒申
677 procedure UnStoredTaskTray;
678 //! 鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申
679 procedure ShowEditors(nCmdShow: Integer);
680 protected
681 procedure CreateParams(var Params: TCreateParams); override;
682 procedure WndProc(var Message: TMessage); override;
683 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
684 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
685 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
686
687 public
688 { Public 鐃緒申鐃緒申 }
689 LastRoundTime: TDateTime;
690 BrowserNullTab: TBrowserRecord;
691 FControlThread: TThreadControl;
692 FIconData : TNotifyIconData;
693 procedure MoveToURL(const inURL: string);
694 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
695 procedure ReloadBBS;
696 function GetHttpState: Boolean;
697 procedure SetEnabledCloseButton(Enabled: Boolean);
698 function GetTreeNode(Data: TObject): TTreeNode;
699 procedure ListViewAllSelect;
700 property ListStyle: TViewStyle read FListStyle write FListStyle;
701 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
702 property ViewType: TGikoViewType read FViewType write FViewType;
703 property NameCookie: string read FNameCookie write FNameCookie;
704 property MailCookie: string read FMailCookie write FMailCookie;
705 property ClickNode: TTreeNode read FClickNode write FClickNode;
706 property TreeType: TGikoTreeType read FTreeType write FTreeType;
707 property ActiveContent: TBrowserRecord read FActiveContent write FActiveContent;
708 property ResRangeMenuSelect: Longint read FResRangeMenuSelect write FResRangeMenuSelect;
709 property SelectResWord : string read FSelectResWord write FSelectResWord;
710 property BrowserSizeWidth: Integer read FBrowserSizeWidth write FBrowserSizeWidth;
711 property BrowserSizeHeight: Integer read FBrowserSizeHeight write FBrowserSizeHeight;
712 property SearchDialog: TSearchDialog read FSearchDialog write FSearchDialog;
713 property ToolBarSettingSender : TToolBarSettingSenderType
714 read FToolBarSettingSender write FToolBarSettingSender;
715 property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
716 property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
717 property WorkCount: Integer read FWorkCount write FWorkCount;
718 procedure SetContent(inThread: TBrowserRecord);
719 function GetActiveContent: TThreadItem;
720 function GetActiveList: TObject;
721
722 procedure SetListViewType(AViewType: TGikoViewType); overload;
723 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
724 procedure PlaySound(SoundEventName: string);
725 procedure ShowBBSTree( inBBS : TBBS );
726 procedure ShowBBSTreeOld( inBBS : TBBS );
727 procedure ShowHistoryTree;
728 procedure SetHistoryTreeNode;
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;
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 ITEM_ICON_THREADLOG1 = 6; //鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃?
852 ITEM_ICON_THREADLOG2 = 7; //鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃?
853 //鐃緒申鐃?鐃?鐃?鐃?ID
854 USER_TREECLICK = WM_USER + 2000;
855 USER_RESIZED = WM_USER + 2001;
856 USER_MINIMIZED = WM_USER + 2002;
857 USER_SETLINKBAR = WM_USER + 2003;
858 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
859 USER_TASKTRAY = WM_USER + 2010;
860 {$R *.DFM}
861
862 procedure TGikoForm.CreateParams(var Params: TCreateParams);
863 begin
864 inherited;
865 if FormStyle in [fsNormal, fsStayOnTop] then begin
866 if BorderStyle in [bsSingle, bsSizeable] then begin
867 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
868 Params.WndParent := 0;
869 end;
870 end;
871 end;
872
873 procedure TGikoForm.FormCreate(Sender: TObject);
874 const
875 TVS_NOTOOLTIPS = $0080;
876 var
877 FileName: string;
878 Style: DWORD;
879 msg: string;
880 i: Integer;
881 wp: TWindowPlacement;
882 begin
883 {$IFDEF DEBUG}
884 AllocConsole;
885 Writeln('============================================================');
886 Writeln(' 鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃? 鐃?鐃緒申鐃?鐃?鐃緒申');
887 Writeln('');
888 Writeln(' 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?');
889 Writeln(' 鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申');
890 Writeln('============================================================');
891 {$ENDIF}
892 //try
893 Sort.SetSortDate(Now());
894
895 FTreeType := gttNone;
896 // 鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
897 FStartUp := true;
898 Application.HookMainWindow(Hook);
899 FIsIgnoreResize := rtResizing;
900 //ActionList鐃緒申GuoupIndex鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?0鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃?
901 //(鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申Down鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申GroupIndex鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申)
902 //鐃緒申鐃緒申鐃緒申鐃緒申Set鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?Action鐃緒申Checked鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?
903 GetGroupIndex(GikoDM.GikoFormActionList);
904 FSearchDialog := nil;
905 CreateBrowsers(BROWSER_COUNT);
906 FIconData.uID := 0;
907
908 //鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃?
909 SetMenuFont;
910
911 //鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申
912 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
913
914 //鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
915 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
916
917 EnabledCloseButton := True;
918
919 //鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申
920 ListView.ViewStyle := GikoSys.Setting.ListStyle;
921
922 //鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?
923 AnimePanel.Top := 0;
924 AnimePanel.Left := 0;
925
926 //鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
927
928 //鐃?鐃緒申鐃?鐃?鐃?鐃?
929 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
930
931 //鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?
932 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
933 GikoDM.MsgBarVisibleActionExecute(nil);
934 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
935
936 //鐃?鐃?鐃?鐃?鐃?鐃?鐃?
937 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
938 GikoDM.StatusBarVisibleActionExecute(nil);
939
940 //鐃?鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申
941 TreeView.Items.BeginUpdate;
942 FavoriteTreeView.Items.BeginUpdate;
943 ListView.Items.BeginUpdate;
944 try
945 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
946 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
947 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
948 TreeView.Color := GikoSys.Setting.CabinetBackColor;
949 FavoriteTreeView.Font.Assign(TreeView.Font);
950 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
951
952 ListView.Font.Name := GikoSys.Setting.ListFontName;
953 ListView.Font.Size := GikoSys.Setting.ListFontSize;
954 ListView.Font.Color := GikoSys.Setting.ListFontColor;
955 ListView.Font.Style := [];
956 if GikoSys.Setting.ListFontBold then
957 ListView.Font.Style := [fsbold];
958 if GikoSys.Setting.ListFontItalic then
959 ListView.Font.Style := ListView.Font.Style + [fsitalic];
960
961 ListViewBackGroundColor := clWhite; // 鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
962 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; // 鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃?
963 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
964 FOddColor := GikoSys.Setting.OddColor;
965
966 finally
967 TreeView.Items.EndUpdate;
968 FavoriteTreeView.Items.EndUpdate;
969 ListView.Items.EndUpdate;
970 end;
971 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
972 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
973
974 //鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
975 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
976
977 // 鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申
978 FResRangeMenuSelect := GikoSys.ResRange;
979 case GikoSys.ResRange of
980 Ord( grrAll ):
981 begin
982 GikoDM.AllResAction.Execute;
983 end;
984 Ord( grrSelect ):
985 begin
986 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
987 GikoDM.SelectResAction.Checked := True;
988 end;
989 else
990 case FResRangeMenuSelect of
991 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
992 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
993 100: GikoDM.OnlyAHundredResAction.Checked := True;
994 end;
995 end;
996
997 // 鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申
998 case GikoSys.Setting.ThreadRange of
999 gtrAll:
1000 begin
1001 GikoDM.AllItemAction.Checked := True;
1002 ViewType := gvtAll;
1003 end;
1004 gtrLog:
1005 begin
1006 GikoDM.LogItemAction.Checked := True;
1007 ViewType := gvtLog;
1008 end;
1009 gtrNew:
1010 begin
1011 GikoDM.NewItemAction.Checked := True;
1012 ViewType := gvtNew;
1013 end;
1014 gtrLive:
1015 begin
1016 GikoDM.LiveItemAction.Checked := True;
1017 ViewType := gvtLive;
1018 end;
1019 gtrArch:
1020 begin
1021 GikoDM.ArchiveItemAction.Checked := True;
1022 ViewType := gvtArch;
1023 end;
1024 end;
1025
1026
1027 //鐃?鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?
1028 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1029 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1030 BrowserTab.Font.Style := [];
1031 if GikoSys.Setting.BrowserTabFontBold then
1032 BrowserTab.Font.Style := [fsBold];
1033 if GikoSys.Setting.BrowserTabFontItalic then
1034 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1035 BrowserTab.DoubleBuffered := True;
1036 FDragWFirst := false;
1037 SetContent(BrowserNullTab); //鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申
1038
1039 //鐃?鐃緒申鐃?鐃?鐃?鐃?
1040 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1041
1042 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1043 GikoDM.BrowserTabTopAction.Checked := True;
1044 end else begin
1045 GikoDM.BrowserTabBottomAction.Checked := True;
1046 end;
1047
1048 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1049 GikoDM.BrowserTabTabStyleAction.Checked := True;
1050 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1051 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1052 end else begin
1053 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1054 end;
1055
1056 //鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申
1057 ProgressBar.Parent := StatusBar;
1058 ProgressBar.Top := 2;
1059 ProgressBar.Left := 0;
1060 ProgressBar.Width := StatusBar.Panels[0].Width;
1061 ProgressBar.Height := StatusBar.Height - 2;
1062 ProgressBar.Position := 0;
1063
1064 // 鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?(ReadBoardFile, LoadHistory 鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申)
1065 InitializeBoardPlugIns;
1066
1067 // 鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申(ReadFavorite 鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申)
1068 GikoSys.ListBoardFile;
1069 //鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申
1070 try
1071 // 鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申
1072 if (SplashWindow <> nil) then begin
1073 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1074 end;
1075 except
1076 end;
1077 // 鐃緒申鐃緒申鐃緒申鐃緒申BBS鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1078 for i := Length(BBSs) - 1 downto 0 do begin
1079 if not BBSs[i].IsBoardFileRead then
1080 GikoSys.ReadBoardFile(BBSs[i]);
1081
1082 if SplashWindow <> nil then begin
1083 SplashWindow.ProgressBar.StepBy(20);
1084 SplashWindow.Update;
1085 end;
1086 end;
1087
1088 //鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申
1089 RoundList := TRoundList.Create;
1090 RoundList.LoadRoundBoardFile;
1091 RoundList.LoadRoundThreadFile;
1092
1093 //TreeView鐃緒申鐃緒申鐃緒申鐃?鐃緒申ToolTip鐃緒申鐃緒申鐃?鐃緒申
1094 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1095 Style := Style or TVS_NOTOOLTIPS;
1096 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1097
1098 // 鐃?鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1099 TreeView.Align := alClient;
1100 FavoriteTreeView.Align := alClient;
1101 FavoriteTreeView.Visible := False;
1102
1103 // 鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申
1104 SetBBSMenu;
1105
1106 //鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申
1107 wp.length := sizeof(wp);
1108 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1109 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1110 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1111 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1112 wp.showCmd := SW_HIDE;
1113 SetWindowPlacement(Handle, @wp);
1114 //Self.Update;
1115
1116 if GikoSys.Setting.WindowMax then
1117 WindowState := wsMaximized;
1118
1119 //鐃?鐃?鐃?鐃?鐃緒申
1120 try
1121 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1122 if FileExists(FileName) then
1123 Animate.FileName := FileName;
1124 except
1125 end;
1126
1127 //鐃?鐃?鐃?鐃?
1128 FNameCookie := '';
1129 FMailCookie := '';
1130
1131 //鐃?鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申
1132 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1133 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1134
1135
1136 // 鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃?(LoadHistory 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申)
1137 FHistoryList := THistoryList.Create;
1138
1139 // 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1140 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1141 TreeView, FTreeType);
1142
1143 //鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1144 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1145 FavoriteDM.ReadFavorite;
1146
1147 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1148 GikoDM.ArrangeAction.Execute;
1149
1150 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1151 case GikoSys.Setting.ListWidthState of
1152 glsMax: begin
1153 ViewPanel.Width := 1;
1154 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1155 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1156 end;
1157 glsMin: begin
1158 ViewPanel.Width := GikoSys.Setting.ListWidth;
1159 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1160 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1161 end;
1162 else begin
1163 ViewPanel.Width := GikoSys.Setting.ListWidth;
1164 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1165 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1166 end;
1167 end;
1168 end else begin
1169 case GikoSys.Setting.ListHeightState of
1170 glsMax: begin
1171 ViewPanel.Height := 1;
1172 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1173 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1174 end;
1175 glsMin: begin
1176 ViewPanel.Height := GikoSys.Setting.ListHeight;
1177 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1178 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1179 end;
1180 else begin
1181 ViewPanel.Height := GikoSys.Setting.ListHeight;
1182 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1183 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1184 end;
1185 end;
1186 end;
1187
1188 //鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃?
1189 CreateControlThread();
1190
1191 // 鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1192 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1193
1194 //鐃?鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申
1195 SetBrowserTabState;
1196
1197 BrowserBoardNameLabel.Caption := '';
1198 BrowserNameLabel.Caption := '';
1199 FWorkCount := 0;
1200
1201 FTabHintIndex := -1;
1202
1203 //鐃?鐃?鐃緒申鐃?鐃?Wrapable
1204 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1205 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1206
1207 MakeDefaultINIFile();
1208 //鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1209 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1210 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1211 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1212 SetToolBarPopup;
1213
1214 //ListToolBar鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申ComboBox鐃緒申鐃?鐃?
1215 SetSelectComboBox();
1216
1217 //鐃?鐃?鐃緒申鐃?鐃?鐃?
1218 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1219
1220 //鐃緒申鐃緒申鐃?鐃?鐃?
1221 SetLinkBar;
1222 //鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申FormShow鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1223
1224 //鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申
1225 if not FileExists(GikoSys.GetBoardFileName) then begin
1226 msg := '鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申' + #13#10#13#10
1227 + '鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申' + #13#10
1228 + '鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?';
1229 MsgBox(SplashWindow.Handle, msg, '鐃?鐃?鐃?鐃?', MB_OK or MB_ICONINFORMATION);
1230 GikoDM.NewBoardAction.Execute;
1231 end;
1232
1233 //鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1234 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1235
1236 //鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申
1237 // FLastRoundTime := 0;
1238
1239 //ResHint
1240 FHint := TResPopup.Create(Self);
1241
1242 ListView.OnData := TListViewUtils.ListViewData;
1243
1244 // 鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申
1245 CabinetVisible( False );
1246 if GikoSys.Setting.CabinetVisible then begin
1247 i := CabinetSelectPopupMenu.Items.Count - 1;
1248 if GikoSys.Setting.CabinetIndex = i - 1 then
1249 GikoDM.CabinetHistoryAction.Execute
1250 else if GikoSys.Setting.CabinetIndex = i then
1251 GikoDM.CabinetFavoriteAction.Execute
1252 else begin
1253 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1254 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1255 // 鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 2
1256 FIsIgnoreResize := rtResizing;
1257 GikoDM.CabinetBBSAction.Execute;
1258 end;
1259 end else begin
1260 ShowBBSTreeOld( BBSs[ 0 ] );
1261 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1262 end;
1263
1264 //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?
1265 for i := 1 to ParamCount do begin
1266 MoveToURL(ParamStr(i));
1267 end;
1268
1269 GikoDM.RepaintStatusBar;
1270 StatusBarResize(Sender);
1271
1272 dummy1.Caption := ItemReservPMenu.Caption;
1273 dummy1.Hint := ItemReservPMenu.Hint;
1274
1275 {$IFDEF SPAM_FILTER_ENABLED}
1276 // 鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申
1277 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1278 {$ENDIF}
1279
1280 // 鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?
1281 MouseGesture := TMouseGesture.Create;
1282 GikoSys.Setting.Gestures.LoadGesture(
1283 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
1284 MouseGesture.Margin := GikoSys.Setting.Gestures.Margin;
1285 MouseGesture.OnGestureStart := OnGestureStart;
1286 MouseGesture.OnGestureMove := OnGestureMove;
1287 MouseGesture.OnGestureEnd := OnGestureEnd;
1288 if GikoSys.Setting.GestureEnabled then
1289 MouseGesture.SetHook( Handle );
1290
1291 //2ch鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申
1292 GikoSys.SetGikoMessage;
1293
1294 //鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申
1295 if GikoSys.Setting.AutoLogin then
1296 GikoDM.LoginAction.Execute;
1297
1298 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1299
1300 //鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1301 FavoriteAddToolButton.Caption := '鐃緒申鐃緒申...';
1302 AntiIndivAbonMenuItem.Caption := '鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申';
1303
1304 //鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申
1305 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1306
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 StatusBar.Panels[1].Text := Text2;
1893
1894 if FHint <> nil then begin
1895 FHint.ReleaseHandle;
1896 FHint.ClearAllRes;
1897 end;
1898 if FPreviewBrowser <> nil then
1899 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1900
1901 if not GikoSys.Setting.UnActivePopup then
1902 if not GikoForm.Active then
1903 Exit;
1904
1905 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
1906 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
1907
1908 s := '';
1909 Ext := AnsiLowerCase(ExtractFileExt(Text2));
1910 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
1911 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) then begin
1912 if FPreviewBrowser = nil then begin
1913 FPreviewBrowser := TPreviewBrowser.Create(Self);
1914 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1915 TOleControl(FPreviewBrowser).Parent := nil;
1916 end;
1917 FPreviewBrowser.Navigate(BLANK_HTML);//鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?
1918 FPreviewURL := Text2;
1919 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
1920 PreviewTimer.Enabled := True;
1921 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
1922 if Pos('mailto:', Text2) = 1 then begin
1923 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
1924 //鐃?鐃?鐃?鐃?鐃?鐃緒申 鐃?鐃?鐃?3鐃緒申466鐃緒申鐃緒申鐃緒申鐃緒申
1925 GetCursorPos(p);
1926 p.x := p.x - TWebBrowser(Sender).ClientOrigin.x;
1927 p.y := p.y - TWebBrowser(Sender).ClientOrigin.y;
1928 e := IHTMLDocument2(TWebBrowser(Sender).Document).elementFromPoint(p.x, p.y);
1929 if (Assigned(e)) then begin
1930 tmp2 := ZenToHan(e.Get_outerText);
1931 if (GikoSys.IsNumeric(tmp2)) then begin
1932 //鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?
1933 wkIntSt := StrToInt64(tmp2);
1934 wkIntTo := StrToInt64(tmp2);
1935 //s := GetThreadText(wkBBS, wkKey, wkIntSt, wkIntTo, False, False);
1936 FHint.PopupType := gptThread;
1937 HTMLCreater.SetResPopupText(FHint, GetActiveContent, wkIntSt, wkIntTo, False, False);
1938 end else begin
1939 FHint.PopupType := gptRaw;
1940 FHint.Caption := s;
1941 end;
1942 end;
1943 end else begin
1944 threadItem := GetActiveContent;
1945 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
1946 PathRec := Gikosys.Parse2chURL2(URL);
1947 if (PathRec.FNoParam) then begin
1948 PathRec.FSt := 1;
1949 PathRec.FTo := 1;
1950 end else begin
1951 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
1952 end;
1953 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
1954
1955 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
1956
1957 URL := GikoSys.GetBrowsableThreadURL( URL );
1958 wkIntSt := PathRec.FSt;
1959 wkIntTo := PathRec.FTo;
1960
1961 if (wkIntSt = 0) and (wkIntTo = 0) then begin
1962 wkIntSt := 1;
1963 wkIntTo := 1;
1964 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
1965 wkIntSt := wkIntTo;
1966 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
1967 wkIntTo := wkIntSt;
1968 end else if wkIntSt > wkIntTo then begin
1969 wkInt := wkIntTo;
1970 wkIntTo := wkIntSt;
1971 wkIntSt := wkInt;
1972 end;
1973 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
1974 ATitle := false
1975 else
1976 ATitle := true;
1977
1978 threadItem := BBSsFindThreadFromURL( URL );
1979
1980 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
1981 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
1982 if board <> nil then begin
1983 if not board.IsThreadDatRead then
1984 GikoSys.ReadSubjectFile( board );
1985 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
1986 end;
1987 end;
1988
1989 if threadItem <> nil then begin
1990 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
1991 //URL鐃緒申鐃緒申鐃緒申鐃緒申/鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?
1992 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
1993 wkIntSt := 1;
1994 wkIntTo := 1;
1995 end;
1996 FHint.PopupType := gptThread;
1997 HTMLCreater.SetResPopupText(FHint, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
1998 end;
1999 end;
2000 end;
2001
2002 if FHint.PopupType = gptRaw then begin
2003 if FHint.Caption <> '' then
2004 ShowTextPopup;
2005 end else begin
2006 if (FHint.ResCount <> 0) or (FHint.Title <> '') then
2007 ShowTextPopup;
2008 end;
2009 end;
2010 end;
2011
2012 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2013 var
2014 SysMenu: HMenu;
2015 begin
2016 FEnabledCloseButton := Enabled;
2017 SysMenu := GetSystemMenu(Handle, False);
2018
2019 if Enabled then begin
2020 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2021 end else begin
2022 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2023 end;
2024
2025 DrawMenuBar(Handle);
2026 end;
2027
2028 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2029 var AllowChange: Boolean);
2030 begin
2031 //鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2032 // if FTreeType = gtt2ch then
2033 // FSortIndex := -1;
2034 end;
2035
2036 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2037 Shift: TShiftState);
2038 var
2039 pos : TPoint;
2040 begin
2041 if GetActiveList is TBoard then begin
2042 case Key of
2043 VK_BACK:; // UpFolderButtonClick(Sender);
2044 VK_SPACE: ListDoubleClick(Shift);
2045 VK_RETURN: ListClick;
2046 VK_APPS:
2047 begin
2048 if ListView.Selected <> nil then begin
2049 pos.X := ListView.Column[ 0 ].Width;
2050 pos.Y := ListView.Selected.Top;
2051 end else begin
2052 pos.X := ListView.Left;
2053 pos.Y := ListView.Top;
2054 end;
2055 Windows.ClientToScreen( ListView.Handle, pos );
2056 ListPopupMenu.Popup( pos.X, pos.Y );
2057 end;
2058 end;
2059 end else begin // TBBS, TCategory
2060 case Key of
2061 VK_BACK:; // UpFolderButtonClick(Sender);
2062 VK_SPACE: ListClick;
2063 VK_RETURN: ListDoubleClick(Shift);
2064 VK_APPS:
2065 begin
2066 if ListView.Selected <> nil then begin
2067 pos.X := ListView.Column[ 0 ].Width;
2068 pos.Y := ListView.Selected.Top;
2069 end else begin
2070 pos.X := ListView.Left;
2071 pos.Y := ListView.Top;
2072 end;
2073 Windows.ClientToScreen( ListView.Handle, pos );
2074 ListPopupMenu.Popup( pos.X, pos.Y );
2075 end;
2076 end;
2077 end;
2078 end;
2079
2080 function TGikoForm.GetHttpState: Boolean;
2081 begin
2082 Result := FHttpState;
2083 end;
2084
2085 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2086 Column: TListColumn);
2087 var
2088 id, idx : Integer;
2089 orderList : TList;
2090 vSortIndex : Integer;
2091 vSortOrder : Boolean;
2092 begin
2093 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2094 if TObject( FActiveList ) is TBBS then begin
2095 orderList := GikoSys.Setting.BBSColumnOrder;
2096 vSortIndex := GikoSys.Setting.BBSSortIndex;
2097 vSortOrder := GikoSys.Setting.BBSSortOrder;
2098 end else if TObject( FActiveList ) is TCategory then begin
2099 orderList := GikoSys.Setting.CategoryColumnOrder;
2100 vSortIndex := GikoSys.Setting.CategorySortIndex;
2101 vSortOrder := GikoSys.Setting.CategorySortOrder;
2102 end else if TObject( FActiveList ) is TBoard then begin
2103 orderList := GikoSys.Setting.BoardColumnOrder;
2104 vSortIndex := GikoSys.Setting.BoardSortIndex;
2105 vSortOrder := GikoSys.Setting.BoardSortOrder;
2106 end else
2107 Exit;
2108
2109 id := Integer( orderList[ idx ] );
2110
2111
2112 if vSortIndex = id then
2113 vSortOrder := not vSortOrder
2114 else begin
2115 vSortOrder := id = 0;
2116 end;
2117
2118 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2119 end;
2120
2121 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2122 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2123 var
2124 ARect: TRect;
2125 begin
2126 DefaultDraw := True;
2127 Exit;
2128 DefaultDraw := False;
2129 if (cdsSelected in State) or (cdsHot in State) then begin
2130 Sender.Canvas.Brush.Color := clHighlight;
2131 Sender.Canvas.Font.Color := clHighlightText;
2132 end else begin
2133 Sender.Canvas.Brush.Color := clBtnFace;
2134 Sender.Canvas.Font.Color := clBtnText;
2135 end;
2136 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2137 Sender.Canvas.FillRect(ARect);
2138 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2139 end;
2140
2141 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2142 var
2143 Nodes: TTreeNodes;
2144 i: integer;
2145 begin
2146 Nodes := TreeView.Items;
2147
2148 for i := 0 to Nodes.Count - 1 do begin
2149 if Nodes.Item[i].Data = Data then begin
2150 Result := Nodes.Item[i];
2151 Exit;
2152 end;
2153 end;
2154 Result := nil;
2155 end;
2156
2157 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2158 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2159 Headers: OleVariant; var Cancel: WordBool);
2160 var
2161 sNo: string;
2162 p: TPoint;
2163 const
2164 kMenuName: string = 'menu:';
2165 begin
2166
2167 if Pos(kMenuName, URL) <> 0 then begin
2168 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2169
2170 if not GikoSys.IsNumeric(sNo) then Exit;
2171
2172 Cancel := True;
2173 GetCursorpos(p);
2174 KokoPopupMenu.Tag := StrToInt(sNo);
2175 KokoPopupMenu.Popup(p.x, p.y);
2176 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2177 Cancel := not GikoSys.Setting.OpenMailer;
2178 end;
2179
2180 end;
2181
2182 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2183 const ARect: TRect; var DefaultDraw: Boolean);
2184 var
2185 NodeRect: TRect;
2186 i, j: Integer;
2187 IsBoardNode: Boolean;
2188 Cnt: Integer;
2189 CntText: string;
2190 TextWidth: Integer;
2191 TextRect: TRect;
2192 Board: TBoard;
2193 Category: TCategory;
2194 Bitmap: TBitmap;
2195 NodeWidth: Integer;
2196 begin
2197 DefaultDraw := True;
2198
2199 if FTreeType = gttHistory then Exit;
2200
2201 TreeView.Canvas.Font.Color := clBlue;
2202 IsBoardNode := False;
2203 for i := 0 to TreeView.Items.Count - 1 do begin
2204 Cnt := 0;
2205 if not TreeView.Items[i].IsVisible then
2206 continue;
2207
2208 if TObject(TreeView.Items[i].Data) is TCategory then begin
2209 if TreeView.Items[i].Expanded then
2210 continue;
2211
2212 IsBoardNode := False;
2213 Category := TCategory(TreeView.Items[i].Data);
2214 for j := 0 to Category.Count - 1 do begin
2215 Board := Category.Items[j];
2216 if Board <> nil then begin
2217 if Board.UnRead > 0 then begin
2218 Cnt := 1;
2219 Break;
2220 end;
2221 end;
2222 end;
2223 if Cnt <> 1 then
2224 continue;
2225 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2226 IsBoardNode := True;
2227 Board := TBoard(TreeView.Items[i].Data);
2228
2229 Cnt := Board.UnRead;
2230 if Cnt <= 0 then
2231 continue;
2232 end else
2233 continue;
2234
2235 Bitmap := TBitmap.Create;
2236 try
2237 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2238 Bitmap.Canvas.Font.Style := [fsBold];
2239 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2240 finally
2241 Bitmap.Free;
2242 end;
2243
2244 NodeRect := TreeView.Items[i].DisplayRect(True);
2245
2246 if IsBoardNode then
2247 CntText := '(' + IntToStr(Cnt) + ')'
2248 else if Cnt = 1 then
2249 CntText := '(+)';
2250
2251
2252 TextWidth := TreeView.Canvas.TextWidth(CntText);
2253
2254 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2255 NodeRect.Top,
2256 NodeRect.Left + NodeWidth + TextWidth + 8,
2257 NodeRect.Bottom);
2258 DrawText(TreeView.Canvas.Handle,
2259 PChar(CntText),
2260 -1,
2261 TextRect,
2262 DT_SINGLELINE or DT_VCENTER);
2263 end;
2264 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2265 end;
2266
2267 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2268 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2269 var
2270 Board: TBoard;
2271 Category: TCategory;
2272 i: Integer;
2273 begin
2274 DefaultDraw := True;
2275
2276 if FTreeType = gttHistory then Exit;
2277
2278 TreeView.Canvas.Font.Style := [];
2279 if Node <> nil then begin
2280 if TObject(Node.Data) is TCategory then begin
2281 Category := TCategory(Node.Data);
2282 for i := 0 to Category.Count - 1 do begin
2283 Board := Category.Items[i];
2284 if Board <> nil then begin
2285 if Board.UnRead > 0 then begin
2286 TreeView.Canvas.Font.Style := [fsBold];
2287 Break;
2288 end;
2289 end;
2290 end;
2291 end else if TObject(Node.Data) is TBoard then begin
2292 Board := TBoard(Node.Data);
2293 if Board.UnRead > 0 then
2294 TreeView.Canvas.Font.Style := [fsBold];
2295 end;
2296 end;
2297 end;
2298
2299 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2300 begin
2301 TreeView.Invalidate;
2302
2303 if TObject(Node.Data) is TBBS then begin
2304 TBBS(Node.Data).NodeExpand := True;
2305 end else if TObject(Node.Data) is TCategory then begin
2306 TCategory(Node.Data).NodeExpand := True;
2307 end else if TObject(Node.Data) is TBoard then begin
2308 TBoard(Node.Data).NodeExpand := True;
2309 end;
2310 end;
2311
2312 procedure TGikoForm.ListViewAllSelect;
2313 begin
2314 ListView.SetFocus;
2315 ListView.SelectAll;
2316 end;
2317 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2318 begin
2319 AddMessageList(Msg, nil, Icon);
2320 end;
2321 // *************************************************************************
2322 //! 鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?
2323 // *************************************************************************
2324 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2325 var
2326 ATitle: string;
2327 s: string;
2328 boardPlugIn : TBoardPlugIn;
2329 i: Integer;
2330 Res : TResRec;
2331 begin
2332 try
2333 if Item.DownType = gdtBoard then
2334 ATitle := Item.Board.Title
2335 else
2336 ATitle := Item.ThreadItem.Title;
2337 if ATitle = '' then
2338 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2339
2340 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2341 //鐃緒申鐃緒申鐃?鐃緒申
2342 if Item.DownType = gdtBoard then begin
2343 //鐃緒申
2344 Item.SaveListFile;
2345 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2346 if GetActiveList = Item.Board then begin
2347 FActiveList := nil;
2348 //鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申
2349 if (GikoSys.Setting.AutoSortThreadList) then begin
2350 GikoSys.Setting.BoardSortIndex := 0;
2351 GikoSys.Setting.BoardSortOrder := True;
2352 end;
2353 Sort.SetSortDate(Now());
2354 SetActiveList(Item.Board);
2355 end;
2356 Item.Board.Modified := True;
2357 Item.Board.IsThreadDatRead := True;
2358 PlaySound('New');
2359 ListView.Refresh;
2360 end else if Item.DownType = gdtThread then begin
2361 //鐃?鐃緒申
2362 Item.SaveItemFile;
2363 Item.ThreadItem.NewArrival := True;
2364 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2365 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2366 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2367 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2368 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2369 Item.ThreadItem.Title := Res.FTitle;
2370 ATitle := Item.ThreadItem.Title;
2371 end else if ATitle = '鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?' then begin
2372 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2373 ATitle := Res.FTitle;
2374 end;
2375 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2376 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2377 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2378 break;
2379 end;
2380 end;
2381 if GikoSys.Setting.BrowserTabVisible then begin
2382 if GetActiveContent = Item.ThreadItem then
2383 InsertBrowserTab(Item.ThreadItem)
2384 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2385 InsertBrowserTab(Item.ThreadItem, True)
2386 else
2387 InsertBrowserTab(Item.ThreadItem, False);
2388
2389 end else begin
2390 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2391 InsertBrowserTab(Item.ThreadItem);
2392 end;
2393
2394 Application.ProcessMessages;
2395
2396 if Item.State = gdsComplete then begin
2397 PlaySound('New');
2398 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2399 //Add by Genyakun
2400 DiffComp := True;
2401 end else begin
2402 PlaySound('NewDiff');
2403 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2404 //Add by Genyakun
2405 DiffComp := True;
2406 end;
2407
2408 //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2409 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2410 Item.ThreadItem.Round := False;
2411 //Item.ThreadItem.RoundName := '';
2412 AddMessageList('鐃緒申1000鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 - [' + Item.ThreadItem.Title + ']', nil, gmiOK);
2413 end;
2414 TreeView.Refresh;
2415 //ListView鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申
2416 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
2417 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
2418 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
2419 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
2420 //ListView鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?
2421 case GikoForm.ViewType of
2422 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
2423 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
2424 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
2425 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
2426 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
2427 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
2428 end;
2429 end;
2430 RefreshListView(Item.ThreadItem);
2431 end;
2432
2433 end else if Item.State = gdsNotModify then begin
2434 //鐃緒申鐃?鐃?鐃?
2435 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2436 //SetContent(Item.ThreadItem);
2437 InsertBrowserTab(Item.ThreadItem);
2438 end;}
2439 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2440 PlaySound('NoChange');
2441 Screen.Cursor := crDefault;
2442 end else if Item.State = gdsAbort then begin
2443 //鐃緒申鐃?
2444 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2445 end else if Item.State = gdsError then begin
2446 //鐃?鐃緒申鐃?
2447 s := Item.ErrText;
2448 if s <> '' then
2449 s := ':' + s;
2450 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2451 // if Item.ResponseCode = 302 then
2452 // AddMessageList('鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?', nil, gmiNG);
2453 PlaySound('Error');
2454 end;
2455 finally
2456 Item.Free;
2457 Dec(FWorkCount);
2458 if FWorkCount < 0 then FWorkCount := 0;
2459 if FWorkCount = 0 then begin
2460 try
2461 Animate.Active := False;
2462 finally
2463 Screen.Cursor := crDefault;
2464 end;
2465 end;
2466
2467 end;
2468 end;
2469
2470 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2471 begin
2472 // SetProgressValue(Number, 0, AWorkCountMax);
2473 // ProgressBar.Visible := True;
2474 ProgressBar.Position := 0;
2475 ProgressBar.Max := AWorkCountMax;
2476 FDownloadTitle := AWorkTitle;
2477 StatusBar.Panels[1].Text := FDownloadTitle + ' - 鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申';
2478 FDownloadMax := AWorkCountMax;
2479 end;
2480
2481 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2482 begin
2483 ProgressBar.Position := 0;
2484 if FDownloadMax <> 0 then
2485 StatusBar.Panels[1].Text := FDownloadTitle + ' - 鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申';
2486 end;
2487
2488 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2489 begin
2490 ProgressBar.Position := AWorkCount;
2491 // SetProgressValue(Number, AWorkCount);
2492 StatusBar.Panels[1].Text := FDownloadTitle + ' - 鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2493 end;
2494
2495 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2496 var
2497 ListItem: TListItem;
2498 begin
2499 MessageListView.Items.BeginUpdate;
2500 try
2501 ListItem := MessageListView.Items.Add;
2502 ListItem.Caption := ACaption;
2503 ListItem.Data := AObject;
2504 ListItem.MakeVisible(False);
2505 case Icon of
2506 gmiOK: ListItem.ImageIndex := 0;
2507 gmiSAD: ListItem.ImageIndex := 1;
2508 gmiNG: ListItem.ImageIndex := 2;
2509 gmiWhat: ListItem.ImageIndex := 3;
2510 end;
2511 finally
2512 MessageListView.Items.EndUpdate;
2513 end;
2514 end;
2515
2516
2517 function TGikoForm.InsertBrowserTab(
2518 ThreadItem : TThreadItem;
2519 ActiveTab : Boolean = True
2520 ) : TBrowserRecord;
2521 var
2522 i, j, idx : Integer;
2523 favItem : TFavoriteThreadItem;
2524 newBrowser : TBrowserRecord;
2525 begin
2526
2527 Result := nil;
2528 if Threaditem = nil then Exit;
2529
2530 if ThreadItem.IsLogFile then begin
2531 //鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申browser鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2532 //鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申Active鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2533 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2534 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2535 j := FBrowsers.IndexOf(FActiveContent.Browser);
2536 if j = BROWSER_COUNT - 1 then
2537 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2538 end;
2539 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2540 if not FHistoryList.AddHistory( favItem, TreeView, FTreeType ) then
2541 favItem.Free;
2542
2543 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2544 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2545 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2546 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2547 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2548 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2549 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2550 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2551 break;
2552 end;
2553 end;
2554 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2555 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2556 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2557 end;
2558 if ActiveTab then begin
2559 BrowserTab.TabIndex := i;
2560 BrowserTab.OnChange(nil);
2561 BrowserTab.Repaint;
2562 end;
2563 Exit;
2564 end;
2565 end;
2566 end;
2567 idx := BrowserTab.TabIndex;
2568 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2569 newBrowser := TBrowserRecord.Create;
2570 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2571 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2572 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2573 break;
2574 end;
2575 end;
2576 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2577 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2578 //newBrowser.Browser.Navigate(BLANK_HTML);
2579 newBrowser.thread := ThreadItem;
2580 newBrowser.Repaint := true;
2581 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
2582
2583 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2584 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2585 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2586 end;// else begin
2587 //end;
2588 BrowserTab.Repaint;
2589 if ActiveTab then begin
2590 BrowserTab.TabIndex := 0;
2591 end;
2592
2593 end else begin
2594 newBrowser := TBrowserRecord.Create;
2595 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2596 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2597 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2598 break;
2599 end;
2600 end;
2601 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2602 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2603 //newBrowser.Browser.Navigate(BLANK_HTML);
2604 newBrowser.thread := ThreadItem;
2605 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
2606 newBrowser.Repaint := true;
2607
2608 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2609 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2610 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2611 end;
2612 //end;
2613 BrowserTab.Repaint;
2614 if ActiveTab then begin
2615 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2616 BrowserTab.TabIndex := 0
2617 else
2618 BrowserTab.TabIndex := i;
2619 end;
2620 end;
2621 Result := newBrowser;
2622 if(ActiveTab) or (idx = -1) then begin
2623 BrowserTab.OnChange(nil);
2624 end;
2625 end else begin
2626 if BrowserNullTab = nil then begin
2627 BrowserNullTab := TBrowserRecord.Create;
2628 BrowserNullTab.Browser := Browser;
2629 end;
2630 // if BrowserNullTab.thread <> ThreadItem then begin
2631 // BrowserNullTab.Movement := '';
2632 // end;
2633 BrowserNullTab.thread := ThreadItem;
2634 Result := BrowserNullTab;
2635 BrowserTab.TabIndex := -1;
2636 SetContent(BrowserNullTab);
2637 end;
2638
2639 if GikoSys.Setting.URLDisplay then
2640 AddressComboBox.Text := ThreadItem.URL;
2641
2642 end;
2643
2644 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2645 var
2646 BBSID: string;
2647 FileName: string;
2648 sTitle: string;
2649 doc: Variant;
2650 s: string;
2651 i: Integer;
2652 idx: Integer;
2653 ThreadItem: TThreadItem;
2654 Thread: TBrowserRecord;
2655 ThreadTitle, ThreadPTitle: string;
2656 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2657 begin
2658 Thread := inThread;
2659 idx := BrowserTab.TabIndex;
2660 if (FActiveContent <> nil) and
2661 (FActiveContent.Thread <> Thread.Thread) and
2662 (FActiveContent.Browser <> nil) and
2663 (Assigned(FActiveContent.Browser.Document)) then begin
2664 try
2665 try
2666 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document).Body).ScrollTop;
2667 except
2668 on E: Exception do
2669 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2670 end;
2671 finally
2672 end;
2673 end;
2674 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2675 Thread.Browser.Navigate(BLANK_HTML);
2676 BrowserBoardNameLabel.Caption := '';
2677 ItemBoardImage.Picture := nil;
2678 BrowserNameLabel.Caption := '';
2679 ItemImage.Picture := nil;
2680 BrowserNullTab.Thread := nil;
2681 //TOleControl(BrowserNullTab.Browser).Visible := true;
2682 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2683 FActiveContent := nil;
2684 Exit;
2685 end else if Thread.Browser = nil then begin
2686 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2687 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2688 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2689 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2690 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2691 break;
2692 end;
2693 end;
2694 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2695 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2696 end;
2697
2698 ThreadTitle := Thread.Thread.Title;
2699 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2700 //ThreadScrollTop := Thread.Thread.ScrollTop;
2701 ThreadIsLog := Thread.Thread.IsLogFile;
2702 ThreadItem := Thread.Thread;
2703 ThreadNewArraical := Thread.Thread.NewArrival;
2704 //ThreadUnRead := Thread.Thread.UnRead;
2705 BBSID := ThreadItem.ParentBoard.BBSID;
2706 FileName := ThreadItem.FileName;
2707
2708 if GetCapture = ListView.Handle then
2709 ReleaseCapture;
2710
2711 Screen.Cursor := crHourGlass;
2712
2713
2714 try
2715 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2716 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2717 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2718 end;
2719 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2720 if (not Assigned(Thread.Browser.Document)) then begin
2721 Thread.Browser.Navigate('about:blank');
2722 end;
2723 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2724 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2725 Application.ProcessMessages;
2726 if idx <> BrowserTab.TabIndex then begin
2727 Exit;
2728 end;
2729 end;
2730
2731 if (Thread <> nil) and (ThreadItem <>nil) then begin
2732 BrowserBoardNameLabel.Caption := ThreadPTitle;
2733 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2734 BrowserNameLabel.Caption := ThreadTitle;
2735 ItemImage.Picture := nil;
2736 if ThreadIsLog then
2737 if ThreadNewArraical then
2738 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
2739 else
2740 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
2741 else
2742 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
2743
2744 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
2745 BrowserNameLabel.Left := ItemImage.Left + 20;
2746
2747 end;
2748 //ActiveContent鐃?鐃緒申鐃?鐃?
2749 FActiveContent := Thread;
2750
2751 if not ThreadIsLog then begin
2752 Self.Caption := GikoDataModule.CAPTION_NAME ;
2753 //鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申
2754 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
2755 try
2756 Thread.Browser.BringToFront;
2757 s := '<HTML><BODY><CENTER>鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申</CENTER></BODY></HTML>';
2758 doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
2759 doc.open;
2760 doc.charset := 'Shift_JIS';
2761 doc.Write(s);
2762 doc.Close;
2763 finally
2764
2765 end;
2766 end else begin
2767 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
2768 //鐃?鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申
2769 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
2770 StatusBar.Panels[THREADSIZE_PANEL].Width :=
2771 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
2772 //Thread.Repaint鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?Thread鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申
2773 //鐃?鐃?鐃緒申Thread鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?
2774 if Thread.Repaint then begin
2775 Thread.Repaint := false;
2776
2777 Thread.Browser.OnStatusTextChange := nil;
2778 LockWindowUpdate(Thread.Browser.ParentWindow);
2779 HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
2780 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
2781 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
2782 end;
2783 end;
2784
2785 RefreshListView(ThreadItem);
2786 finally
2787 Screen.Cursor := crDefault;
2788 end;
2789 end;
2790
2791 function TGikoForm.GetActiveContent: TThreadItem;
2792 begin
2793 try
2794 if FActiveContent <> nil then
2795 Result := FActiveContent.Thread
2796 else
2797 Result := nil;
2798 except
2799 Result := nil;
2800 end;
2801
2802 end;
2803
2804 procedure TGikoForm.SetActiveList(Obj: TObject);
2805 var
2806 idx : Integer;
2807 begin
2808 // if FActiveList <> Obj then begin
2809 FActiveList := Obj;
2810 try
2811 if ListView.Selected <> nil then
2812 idx := ListView.Selected.Index
2813 else
2814 idx := -1;
2815 except
2816 idx := -1;
2817 end;
2818 ListView.Items.Count := 0;
2819 ListView.Items.Clear;
2820 ListView.Selected := nil;
2821 // ListView.Columns.Clear;
2822 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
2823 and (FActiveContent.Thread.IsLogFile) then begin
2824 try
2825 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
2826 except
2827 on E: Exception do begin
2828 //鐃?鐃緒申鐃緒申鐃緒申DL鐃緒申鐃緒申鐃緒申鐃緒申FActiveContent鐃緒申鐃緒申鐃緒申Thread鐃緒申
2829 //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2830 ReleaseBrowser(FActiveContent);
2831 FActiveContent.Thread := nil;
2832 Self.Caption := GikoDataModule.CAPTION_NAME;
2833 end;
2834 end;
2835 end else
2836 Self.Caption := GikoDataModule.CAPTION_NAME;
2837 //Application.Title := CAPTION_NAME;
2838
2839 // ActiveListColumnSave;
2840
2841 Screen.Cursor := crHourGlass;
2842 try
2843 if Obj is TBBS then begin
2844 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2845 end else if Obj is TCategory then begin
2846 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2847 end else if Obj is TBoard then begin
2848 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2849 end;
2850 finally
2851 Screen.Cursor := crDefault;
2852 end;
2853
2854 if idx >= 0 then begin
2855 if idx >= ListView.Items.Count then
2856 idx := ListView.Items.Count - 1;
2857 ListView.ItemIndex := idx;
2858 ListView.ItemFocused := ListView.Items.Item[ idx ];
2859 end;
2860 // end;
2861 end;
2862
2863
2864 //鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申
2865 //鐃緒申鐃緒申鐃緒申鐃緒申interface鐃緒申鐃?鐃緒申
2866 function TGikoForm.GetActiveList: TObject;
2867 begin
2868 Result := FActiveList;
2869 end;
2870
2871 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
2872 begin
2873 SetListViewType(AViewType, '', False);
2874 end;
2875
2876 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
2877 var
2878 Board: TBoard;
2879 i: Integer;
2880 begin
2881 for i := Length( BBSs ) - 1 downto 0 do begin
2882 BBSs[i].SelectText := SelectText;
2883 BBSs[i].KubetsuChk := KubetsuChk;
2884 end;
2885 ViewType := AViewType;
2886 if ActiveList is TBoard then begin
2887 Board := TBoard(ActiveList);
2888 case ViewType of
2889 //gvtAll: ListView.Items.Count := Board.Count;
2890 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
2891 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
2892 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
2893 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
2894 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
2895
2896 end;
2897
2898 SetActiveList(Board);
2899 end;
2900 end;
2901
2902 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
2903 const ARect: TRect; var DefaultDraw: Boolean);
2904 var
2905 s: string;
2906 p: TPoint;