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.566 - (show annotations) (download) (as text)
Thu Dec 15 15:49:35 2005 UTC (18 years, 4 months ago) by h677
Branch: MAIN
Changes since 1.565: +24 -21 lines
File MIME type: text/x-pascal
メインメニューのお気に入りのメニュー作成の高速化

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