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.638.2.2 - (show annotations) (download) (as text)
Mon Aug 6 16:02:15 2007 UTC (16 years, 8 months ago) by h677
Branch: Bb56
CVS Tags: v1_56_2_724, v1_56_2_722, v1_56_0_721
Changes since 1.638.2.1: +5 -4 lines
File MIME type: text/x-pascal
最小化時にスクロールする問題の対策コード追加(Fromハ゛タ57)

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