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.580 - (show annotations) (download) (as text)
Sat Dec 31 16:33:48 2005 UTC (18 years, 3 months ago) by h677
Branch: MAIN
Changes since 1.579: +9 -3 lines
File MIME type: text/x-pascal
ギコナビを連続で起動したときに例外が発生し、フォームレイアウトが壊れる不具合の修正(再修正)
(Bb51からのマージ)

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