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.635 - (show annotations) (download) (as text)
Sun Apr 15 16:21:29 2007 UTC (17 years ago) by h677
Branch: MAIN
CVS Tags: v1_56_0_700, v1_56_0_699
Branch point for: bRESPOPUP
Changes since 1.634: +64 -2 lines
File MIME type: text/x-pascal
タブのポップアップメニューに同じ板のスレッドを開くメニューを追加してみた。
履歴でキーボードのEnterでスレッドを開くとエラーが出る不具合の修正。

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