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.570 - (show annotations) (download) (as text)
Tue Dec 20 15:21:05 2005 UTC (18 years, 4 months ago) by h677
Branch: MAIN
Changes since 1.569: +34 -27 lines
File MIME type: text/x-pascal
スレ一覧のカラムのソートマークがおかしくなる不具合の修正

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