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.541 - (show annotations) (download) (as text)
Mon Nov 21 14:56:32 2005 UTC (18 years, 5 months ago) by h677
Branch: MAIN
CVS Tags: v1_51_0_618
Changes since 1.540: +34 -9 lines
File MIME type: text/x-pascal
キャビネット周りのボタンのアクションを再設定

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