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.540 - (show annotations) (download) (as text)
Mon Nov 21 14:25:23 2005 UTC (18 years, 5 months ago) by h677
Branch: MAIN
Changes since 1.539: +0 -1 lines
File MIME type: text/x-pascal
ToolbarImageをGikoDMので共通化。
BrowserMaxandForcusイベントのUpdateイベントがつけ間違っていたのを修正。

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