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.606 - (show annotations) (download) (as text)
Sat Jul 1 15:42:31 2006 UTC (17 years, 9 months ago) by h677
Branch: MAIN
CVS Tags: v1_53_0_663, v1_53_0_662
Changes since 1.605: +107 -173 lines
File MIME type: text/x-pascal
タブの自動保存で,タブがないときを保存するように修正

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