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.627 - (show annotations) (download) (as text)
Sun Jan 14 13:40:25 2007 UTC (17 years, 3 months ago) by h677
Branch: MAIN
CVS Tags: v1_54_0_689
Changes since 1.626: +1 -1 lines
File MIME type: text/x-pascal
レスエディタ,キー設定でマウスジェスチャーの入力がクリアされない不具合の修正

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