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.620 - (show annotations) (download) (as text)
Sun Aug 27 10:19:01 2006 UTC (17 years, 7 months ago) by h677
Branch: MAIN
CVS Tags: v1_54_0_682, v1_54_0_683
Changes since 1.619: +12 -6 lines
File MIME type: text/x-pascal
プレビューの位置が、画面の端を越えたときの処理を修正

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