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.572 - (show annotations) (download) (as text)
Wed Dec 21 15:56:48 2005 UTC (18 years, 4 months ago) by h677
Branch: MAIN
Changes since 1.571: +2 -8 lines
File MIME type: text/x-pascal
スレ一覧の一番左のカラムは最初のソートが昇順。他は降順としていたので、そのように修正。

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