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.612 - (show annotations) (download) (as text)
Sat Jul 29 00:08:08 2006 UTC (17 years, 8 months ago) by h677
Branch: MAIN
CVS Tags: v1_53_0_671, v1_53_0_672, v1_53_0_670, root-of-Bb53, v1_53_1_673
Branch point for: Bb53
Changes since 1.611: +21 -17 lines
File MIME type: text/x-pascal
ツールバーの入力エリアで標準のコンテキストメニューが表示されない不具合の修正

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