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.608 - (show annotations) (download) (as text)
Thu Jul 13 15:03:53 2006 UTC (17 years, 9 months ago) by h677
Branch: MAIN
CVS Tags: v1_53_0_666
Changes since 1.607: +23 -16 lines
File MIME type: text/x-pascal
タブ削除時に,NullTabのスレッドをクリアするように修正
(以前の仕様)

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