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.584 - (show annotations) (download) (as text)
Wed Jan 18 16:14:58 2006 UTC (18 years, 3 months ago) by h677
Branch: MAIN
CVS Tags: v1_52_0_643
Changes since 1.583: +18 -0 lines
File MIME type: text/x-pascal
レス番号指定URLを踏んだときに既に表示済みでもジャンプするようにした。

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