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.542 - (show annotations) (download) (as text)
Wed Nov 23 05:11:11 2005 UTC (18 years, 4 months ago) by h677
Branch: MAIN
Changes since 1.541: +97 -143 lines
File MIME type: text/x-pascal
ショートカットキーが効かない不具合の修正

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