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