6 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
7 OleCtrls, ComCtrls, ExtCtrls, Menus, StdCtrls, MMSystem, DateUtils,
15 IdHTTP, ActiveX, ActnList, ImgList,
16 ToolWin, Buttons, IdComponent, UrlMon, Tabs, IdGlobal, StrUtils,
17 CommCtrl, Dialogs, GikoSystem, Setting, BoardGroup, ThreadControl, ItemDownload,
18 Editor, RoundData, GikoPanel, Favorite, HTMLDocumentEvent,
19 {HintWindow,} GikoCoolBar, GikoListView, Search, ExternalBoardManager,
20 ExternalBoardPlugInMain, StdActns, Variants, ExtActns,IdTCPConnection,
21 IdBaseComponent, IdTCPClient, AppEvnts, BrowserRecord, MoveHistoryItem,
22 ShellAPI,Preview, HistoryList, ResPopupBrowser, ExtPreviewDatamodule;
27 USER_POPUPCLEAR = WM_USER + 2005; ///< wParam : TWebBrowser
30 TToolBarSettingSenderType = (tssNone, tssMain, tssList, tssBrowser);
31 TMinimizeType = (mtNone, mtMinimizing, mtMinimized);
32 TResizeType = (rtNone, rtResizing);
34 // TBrowserRecord = class;
36 TGikoForm = class(TForm)
37 StatusBar: TStatusBar;
40 TreeSplitter: TSplitter;
43 ThreadMainPanel: TPanel;
44 ListSplitter: TSplitter;
46 ListView: TGikoListView;
50 MessageHideButton: TSpeedButton;
51 MessageListView: TListView;
52 MessageSplitter: TSplitter;
54 CabinetCloseSpeedButton: TSpeedButton;
56 CabinetSelectToolButton: TToolButton;
57 HistoryToolBar: TToolBar;
58 HistoryShowToolButton: TToolButton;
59 HistoryAllClearToolButton: TToolButton;
60 ItemIcon16: TImageList;
61 ItemIcon32: TImageList;
62 HotToobarImageList: TImageList;
63 ItemImageList: TImageList;
66 DeleteMenu: TMenuItem;
68 KidokuMenu: TMenuItem;
69 MidokuMenu: TMenuItem;
70 AllSelectMenu: TMenuItem;
72 StdToolBarMenu: TMenuItem;
73 CabinetMenu: TMenuItem;
76 CabinetVisibleMenu: TMenuItem;
77 MessageMenu: TMenuItem;
78 StatusBarMenu: TMenuItem;
80 LargeIconMenu: TMenuItem;
81 SmallIconMenu: TMenuItem;
83 DetailMenu: TMenuItem;
89 OptionMenu: TMenuItem;
94 BrowserPopupMenu: TPopupMenu;
95 ShowThreadMenu: TMenuItem;
96 ShowBoardMenu: TMenuItem;
97 ListIconPopupMenu: TPopupMenu;
98 LargeIconPMenu: TMenuItem;
99 SmallIconPMenu: TMenuItem;
100 ListPMenu: TMenuItem;
101 DetailPMenu: TMenuItem;
102 ClosePopupMenu: TPopupMenu;
103 CloseMenu: TMenuItem;
113 ListPopupMenu: TPopupMenu;
114 ListRoundPMenu: TMenuItem;
115 ListReservPMenu: TMenuItem;
117 ItemRoundPMenu: TMenuItem;
119 KidokuPMenu: TMenuItem;
120 MidokuPMenu: TMenuItem;
121 AllSelectPMenu: TMenuItem;
122 UrlCopyPMenu: TMenuItem;
124 DeletePMenu: TMenuItem;
126 ViewPMenu: TMenuItem;
127 LargeIconLPMenu: TMenuItem;
128 SmallIconLPMenu: TMenuItem;
129 ListLPMenu: TMenuItem;
130 DetailLPMenu: TMenuItem;
148 KokoPopupMenu: TPopupMenu;
149 KokomadePMenu: TMenuItem;
151 MenuItem1: TMenuItem;
152 MenuItem2: TMenuItem;
153 BrowserTabPopupMenu: TPopupMenu;
158 TreePopupMenu: TPopupMenu;
159 TreeSelectThreadPupupMenu: TMenuItem;
160 TreeSelectBoardPupupMenu: TMenuItem;
162 TreeSelectURLPupupMenu: TMenuItem;
166 BrowserBottomPanel: TGikoPanel;
167 CabinetSelectPopupMenu: TPopupMenu;
169 ItemReservPMenu: TMenuItem;
170 RoundNamePopupMenu: TPopupMenu;
182 MessageImageList: TImageList;
183 ProgressBar: TProgressBar;
185 NameUrlCopyPMenu: TMenuItem;
192 ListCoolBar: TGikoCoolBar;
193 ListToolBar: TToolBar;
194 BrowserCoolBar: TGikoCoolBar;
195 BrowserToolBar: TToolBar;
196 ListNameToolBar: TToolBar;
197 ListNameLabel: TLabel;
199 BrowserNameToolBar: TToolBar;
200 ItemBoardImage: TImage;
201 BrowserBoardNameLabel: TLabel;
203 BrowserNameLabel: TLabel;
210 TreeSelectNameURLPupupMenu: TMenuItem;
214 BrowserTabToolBar: TToolBar;
215 BrowserTab: TTabControl;
226 FavoriteMenu: TMenuItem;
228 BoardFavoriteAddMenu: TMenuItem;
229 ThreadFavoriteAddMenu: TMenuItem;
231 TreeSelectFavoriteAddPupupMenu: TMenuItem;
232 FavoriteTreeView: TTreeView;
233 StateIconImageList: TImageList;
235 TopRightPanel: TPanel;
238 TopCoolPanel: TPanel;
239 MainCoolBar: TGikoCoolBar;
240 MenuToolBar: TToolBar;
241 StdToolBar: TToolBar;
242 AddressToolBar: TToolBar;
243 AddressComboBox: TComboBox;
244 MoveToToolButton: TToolButton;
245 AddressImageList: TImageList;
246 AddressToolBarMenu: TMenuItem;
256 PreviewTimer: TTimer;
257 MonazillaWebPageAction1: TMenuItem;
264 ChevronPopupMenu: TPopupMenu;
268 LinkToolBar: TToolBar;
273 LinkBarPopupMenu: TPopupMenu;
275 ThreadPopupMenu: TPopupMenu;
276 MenuItem4: TMenuItem;
277 MenuItem5: TMenuItem;
278 MenuItem6: TMenuItem;
281 SelectItemNameCopyAction1: TMenuItem;
284 NameCopyPMenu: TMenuItem;
285 SelectComboBox: TComboBox;
286 MainCoolBarPopupMenu: TPopupMenu;
287 StdToolBarVisiblePMenu: TMenuItem;
288 AddressToolBarVisiblePMenu: TMenuItem;
289 LinkToolBarVisiblePMenu: TMenuItem;
316 IndividualAbon1: TMenuItem;
318 IndividualAbon2: TMenuItem;
319 AntiIndivAbonMenuItem: TMenuItem;
320 AntiIndividualAbon: TMenuItem;
324 SearchBoardName: TMenuItem;
325 TreeSelectLogDeleteSeparator: TMenuItem;
328 FavoriteTreePopupMenu: TPopupMenu;
329 FavoriteTreeRenamePopupMenu: TMenuItem;
330 FavoriteTreeNewFolderPopupMenu: TMenuItem;
332 FavoriteTreeDeletePopupMenu: TMenuItem;
333 FavoriteToolBar: TToolBar;
334 FavoriteAddToolButton: TToolButton;
335 FavoriteArrangeToolButton: TToolButton;
336 FavoriteTreeBrowseFolderPopupMenu: TMenuItem;
338 FavoriteTreeReloadPopupMenu: TMenuItem;
340 FavoriteTreeURLCopyPopupMenu: TMenuItem;
341 FavoriteTreeNameCopyPopupMenu: TMenuItem;
342 FavoriteTreeLogDeletePopupMenu: TMenuItem;
344 FavoriteTreeNameURLCopyPopupMenu: TMenuItem;
346 ExportFavoriteFileAction1: TMenuItem;
357 TreeSelectLogDeletePopupMenu: TMenuItem;
359 BBSSelectPopupMenu: TPopupMenu;
360 PlugInMenu: TMenuItem;
361 TreeSelectNamePupupMenu: TMenuItem;
362 BrowserPanel: TPanel;
364 SelectThreadSave: TMenuItem;
368 OpenLogFolder: TMenuItem;
369 Browser: TWebBrowser;
372 ResRangePopupMenu: TPopupMenu;
373 ResRangeHundPMenuItem: TMenuItem;
374 ResRangeKokoPMenuItem: TMenuItem;
375 ResRangeNewPMenuItem: TMenuItem;
376 ResRangeAllPMenuItem: TMenuItem;
377 BrowsBoradHeadAction1: TMenuItem;
378 ThreadRangePopupMenu: TPopupMenu;
385 ResRangeSelectPMenuItem: TMenuItem;
386 ListColumnPopupMenu: TPopupMenu;
395 SelectComboBoxPanel: TPanel;
396 SelectComboBoxSplitter: TImage;
399 GikoApplicationEvents: TApplicationEvents;
406 FavoriteTreeItemNameCopyPopupMenu: TMenuItem;
409 SaveThreadFile: TMenuItem;
414 SameBoardThreadItem: TMenuItem;
419 ResPopupClearTimer: TTimer;
420 TaskTrayPopupMenu: TPopupMenu;
423 UpdateGikonaviAction1: TMenuItem;
427 URLPATHINFO1: TMenuItem;
428 URLQUERYSTRING1: TMenuItem;
432 procedure FormCreate(Sender: TObject);
433 procedure FormDestroy(Sender: TObject);
434 procedure SaveSettingAll();
435 procedure BrowserStatusTextChange(Sender: TObject;
436 const Text: WideString);
437 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
438 procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
439 var AllowChange: Boolean);
440 procedure ListViewKeyDown(Sender: TObject; var Key: Word;
442 procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
443 procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
444 Button: TToolButton; State: TCustomDrawState;
445 var DefaultDraw: Boolean);
446 procedure BrowserBeforeNavigate2(Sender: TObject;
447 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
448 Headers: OleVariant; var Cancel: WordBool);
449 procedure TreeViewCustomDraw(Sender: TCustomTreeView;
450 const ARect: TRect; var DefaultDraw: Boolean);
451 procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
452 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
453 procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
454 procedure ListViewCustomDraw(Sender: TCustomListView;
455 const ARect: TRect; var DefaultDraw: Boolean);
456 procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
457 Shift: TShiftState; X, Y: Integer);
458 procedure TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
459 procedure MessageListViewResize(Sender: TObject);
460 procedure CabinetVisible( isVisible : Boolean );
461 procedure FormResize(Sender: TObject);
462 procedure ListPopupMenuPopup(Sender: TObject);
463 procedure TreePopupMenuPopup(Sender: TObject);
464 procedure BrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
465 var Cancel: WordBool);
466 procedure ListSplitterMoved(Sender: TObject);
467 procedure BrowserTabChange(Sender: TObject);
468 procedure BrowserTabMouseDown(Sender: TObject; Button: TMouseButton;
469 Shift: TShiftState; X, Y: Integer);
470 procedure BrowserTabDragOver(Sender, Source: TObject; X, Y: Integer;
471 State: TDragState; var Accept: Boolean);
472 procedure BrowserTabDragDrop(Sender, Source: TObject; X, Y: Integer);
473 procedure BrowserTabMouseMove(Sender: TObject; Shift: TShiftState; X,
475 procedure BrowserDocumentComplete(Sender: TObject;
476 const pDisp: IDispatch; var URL: OleVariant);
477 procedure RoundNamePopupMenuPopup(Sender: TObject);
478 procedure FormShow(Sender: TObject);
479 procedure BrowserTabToolBarResize(Sender: TObject);
480 procedure FavoriteMenuClick(Sender: TObject);
481 procedure MainCoolBarResize(Sender: TObject);
482 procedure AddressToolBarResize(Sender: TObject);
483 procedure AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
485 procedure BrowserEnter(Sender: TObject);
486 procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
487 procedure PreviewTimerTimer(Sender: TObject);
488 procedure MessageHideButtonClick(Sender: TObject);
489 procedure HistoryAllClearToolButtonClick(Sender: TObject);
490 procedure MainCoolBarBandInfo(Sender: TObject;
491 var BandInfo: PReBarBandInfoA);
492 procedure MainCoolBarChevronClick(Sender: TObject;
493 RebarChevron: PNMRebarChevron);
494 procedure ListCoolBarBandInfo(Sender: TObject;
495 var BandInfo: PReBarBandInfoA);
496 procedure ListCoolBarChevronClick(Sender: TObject;
497 RebarChevron: PNMRebarChevron);
498 procedure BrowserCoolBarBandInfo(Sender: TObject;
499 var BandInfo: PReBarBandInfoA);
500 procedure BrowserCoolBarChevronClick(Sender: TObject;
501 RebarChevron: PNMRebarChevron);
502 procedure ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
503 procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
504 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
505 procedure SelectComboBoxChange(Sender: TObject);
506 procedure SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
508 procedure SelectComboBoxExit(Sender: TObject);
509 procedure SelectComboBoxSplitterMouseMove(Sender: TObject;
510 Shift: TShiftState; X, Y: Integer);
511 procedure SelectComboBoxSplitterMouseDown(Sender: TObject;
512 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
513 procedure SelectComboBoxSplitterMouseUp(Sender: TObject;
514 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
515 procedure StatusBarResize(Sender: TObject);
516 procedure SelectComboBoxEnter(Sender: TObject);
517 procedure FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
519 procedure FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
520 procedure FavoriteTreeViewEdited(Sender: TObject; Node: TTreeNode;
522 procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
524 procedure FavoriteTreePopupMenuPopup(Sender: TObject);
525 procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
526 procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
527 Shift: TShiftState; X, Y: Integer);
528 procedure LinkToolBarDragOver(Sender, Source: TObject; X, Y: Integer;
529 State: TDragState; var Accept: Boolean);
530 procedure FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
532 procedure FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
533 procedure BrowserTabContextPopup(Sender: TObject; MousePos: TPoint;
534 var Handled: Boolean);
535 procedure BrowserTabPopupMenuPopup(Sender: TObject);
536 procedure BrowserTabResize(Sender: TObject);
537 procedure TreeViewKeyDown(Sender: TObject; var Key: Word;
539 procedure FavoriteTreeViewMouseDown(Sender: TObject;
540 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
541 procedure MessagePanelResize(Sender: TObject);
543 procedure SelectTimerTimer(Sender: TObject);
544 procedure ListViewColumnRightClick(Sender: TObject;
545 Column: TListColumn; Point: TPoint);
546 procedure ListViewCustomDrawItem(Sender: TCustomListView;
547 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
548 procedure FormActivate(Sender: TObject);
549 procedure BrowserPanelResize(Sender: TObject);
550 procedure MenuToolBarResize(Sender: TObject);
551 procedure ListToolBarResize(Sender: TObject);
552 procedure BrowserToolBarResize(Sender: TObject);
553 procedure KokoPopupMenuPopup(Sender: TObject);
554 procedure ListViewKeyUp(Sender: TObject; var Key: Word;
556 procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
557 var AllowEdit: Boolean);
558 procedure CabinetCloseSpeedButtonClick(Sender: TObject);
559 procedure FavoriteArrangeToolButtonClick(Sender: TObject);
560 procedure GikoApplicationEventsMessage(var Msg: tagMSG;
561 var Handled: Boolean);
562 procedure GikoApplicationEventsDeactivate(Sender: TObject);
563 procedure GikoApplicationEventsException(Sender: TObject; E: Exception);
564 procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
565 Shift: TShiftState; X, Y: Integer);
566 procedure GetResURLMenuClick(Sender: TObject);
567 procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
568 var Handled: Boolean);
569 procedure ResPopupClearTimerTimer(Sender: TObject);
572 FEnabledCloseButton: Boolean;
573 FClickNode: TTreeNode;
575 FPreviewBrowser: TPreviewBrowser;
577 FBrowserSizeHeight: Integer;
578 FBrowserSizeWidth: Integer;
579 FTabHintIndex: Integer;
580 FListStyle: TViewStyle; //
\83\8a\83X
\83g
\83A
\83C
\83R
\83\93\83X
\83^
\83C
\83\8b
581 FItemNoVisible: Boolean; //
\83\8a\83X
\83g
\94Ô
\8d\86\95\
\8e¦
\83t
\83\89\83O
582 FViewType: TGikoViewType; //
\83\8a\83X
\83g
\83A
\83C
\83e
\83\80\95\
\8e¦
\83^
\83C
\83v
583 FActiveList: TObject;
584 FActiveContent: TBrowserRecord; //
586 FHistoryList: THistoryList; //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
587 FTreeType: TGikoTreeType;
591 FDownloadTitle: string; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\83^
\83C
\83g
\83\8b\96¼
592 FDownloadMax: Integer; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\8dÅ
\91å
\83T
\83C
\83Y
593 FEvent: THTMLDocumentEventSink;//
\83u
\83\89\83E
\83U
\83h
\83L
\83\85\83\81\83\93\83g
\83C
\83x
\83\93\83g
594 IsDraggingSelectComboBox : Boolean;
595 DraggingSelectComboBoxPosition : TPoint;
596 FSearchDialog: TSearchDialog;
597 FDropSpaceNode: TTreeNode;
598 FDragTime : Cardinal; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
599 FDragButton : TToolButton; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
\82ÉDrag
\82µ
\82Ä
\82éButton
\95Û
\91¶
600 FDragWFirst : Boolean; ///< WebTab
\82ÌD&D
\97p
601 FListViewBackGroundColor : TColor; ///< ListView
\82ÌBackGroundColor
602 FUseOddResOddColor : Boolean; ///<
\8eæ
\93¾
\83\8c\83X
\90\94\82Æ
\83X
\83\8c\83b
\83h
\82Ì
\83\8c\83X
\90\94\82ª
\88á
\82Á
\82½
\82Æ
\82«
\82É
\91¼
\82Ì
\90F
\82Å
\95\
\8e¦
603 FOddColor : TColor; ///<
\82»
\82Ì
\90F
604 FSelectResWord : string; ///<
\83\8c\83X
\8di
\8d\9e\83\8f\81[
\83h
605 FIsIgnoreResize : TResizeType; ///<
\83\8a\83T
\83C
\83Y
\83C
\83x
\83\93\83g
\82ð
\96³
\8e\8b\82·
\82é
\82©
\82Ç
\82¤
\82©
606 FIsMinimize : TMinimizeType; ///<
\8dÅ
\8f¬
\89»
\82µ
\82Ä
\82¢
\82é
\8dÅ
\92\86\82©
607 FOldFormWidth : Integer; ///<
\92¼
\91O
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\95\9d
608 FToolBarSettingSender : TToolBarSettingSenderType; ///<
\83c
\81[
\83\8b\83o
\81[
\90Ý
\92è
\82ð
\83N
\83\8a\83b
\83N
\82µ
\82½
\83N
\81[
\83\8b\83o
\81[
609 FMouseDownPos : TPoint; ///<
\83u
\83\89\83E
\83U
\83^
\83u
\82Å
\83}
\83E
\83X
\82ð
\89\9f\82µ
\82½
\82Æ
\82«
\82Ì
\8dÀ
\95W
611 FResRangeMenuSelect : Longint; ///< ResRangeButton
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\8d\80\96Ú (
\83t
\83H
\81[
\83}
\83b
\83g
\82Í ResRange
\8cÝ
\8a·)
613 FIsHandledWheel : Boolean; ///<
\8aù
\82É
\8eó
\82¯
\8eæ
\82Á
\82½ WM_MOUSEWHEEL
\82©
\82Ç
\82¤
\82©
614 DiffComp: Boolean; //Add by Genyakun
\83X
\83\8c\82ª
\8dX
\90V
\82³
\82ê
\82½
\82Æ
\82«
\82ÉTrue
\82É
\82È
\82é
615 FOrigenCaption: String; //
\82¨
\8bC
\82É
\93ü
\82è
\83c
\83\8a\81[
\82Ì
\83A
\83C
\83e
\83\80\95Ò
\8fW
\8e\9e\82Ì
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
616 FPreviewBrowserRect: TRect; ///<
\83v
\83\8c\83r
\83\85\81[
\82Ì
\95\
\8e¦
\88Ê
\92u
\82ð
\8bL
\89¯
\82·
\82é
617 FActionListGroupIndexes: array of Integer; ///<GikoDM
\8fã
\82Ì
\83A
\83N
\83V
\83\87\83\93\83\8a\83X
\83g
\82Ì
\8ae
\83A
\83N
\83V
\83\87\83\93\82É
\90Ý
\92è
\82³
\82ê
\82½GroupIndex
\82ð
\95Û
\91¶
\82·
\82é
\94z
\97ñ
618 FResPopupBrowser: TResPopupBrowser;
619 FUpdateExePath: string; ///
\83M
\83R
\83i
\83r
\8dX
\90V
\83C
\83\93\83X
\83g
\81[
\83\89\83p
\83X
620 FUpdateExeArgs: string; ///
\83M
\83R
\83i
\83r
\8dX
\90V
\83C
\83\93\83X
\83g
\81[
\83\89\88ø
\90\94
621 FKokoPopupThreadItem: TThreadItem;
622 FCwSave: Word; // 8087CW
\92l
\95Û
\91¶
623 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
624 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
625 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
626 procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
627 procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
629 procedure ListDoubleClick(Shift: TShiftState);
630 function Hook(var Message: TMessage): Boolean;
631 procedure AddRoundNameMenu(MenuItem: TMenuItem);
632 procedure SetMenuFont;
633 procedure CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
634 procedure FavoriteClick(Sender: TObject; ActiveTab: Boolean); overload;
635 procedure FavoriteClick(Sender: TObject); overload;
636 procedure FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
637 function OnDocumentContextMenu(Sender: TObject): WordBool;
638 function GetWidthAllToolButton(ToolBar: TToolBar): Integer;
639 procedure MenuBarChevronMenu;
640 procedure LinkBarChevronMenu;
641 procedure ToolBarChevronMenu(ToolBar: TToolBar);
642 procedure LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
643 procedure LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
644 procedure LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
645 procedure LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
646 procedure LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
647 function TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
648 procedure FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
649 procedure FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
650 procedure FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
652 procedure SetListViewBackGroundColor(value: TColor);
653 procedure BBSMenuItemOnClick( Sender : TObject );
654 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
655 procedure SaveCoolBarSettings;
656 procedure SaveMainCoolBarSettings;
657 procedure SaveBoardCoolBarSettings;
658 procedure SaveBrowserCoolBarSettings;
659 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
660 procedure LoadCoolBarSettings;
661 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
662 procedure OnMinimize;
663 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½
664 procedure OnMinimized;
665 /// TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
666 procedure TreeClick( Node : TTreeNode );
667 /// TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
668 procedure TreeDoubleClick( Node : TTreeNode );
669 ///
\8ae
\8f\8a\82É
\82 \82é
\83L
\83\83\83r
\83l
\83b
\83g
\81E BBS
\83\81\83j
\83\85\81[
\82ð
\83Z
\83b
\83g
\81^
\8dX
\90V
670 procedure SetBBSMenu;
671 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
672 procedure ListColumnPopupMenuOnClick( Sender : TObject );
673 //!
\8di
\82è
\8d\9e\82Ý
\95¶
\8e\9a\97ñ
\90Ý
\92è
674 procedure SetSelectWord( const text : string );
675 //
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
676 function GetScreenCursor(): TCursor;
677 //
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
678 procedure SetScreenCursor(Cursor : TCursor);
679 //!
\83_
\83E
\83\93\83\8d\81[
\83h
\83R
\83\93\83g
\83\8d\81[
\83\8b\83X
\83\8c\83b
\83h
\82Ì
\90¶
\90¬
680 procedure CreateControlThread();
681 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
682 procedure CreateBrowsers(count: Integer);
683 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
684 procedure GetGroupIndex(ActionList: TActionList);
685 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
686 procedure SetGroupIndex(ActionList: TActionList);
687 //!
\8ew
\92è
\82³
\82ê
\82½
\83X
\83\8c\83b
\83h
\82ð
\8aJ
\82(
\83\8d\83O
\82ª
\96³
\82¢
\82Æ
\82« or
\8ew
\92èJUMP
\82Ü
\82Å
\91«
\82è
\82È
\82¢
\82Æ
\82«
\82ÍDL
\82·
\82é)
688 procedure OpenThreadItem(Thread: TThreadItem; URL: String);
689 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
690 procedure RefreshListView(Thread: TThreadItem);
691 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
692 procedure ClearThreadRengeAction;
693 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82Ì
\83A
\83C
\83R
\83\93\8dí
\8f\9c\81\95\83t
\83H
\81[
\83\80\95\
\8e¦
694 procedure UnStoredTaskTray;
695 //!
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
696 procedure ShowEditors(nCmdShow: Integer);
697 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
698 procedure ReleaseOldestBrowser;
699 //!
\83A
\83N
\83e
\83B
\83u
\82È
\83^
\83u
\82Æ
\93¯
\82¶
\94Â
\82Ì
\8aJ
\82¢
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83\81\83j
\83\85\81[
\83A
\83C
\83e
\83\80\82É
\92Ç
\89Á
700 procedure AddMenuSameBoardThread(MenuItem: TMenuItem);
701 //!
\83A
\83N
\83e
\83B
\83u
\82È
\83^
\83u
\82Æ
\93¯
\82¶
\94Â
\82Ì
\8aJ
\82¢
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
702 procedure SameBoardThreadSubItemOnClick(Sender: TObject);
703 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83u
\83\89\83E
\83U
\8dì
\90¬
704 procedure CreateResPopupBrowser;
705 //!
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
706 function isValidFile(FileName: String) : boolean;
707 //! ListView
\82ÌD&D
\8eó
\82¯
\8eæ
\82è
708 procedure AcceptDropFiles(var Msg: TMsg);
709 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\8dX
\90V
\8f\88\97\9d
710 procedure UpdateListView();
711 //!
\83A
\83C
\83R
\83\93\93Ç
\82Ý
\8d\9e\82Ý
712 procedure LoadIcon();
713 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\93Ç
\82Ý
\8d\9e\82Ý
714 procedure LoadPopupMenu();
716 procedure CreateParams(var Params: TCreateParams); override;
717 procedure WndProc(var Message: TMessage); override;
718 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
719 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
720 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
723 LastRoundTime: TDateTime;
724 BrowserNullTab: TBrowserRecord;
725 FControlThread: TThreadControl;
726 FIconData : TNotifyIconData;
727 procedure MoveToURL(const inURL: string; KeyMask: Boolean = False);
728 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
730 function GetHttpState: Boolean;
731 procedure SetEnabledCloseButton(Enabled: Boolean);
732 function GetTreeNode(Data: TObject): TTreeNode;
733 procedure ListViewAllSelect;
734 property ListStyle: TViewStyle read FListStyle write FListStyle;
735 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
736 property ViewType: TGikoViewType read FViewType write FViewType;
737 property NameCookie: string read FNameCookie write FNameCookie;
738 property MailCookie: string read FMailCookie write FMailCookie;
739 property ClickNode: TTreeNode read FClickNode write FClickNode;
740 property TreeType: TGikoTreeType read FTreeType write FTreeType;
741 property ActiveContent: TBrowserRecord read FActiveContent write FActiveContent;
742 property ResRangeMenuSelect: Longint read FResRangeMenuSelect write FResRangeMenuSelect;
743 property SelectResWord : string read FSelectResWord write FSelectResWord;
744 property BrowserSizeWidth: Integer read FBrowserSizeWidth write FBrowserSizeWidth;
745 property BrowserSizeHeight: Integer read FBrowserSizeHeight write FBrowserSizeHeight;
746 property SearchDialog: TSearchDialog read FSearchDialog write FSearchDialog;
747 property ToolBarSettingSender : TToolBarSettingSenderType
748 read FToolBarSettingSender write FToolBarSettingSender;
749 property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
750 property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
751 property WorkCount: Integer read FWorkCount write FWorkCount;
752 property UpdateExePath: string read FUpdateExePath write FUpdateExePath;
753 property UpdateExeArgs: string read FUpdateExeArgs write FUpdateExeArgs;
755 procedure SetContent(inThread: TBrowserRecord);
756 function GetActiveContent(popup :Boolean = false): TThreadItem;
757 function GetActiveList: TObject;
759 procedure SetListViewType(AViewType: TGikoViewType); overload;
760 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
761 procedure PlaySound(SoundEventName: string);
762 procedure ShowBBSTree( inBBS : TBBS );
763 procedure ShowBBSTreeOld( inBBS : TBBS );
764 procedure ShowHistoryTree;
765 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
766 procedure SetBrowserTabState;
767 procedure SetToolBarPopup;
768 procedure ShowFavoriteAddDialog( Item : TObject );
769 procedure FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
770 procedure RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
771 property ListViewBackGroundColor: TColor read FListViewBackGroundColor write SetListViewBackGroundColor;
772 property UseOddResOddColor : Boolean read FUseOddResOddColor write FUseOddResOddColor;
773 property OddColor : TColor read FOddColor write FOddColor;
774 //!
\83\8c\83X
\83\81\83j
\83\85\81[
\83A
\83N
\83e
\83B
\83u
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80
775 property KokoPopupThreadItem : TThreadItem read FKokoPopupThreadItem;
777 function FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
778 procedure OnPlugInMenuItem( Sender : TObject );
779 procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
780 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶ KuroutSetting
\82©
\82ç
\82æ
\82Ñ
\82¾
\82µ
\82½
\82¢
\82Ì
\82Å
781 procedure ActiveListColumnSave;
782 procedure SetActiveList(Obj: TObject);
783 property ActiveList: TObject read GetActiveList write SetActiveList;
784 /// CoolBar
\82ª
\83T
\83C
\83Y
\95Ï
\8dX
\82³
\82ê
\82½
785 procedure CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
786 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
787 procedure IndividualAbonID(Atype : Integer);
788 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
789 procedure IndividualAbon(Atag, Atype : Integer);
790 //
\93¯
\88êID
\82ðNG
\83\8f\81[
\83h
\82É
\93o
\98^
791 procedure AddIDtoNGWord(invisible : boolean);
792 //
\83u
\83\89\83E
\83U
\82Ì
\8dÄ
\95`
\89æ true:
\91S
\82Ä
\82Ì
\83^
\83u false:
\83A
\83N
\83e
\83B
\83u
\82È
\83^
\83u
\82Ì
\82Ý
793 procedure RepaintAllTabsBrowser();
794 //
\83\8a\83\93\83N
\83o
\81[
\90Ý
\92è
795 procedure SetLinkBar;
796 procedure FavoriteBrowseFolder( node: TTreeNode );
797 //
\83X
\83\8c\83b
\83h
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
798 procedure DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
799 //
\94Â
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
800 procedure DownloadList(Board: TBoard; ForceDownload: Boolean = False);
801 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
802 procedure DeleteHistory( threadItem: TThreadItem );
803 //
\83^
\83u
\82ð
\8dí
\8f\9c \83X
\83\8c\83b
\83h
\8ew
\92è
804 procedure DeleteTab(ThreadItem: TThreadItem); overload;
805 //
\83^
\83u
\82ð
\8dí
\8f\9c \83u
\83\89\83E
\83U
\83\8c\83R
\81[
\83h
\81i
\83^
\83u
\81j
\8ew
\92è
806 procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
807 //
\83^
\83u
\8dí
\8f\9c\81i
\8eÀ
\91\95\95\94\81j
808 procedure DeleteTab(index, selectIndex: Integer); overload;
809 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
810 procedure BrowserMovement(const AName: string); overload;
811 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
812 procedure BrowserMovement(scroll: Integer); overload;
813 //Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
814 function GetMainForm(): TComponent;
815 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
816 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
817 procedure OnGestureStart(Sender: TObject);
818 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
819 procedure OnGestureMove(Sender: TObject);
820 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
821 procedure OnGestureEnd(Sender: TObject);
822 ///
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
823 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
824 //ListView
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\82ð
\8eæ
\93¾
\82·
\82é
825 procedure SelectListItem(List: TList);
826 //
\8ew
\92è
\82µ
\82½
\83\8c\83X
\82ð
\83R
\83s
\81[
\82·
\82é
827 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
829 procedure ModifySelectList;
831 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
833 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
835 procedure SetSelectRoundName(Sender: TObject);
837 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
839 function WebBrowserClick(Sender: TObject): WordBool;
840 //!
\83c
\81[
\83\8b\83o
\81[
\82É
\83X
\83\8c\8di
\8d\9e\82Ý
\83R
\83\93\83{
\83{
\83b
\83N
\83X
\82ð
\90Ý
\92è
\82·
\82é
841 procedure SetSelectComboBox();
843 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\8ai
\94[
\82µ
\82½
\83A
\83C
\83R
\83\93\82ð
\83N
\83\8a\83b
\83N
\82µ
\82½
\82Æ
\82«
\82Ì
\8f\88\97\9d
844 procedure TaskTrayIconMessage(var Msg : TMsg); message WM_USER + 2010;
845 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
846 procedure StoredTaskTray;
847 //!
\93¯ID
\83\8c\83X
\83A
\83\93\83J
\81[
\95\
\8e¦
848 procedure ShowSameIDAncher(const AID: String);
850 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
853 TFavoriteMenuItem = class(TMenuItem)
857 property Data: Pointer read FData write FData;
860 TBBSMenuItem = class(TMenuItem)
864 property Data: Pointer read FData write FData;
867 TLinkToolButton = class(TToolButton)
871 property Data: Pointer read FData write FData;
880 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
881 YofUtils, ToolBarUtil, ToolBarSetting,
882 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
883 FavoriteArrange, AddressHistory, Gesture,
884 About, Option, Round, Splash, Sort, ListSelect, Imm,
885 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
886 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
887 InputAssistDataModule, Types, ReplaceDataModule, PopupMenuUtil;
890 BLANK_HTML: string = 'about:blank';
891 BROWSER_COUNT = 5; //
\83u
\83\89\83E
\83U
\82Ì
\90\94
893 DandD_THRESHOLD = 5; //D&D
\82Ìè
\87\92l
\81ipixcel)
894 //
\83v
\83\8c\83r
\83\85\81[
\83t
\83@
\83C
\83\8b\96¼
895 HTML_FILE_NAME = 'temp_preview.html';
896 //
\83\81\83b
\83Z
\81[
\83WID
897 USER_TREECLICK = WM_USER + 2000;
898 USER_RESIZED = WM_USER + 2001;
899 USER_MINIMIZED = WM_USER + 2002;
900 USER_SETLINKBAR = WM_USER + 2003;
901 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
902 USER_TASKTRAY = WM_USER + 2010;
905 procedure TGikoForm.CreateParams(var Params: TCreateParams);
908 if FormStyle in [fsNormal, fsStayOnTop] then begin
909 if BorderStyle in [bsSingle, bsSizeable] then begin
910 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
911 Params.WndParent := 0;
916 procedure TGikoForm.FormCreate(Sender: TObject);
918 TVS_NOTOOLTIPS = $0080;
924 wp: TWindowPlacement;
928 Writeln('============================================================');
929 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
931 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
932 Writeln('
\8fI
\97¹
\8e\9e\82Í
\81A
\83M
\83R
\83i
\83r
\83E
\83B
\83\93\83h
\83E
\82ð
\95Â
\82¶
\82Ä
\82
\82¾
\82³
\82¢');
933 Writeln('============================================================');
936 //
\83[
\83\8d\8a\84\97á
\8aO
\82Ì
\8c»
\8dÝ
\82Ì
\90Ý
\92è
\82ð
\95Û
\91¶
\82·
\82é
937 FCwSave := Get8087CW;
938 if ( AnsiPos('9.0', GikoSys.GetIEVersion()) = 1 ) then begin
939 // IE 9
\82Ì
\8fê
\8d\87\82¾
\82¯
\81A
\96³
\8cø
\83r
\83b
\83g
\82ð
\97§
\82Ä
\82é
940 Set8087CW(FCwSave or $0004);
942 Sort.SetSortDate(Now());
944 FTreeType := gttNone;
945 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô
947 Application.HookMainWindow(Hook);
948 FIsIgnoreResize := rtResizing;
949 //ActionList
\82ÌGuoupIndex
\82ð
\95Û
\91¶
\82µ
\82Ä
\81A0
\82É
\83N
\83\8a\83A
\82·
\82é
\81B
950 //(
\8bN
\93®
\8e\9e\82É
\83c
\81[
\83\8b\83{
\83^
\83\93\82ÌDown
\83v
\83\8d\83p
\83e
\83B
\82ð
\94½
\89f
\82³
\82¹
\82é
\93s
\8d\87\8fãGroupIndex
\82Í
\90Ý
\92è
\82Å
\82«
\82È
\82¢)
951 //
\82±
\82ê
\88È
\8cãSet
\81`
\82Å
\8dÄ
\90Ý
\92è
\82·
\82é
\82Ü
\82Å
\81AAction
\82ÌChecked
\82ð
\82¢
\82¶
\82é
\82Æ
\82«
\82Í
\92\8d\88Ó
\81I
952 GetGroupIndex(GikoDM.GikoFormActionList);
953 FSearchDialog := nil;
954 FResPopupBrowser := nil;
955 CreateBrowsers(BROWSER_COUNT);
957 FUpdateExePath := '';
958 FUpdateExeArgs := '';
960 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
963 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
964 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
966 //
\83A
\83C
\83R
\83\93\82Ì
\93Ç
\82Ý
\8eæ
\82è
969 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
970 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
972 EnabledCloseButton := True;
974 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
975 ListView.ViewStyle := GikoSys.Setting.ListStyle;
977 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
979 AnimePanel.Left := 0;
981 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
983 //
\83L
\83\83\83r
\83l
\83b
\83g
984 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
986 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
987 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
988 GikoDM.MsgBarVisibleActionExecute(nil);
989 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
991 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
992 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
993 GikoDM.StatusBarVisibleActionExecute(nil);
995 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
996 TreeView.Items.BeginUpdate;
997 FavoriteTreeView.Items.BeginUpdate;
998 ListView.Items.BeginUpdate;
1000 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
1001 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
1002 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
1003 TreeView.Color := GikoSys.Setting.CabinetBackColor;
1004 FavoriteTreeView.Font.Assign(TreeView.Font);
1005 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
1007 ListView.Font.Name := GikoSys.Setting.ListFontName;
1008 ListView.Font.Size := GikoSys.Setting.ListFontSize;
1009 ListView.Font.Color := GikoSys.Setting.ListFontColor;
1010 ListView.Font.Style := [];
1011 if GikoSys.Setting.ListFontBold then
1012 ListView.Font.Style := [fsbold];
1013 if GikoSys.Setting.ListFontItalic then
1014 ListView.Font.Style := ListView.Font.Style + [fsitalic];
1016 ListViewBackGroundColor := clWhite; //
\83f
\83t
\83H
\83\8b\83g
\82É
\90Ý
\92è
\82µ
\82½
\82Ì
\82¿
1017 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; //
\83\86\81[
\83U
\92è
\8b`
\82É
\95Ï
\8dX
1018 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
1019 FOddColor := GikoSys.Setting.OddColor;
1022 TreeView.Items.EndUpdate;
1023 FavoriteTreeView.Items.EndUpdate;
1024 ListView.Items.EndUpdate;
1026 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
1027 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
1029 //
\83~
\83\85\81[
\83g
\82Ì
\8fó
\91Ô
\82ð
\90Ý
\92è
1030 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
1032 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1033 FResRangeMenuSelect := GikoSys.ResRange;
1034 case GikoSys.ResRange of
1037 GikoDM.AllResAction.Execute;
1041 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
1042 GikoDM.SelectResAction.Checked := True;
1045 case FResRangeMenuSelect of
1046 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
1047 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
1050 GikoDM.OnlyAHundredResAction.Checked := True;
1051 GikoSys.ResRange := GikoSys.Setting.ResRangeExCount;
1056 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\95\
\8e¦
\94Í
\88Í
1057 case GikoSys.Setting.ThreadRange of
1060 GikoDM.AllItemAction.Checked := True;
1065 GikoDM.LogItemAction.Checked := True;
1070 GikoDM.NewItemAction.Checked := True;
1075 GikoDM.LiveItemAction.Checked := True;
1076 ViewType := gvtLive;
1080 GikoDM.ArchiveItemAction.Checked := True;
1081 ViewType := gvtArch;
1086 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
1087 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1088 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1089 BrowserTab.Font.Style := [];
1090 if GikoSys.Setting.BrowserTabFontBold then
1091 BrowserTab.Font.Style := [fsBold];
1092 if GikoSys.Setting.BrowserTabFontItalic then
1093 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1095 BrowserTab.DoubleBuffered := True;
1096 FDragWFirst := false;
1097 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1099 //
\83u
\83\89\83E
\83U
\83^
\83u
1100 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1102 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1103 GikoDM.BrowserTabTopAction.Checked := True;
1105 GikoDM.BrowserTabBottomAction.Checked := True;
1108 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1109 GikoDM.BrowserTabTabStyleAction.Checked := True;
1110 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1111 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1113 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1116 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1117 ProgressBar.Parent := StatusBar;
1118 ProgressBar.Top := 2;
1119 ProgressBar.Left := 0;
1120 ProgressBar.Width := StatusBar.Panels[0].Width;
1121 ProgressBar.Height := StatusBar.Height - 2;
1122 ProgressBar.Position := 0;
1124 //
\8aO
\95\94\94Â
\83v
\83\89\83O
\83C
\83\93\82ð
\83\8d\81[
\83h(ReadBoardFile, LoadHistory
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1125 InitializeBoardPlugIns;
1127 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1128 GikoSys.ListBoardFile;
1129 //
\81@
\98A
\91±
\8bN
\93®
\8e\9e\82É
\83X
\83v
\83\89\83b
\83V
\83\85\83E
\83B
\83\93\83h
\83E
\82Ì
\83\81\83\82\83\8a\82ª
\95s
\92è
\82É
1131 //
\83X
\83v
\83\89\83b
\83V
\83\85\83E
\83B
\83\93\83h
\83E
\82Ì
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\90Ý
\92è
1132 if (SplashWindow <> nil) then begin
1133 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1137 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1138 for i := Length(BBSs) - 1 downto 0 do begin
1139 if not BBSs[i].IsBoardFileRead then
1140 GikoSys.ReadBoardFile(BBSs[i]);
1142 if SplashWindow <> nil then begin
1143 SplashWindow.ProgressBar.StepBy(20);
1144 SplashWindow.Update;
1148 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1149 RoundList := TRoundList.Create;
1150 RoundList.LoadRoundBoardFile;
1151 RoundList.LoadRoundThreadFile;
1153 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1154 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1155 Style := Style or TVS_NOTOOLTIPS;
1156 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1158 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1159 TreeView.Align := alClient;
1160 FavoriteTreeView.Align := alClient;
1161 FavoriteTreeView.Visible := False;
1163 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1166 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1167 wp.length := sizeof(wp);
1168 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1169 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1170 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1171 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1172 wp.showCmd := SW_HIDE;
1173 SetWindowPlacement(Handle, @wp);
1176 if GikoSys.Setting.WindowMax then
1177 WindowState := wsMaximized;
1179 //
\83M
\83R
\83A
\83j
\83\81
1181 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1182 if FileExists(FileName) then
1183 Animate.FileName := FileName;
1191 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1192 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1193 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1196 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1197 FHistoryList := THistoryList.Create;
1199 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1200 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1201 TreeView, FTreeType);
1203 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1204 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1205 FavoriteDM.ReadFavorite;
1207 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1208 GikoDM.ArrangeAction.Execute;
1210 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1211 case GikoSys.Setting.ListWidthState of
1213 ViewPanel.Width := 1;
1214 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1215 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1218 ViewPanel.Width := GikoSys.Setting.ListWidth;
1219 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1220 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1223 ViewPanel.Width := GikoSys.Setting.ListWidth;
1224 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1225 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1229 case GikoSys.Setting.ListHeightState of
1231 ViewPanel.Height := 1;
1232 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1233 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1236 ViewPanel.Height := GikoSys.Setting.ListHeight;
1237 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1238 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1241 ViewPanel.Height := GikoSys.Setting.ListHeight;
1242 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1243 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1248 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1249 CreateControlThread();
1251 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1252 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1254 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1257 BrowserBoardNameLabel.Caption := '';
1258 BrowserNameLabel.Caption := '';
1261 FTabHintIndex := -1;
1263 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1264 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1265 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1267 MakeDefaultINIFile();
1268 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1269 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1270 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1271 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1274 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1275 SetSelectComboBox();
1277 //
\83A
\83h
\83\8c\83X
\83o
\81[
1278 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1280 //
\83\8a\83\93\83N
\83o
\81[
1282 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1284 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1285 if not FileExists(GikoSys.GetBoardFileName) then begin
1286 msg := '
\82±
\82Ì
\83\81\83b
\83Z
\81[
\83W
\82Í
\83M
\83R
\83i
\83r
\82ð
\8f\89\82ß
\82Ä
\8eg
\97p
\82·
\82é
\82Æ
\82«
\82É
\82P
\89ñ
\82¾
\82¯
\95\
\8e¦
\82³
\82ê
\82Ü
\82·' + #13#10#13#10
1287 + '
\82±
\82ê
\82©
\82ç
\81A
\81u
\82Q
\82¿
\82á
\82ñ
\82Ë
\82é
\81v
\82Ì
\83A
\83h
\83\8c\83X
\88ê
\97\97\82ð
\83_
\83E
\83\93\83\8d\81[
\83h
\82µ
\82Ü
\82·' + #13#10
1288 + '
\8e\9f\82É
\8fo
\82Ä
\82
\82é
\89æ
\96Ê
\82Å
\81A
\81u
\8dX
\90V
\81v
\83{
\83^
\83\93\82ð
\89\9f\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B';
1289 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1290 GikoDM.NewBoardAction.Execute;
1293 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1294 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1296 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1297 // FLastRoundTime := 0;
1299 ListView.OnData := TListViewUtils.ListViewData;
1301 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1302 CabinetVisible( False );
1303 if GikoSys.Setting.CabinetVisible then begin
1304 i := CabinetSelectPopupMenu.Items.Count - 1;
1305 if GikoSys.Setting.CabinetIndex = i - 1 then
1306 GikoDM.CabinetHistoryAction.Execute
1307 else if GikoSys.Setting.CabinetIndex = i then
1308 GikoDM.CabinetFavoriteAction.Execute
1310 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1311 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1312 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1313 FIsIgnoreResize := rtResizing;
1314 GikoDM.CabinetBBSAction.Execute;
1317 ShowBBSTreeOld( BBSs[ 0 ] );
1318 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1321 //
\88ø
\90\94\82ª
\82 \82Á
\82½
\82ç
\83X
\83\8c\82ð
\8aJ
\82
\81i
\96¢
\8eæ
\93¾
\82È
\82ç
\83_
\83E
\83\93\83\8d\81[
\83h
\81j
1322 for i := 1 to ParamCount do begin
1323 MoveToURL(ParamStr(i));
1326 GikoDM.RepaintStatusBar;
1327 StatusBarResize(Sender);
1329 // dummy1.Caption := ItemReservPMenu.Caption;
1330 // dummy1.Hint := ItemReservPMenu.Hint;
1331 //
\83u
\83\89\83E
\83U
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82Ì
\8f\89\8aú
\89»
1332 PopupMenuUtil.ReadSetting(GikoDM.GikoFormActionList, BrowserTabPopupMenu);
1333 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1334 MouseGesture := TMouseGesture.Create;
1336 {$IFDEF SPAM_FILTER_ENABLED}
1337 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1338 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1341 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1342 GikoSys.SetGikoMessage;
1344 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1345 if GikoSys.Setting.AutoLogin then
1346 GikoDM.LoginAction.Execute;
1348 if GikoSys.Setting.BeAutoLogin then
1349 GikoDM.BeLogInOutAction.Execute;
1351 //
\83L
\83\83\83v
\83V
\83\87\83\93\82ª
\8fã
\8f\91\82«
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\82Ì
\82Å
\81A
\82±
\82±
\82Å
\8dÄ
\90Ý
\92è
1352 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1353 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1355 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\8f\89\8aú
\89»
1356 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1358 //
\92u
\8a·
\90Ý
\92è
\83t
\83@
\83C
\83\8b\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1359 ReplaceDM.LoadFromFile(GikoSys.GetReplaceFileName);
1361 //
\83\8c\83X
\83|
\83b
\83v
\83A
\83b
\83v
\8fÁ
\8b\8e\83^
\83C
\83}
\81[
1362 ResPopupClearTimer.Interval := GikoSys.Setting.RespopupWait;
1364 // D&D
\82ð
\8eó
\82¯
\8eæ
\82é
1365 DragAcceptFiles(ListView.Handle, True);
1368 //
\8f\89\8aú
\89»
\82É
\8e¸
\94s
\82µ
\82½
\83\82\83W
\83\85\81[
\83\8b\83`
\83F
\83b
\83N
1369 if (FavoriteDM.AbEnd) then begin
1370 GikoUtil.MsgBox(Self.Handle,
1371 '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\8f\89\8aú
\89»
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½
\81B
\83M
\83R
\83i
\83r
\82ð
\8fI
\97¹
\82µ
\82Ü
\82·
\81B'#13#10 +
1372 '
\83M
\83R
\83i
\83r
\83t
\83H
\83\8b\83_
\82ð
\8aJ
\82«
\82Ü
\82·
\81Aconfig/' + Favorite.FAVORITE_FILE_NAME +
1373 '
\82ð config/~' + Favorite.FAVORITE_FILE_NAME + '(
\91O
\89ñ
\8bN
\93®
\8e\9e\82Ì
\82¨
\8bC
\82É
\93ü
\82è)
\82Å'#13#10 +
1374 '
\92u
\82«
\8a·
\82¦
\82é
\8e\96\82Å
\92¼
\82é
\89Â
\94\
\90«
\82ª
\82 \82è
\82Ü
\82·
\81B',
1375 '
\8f\89\8aú
\89»
\88Ù
\8fí');
1376 GikoDM.GikoFolderOpenAction.Execute;
1382 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1383 procedure TGikoForm.SaveCoolBarSettings;
1386 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1388 SaveMainCoolBarSettings;
1389 SaveBoardCoolBarSettings;
1390 SaveBrowserCoolBarSettings;
1393 procedure TGikoForm.SaveMainCoolBarSettings;
1398 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1399 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1400 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1401 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1402 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1403 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1406 procedure TGikoForm.SaveBoardCoolBarSettings;
1411 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1412 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1413 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1414 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1415 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1416 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1419 procedure TGikoForm.SaveBrowserCoolBarSettings;
1424 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1425 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1426 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1427 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1428 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1429 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1432 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1433 procedure TGikoForm.LoadCoolBarSettings;
1439 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1440 MainCoolBar.Bands.BeginUpdate;
1442 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1443 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1444 CoolSet := GikoSys.Setting.MainCoolSet[i];
1445 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1446 FIsIgnoreResize := rtNone;
1447 SaveCoolBarSettings;
1450 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1451 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1452 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1455 MainCoolBar.Bands.EndUpdate;
1458 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1459 ListCoolBar.Bands.BeginUpdate;
1461 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1462 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1463 CoolSet := GikoSys.Setting.ListCoolSet[i];
1464 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1465 FIsIgnoreResize := rtNone;
1466 SaveCoolBarSettings;
1469 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1470 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1471 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1474 ListCoolBar.Bands.EndUpdate;
1477 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1478 BrowserCoolBar.Bands.BeginUpdate;
1480 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1481 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1482 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1483 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1484 FIsIgnoreResize := rtNone;
1485 SaveCoolBarSettings;
1488 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1489 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1490 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1493 BrowserCoolBar.Bands.EndUpdate;
1498 procedure TGikoForm.FormShow(Sender: TObject);
1508 if FStartUp then begin
1510 ShowWindow(Application.Handle, SW_HIDE);
1511 //FormCreate
\82Å
\82â
\82é
\82Æ
\89Â
\8e\8b\90Ý
\92è
\82ª
\94½
\89f
\82³
\82ê
\82È
\82¢
\8fê
\8d\87\82ª
\82 \82é
\82Ì
\82ÅFormShow
\82Å
\82â
\82é
\82±
\82Æ
\82É
\82µ
\82½
1512 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1513 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1514 GikoDM.StdToolBarVisibleActionExecute( nil );
1515 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1516 GikoDM.AddressBarVisibleActionExecute( nil );
1517 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1518 GikoDM.LinkBarVisibleActionExecute( nil );
1519 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1520 GikoDM.ListToolBarVisibleActionExecute( nil );
1521 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1522 GikoDM.ListNameBarVisibleActionExecute( nil );
1523 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1524 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1525 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1526 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1528 // CoolBar
\95\9c\8c³
1529 LoadCoolBarSettings;
1531 //
\8fd
\97v
\81@
\82±
\82ê
\82ª
\82È
\82¢
\82Æ
\83c
\81[
\83\8b\83{
\83^
\83\93\82Ì
\8dX
\90V
\82ª
\82¨
\82©
\82µ
\82
\82È
\82é
1532 // ResetBandInfo( ListCoolBar, ListToolBar );
1533 FIsIgnoreResize := rtNone;
1535 //ActionList
\82ÌGroupIndex
\82ð
\8c³
\82É
\96ß
\82·
1536 SetGroupIndex(GikoDM.GikoFormActionList);
1538 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1539 if GikoSys.Setting.TabAutoLoadSave then begin
1540 GikoDM.TabsOpenAction.Tag := 1;
1541 GikoDM.TabsOpenAction.Execute;
1542 GikoDM.TabsOpenAction.Tag := 0;
1543 if (GikoSys.Setting.LastCloseTabURL <> '') then begin
1544 if ( FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
1545 while (FActiveContent.Browser.ReadyState <> READYSTATE_COMPLETE) and
1546 (FActiveContent.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
1547 //
\83\81\83b
\83Z
\81[
\83W
\82ð
\8eó
\82¯
\8eæ
\82ç
\82È
\82¢
\82æ
\82¤
\82É
\83X
\83\8a\81[
\83v
\82É
\95Ï
\8dX
1551 item := BBSsFindThreadFromURL( GikoSys.Setting.LastCloseTabURL );
1552 GikoSys.Setting.LastCloseTabURL := '';
1553 if (item <> nil) and (item.IsLogFile) then begin
1554 OpenThreadItem(item, item.URL);
1556 //ShowWindow(Self.Handle, SW_SHOW);
1560 //=====
\83}
\83\8b\83`
\83\82\83j
\83^
\8aÂ
\8b«
\82ÅFormCreate
\82Å
\82Í
\83t
\83H
\81[
\83\80\88Ê
\92u
\82ª
\90³
\82µ
\82
\94½
\89f
\82³
\82ê
\82È
\82¢
\8fê
\8d\87
1561 //=====
\82ª
\82 \82é
\82½
\82ßFormShow
\8f\89\89ñ
\82Å
\8dÀ
\95W
\90Ý
\92è
\82ð
\8ds
\82¤
1562 Top := GikoSys.Setting.WindowTop;
1563 Left := GikoSys.Setting.WindowLeft;
1564 Height := GikoSys.Setting.WindowHeight;
1565 Width := GikoSys.Setting.WindowWidth;
1567 //
\83E
\83B
\83\93\83h
\83E
\82ª
\89æ
\96Ê
\8aO
\82È
\82ç
\89æ
\96Ê
\93à
\82É
\88Ú
\93®
\82·
\82é
1568 Right := Left + Width;
1569 Bottom := Top + Height;
1572 while (MonCnt < Screen.MonitorCount) do begin
1573 MonR := Screen.Monitors[MonCnt].Left + Screen.Monitors[MonCnt].Width;
1574 MonB := Screen.Monitors[MonCnt].Top + Screen.Monitors[MonCnt].Height;
1576 if ((Left >= Screen.Monitors[MonCnt].Left) and (Left < MonR) and
1577 (Top >= Screen.Monitors[MonCnt].Top) and (Top < MonB) and
1578 (Right > Screen.Monitors[MonCnt].Left) and (Right <= MonR) and
1579 (Bottom > Screen.Monitors[MonCnt].Top) and (Bottom <= MonB)) then begin
1584 MonCnt := MonCnt + 1;
1587 if (MonOk = False) then begin
1592 if GikoSys.Setting.WindowMax then
1593 WindowState := wsMaximized;
1594 //==========================================================================
1598 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1600 // if GikoForm.WindowState <> wsMinimized then
1601 // SaveCoolBarSettings;
1603 if ( GikoSys.Setting.ShowDialogForEnd ) and
1604 (MessageDlg('
\83M
\83R
\83i
\83r
\82ð
\8fI
\97¹
\82µ
\82Ä
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H', mtConfirmation,[mbOk, mbCancel], 0) = mrCancel ) then begin
1609 GikoSys.Setting.LastCloseTabURL := '';
1610 if GikoSys.Setting.TabAutoLoadSave then begin
1611 GikoDM.TabsSaveAction.Execute;
1612 if (GetActiveContent <> nil) and
1613 (GetActiveContent.IsLogFile) then begin
1614 GikoSys.Setting.LastCloseTabURL := GetActiveContent.URL;
1618 if (SearchDialog <> nil) then begin
1619 if (SearchDialog.Visible) then begin
1623 SearchDialog.Release;
1626 SearchDialog := nil;
1629 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82Ì
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81AEditorForm
\82ð
\95Â
\82¶
\82é
1630 GikoDM.CloseAllEditorAction.Execute;
1632 Application.UnhookMainWindow(Hook);
1633 //
\83A
\83v
\83\8a\83P
\81[
\83V
\83\87\83\93\8fI
\97¹
\82Ì
\91O
\82É
\83_
\83E
\83\93\83\8d\81[
\83h
\83X
\83\8c\83b
\83h
\82É
\90³
\8fí
\8fI
\97¹
\82ð
\91£
\82·
1634 FControlThread.DownloadAbort;
1635 FControlThread.Terminate;
1637 //OnDestory
\82¾
\82Æ
\8dÄ
\8bN
\93®
\82ð
\82©
\82¯
\82½
\82Æ
\82«
\82È
\82Ç
\82É
\95Û
\91¶
\82³
\82ê
\82È
\82¢
\82Ì
\82ÅOnCloseQuery
\82Å
\90Ý
\92è
\95Û
\91¶
1640 Application.Terminate;
1643 procedure TGikoForm.SaveSettingAll();
1645 wp : TWindowPlacement;
1646 WindowPlacement: TWindowPlacement;
1649 GikoDM.SaveThreadSearchSetting;
1654 ActiveListColumnSave;
1659 WindowPlacement.length := SizeOf(TWindowPlacement);
1660 GetWindowPlacement(Self.Handle, @WindowPlacement);
1662 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1663 wp.length := sizeof(wp);
1664 GetWindowPlacement(Handle, @wp);
1665 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1666 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1667 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1668 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1669 GikoSys.Setting.WindowMax := (WindowState = wsMaximized) or
1670 (WindowPlacement.flags = WPF_RESTORETOMAXIMIZED);
1671 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1672 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1673 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1674 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1675 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1676 if GikoDM.ArrangeAction.Checked then
1677 GikoSys.Setting.ListOrientation := gloVertical
1679 GikoSys.Setting.ListOrientation := gloHorizontal;
1680 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1685 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1686 if not GikoSys.Setting.ResRangeHold then
1687 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1690 //
\8d¡
\82Ìwinodw
\82Ì
\83X
\83^
\83C
\83\8b\82ÅCoolBar
\82Ì
\88Ê
\92u
\81A
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82ð
\95Û
\91¶
1691 SaveCoolBarSettings;
1692 GikoSys.Setting.WriteWindowSettingFile;
1693 //
\96¼
\91O
\82Æ
\83\81\81[
\83\8b\82Ì
\95Û
\91¶
\82È
\82Ì
\82Å
\83G
\83f
\83B
\83^
\82ª
\95Â
\82¶
\82½
\8cã
\82È
\82ç
\82¢
\82Â
\82Å
\82à
\82¢
\82¢
1694 GikoSys.Setting.WriteNameMailSettingFile;
1695 //
\96`
\8c¯
\82Ì
\8f\91\82Ì
\95Û
\91¶
1696 GikoSys.Setting.WriteBoukenSettingFile;
1697 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\90Ý
\92è
\82Ì
\95Û
\91¶
1698 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1700 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1702 //FavoriteDM
\82Í
\8e©
\93®
\90¶
\90¬
\83t
\83H
\81[
\83\80\82È
\82Ì
\82Å
\81A
\89ð
\95ú
\82Í
\8e©
\93®
\93I
\82É
\82³
\82ê
\82é
1703 //
\8f\89\8aú
\89»
\88Ù
\8fí
\8e\9e\82©
\82ç
\82Ì
\8fI
\97¹
\82Å
\82Í
\95Û
\91¶
\82µ
\82È
\82¢
1704 if not (FavoriteDM.AbEnd) then begin
1705 FavoriteDM.WriteFavorite;
1710 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1712 //AddressHistoryDM
\82Í
\8e©
\93®
\90¶
\90¬
\83t
\83H
\81[
\83\80\82È
\82Ì
\82Å
\81A
\89ð
\95ú
\82Í
\8e©
\93®
\93I
\82É
\82³
\82ê
\82é
\81B
1713 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1717 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
1719 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1723 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1725 RoundList.SaveRoundFile;
1729 //
\83^
\83X
\83N
\83g
\83\8c\83C
\82Ì
\83A
\83C
\83R
\83\93\8dí
\8f\9c
1730 if (FIconData.uID <> 0) then begin
1731 Shell_NotifyIcon(NIM_DELETE, @FIconData);
1736 procedure TGikoForm.FormDestroy(Sender: TObject);
1741 //
\88ê
\8e\9e\93I
\82É
\92Ê
\8fí
\83X
\83^
\83C
\83\8b\82É
\96ß
\82µ
\82ÄCoolBar
\82Ì
\88Ê
\92u
\81A
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82ð
\95Û
\91¶
1742 //
\81¦
\92\8d\88Ó
\81FOnDestroy
\82Å
\8eg
\82¤
\82±
\82Æ
\82µ
\82©
\8dl
\97¶
\82³
\82ê
\82Ä
\82¢
\82È
\82¢
1743 //
\91¼
\82Å
\82â
\82é
\82Æ
\8dÄ
\95`
\89æ
\82ª
\94
\90¶
\82·
\82é
1744 if WindowState <> wsNormal then begin
1745 WindowState := wsNormal;
1747 SaveCoolBarSettings;
1748 GikoSys.Setting.WriteWindowSettingFile;
1753 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1755 if GikoSys.Setting.GestureEnabled then begin
1756 MouseGesture.OnGestureStart := nil;
1757 MouseGesture.OnGestureMove := nil;
1758 MouseGesture.OnGestureEnd := nil;
1761 MouseGesture.UnHook;
1766 //
\82¨
\8bC
\82É
\93ü
\82è
\94j
\8aü
1773 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1774 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1775 GikoSys.Setting.ShowDialogForAllTabClose := false;
1776 GikoDM.AllTabCloseAction.Execute;
1777 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1782 for i := FBrowsers.Count - 1 downto 0 do begin
1783 GikoSys.ShowRefCount('browser' + IntToStr(i), TWebBrowser(FBrowsers[i]).ControlInterface);
1784 GikoSys.ShowRefCount('document' + IntToStr(i), TWebBrowser(FBrowsers[i]).ControlInterface.Document);
1787 for i := FBrowsers.Count - 1 downto 0 do begin
1788 TWebBrowser(FBrowsers[i]).Free;
1791 FBrowsers.Capacity := 0;
1797 if BrowserNullTab <> nil then begin
1798 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
1799 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
1801 BrowserNullTab.Free;
1807 TreeView.Items.BeginUpdate;
1808 TreeView.Items.GetFirstNode.Free;
1809 TreeView.Items.Clear;
1810 TreeView.Items.EndUpdate;
1835 //FControlThread.DownloadAbort;
1836 FControlThread.Terminate;
1837 FControlThread.WaitFor;
1841 FControlThread.Free;
1843 //
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82Á
\82Ä
\92Ç
\89Á
\82³
\82ê
\82½
\83\81\83j
\83\85\81[
\82ð
\8aJ
\95ú
\82·
\82é
1844 for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
1845 GikoForm.PlugInMenu.items[i].Free;
1847 GikoForm.PlugInMenu.Clear;
1850 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
1851 // TBoard, TThreadItem
\82Ì
\83f
\83X
\83g
\83\89\83N
\83^
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94j
\8aü
\82ð
\93`
\82¦
\82é
\82Ì
\82Å
1852 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
1853 for i := Length(BoardGroups) - 1 downto 0 do begin
1854 //BoardGroups[i].Clear;
1855 BoardGroups[i].Free;
1859 for i := Length( BBSs ) - 1 downto 0 do begin
1860 if BBSs[ i ] <> nil then
1864 DestorySpecialBBS(BoardGroup.SpecialBBS);
1869 if FEvent <> nil then
1873 if FResPopupBrowser <> nil then begin
1874 TOleControl(FResPopupBrowser).Parent := nil;
1875 FResPopupBrowser.Free;
1881 if FPreviewBrowser <> nil then begin
1882 FPreviewBrowser.Free;
1883 FPreviewBrowser := nil;
1888 // Update
\82ª
\82¢
\82ê
\82Î
\8eÀ
\8ds
\82·
\82é
1889 if FileExists(FUpdateExePath) then begin
1890 //
\83A
\83b
\83v
\83f
\81[
\83g
\8eÀ
\8ds
1891 GikoSys.CreateProcess(FUpdateExePath, FUpdateExeArgs);
1893 //
\83[
\83\8d\8a\84\97á
\8aO
\82ð
\8c³
\82É
\96ß
\82·
1897 //
\8ae
\8f\8a\82É
\82 \82é
\83L
\83\83\83r
\83l
\83b
\83g
\81E BBS
\83\81\83j
\83\85\81[
\82ð
\83Z
\83b
\83g
\81^
\8dX
\90V
1898 procedure TGikoForm.SetBBSMenu;
1901 item : TBBSMenuItem;
1904 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
1905 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1907 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1908 CabinetSelectPopupMenu.Items[ i ].Free;
1909 CabinetMenu.Items[ i ].Free;
1910 BBSSelectPopupMenu.Items[ i ].Free;
1916 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
1917 for i := Length( BBSs ) - 1 downto 0 do begin
1919 item := TBBSMenuItem.Create( PopupMenu );
1920 item.Caption := BBSs[ i ].Title;
1921 item.Data := BBSs[ i ];
1922 item.OnClick := BBSMenuItemOnClick;
1923 CabinetSelectPopupMenu.Items.Insert( 0, item );
1924 item := TBBSMenuItem.Create( PopupMenu );
1925 item.Caption := BBSs[ i ].Title;
1926 item.Data := BBSs[ i ];
1927 item.OnClick := BBSMenuItemOnClick;
1928 CabinetMenu.Insert( 0, item );
1929 item := TBBSMenuItem.Create( PopupMenu );
1930 item.Caption := BBSs[ i ].Title;
1931 item.Data := BBSs[ i ];
1932 item.OnClick := BBSMenuItemOnClick;
1933 BBSSelectPopupMenu.Items.Insert( 0, Item );
1940 procedure TGikoForm.ReloadBBS;
1945 LockWindowUpdate(Self.Handle);
1947 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1948 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1949 GikoSys.Setting.ShowDialogForAllTabClose := false;
1950 GikoDM.AllTabCloseAction.Execute;
1951 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1952 SetContent(BrowserNullTab);
1953 //TreeView
\83N
\83\8a\83A
\81iBBS2ch.Free
\82Ì
\8cã
\82É
\83N
\83\8a\83A
\82·
\82é
\82ÆXP
\83X
\83^
\83C
\83\8b\8e\9e\82É
\83G
\83\89\81[
\8fo
\82é
\81j
1954 TreeView.Items.Clear;
1956 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1958 RoundList.SaveRoundFile;
1961 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
1967 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1969 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1974 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1976 FavoriteDM.WriteFavorite;
1981 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
1982 for i := Length(BoardGroups) - 1 downto 0 do begin
1984 BoardGroups[i].Free;
1990 for i := Length( BBSs ) - 1 downto 0 do begin
1991 if BBSs[ i ] <> nil then
2000 FTreeType := gttNone;
2002 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
2004 //
\8aO
\95\94\94Â
\83v
\83\89\83O
\83C
\83\93\82ð
\83\8d\81[
\83h(ReadBoardFile, LoadHistory
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
2005 InitializeBoardPlugIns;
2007 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
2009 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
2010 for i := Length(BBSs) - 1 downto 0 do begin
2011 if not BBSs[i].IsBoardFileRead then
2012 GikoSys.ReadBoardFile(BBSs[i]);
2015 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
2018 ShowBBSTree( BBSs[ 0 ] );
2020 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
2021 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
2022 TreeView, FTreeType);
2024 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
2025 FavoriteDM.ReadFavorite;
2029 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
2030 RoundList.LoadRoundBoardFile;
2031 RoundList.LoadRoundThreadFile;
2033 LockWindowUpdate(0);
2037 \todo
\89½
\8cÌ IE 7
\82Å
\82Í about:..
\82É
\82È
\82é
\82Ì
\82©
2038 (IE 7
\82ª about:..
\82ð
\92Ç
\89Á
\82µ
\82Ä
\82¢
\82é
\82Ì
\82©
\81A
\83M
\83R
\83i
\83r
\82ª
\92Ç
\89Á
\82µ
\82Ä
\82¢
\82é
\82Ì
\82©)
2039 \92²
\8d¸
\82·
\82é
\82±
\82Æ
2041 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
2049 threadItem : TThreadItem;
2051 Protocol, Host, Path, Document, Port, Bookmark: string;
2056 ActiveFileName: string;
2061 cResPopup: TResPopupBrowser;
2062 senderBrowser :TWebBrowser;
2063 doc: IHTMLDocument2;
2065 //
\83M
\83R
\83i
\83r
\82Í
\83\8c\83X
\83A
\83\93\83J
\81[
\82ª about:blank..
\82Å
\8en
\82Ü
\82é
\82±
\82Æ
\82ð
\8aú
\91Ò
\82µ
\82Ä
\82¢
\82é
\82ª
2066 // IE 7
\82Å
\82Í about:blank..
\82Å
\82Í
\82È
\82 about:..
\82É
\82È
\82é
\82Ì
\82Å
\81A
\92u
\8a·
\82·
\82é(
\93\8a\82°
\82â
\82è)
2067 if Pos('about:..', Text) = 1 then
2068 Text2 := 'about:blank..' + Copy( Text, Length('about:..')+1, Length(Text) )
2072 if not( TObject(Sender) is TWebBrowser )then
2075 senderBrowser := TWebBrowser(Sender);
2076 doc := senderBrowser.ControlInterface.Document as IHTMLDocument2;
2080 if ((not senderBrowser.Busy) and Assigned(doc)) then begin
2081 if LowerCase(doc.charset) <> 'shift_jis' then begin
2082 doc.charset := 'shift_jis';
2090 if PreviewTimer.Enabled then
2091 PreviewTimer.Enabled := False;
2093 Application.CancelHint;
2096 if GetActiveContent <> nil then
2097 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
2099 ActiveFileName := '';
2101 FActiveContent := nil;
2105 //
\91O
\89ñ
\82Æ
\93¯
\82¶
\8fê
\8d\87\8fI
\97¹
2106 if (StatusBar.Panels[1].Text = Text2) then begin
2107 if Text2 = '' then begin
2108 if FResPopupBrowser <> nil then begin
2109 if not(Sender is TResPopupBrowser) then
2110 FResPopupBrowser.Clear
2112 TResPopupBrowser(Sender).ChildClear;
2118 StatusBar.Panels[1].Text := Text2;
2121 if FPreviewBrowser <> nil then
2122 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2124 if FResPopupBrowser <> nil then begin
2125 if not(Sender is TResPopupBrowser) then begin
2126 if ((doc <> nil) and (FResPopupBrowser.Visible)) then begin
2127 if ResPopupClearTimer.Interval > 0 then begin
2128 ResPopupClearTimer.Enabled := True;
2129 ResPopupClearTimer.Tag := 0;
2131 FResPopupBrowser.Clear;
2135 if ResPopupClearTimer.Interval > 0 then begin
2136 ResPopupClearTimer.Enabled := True;
2137 ResPopupClearTimer.Tag := 1;
2139 TResPopupBrowser(Sender).ChildClear;
2145 if not(Sender is TResPopupBrowser) then
2146 if not GikoSys.Setting.UnActivePopup then
2147 if not GikoForm.Active then
2152 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
2153 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
2154 //
\91¼
\82Ì
\83A
\83v
\83\8a\82Å
\8f\88\97\9d\82·
\82éURL
\82©
\8am
\94F
2155 if (ExtPreviewDM.PreviewURL(Text2)) then begin
2159 Ext := AnsiLowerCase(ExtractFileExt(Text2));
2160 // if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
2161 if ((Pos('http://', Text2) = 1) or (Pos('https://', Text2) = 1)) and (GikoSys.Setting.PreviewVisible) and
2162 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) or
2163 (Pos('http://www.nicovideo.jp/watch/', Text2) = 1) then begin
2164 if FPreviewBrowser = nil then begin
2165 FPreviewBrowser := TPreviewBrowser.Create(Self);
2166 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2167 TOleControl(FPreviewBrowser).Parent := nil;
2169 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
2170 FPreviewURL := Text2;
2171 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
2172 PreviewTimer.Enabled := True;
2173 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
2174 if (Pos('mailto:', Text2) = 1) and (GikoSys.Setting.RespopupMailTo) then begin
2175 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
2176 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
2178 p.x := p.x - senderBrowser.ClientOrigin.x;
2179 p.y := p.y - senderBrowser.ClientOrigin.y;
2180 e := doc.elementFromPoint(p.x, p.y);
2181 if (Assigned(e)) then begin
2182 CreateResPopupBrowser;
2184 if not(Sender is TResPopupBrowser) then begin
2185 if (FResPopupBrowser.Visible) then begin
2186 FResPopupBrowser.Clear;
2189 TResPopupBrowser(Sender).ChildClear;
2192 cResPopup := FResPopupBrowser.CreateNewBrowser;
2193 tmp2 := Trim(ZenToHan(e.Get_outerText));
2194 if (GikoSys.IsNumeric(tmp2)) then begin
2195 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
2196 wkIntSt := StrToInt64(tmp2);
2197 wkIntTo := StrToInt64(tmp2);
2198 cResPopup.PopupType := gptThread;
2199 HTMLCreater.SetResPopupText(cResPopup, GetActiveContent(true), wkIntSt, wkIntTo, False, False);
2201 cResPopup.PopupType := gptRaw;
2202 cResPopup.Title := s;
2206 CreateResPopupBrowser;
2208 if not(Sender is TResPopupBrowser) then begin
2209 if (FResPopupBrowser.Visible) then begin
2210 FResPopupBrowser.Clear;
2213 TResPopupBrowser(Sender).ChildClear;
2216 threadItem := GetActiveContent(true);
2217 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
2218 PathRec := Gikosys.Parse2chURL2(URL);
2219 if (PathRec.FNoParam) then begin
2223 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
2225 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
2227 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
2229 URL := GikoSys.GetBrowsableThreadURL( URL );
2230 wkIntSt := PathRec.FSt;
2231 wkIntTo := PathRec.FTo;
2233 if (wkIntSt = 0) and (wkIntTo = 0) then begin
2236 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
2238 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
2240 end else if wkIntSt > wkIntTo then begin
2245 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
2250 threadItem := BBSsFindThreadFromURL( URL );
2252 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
2253 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
2254 if board <> nil then begin
2255 if not board.IsThreadDatRead then
2256 GikoSys.ReadSubjectFile( board );
2257 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
2261 if threadItem <> nil then begin
2262 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
2263 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
2264 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
2268 cResPopup := FResPopupBrowser.CreateNewBrowser;
2269 cResPopup.PopupType := gptThread;
2270 HTMLCreater.SetResPopupText(cResPopup, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
2274 if (cResPopup <> nil) then begin
2275 ResPopupClearTimer.Enabled := False;
2277 if cResPopup.PopupType = gptRaw then begin
2278 if cResPopup.Title <> '' then begin
2279 cResPopup.TitlePopup;
2282 if cResPopup.RawDocument <> '' then begin
2284 end else if cResPopup.Title <> '' then begin
2285 cResPopup.TitlePopup;
2292 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2296 FEnabledCloseButton := Enabled;
2297 SysMenu := GetSystemMenu(Handle, False);
2299 if Enabled then begin
2300 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2302 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2305 DrawMenuBar(Handle);
2308 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2309 var AllowChange: Boolean);
2311 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
2312 // if FTreeType = gtt2ch then
2313 // FSortIndex := -1;
2316 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2317 Shift: TShiftState);
2321 if GetActiveList is TBoard then begin
2323 VK_BACK:; // UpFolderButtonClick(Sender);
2324 VK_SPACE: ListDoubleClick(Shift);
2325 VK_RETURN: ListClick;
2328 if ListView.Selected <> nil then begin
2329 pos.X := ListView.Column[ 0 ].Width;
2330 pos.Y := ListView.Selected.Top;
2332 pos.X := ListView.Left;
2333 pos.Y := ListView.Top;
2335 Windows.ClientToScreen( ListView.Handle, pos );
2336 ListPopupMenu.Popup( pos.X, pos.Y );
2339 end else begin // TBBS, TCategory
2341 VK_BACK:; // UpFolderButtonClick(Sender);
2342 VK_SPACE: ListClick;
2343 VK_RETURN: ListDoubleClick(Shift);
2346 if ListView.Selected <> nil then begin
2347 pos.X := ListView.Column[ 0 ].Width;
2348 pos.Y := ListView.Selected.Top;
2350 pos.X := ListView.Left;
2351 pos.Y := ListView.Top;
2353 Windows.ClientToScreen( ListView.Handle, pos );
2354 ListPopupMenu.Popup( pos.X, pos.Y );
2360 function TGikoForm.GetHttpState: Boolean;
2362 Result := FHttpState;
2365 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2366 Column: TListColumn);
2370 vSortIndex : Integer;
2371 vSortOrder : Boolean;
2373 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2374 if TObject( FActiveList ) is TBBS then begin
2375 orderList := GikoSys.Setting.BBSColumnOrder;
2376 vSortIndex := GikoSys.Setting.BBSSortIndex;
2377 vSortOrder := GikoSys.Setting.BBSSortOrder;
2378 end else if TObject( FActiveList ) is TCategory then begin
2379 orderList := GikoSys.Setting.CategoryColumnOrder;
2380 vSortIndex := GikoSys.Setting.CategorySortIndex;
2381 vSortOrder := GikoSys.Setting.CategorySortOrder;
2382 end else if TObject( FActiveList ) is TBoard then begin
2383 orderList := GikoSys.Setting.BoardColumnOrder;
2384 vSortIndex := GikoSys.Setting.BoardSortIndex;
2385 vSortOrder := GikoSys.Setting.BoardSortOrder;
2389 id := Integer( orderList[ idx ] );
2392 if vSortIndex = id then
2393 vSortOrder := not vSortOrder
2395 vSortOrder := id = 0;
2398 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2401 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2402 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2406 DefaultDraw := True;
2407 //
\82È
\82º
\82©
\96³
\8fð
\8c\8f\82ÅExit
\82µ
\82Ä
\82¢
\82é
2409 DefaultDraw := False;
2410 if (cdsSelected in State) or (cdsHot in State) then begin
2411 Sender.Canvas.Brush.Color := clHighlight;
2412 Sender.Canvas.Font.Color := clHighlightText;
2414 Sender.Canvas.Brush.Color := clBtnFace;
2415 Sender.Canvas.Font.Color := clBtnText;
2417 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2418 Sender.Canvas.FillRect(ARect);
2419 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2422 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2427 Nodes := TreeView.Items;
2429 for i := 0 to Nodes.Count - 1 do begin
2430 if Nodes.Item[i].Data = Data then begin
2431 Result := Nodes.Item[i];
2438 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2439 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2440 Headers: OleVariant; var Cancel: WordBool);
2445 kMenuName: string = 'menu:';
2450 FKokoPopupThreadItem := nil;
2451 if Pos(kMenuName, URL) <> 0 then begin
2452 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2454 if not GikoSys.IsNumeric(sNo) then Exit;
2458 KokoPopupMenu.PopupComponent := nil;
2459 if (Sender is TComponent) then
2460 KokoPopupMenu.PopupComponent := TComponent(Sender);
2461 //
\8cë
\94\9a\91Î
\8dô
\83N
\83\8a\83b
\83N
\82µ
\82½
\83u
\83\89\83E
\83U
\82Æ
\88Ù
\82È
\82é
\82Æ
\82«
\82É
\8fÁ
\82·
\8f\88\97\9d\82ð
\92Ç
\89Á
2462 if not (Sender is TResPopupBrowser) then begin
2463 if (FResPopupBrowser <> nil) and (FResPopupBrowser.CurrentBrowser.Visible = True) then begin
2464 FResPopupBrowser.Clear;
2467 if (Sender <> FResPopupBrowser.CurrentBrowser) then begin
2468 TResPopupBrowser(Sender).ChildClear;
2471 FKokoPopupThreadItem := GetActiveContent(true);
2472 KokoPopupMenu.Tag := StrToInt(sNo);
2473 KokoPopupMenu.Popup(p.x, p.y);
2474 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2475 Cancel := not GikoSys.Setting.OpenMailer;
2477 //@
\82Æ.
\82ð
\8aÜ
\82Ü
\82È
\82¢URL
\82Í
\83\81\81[
\83\8b\83A
\83h
\83\8c\83X
\82Æ
\82Ý
\82È
\82³
\82È
\82¢
2478 //
\8eå
\82Éage
\81Asage
\91Î
\8dô
2479 if (Pos('@', URL) = 0) or (Pos('.', URL) = 0) then begin
2486 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2487 const ARect: TRect; var DefaultDraw: Boolean);
2491 IsBoardNode: Boolean;
2497 Category: TCategory;
2501 DefaultDraw := True;
2503 if FTreeType = gttHistory then Exit;
2505 TreeView.Canvas.Font.Color := clBlue;
2506 IsBoardNode := False;
2507 for i := 0 to TreeView.Items.Count - 1 do begin
2509 if not TreeView.Items[i].IsVisible then
2512 if TObject(TreeView.Items[i].Data) is TCategory then begin
2513 if TreeView.Items[i].Expanded then
2516 IsBoardNode := False;
2517 Category := TCategory(TreeView.Items[i].Data);
2518 for j := 0 to Category.Count - 1 do begin
2519 Board := Category.Items[j];
2520 if Board <> nil then begin
2521 if Board.UnRead > 0 then begin
2529 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2530 IsBoardNode := True;
2531 Board := TBoard(TreeView.Items[i].Data);
2533 Cnt := Board.UnRead;
2539 Bitmap := TBitmap.Create;
2541 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2542 Bitmap.Canvas.Font.Style := [fsBold];
2543 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2548 NodeRect := TreeView.Items[i].DisplayRect(True);
2551 CntText := '(' + IntToStr(Cnt) + ')'
2552 else if Cnt = 1 then
2556 TextWidth := TreeView.Canvas.TextWidth(CntText);
2558 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2560 NodeRect.Left + NodeWidth + TextWidth + 8,
2562 DrawText(TreeView.Canvas.Handle,
2566 DT_SINGLELINE or DT_VCENTER);
2568 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2571 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2572 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2575 Category: TCategory;
2578 DefaultDraw := True;
2580 if FTreeType = gttHistory then Exit;
2582 TreeView.Canvas.Font.Style := [];
2583 if Node <> nil then begin
2584 if TObject(Node.Data) is TCategory then begin
2585 Category := TCategory(Node.Data);
2586 for i := 0 to Category.Count - 1 do begin
2587 Board := Category.Items[i];
2588 if Board <> nil then begin
2589 if Board.UnRead > 0 then begin
2590 TreeView.Canvas.Font.Style := [fsBold];
2595 end else if TObject(Node.Data) is TBoard then begin
2596 Board := TBoard(Node.Data);
2597 if Board.UnRead > 0 then
2598 TreeView.Canvas.Font.Style := [fsBold];
2603 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2605 TreeView.Invalidate;
2607 if TObject(Node.Data) is TBBS then begin
2608 TBBS(Node.Data).NodeExpand := True;
2609 end else if TObject(Node.Data) is TCategory then begin
2610 TCategory(Node.Data).NodeExpand := True;
2611 end else if TObject(Node.Data) is TBoard then begin
2612 TBoard(Node.Data).NodeExpand := True;
2616 procedure TGikoForm.ListViewAllSelect;
2621 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2623 if csDestroying in Self.ComponentState then
2625 AddMessageList(Msg, nil, Icon);
2627 // *************************************************************************
2628 //!
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82½
\82Æ
\82«
\82É
\94
\90¶
\82·
\82é
\83C
\83x
\83\93\83g
2629 // *************************************************************************
2630 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2634 boardPlugIn : TBoardPlugIn;
2639 if csDestroying in Self.ComponentState then
2641 if Item.DownType = gdtBoard then
2642 ATitle := Item.Board.Title
2644 ATitle := Item.ThreadItem.Title;
2646 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2648 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2650 if Item.DownType = gdtBoard then begin
2653 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2654 if GetActiveList = Item.Board then begin
2656 //
\8e©
\93®
\83\
\81[
\83g
\82Ì
\8fê
\8d\87\94Â
\88ê
\97\97\82Ì
\83\
\81[
\83g
\8f\87\82ð
\83N
\83\8a\83A
\82·
\82é
2657 if (GikoSys.Setting.AutoSortThreadList) then begin
2658 GikoSys.Setting.BoardSortIndex := 0;
2659 GikoSys.Setting.BoardSortOrder := True;
2661 Sort.SetSortDate(Now());
2662 SetActiveList(Item.Board);
2664 Item.Board.Modified := True;
2665 Item.Board.IsThreadDatRead := True;
2668 end else if Item.DownType = gdtThread then begin
2671 Item.ThreadItem.NewArrival := True;
2672 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2673 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2674 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2675 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2676 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2677 Item.ThreadItem.Title := Res.FTitle;
2678 ATitle := Item.ThreadItem.Title;
2679 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2680 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2681 ATitle := Res.FTitle;
2683 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2684 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2685 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2689 if GikoSys.Setting.BrowserTabVisible then begin
2690 if GetActiveContent = Item.ThreadItem then
2691 InsertBrowserTab(Item.ThreadItem)
2692 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2693 InsertBrowserTab(Item.ThreadItem, True)
2695 InsertBrowserTab(Item.ThreadItem, False);
2698 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2699 InsertBrowserTab(Item.ThreadItem);
2702 Application.ProcessMessages;
2704 if Item.State = gdsComplete then begin
2706 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2710 PlaySound('NewDiff');
2711 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2716 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2717 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2718 // 2ch
\88È
\8aO
\82Í
\81A1000
\82ª
\8dÅ
\8d\82\82©
\95s
\96¾
\82È
\82Ì
\82Å
\81A2ch
\8cÀ
\92è
\82É
\82·
\82é
2719 if (Item.ThreadItem.ParentBoard.Is2ch) then begin
2720 Item.ThreadItem.Round := False;
2721 AddMessageList('
\81\9a1000
\94
\8c¾
\82ð
\92´
\82¦
\82½
\82Ì
\82Å
\8f\84\89ñ
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82µ
\82½ - [' + Item.ThreadItem.Title + ']', nil, gmiOK);
2725 //ListView
\82Å
\82±
\82Ì
\83X
\83\8c\82ª
\8aÜ
\82Ü
\82ê
\82é
\94Â
\82ð
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Æ
\82«
\82Ì
\8dX
\90V
\8f\88\97\9d
2727 RefreshListView(Item.ThreadItem);
2730 end else if Item.State = gdsNotModify then begin
2732 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2733 //SetContent(Item.ThreadItem);
2734 InsertBrowserTab(Item.ThreadItem);
2736 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2737 PlaySound('NoChange');
2738 Screen.Cursor := crDefault;
2739 end else if Item.State = gdsAbort then begin
2741 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2742 end else if Item.State = gdsError then begin
2747 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2748 // if Item.ResponseCode = 302 then
2749 // AddMessageList('
\94Â
\82ª
\88Ú
\93]
\82µ
\82½
\82©
\82à
\82µ
\82ê
\82È
\82¢
\82Ì
\82Å
\94Â
\8dX
\90V
\82ð
\8ds
\82Á
\82Ä
\82
\82¾
\82³
\82¢
\81B', nil, gmiNG);
2755 if FWorkCount < 0 then FWorkCount := 0;
2756 if FWorkCount = 0 then begin
2758 Animate.Active := False;
2760 Screen.Cursor := crDefault;
2767 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2769 // SetProgressValue(Number, 0, AWorkCountMax);
2770 // ProgressBar.Visible := True;
2771 if csDestroying in Self.ComponentState then
2774 ProgressBar.Position := 0;
2775 ProgressBar.Max := AWorkCountMax;
2776 FDownloadTitle := AWorkTitle;
2777 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2778 FDownloadMax := AWorkCountMax;
2781 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2783 if csDestroying in Self.ComponentState then
2785 ProgressBar.Position := 0;
2786 if FDownloadMax <> 0 then
2787 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2790 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2792 if csDestroying in Self.ComponentState then
2794 ProgressBar.Position := AWorkCount;
2795 // SetProgressValue(Number, AWorkCount);
2796 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2799 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2801 ListItem: TListItem;
2803 MessageListView.Items.BeginUpdate;
2805 ListItem := MessageListView.Items.Add;
2806 ListItem.Caption := ACaption;
2807 ListItem.Data := AObject;
2808 ListItem.MakeVisible(False);
2810 gmiOK: ListItem.ImageIndex := 0;
2811 gmiSAD: ListItem.ImageIndex := 1;
2812 gmiNG: ListItem.ImageIndex := 2;
2813 gmiWhat: ListItem.ImageIndex := 3;
2816 MessageListView.Items.EndUpdate;
2820 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
2821 procedure TGikoForm.ReleaseOldestBrowser;
2825 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2826 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2827 TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2828 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2834 function TGikoForm.InsertBrowserTab(
2835 ThreadItem : TThreadItem;
2836 ActiveTab : Boolean = True
2839 i, j, idx : Integer;
2840 favItem : TFavoriteThreadItem;
2841 newBrowser : TBrowserRecord;
2846 if Threaditem = nil then Exit;
2848 if ThreadItem.IsLogFile then begin
2849 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\91S
\82Ä
\8aJ
\82
\82Æ
\82©
\82â
\82é
\82Æ
\81A
\8d¡
\8aJ
\82¢
\82Ä
\82é
\83X
\83\8c\82Ìbrowser
\82ð
\95t
\82¯
\91Ö
\82¦
\82é
\8b°
\82ê
\82ª
\82 \82é
2850 //
\8fí
\82É
\82S
\94Ô
\96Ú
\82ÉActive
\82Ì
\83u
\83\89\83E
\83U
\82ª
\97\88\82È
\82¢
\82æ
\82¤
\82É
\88Ú
\93®
\82³
\82¹
\82é
2851 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2852 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2853 j := FBrowsers.IndexOf(FActiveContent.Browser);
2854 if j = BROWSER_COUNT - 1 then
2855 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2857 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2858 if not FHistoryList.AddHistory( favItem, TreeView, FTreeType ) then
2861 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2862 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2863 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2864 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2865 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2866 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2867 ReleaseOldestBrowser;
2868 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2869 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2870 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2872 if ActiveTab then begin
2873 BrowserTab.TabIndex := i;
2874 BrowserTab.OnChange(nil);
2881 idx := BrowserTab.TabIndex;
2882 newBrowser := TBrowserRecord.Create;
2883 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2884 ReleaseOldestBrowser;
2885 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2886 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2887 newBrowser.thread := ThreadItem;
2888 newBrowser.Repaint := true;
2890 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2891 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2892 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2893 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2897 if ActiveTab then begin
2898 BrowserTab.TabIndex := 0;
2900 end else if GikoSys.Setting.BrowserTabAppend = gtaLast then begin
2901 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2902 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2903 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2907 if ActiveTab then begin
2908 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2909 BrowserTab.TabIndex := 0
2911 BrowserTab.TabIndex := i;
2914 //
\83^
\83u
\88Ê
\92u
\82ð
\8eæ
\93¾
2916 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2917 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2918 TWebBrowser(FBrowsers[1]) then begin
2923 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2926 //
\83^
\83u
\82ª
\96³
\82¢
\82Æ
\82«
\82È
\82Ç
\91Î
\8dô
2927 if (ins < 0) then begin
2930 BrowserTab.Tabs.InsertObject(ins, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2931 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2932 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2933 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2935 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2940 if ActiveTab then begin
2941 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2942 BrowserTab.TabIndex := 0
2944 BrowserTab.TabIndex := ins;
2947 Result := newBrowser;
2948 if(ActiveTab) or (idx = -1) then begin
2949 BrowserTab.OnChange(nil);
2952 if BrowserNullTab = nil then begin
2953 BrowserNullTab := TBrowserRecord.Create;
2954 BrowserNullTab.Browser := Browser;
2956 // if BrowserNullTab.thread <> ThreadItem then begin
2957 // BrowserNullTab.Movement := '';
2959 BrowserNullTab.thread := ThreadItem;
2960 Result := BrowserNullTab;
2961 BrowserTab.TabIndex := -1;
2962 SetContent(BrowserNullTab);
2965 if GikoSys.Setting.URLDisplay then
2966 AddressComboBox.Text := ThreadItem.URL;
2970 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2978 ThreadItem: TThreadItem;
2979 Thread: TBrowserRecord;
2980 ThreadTitle, ThreadPTitle: string;
2981 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2984 idx := BrowserTab.TabIndex;
2985 if (not FStartUp) and
2986 (FActiveContent <> nil) and
2987 (FActiveContent.Thread <> Thread.Thread) and
2988 (FActiveContent.Browser <> nil) and
2989 (Assigned(FActiveContent.Browser.ControlInterface.Document)) then begin
2992 FActiveContent.Thread.ScrollTop := FActiveContent.Browser.OleObject.Document.Body.ScrollTop;
2995 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
3000 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
3001 Thread.Browser.Navigate(BLANK_HTML);
3002 BrowserBoardNameLabel.Caption := '';
3003 ItemBoardImage.Picture := nil;
3004 BrowserNameLabel.Caption := '';
3005 ItemImage.Picture := nil;
3006 BrowserNullTab.Thread := nil;
3007 //TOleControl(BrowserNullTab.Browser).Visible := true;
3008 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
3009 FActiveContent := nil;
3011 end else if Thread.Browser = nil then begin
3012 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
3013 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3014 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
3015 ReleaseOldestBrowser;
3016 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3017 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3020 ThreadTitle := Thread.Thread.Title;
3021 ThreadPTitle := Thread.Thread.ParentBoard.Title;
3022 //ThreadScrollTop := Thread.Thread.ScrollTop;
3023 if Thread.Thread.IsLogFile then begin
3024 if not FileExists(Thread.Thread.GetThreadFileName) then begin
3025 Thread.Thread.DeleteLogFile;
3029 ThreadIsLog := Thread.Thread.IsLogFile;
3030 ThreadItem := Thread.Thread;
3031 ThreadNewArraical := Thread.Thread.NewArrival;
3032 //ThreadUnRead := Thread.Thread.UnRead;
3033 BBSID := ThreadItem.ParentBoard.BBSID;
3034 FileName := ThreadItem.FileName;
3036 if GetCapture = ListView.Handle then
3039 Screen.Cursor := crHourGlass;
3043 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
3044 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
3045 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
3047 ShowWindow(Thread.Browser.Handle, SW_SHOW);
3048 if (not Assigned(Thread.Browser.ControlInterface.Document)) then begin
3049 Thread.Browser.Navigate('about:blank');
3051 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
3052 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
3053 Application.ProcessMessages;
3054 if idx <> BrowserTab.TabIndex then begin
3059 if (Thread <> nil) and (ThreadItem <>nil) then begin
3060 BrowserBoardNameLabel.Caption := ThreadPTitle;
3061 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
3062 BrowserNameLabel.Caption := ThreadTitle;
3063 ItemImage.Picture := nil;
3065 if ThreadNewArraical then
3066 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
3068 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
3070 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
3072 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
3073 BrowserNameLabel.Left := ItemImage.Left + 20;
3076 //ActiveContent
\81@
\82Ì
\8dX
\90V
3077 FActiveContent := Thread;
3079 if not ThreadIsLog then begin
3080 Self.Caption := GikoDataModule.CAPTION_NAME ;
3081 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\8fÁ
\8b\8e
3082 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
3084 Thread.Browser.BringToFront;
3085 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
3086 doc := Thread.Browser.OleObject.Document;
3088 doc.charset := 'Shift_JIS';
3095 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
3096 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\95\
\8e¦
3097 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
3098 StatusBar.Panels[THREADSIZE_PANEL].Width :=
3099 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
3100 //Thread.Repaint
\82Í
\81A
\83X
\83L
\83\93\93\99\82Ì
\90Ý
\92è
\82ð
\95Ï
\8dX
\82µ
\82½
\82Æ
\82«
\81AThread
\82ð
\83_
\83E
\83\93\83\8d\81[
\83h
\82µ
\82½
\82Æ
\82«
3101 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
3102 if Thread.Repaint then begin
3103 Thread.Repaint := false;
3105 Thread.Browser.OnStatusTextChange := nil;
3106 LockWindowUpdate(Thread.Browser.ParentWindow);
3107 HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
3108 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
3109 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
3113 RefreshListView(ThreadItem);
3115 Screen.Cursor := crDefault;
3119 function TGikoForm.GetActiveContent(popup :Boolean = false): TThreadItem;
3122 if FActiveContent <> nil then begin
3123 Result := FActiveContent.Thread;
3125 (FResPopupBrowser <> nil) and (FResPopupBrowser.CurrentBrowser.Visible = True) then
3126 if (FResPopupBrowser.CurrentBrowser.Thread <> nil) then begin
3127 Result := FResPopupBrowser.CurrentBrowser.Thread;
3137 procedure TGikoForm.SetActiveList(Obj: TObject);
3141 // if FActiveList <> Obj then begin
3144 if ListView.Selected <> nil then
3145 idx := ListView.Selected.Index
3151 ListView.Items.Count := 0;
3152 ListView.Items.Clear;
3153 ListView.Selected := nil;
3154 // ListView.Columns.Clear;
3155 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
3156 and (FActiveContent.Thread.IsLogFile) then begin
3158 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
3160 on E: Exception do begin
3161 //
\83X
\83\8c\88ê
\97\97DL
\8cã
\82È
\82Ç
\82ÉFActiveContent
\82Ì
\8e\9d\82ÂThread
\82ª
3162 //
\8dí
\8f\9c\82³
\82ê
\82Ä
\82¢
\82é
\8fê
\8d\87\82ª
\82 \82é
\82Ì
\82Å
\82±
\82±
\82Ä
\8f\88\97\9d\82·
\82é
3163 ReleaseBrowser(FActiveContent);
3164 FActiveContent.Thread := nil;
3165 Self.Caption := GikoDataModule.CAPTION_NAME;
3169 Self.Caption := GikoDataModule.CAPTION_NAME;
3170 //Application.Title := CAPTION_NAME;
3172 // ActiveListColumnSave;
3174 Screen.Cursor := crHourGlass;
3176 if Obj is TBBS then begin
3177 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3178 end else if Obj is TCategory then begin
3179 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3180 end else if Obj is TBoard then begin
3181 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3184 Screen.Cursor := crDefault;
3187 if idx >= 0 then begin
3188 if idx >= ListView.Items.Count then
3189 idx := ListView.Items.Count - 1;
3190 ListView.ItemIndex := idx;
3191 ListView.ItemFocused := ListView.Items.Item[ idx ];
3197 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
3198 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
3199 function TGikoForm.GetActiveList: TObject;
3201 Result := FActiveList;
3204 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
3206 SetListViewType(AViewType, '', False);
3209 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
3214 for i := Length( BBSs ) - 1 downto 0 do begin
3215 BBSs[i].SelectText := SelectText;
3216 BBSs[i].KubetsuChk := KubetsuChk;
3218 BoardGroup.SpecialBBS.SelectText := SelectText;
3219 BoardGroup.SpecialBBS.KubetsuChk := KubetsuChk;
3221 ViewType := AViewType;
3222 if ActiveList is TBoard then begin
3223 Board := TBoard(ActiveList);
3225 //gvtAll: ListView.Items.Count := Board.Count;
3226 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
3227 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
3228 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
3229 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
3230 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
3234 SetActiveList(Board);
3238 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
3239 const ARect: TRect; var DefaultDraw: Boolean);
3245 if ListView.Items.Count = 0 then begin
3246 DefaultDraw := true;
3247 ListView.Canvas.Brush.Color := ListView.Color;
3248 ListView.Canvas.FillRect(ARect);
3252 ListView.Canvas.Font.Color := clWindowText;
3253 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3256 ListView.Canvas.Font.Color := clBlue;
3257 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83\8d\83O
\97L
\82è
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3260 ListView.Canvas.Font.Color := clGreen;
3261 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3264 ListView.Canvas.Font.Color := clFuchsia;
3265 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82ÍDAT
\97\8e\82¿
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3268 ListView.Canvas.Font.Color := clMaroon;
3269 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90¶
\91¶
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3272 ListView.Canvas.Font.Color := clNavy;
3273 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83^
\83C
\83g
\83\8b\82ª
\81u%s
\81v
\82ð
\8aÜ
\82Þ
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3274 if GetActiveList is TBoard then
3275 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
3283 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
3284 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
3285 ListView.Canvas.TextOut(p.X, p.Y, s);
3287 DefaultDraw := True;
3291 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
3293 Item: TDownloadItem;
3295 if not Board.IsThreadDatRead then
3296 GikoSys.ReadSubjectFile(Board);
3297 Item := TDownloadItem.Create;
3299 Item.Board := Board;
3300 Item.DownType := gdtBoard;
3301 Item.ForceDownload := ForceDownload;
3302 FControlThread.AddItem(Item);
3303 if FWorkCount = 0 then begin
3305 Animate.Active := True;
3308 Screen.Cursor := crAppStart;
3316 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
3318 Item: TDownloadItem;
3320 Item := TDownloadItem.Create;
3322 Item.ThreadItem := ThreadItem;
3323 Item.DownType := gdtThread;
3324 Item.ForceDownload := ForceDownload;
3325 FControlThread.AddItem(Item);
3326 if FWorkCount = 0 then begin
3328 Animate.Active := True;
3331 Screen.Cursor := crAppStart;
3339 procedure TGikoForm.PlaySound(SoundEventName: string);
3343 if not GikoSys.Setting.Mute then begin
3344 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
3345 if FileExists(FileName) then begin
3346 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
3347 sndPlaySound(nil, SND_SYNC);
3348 Application.ProcessMessages;
3350 sndPlaySound(PChar(FileName), SND_ASYNC);
3356 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
3357 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3359 FHistoryList.DeleteHistory( threadItem, TreeView, TreeType );
3362 procedure TGikoForm.ShowBBSTreeOld(
3370 FavoriteTreeView.Visible := False;
3371 FavoriteToolBar.Hide;
3372 TreeView.Visible := True;
3374 b := CabinetSelectPopupMenu.Items.Count - 1;
3375 for i := 0 to b do begin
3376 item := CabinetSelectPopupMenu.Items[ i ];
3377 if item is TBBSMenuItem then begin
3378 if TBBSMenuItem( item ).Data = inBBS then begin
3379 item.Checked := True;
3380 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3381 CabinetMenu.Items[ i ].Checked := True;
3382 GikoSys.Setting.CabinetIndex := i;
3386 item.Checked := False;
3387 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3388 CabinetMenu.Items[ i ].Checked := False;
3390 CabinetSelectToolButton.Caption := inBBS.Title;
3392 GikoDM.CabinetHistoryAction.Checked := False;
3393 GikoDM.CabinetFavoriteAction.Checked := False;
3395 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3396 FTreeType := gtt2ch;
3397 HistoryToolBar.Hide;
3398 FActiveBBS := inBBS;
3399 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3400 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3401 //?c???[??g?b?v?????I????
3402 if GetActiveList = nil then
3403 TreeView.Selected := TreeView.Items[0]
3405 for i := 0 to TreeView.Items.Count - 1 do begin
3406 if TreeView.Items[i].Data = GetActiveList then begin
3407 TreeView.Selected := TreeView.Items[i];
3411 TreeView.Selected := TreeView.Items[0]
3419 procedure TGikoForm.ShowBBSTree(
3428 FavoriteTreeView.Visible := False;
3429 FavoriteToolBar.Hide;
3430 TreeView.Visible := True;
3432 b := CabinetSelectPopupMenu.Items.Count - 1;
3433 for i := 0 to b do begin
3434 item := CabinetSelectPopupMenu.Items[ i ];
3435 if item is TBBSMenuItem then begin
3436 if TBBSMenuItem( item ).Data = inBBS then begin
3437 item.Checked := True;
3438 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3439 CabinetMenu.Items[ i ].Checked := True;
3440 GikoSys.Setting.CabinetIndex := i;
3444 item.Checked := False;
3445 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3446 CabinetMenu.Items[ i ].Checked := False;
3448 CabinetSelectToolButton.Caption := inBBS.Title;
3450 GikoDM.CabinetHistoryAction.Checked := False;
3451 GikoDM.CabinetFavoriteAction.Checked := False;
3453 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3454 or (not (CabinetPanel.Visible)) then begin
3455 FTreeType := gtt2ch;
3456 HistoryToolBar.Hide;
3457 FActiveBBS := inBBS;
3458 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3459 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3460 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3461 if GetActiveList = nil then begin
3463 TreeClick( TreeView.Items[0] );
3467 for i := 0 to TreeView.Items.Count - 1 do begin
3468 if TreeView.Items[i].Data = GetActiveList then begin
3469 TreeClick( TreeView.Items[i] );
3473 TreeClick( TreeView.Items[0] );
3481 procedure TGikoForm.ShowHistoryTree;
3486 if CabinetPanel.Visible then begin
3487 if FTreeType = gttHistory then begin
3488 CabinetVisible( False );
3489 GikoDM.CabinetHistoryAction.Checked := False;
3491 GikoDM.CabinetHistoryAction.Checked := True;
3494 CabinetVisible( True );
3495 GikoDM.CabinetHistoryAction.Checked := True;
3498 // BBS...BBS, History, Favorite
3499 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3501 FavoriteTreeView.Visible := False;
3502 TreeView.Visible := True;
3504 GikoDM.CabinetBBSAction.Checked := False;
3505 GikoDM.CabinetFavoriteAction.Checked := False;
3507 if FTreeType <> gttHistory then begin
3508 b := CabinetSelectPopupMenu.Items.Count - 1;
3509 for i := 0 to b do begin
3510 item := CabinetSelectPopupMenu.Items[ i ];
3511 if item is TBBSMenuItem then begin
3512 item.Checked := False;
3513 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3514 CabinetMenu.Items[ i ].Checked := False;
3518 FTreeType := gttHistory;
3519 HistoryToolBar.Show;
3520 FavoriteToolBar.Hide;
3521 FHistoryList.SetTreeNode( TreeView );
3522 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3526 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3528 ChangeEvent: TTVChangedEvent;
3529 ChangingEvent: TTVChangingEvent;
3533 if Item is TCategory then
3534 bbs := TCategory( Item ).ParenTBBS
3535 else if Item is TBoard then
3536 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3540 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3541 if Item <> FActiveList then begin
3543 ChangingEvent := nil;
3545 if not CallEvent then begin
3546 ChangeEvent := TreeView.OnChange;
3547 ChangingEvent := TreeView.OnChanging;
3550 if not CallEvent then begin
3551 TreeView.OnChange := nil;
3552 TreeView.OnChanging := nil;
3554 //Application.ProcessMessages;
3555 for i := 0 to TreeView.Items.Count - 1 do begin
3556 if TreeView.Items[i].Data = Item then begin
3557 TreeView.Items[i].Selected := True;
3559 TreeClick(TreeView.Items[i]);
3563 //Application.ProcessMessages;
3565 if not CallEvent then begin
3566 TreeView.OnChange := ChangeEvent;
3567 TreeView.OnChanging := ChangingEvent;
3572 if Item <> FActiveList then begin
3573 ActiveListColumnSave;
3574 if (Item is TBBS) or (Item is TCategory) then begin
3575 ListView.Columns.Clear;
3576 SetActiveList( Item );
3577 end else if Item is TBoard then begin
3578 if not TBoard( Item ).IsThreadDatRead then begin
3579 Screen.Cursor := crHourGlass;
3581 if not TBoard( Item ).IsThreadDatRead then
3582 GikoSys.ReadSubjectFile(TBoard( Item ));
3584 Screen.Cursor := crDefault;
3587 Sort.SetSortDate(Now());
3588 SetActiveList( Item );
3593 if Item is TBoard then begin // not TCategory
3594 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3595 if GikoSys.Setting.ListWidthState = glsMax then begin
3596 GikoDM.BrowserMinAction.Execute;
3597 if GikoForm.Visible then
3601 if GikoSys.Setting.ListHeightState = glsMax then begin
3602 GikoDM.BrowserMinAction.Execute;
3603 if GikoForm.Visible then
3610 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3611 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3613 listItem : TListItem;
3614 threadItem : TThreadItem;
3621 if not (GetActiveList is TBoard) then Exit;
3622 listItem := ListView.GetItemAt( X, Y );
3623 if listItem = nil then Exit;
3624 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3626 threadItem := TThreadItem(ListItem.Data);
3627 InsertBrowserTab(threadItem, False);
3628 if threadItem.IsLogFile then
3629 ListView.UpdateItems(listItem.Index, listItem.Index);
3633 //
\82±
\82±
\82ÅDblClick
\8fE
\82í
\82È
\82¢
\82Æ
\81AClick
\83C
\83x
\83\93\83g
\82ª
\97D
\90æ
\82µ
\82Ä
\8bN
\82«
\82Ä
\82µ
\82Ü
\82¤
\82Ì
\82Å
3634 if (ssDouble in Shift) then
3635 ListDoubleClick(Shift)
3643 Windows.ClientToScreen( ListView.Handle, pos );
3644 ListPopupMenu.Popup( pos.X, pos.Y );
3650 procedure TGikoForm.ListClick;
3652 ListItem: TListItem;
3653 ThreadItem: TThreadItem;
3655 if ListView.SelCount <> 1 then Exit;
3656 ListItem := ListView.Selected;
3657 if ListItem = nil then Exit;
3658 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3660 ThreadItem := TThreadItem(ListItem.Data);
3661 if ThreadItem.IsLogFile then begin
3662 InsertBrowserTab(ThreadItem);
3663 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3665 InsertBrowserTab(ThreadItem);
3668 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3669 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3670 if GikoSys.Setting.ListWidthState = glsMin then begin
3671 GikoDM.BrowserMaxAndFocusAction.Execute;
3674 if GikoSys.Setting.ListHeightState = glsMin then begin
3675 GikoDM.BrowserMaxAndFocusAction.Execute;
3681 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3683 ThreadItem: TThreadItem;
3686 shiftDown := (ssShift in Shift);
3688 if ListView.Selected = nil then Exit;
3690 if TObject(ListView.Selected.Data) is TCategory then begin
3691 SelectTreeNode(ListView.Selected.Data, True);
3692 end else if TObject(ListView.Selected.Data) is TBoard then begin
3693 SelectTreeNode(ListView.Selected.Data, True)
3694 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3695 Application.ProcessMessages;
3696 ThreadItem := TThreadItem(ListView.Selected.Data);
3697 DownloadContent(ThreadItem, shiftDown);
3699 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3700 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3701 if GikoSys.Setting.ListWidthState = glsMin then begin
3702 GikoDM.BrowserMaxAction.Execute;
3703 GikoDM.SetFocusForBrowserAction.Execute;
3706 if GikoSys.Setting.ListHeightState = glsMin then begin
3707 GikoDM.BrowserMaxAction.Execute;
3708 GikoDM.SetFocusForBrowserAction.Execute;
3715 procedure TGikoForm.BrowserMovement(const AName: string);
3717 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3718 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3719 and (FActiveContent <> nil) then begin
3720 FActiveContent.Move(AName);
3723 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
3724 procedure TGikoForm.BrowserMovement(scroll: Integer);
3726 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3727 and (FActiveContent <> nil) then begin
3728 FActiveContent.Move(scroll);
3731 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3733 if TObject(Node.Data) is TBBS then begin
3734 TBBS(Node.Data).NodeExpand := False;
3735 end else if TObject(Node.Data) is TCategory then begin
3736 TCategory(Node.Data).NodeExpand := False;
3737 end else if TObject(Node.Data) is TBoard then begin
3738 TBoard(Node.Data).NodeExpand := False;
3740 if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3741 TreeClick(TreeView.Selected);
3745 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3747 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3749 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3751 TreeSplitter.Visible := isVisible;
3752 CabinetPanel.Visible := isVisible;
3753 GikoDM.CabinetVisibleAction.Checked := isVisible;
3756 procedure TGikoForm.SelectListItem(List: TList);
3758 TmpListItem: TListItem;
3762 TmpListItem := ListView.Selected;
3763 while TmpListItem <> nil do begin
3764 List.Add(TmpListItem.Data);
3765 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3770 procedure TGikoForm.FormResize(Sender: TObject);
3773 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3774 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3776 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3777 if GikoSys.Setting.ListWidthState = glsMin then begin
3778 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3779 ViewPanel.Width := ThreadMainPanel.Width - 80;
3782 if GikoSys.Setting.ListHeightState = glsMin then begin
3783 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3784 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3788 FIsIgnoreResize := rtResizing;
3789 PostMessage( Handle, USER_RESIZED, 0, 0 );
3794 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3798 FTabHintIndex := -1;
3799 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3800 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3801 DeleteTab(i, BrowserTab.TabIndex);
3806 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3810 FTabHintIndex := -1;
3811 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3812 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3813 DeleteTab(i, BrowserTab.TabIndex);
3818 procedure TGikoForm.DeleteTab(index, selectIndex: Integer);
3820 browserRec : TBrowserRecord;
3824 browserRec := TBrowserRecord(BrowserTab.Tabs.Objects[index]);
3826 if browserRec.Browser <> nil then begin
3827 doc := browserRec.Browser.OleObject.Document;
3828 browserRec.Thread.ScrollTop := doc.Body.ScrollTop;
3831 browserRec.Thread.ScrollTop := 0;
3834 if(FActiveContent = browserRec) then
3835 FActiveContent := nil;
3836 if browserRec.Browser <> nil then begin
3837 j := FBrowsers.IndexOf(browserRec.Browser);
3839 FBrowsers.Move(j, BROWSER_COUNT - 1);
3842 BrowserTab.Tabs.BeginUpdate;
3844 GikoSys.Setting.LastCloseTabURL := browserRec.Thread.URL;
3846 if ( BrowserTab.Tabs.Count - 1 = index ) and
3847 ( BrowserTab.TabRect(index).Left
3848 <= BrowserTab.DisplayRect.Left ) then begin
3849 BrowserTab.ScrollTabs(-1);
3851 BrowserTab.Tabs.Delete(index);
3852 if selectIndex > index then begin
3853 BrowserTab.TabIndex := selectIndex - 1;
3855 if BrowserTab.Tabs.Count -1 >= selectIndex then
3856 BrowserTab.TabIndex := selectIndex
3858 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3861 BrowserTab.Tabs.EndUpdate;
3863 if BrowserTab.Tabs.Count = 0 then begin
3864 BrowserNullTab.Thread := nil;
3867 if(BrowserTab.TabIndex <> -1) and
3868 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3869 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
3870 ReleaseOldestBrowser;
3872 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3873 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3874 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3875 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3878 if( FActiveContent = nil) then
3879 BrowserTab.OnChange(nil);
3881 function TGikoForm.Hook(var Message: TMessage): Boolean;
3883 //
\83T
\83u
\83t
\83H
\81[
\83\80\82ª
\83\81\83C
\83\93\83\81\83j
\83\85\81[
\82ð
\8e\9d\82½
\82È
\82¢
\82Æ
\82«
\82É
\81A
\83\81\83C
\83\93\83t
\83H
\81[
\83\80\82Ì
3884 //
\83\81\83j
\83\85\81[
\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\82ª
\83T
\83u
\83\81\83j
\83\85\81[
\82©
\82ç
\93ü
\97Í
\82³
\82ê
\82é
\82Ì
\82ð
\89ñ
\94ð
3888 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3890 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3894 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3896 bBoard, bCategory : Boolean;
3898 bBoard := (GetActiveList is TBoard);
3899 bCategory := (GetActiveList is TCategory);
3900 ItemRoundPMenu.Visible := bBoard;
3901 ItemReservPMenu.Visible := bBoard;
3902 LPMSep01.Visible := bBoard;
3903 ListRoundPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3904 ListReservPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3905 LPMSep02.Visible := bCategory or bBoard;
3906 KidokuPMenu.Visible := bBoard;
3907 MidokuPMenu.Visible := bBoard;
3908 UrlCopyPMenu.Visible := bCategory or bBoard;
3909 NameUrlCopyPMenu.Visible := bCategory or bBoard;
3910 AllSelectPMenu.Visible := bCategory or bBoard;
3911 LPMSep05.Visible := bCategory or bBoard;
3912 DeletePMenu.Visible := bBoard;
3913 LPMSep06.Visible := bCategory or bBoard;
3914 BoardFavoriteAddMenu.Visible := bCategory;
3915 ThreadFavoriteAddMenu.Visible := bBoard;
3916 SaveThreadFile.Visible := bBoard;
3917 AddRoundNameMenu(ItemReservPMenu);
3918 AddRoundNameMenu(ListReservPMenu);
3921 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3923 FClickNode := TreeView.Selected;
3924 if FClickNode = nil then begin
3925 TreeSelectThreadPupupMenu.Visible := False;
3926 TreeSelectBoardPupupMenu.Visible := False;
3927 TPMSep01.Visible := False;
3928 TreeSelectURLPupupMenu.Visible := False;
3929 TreeSelectNamePupupMenu.Visible := False;
3930 TreeSelectNameURLPupupMenu.Visible := False;
3931 TreeSelectFavoriteAddPupupMenu.Visible := False;
3932 TreeSelectLogDeleteSeparator.Visible := False;
3933 TreeSelectLogDeletePopupMenu.Visible := False;
3934 SearchBoardName.Visible := False;
3935 end else if TObject(FClickNode.Data) is TBoard then begin
3936 TreeSelectThreadPupupMenu.Visible := False;
3937 TreeSelectBoardPupupMenu.Visible := True;
3938 TPMSep01.Visible := True;
3939 TreeSelectURLPupupMenu.Visible := True;
3940 TreeSelectNamePupupMenu.Visible := True;
3941 TreeSelectNameURLPupupMenu.Visible := True;
3942 TreeSelectFavoriteAddPupupMenu.Visible := True;
3943 TreeSelectLogDeleteSeparator.Visible := False;
3944 TreeSelectLogDeletePopupMenu.Visible := False;
3945 SearchBoardName.Visible := True;
3946 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3947 TreeSelectThreadPupupMenu.Visible := False;
3948 TreeSelectBoardPupupMenu.Visible := True;
3949 TPMSep01.Visible := True;
3950 TreeSelectURLPupupMenu.Visible := True;
3951 TreeSelectNamePupupMenu.Visible := True;
3952 TreeSelectNameURLPupupMenu.Visible := True;
3953 TreeSelectFavoriteAddPupupMenu.Visible := True;
3954 TreeSelectLogDeleteSeparator.Visible := False;
3955 TreeSelectLogDeletePopupMenu.Visible := False;
3956 SearchBoardName.Visible := False;
3957 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3958 TreeSelectThreadPupupMenu.Visible := True;
3959 TreeSelectBoardPupupMenu.Visible := False;
3960 TPMSep01.Visible := True;
3961 TreeSelectURLPupupMenu.Visible := True;
3962 TreeSelectNamePupupMenu.Visible := True;
3963 TreeSelectNameURLPupupMenu.Visible := True;
3964 TreeSelectFavoriteAddPupupMenu.Visible := True;
3965 TreeSelectLogDeleteSeparator.Visible := True;
3966 TreeSelectLogDeletePopupMenu.Visible := True;
3967 SearchBoardName.Visible := False;
3968 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3969 TreeSelectThreadPupupMenu.Visible := True;
3970 TreeSelectBoardPupupMenu.Visible := False;
3971 TPMSep01.Visible := True;
3972 TreeSelectURLPupupMenu.Visible := True;
3973 TreeSelectNamePupupMenu.Visible := True;
3974 TreeSelectNameURLPupupMenu.Visible := True;
3975 TreeSelectFavoriteAddPupupMenu.Visible := True;
3976 TreeSelectLogDeleteSeparator.Visible := True;
3977 TreeSelectLogDeletePopupMenu.Visible := True;
3978 SearchBoardName.Visible := False;
3979 end else if (TObject(FClickNode.Data) is TCategory) then begin
3980 TreeSelectThreadPupupMenu.Visible := False;
3981 TreeSelectBoardPupupMenu.Visible := False;
3982 TPMSep01.Visible := False;
3983 TreeSelectURLPupupMenu.Visible := False;
3984 TreeSelectNamePupupMenu.Visible := True;
3985 TreeSelectNameURLPupupMenu.Visible := False;
3986 TreeSelectFavoriteAddPupupMenu.Visible := False;
3987 TreeSelectLogDeleteSeparator.Visible := False;
3988 TreeSelectLogDeletePopupMenu.Visible := False;
3989 SearchBoardName.Visible := True;
3990 end else if FClickNode.IsFirstNode then begin
3991 TreeSelectThreadPupupMenu.Visible := False;
3992 TreeSelectBoardPupupMenu.Visible := False;
3993 TPMSep01.Visible := False;
3994 TreeSelectURLPupupMenu.Visible := False;
3995 TreeSelectNamePupupMenu.Visible := True;
3996 TreeSelectNameURLPupupMenu.Visible := False;
3997 TreeSelectFavoriteAddPupupMenu.Visible := False;
3998 TreeSelectLogDeleteSeparator.Visible := False;
3999 TreeSelectLogDeletePopupMenu.Visible := False;
4000 SearchBoardName.Visible := True;
4002 TreeSelectThreadPupupMenu.Visible := False;
4003 TreeSelectBoardPupupMenu.Visible := False;
4004 TPMSep01.Visible := False;
4005 TreeSelectURLPupupMenu.Visible := False;
4006 TreeSelectNamePupupMenu.Visible := False;
4007 TreeSelectNameURLPupupMenu.Visible := False;
4008 TreeSelectFavoriteAddPupupMenu.Visible := False;
4009 TreeSelectLogDeleteSeparator.Visible := False;
4010 TreeSelectLogDeletePopupMenu.Visible := False;
4011 SearchBoardName.Visible := False;
4015 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
4016 var ppDisp: IDispatch; var Cancel: WordBool);
4025 threadItem: TThreadItem;
4026 aElement : IHTMLElement;
4027 senderBrowser : TWebBrowser;
4028 doc : IHTMLDocument2;
4031 Writeln(IntToStr(Integer(ppDisp)));
4035 if not( TObject(Sender) is TWebBrowser )then
4038 senderBrowser := TWebBrowser(Sender);
4039 doc := senderBrowser.ControlInterface.Document as IHTMLDocument2;
4040 if not Assigned(doc) then
4043 aElement := doc.activeElement;
4044 if not Assigned(aElement) then
4047 Text := aElement.Get_outerText;
4048 Html := aElement.Get_outerHTML;
4050 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
4051 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
4052 if GikoSys.Setting.ResAnchorJamp then begin
4054 Text := ZenToHan(Trim(Text));
4056 if(AnsiPos('>>', Text) = 1) then begin
4057 //Text := Copy(Text, 3, Length(Text) - 2);
4060 //Text := Copy(Text, 2, Length(Text) - 1);
4064 if AnsiPos('-', Text) <> 0 then begin
4065 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
4066 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
4067 wkIntTo := StrToIntDef(Text, 0);
4068 if wkIntTo < wkIntSt then
4071 wkIntSt := StrToIntDef(Text, 0);
4074 if wkIntSt <> 0 then begin
4075 FActiveContent.IDAnchorPopup('');
4076 MoveHisotryManager.pushItem(FActiveContent);
4077 if (Sender is TResPopupBrowser) then begin
4078 TResPopupBrowser(Sender).ChildClear;
4080 GetActiveContent(true),
4081 GetActiveContent(true).URL + '&st=' +
4082 IntToStr(wkIntSt) + '&to=' + IntToStr(wkIntSt));
4084 BrowserMovement(IntToStr(wkIntSt));
4089 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
4091 URL := GikoSys.GetHRefText(Html);
4092 URL := GikoSys.HTMLDecode(URL);
4093 if AnsiPos('BE:', URL) = 1 then begin
4094 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
4095 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
4096 threadItem := FActiveContent.Thread;
4097 if threadItem = nil then Exit;
4098 URL := BE_PHP_URL + BNum + '&u=d'
4099 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
4102 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
4103 ( AnsiPos('ftp://', URL) = 1) then begin
4104 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
4105 if GikoSys.Setting.LinkAddAddressBar then begin
4106 idx := AddressComboBox.Items.IndexOf(URL);
4107 if idx = -1 then begin
4108 AddressComboBox.Items.Insert(0, URL);
4109 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
4110 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
4112 AddressComboBox.Items.Delete(idx);
4113 AddressComboBox.Items.Insert(0, URL);
4116 if (Sender is TResPopupBrowser) then begin
4117 TResPopupBrowser(Sender).ChildClear
4120 MoveHisotryManager.pushItem(FActiveContent);
4127 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
4129 if Mouse.Capture <> 0 then
4131 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4132 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
4133 FBrowserSizeWidth := ViewPanel.Width;
4135 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
4136 FBrowserSizeHeight := ViewPanel.Height;
4138 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4139 if ViewPanel.Width < 2 then begin
4140 ViewPanel.Width := 1;
4141 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
4142 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
4143 GikoSys.Setting.ListWidthState := glsMax;
4144 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
4145 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
4146 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
4147 GikoSys.Setting.ListWidthState := glsMin;
4149 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
4150 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
4151 GikoSys.Setting.ListWidthState := glsNormal;
4154 if ViewPanel.Height < 2 then begin
4155 ViewPanel.Height := 1;
4156 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4157 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4158 GikoSys.Setting.ListHeightState := glsMax;
4159 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
4160 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4161 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4162 GikoSys.Setting.ListHeightState := glsMin;
4164 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4165 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4166 GikoSys.Setting.ListHeightState := glsNormal;
4169 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
4170 FBrowserSizeHeight := ViewPanel.Height
4171 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
4172 FBrowserSizeWidth := ViewPanel.Width;}
4175 procedure TGikoForm.BrowserTabChange(Sender: TObject);
4180 BrowserTab.Tabs.BeginUpdate;
4182 if not BrowserTab.Dragging then begin
4183 FTabHintIndex := -1;
4184 BrowserTab.Hint := '';
4185 idx := BrowserTab.TabIndex;
4186 if idx = -1 then begin
4187 SetContent(BrowserNullTab);
4189 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
4190 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
4191 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
4193 FBrowsers.Move(j ,0);
4195 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
4196 (FActiveContent.Browser <> BrowserNullTab.Browser) and
4197 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
4198 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4200 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
4201 ReleaseOldestBrowser;
4203 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
4204 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
4205 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4207 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
4208 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
4209 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4211 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
4212 AddressComboBox.Text := GetActiveContent.URL;
4214 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
4215 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
4218 GikoDM.SetFocusForBrowserAction.Execute;
4222 BrowserTab.Tabs.EndUpdate;
4227 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
4228 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
4234 if Button = mbMiddle then begin
4235 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
4238 p := BrowserTab.ScreenToClient(p);
4239 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
4241 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4242 end else if Button = mbLeft then begin
4243 FDragWFirst := true;
4244 FMouseDownPos.X := X;
4245 FMouseDownPos.Y := Y;
4250 procedure TGikoForm.SetBrowserTabState;
4252 CoolBand: TCoolBand;
4254 BrowserBottomPanel.AutoSize := False;
4255 if GikoSys.Setting.BrowserTabVisible then begin
4257 BrowserTab.Tabs.BeginUpdate;
4259 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
4260 BrowserTab.Style := tsTabs;
4261 if GikoSys.Setting.BrowserTabPosition = gtpTop then
4262 BrowserTab.TabPosition := tpTop
4264 BrowserTab.TabPosition := tpBottom;
4265 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
4266 BrowserTab.TabPosition := tpTop;
4267 BrowserTab.Style := tsButtons;
4269 BrowserTab.TabPosition := tpTop;
4270 BrowserTab.Style := tsFlatButtons
4273 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
4274 BrowserTab.Parent := BrowserTabToolBar;
4275 BrowserBottomPanel.Hide;
4276 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4277 if CoolBand <> nil then
4278 CoolBand.Visible := True;
4280 BrowserTab.Parent := BrowserBottomPanel;
4281 BrowserTab.Top := 0;
4282 BrowserTab.Left := 0;
4283 BrowserBottomPanel.Show;
4284 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4285 if CoolBand <> nil then
4286 CoolBand.Visible := False;
4289 BrowserTab.Tabs.EndUpdate;
4293 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4294 if CoolBand <> nil then
4295 CoolBand.Visible := False;
4296 BrowserBottomPanel.Visible := False;
4297 GikoDM.AllTabCloseAction.Execute;
4301 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
4302 Y: Integer; State: TDragState; var Accept: Boolean);
4306 idx := BrowserTab.IndexOfTabAt(X, Y);
4307 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
4310 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
4315 FDragWFirst := False;
4316 idx := BrowserTab.IndexOfTabAt(X, Y);
4318 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
4321 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
4322 Shift: TShiftState; X, Y: Integer);
4325 ThreadItem: TThreadItem;
4328 TabIdx := BrowserTab.IndexOfTabAt(x, y);
4330 if ( ssLeft in Shift ) then begin
4331 if (FDragWFirst) then begin
4332 BrowserTab.EndDrag(false);
4333 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
4336 BrowserTab.EndDrag(false);
4337 FDragWFirst := false;
4340 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
4341 Application.CancelHint;
4342 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
4343 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
4344 BrowserTab.Hint := ThreadItem.Title;
4345 Application.ShowHint := True;
4347 BrowserTab.Hint := '';
4348 Application.ShowHint := True;
4350 FTabHintIndex := TabIdx;
4355 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
4356 const pDisp: IDispatch; var URL: OleVariant);
4358 BrowserRecord :TBrowserRecord;
4360 doc : IHTMLDocument2;
4361 threadItem : TThreadItem;
4363 if TObject(Sender) is TWebBrowser then begin
4364 BrowserRecord := nil;
4365 if TWebBrowser(Sender) <> Browser then begin
4366 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4367 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
4368 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
4372 if BrowserRecord <> nil then begin
4373 if BrowserRecord.Event <> nil then
4374 BrowserRecord.Event.Free;
4375 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, BrowserRecord.Browser.ControlInterface.Document, HTMLDocumentEvents2);
4376 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4377 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4380 if GetActiveContent <> nil then begin
4381 if FEvent <> nil then
4383 FEvent := THTMLDocumentEventSink.Create(Self, Browser.ControlInterface.Document, HTMLDocumentEvents2);
4384 FEvent.OnContextMenu := OnDocumentContextMenu;
4385 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4387 if FEvent <> nil then begin
4395 if (BrowserRecord <> nil) and
4396 Assigned( BrowserRecord.Thread ) then begin
4397 threadItem := BrowserRecord.Thread;
4399 if (threadItem.JumpAddress > 0) then begin
4400 if threadItem.UnRead then begin
4401 threadItem.UnRead := False;
4403 RefreshListView(threadItem);
4405 //
\83X
\83N
\83\8d\81[
\83\8b\90æ
\82ª
\8eæ
\93¾
\8aO
\82Ì
\83\8c\83X
\82Ì
\8e\9e\82Í
\8fI
\92[
\82É
\88Ú
\93®
4406 //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4407 if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4408 BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4409 threadItem.JumpAddress := 0;
4411 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4414 end else if threadItem.UnRead then begin
4415 threadItem.UnRead := False;
4417 BrowserRecord.Move('new');
4418 RefreshListView(threadItem);
4419 end else if threadItem.ScrollTop <> 0 then begin
4421 doc := BrowserRecord.Browser.ControlInterface.Document as IHTMLDocument2;
4422 (doc.body as IHTMLElement2).ScrollTop := threadItem.ScrollTop;
4425 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4430 LockWindowUpdate(0);
4433 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4435 AddRoundNameMenu(RoundNamePopupMenu.Items);
4438 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4444 Item := TMenuItem.Create(Self);
4445 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4446 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4448 Item := TMenuItem.Create(Self);
4449 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4450 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4452 Item := TMenuItem.Create(Self);
4453 Item.Caption := '-';
4455 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4456 Item := TMenuItem.Create(Self);
4457 Item.Caption := RoundList.RoundNameList[i];
4458 Item.OnClick := SetSelectRoundName;
4463 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4465 threadItem : TThreadItem;
4467 if ParentName <> 'RoundItem' then begin
4468 SetSelectItemRound(RoundFlag, RoundName);
4470 threadItem := GetActiveContent;
4471 if threadItem <> nil then begin
4472 threadItem.RoundName := RoundName;
4474 RoundList.RoundNameList.Add(RoundName);
4475 threadItem.Round := RoundFlag;
4480 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4485 List := TList.Create;
4487 SelectListItem(List);
4488 for i := 0 to List.Count - 1 do begin
4489 if TObject(List[i]) is TBoard then begin
4490 TBoard(List[i]).RoundName := RoundName;
4492 RoundList.RoundNameList.Add(RoundName);
4493 TBoard(List[i]).Round := RoundFlag;
4494 end else if TObject(List[i]) is TThreadItem then begin
4495 if TThreadItem(List[i]).IsLogFile then begin
4496 TThreadItem(List[i]).RoundName := RoundName;
4498 RoundList.RoundNameList.Add(RoundName);
4499 TThreadItem(List[i]).Round := RoundFlag;
4508 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4510 MenuItem: TMenuItem;
4512 if Sender is TMenuItem then begin
4513 MenuItem := TMenuItem(Sender);
4514 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4519 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4524 if CoolBar = nil then
4526 for i := 0 to CoolBar.Bands.Count - 1 do begin
4527 if CoolBar.Bands[i].Control = Control then begin
4528 Result := CoolBar.Bands[i];
4534 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4536 if BrowserTab.Parent = BrowserTabToolBar then
4537 BrowserTab.Width := BrowserTabToolBar.Width;
4540 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4545 procedure TGikoForm.SetMenuFont;
4547 // GikoSys.MenuFont(MenuToolBar.Font);
4548 // MenuToolBar.Buttons[0].AutoSize := False;
4549 // MenuToolBar.Buttons[0].AutoSize := True;
4550 // MenuToolBar.Font.Color := clMenuText;
4551 GikoSys.MenuFont(MainCoolBar.Font);
4552 MenuToolBar.Buttons[0].AutoSize := False;
4553 MenuToolBar.Buttons[0].AutoSize := True;
4554 MainCoolBar.AutoSize := False;
4555 MainCoolBar.AutoSize := True;
4556 GikoSys.MenuFont(ListCoolBar.Font);
4557 GikoSys.MenuFont(BrowserCoolBar.Font);
4558 // MenuToolBar.Font.Color := clMenuText;
4561 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4565 if FavoriteDM.Modified then begin
4568 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4569 NewMenu := TMenuItem.Create(MainMenu);
4570 NewMenu.Action := GikoDM.FavoriteAddAction;
4571 FavoriteMenu.Add(NewMenu);
4572 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4573 NewMenu := TMenuItem.Create(FavoriteMenu);
4574 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4575 FavoriteMenu.Add(NewMenu);
4576 //
\83Z
\83p
\83\8c\81[
\83^
4577 FavoriteMenu.InsertNewLineAfter(NewMenu);
4578 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4579 FavoriteDM.Modified := false;
4583 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4586 NewMenu: array of TMenuItem;
4588 SetLength(NewMenu, Node.Count);
4589 Node := Node.getFirstChild;
4591 while ( Node <> nil ) do begin
4592 NewMenu[i] := TFavoriteMenuItem.Create(nil);
4593 NewMenu[i].AutoHotkeys := maAutomatic;
4594 NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4595 TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4597 if TObject(Node.Data) is TFavoriteFolder then begin
4598 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4599 CreateFavMenu(Node, NewMenu[i]);
4600 end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4601 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4602 NewMenu[i].OnClick := FavoriteClick;
4603 end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4604 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4605 NewMenu[i].OnClick := FavoriteClick;
4608 Node := Node.getNextSibling;
4610 MenuItem.Add(NewMenu);
4613 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4615 MsgAdd : String = '
\8aù
\82É
\82¨
\8bC
\82É
\93ü
\82è
\82É
\93o
\98^
\82³
\82ê
\82Ä
\82¢
\82Ü
\82·
\81B
\82»
\82ê
\82Å
\82à
\92Ç
\89Á
\82µ
\82Ü
\82·
\82©
\81H';
4616 TitleAdd: String = '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á';
4618 Dlg : TFavoriteAddDialog;
4624 if Item is TFavoriteBoardItem then
4625 Item := TFavoriteBoardItem( Item ).Item
4626 else if Item is TFavoriteThreadItem then
4627 Item := TFavoriteThreadItem( Item ).Item;
4629 Node := FavoriteTreeView.Items.GetFirstNode;
4630 if Item is TBoard then begin
4631 ItemURL := TBoard( Item ).URL;
4632 while Node <> nil do begin
4634 if TObject( Data ) is TFavoriteBoardItem then begin
4635 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4636 if Application.MessageBox(PChar(MsgAdd) , PChar(TitleAdd), MB_YESNO ) = IDNO then
4641 Node := Node.GetNext;
4643 Dlg := TFavoriteAddDialog.Create(Self);
4645 Dlg.SetBoard( TBoard( Item ) );
4650 end else if Item is TThreadItem then begin
4651 ItemURL := TThreadItem( Item ).URL;
4652 while Node <> nil do begin
4654 if TObject( Data ) is TFavoriteThreadItem then begin
4655 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
4656 if Application.MessageBox( PChar(MsgAdd), PChar(TitleAdd), MB_YESNO ) = IDNO then
4661 Node := Node.GetNext;
4663 Dlg := TFavoriteAddDialog.Create(Self);
4665 Dlg.SetThreadItem( TThreadItem( Item ) );
4675 procedure TGikoForm.FavoriteClick(Sender: TObject);
4677 FavoriteClick( Sender, True );
4680 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4683 ThreadItem: TThreadItem;
4684 FavBoard: TFavoriteBoardItem;
4685 FavThread: TFavoriteThreadItem;
4689 if Sender is TFavoriteMenuItem then
4690 Item := TFavoriteMenuItem(Sender).Data
4691 else if Sender is TLinkToolButton then
4692 Item := TLinkToolButton(Sender).Data
4693 else if Sender is TTreeNode then
4694 Item := TTreeNode( Sender ).Data
4698 if TObject(Item) is TFavoriteBoardItem then begin
4699 FavBoard := TFavoriteBoardItem(Item);
4700 Board := FavBoard.Item;
4701 if Board <> nil then begin
4702 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4703 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4704 SelectTreeNode(Board, True);
4706 end else if TObject(Item) is TFavoriteThreadItem then begin
4707 FavThread := TFavoriteThreadItem(Item);
4708 ThreadItem := FavThread.Item;
4709 if ThreadItem = nil then
4712 InsertBrowserTab(ThreadItem, ActiveTab);
4714 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4715 if GikoSys.Setting.ListWidthState = glsMin then begin
4716 GikoDM.BrowserMaxAndFocusAction.Execute;
4719 if GikoSys.Setting.ListHeightState = glsMin then begin
4720 GikoDM.BrowserMaxAndFocusAction.Execute;
4726 procedure TGikoForm.BBSMenuItemOnClick(
4731 if Sender is TBBSMenuItem then
4732 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4736 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4738 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4741 //!
\8ew
\92è
\82³
\82ê
\82½
\83X
\83\8c\83b
\83h
\82ð
\8aJ
\82(
\83\8d\83O
\82ª
\96³
\82¢
\82Æ
\82« or
\8ew
\92èJUMP
\82Ü
\82Å
\91«
\82è
\82È
\82¢
\82Æ
\82«
\82ÍDL
\82·
\82é)
4742 procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4744 stRes, edRes : Int64;
4745 browserRec : TBrowserRecord;
4746 threadNumber : String;
4747 doc : IHTMLDocument2;
4751 Thread.JumpAddress := 0;
4752 //
\83^
\83u
\82ð
\90¶
\90¬
4753 browserRec := InsertBrowserTab(Thread);
4754 if (browserRec <> nil) then begin
4755 // JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N
\82·
\82é
4756 threadNumber := ChangeFileExt(Thread.FileName, '');
4757 GikoSys.GetPopupResNumber( URL, stRes, edRes );
4758 //
\83X
\83\8c\82Ì
\94Ô
\8d\86\82ð
\83\8c\83X
\94Ô
\82Æ
\8cë
\82Á
\82Ä
\94F
\8e¯
\82µ
\82Ä
\82¢
\82é
\82Ì
\82ð
\83N
\83\8a\83A
4759 if (StrToInt64(threadNumber) = stRes) then begin
4760 if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4761 and (Pos('&st=' + threadNumber , URL) = 0) then begin
4765 if ( stRes > 0 ) then begin
4766 Thread.JumpAddress := stRes;
4768 //
\83\8d\83O
\82ð
\8e\9d\82Á
\82Ä
\82¢
\82È
\82¢
\82© JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82Ü
\82Å
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\82ÍDL
\82·
\82é
4769 if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4770 DownloadContent(Thread);
4771 end else if (not browserRec.Repaint) and (stRes > 0) then begin
4772 browserRec.Move(IntToStr(stRes));
4773 Thread.JumpAddress := 0;
4775 doc := browserRec.Browser.ControlInterface.Document as IHTMLDocument2;
4776 if Assigned(doc) then
4777 Thread.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
4784 procedure TGikoForm.MoveToURL(const inURL: string; KeyMask: Boolean = False);
4786 protocol, host, path, document, port, bookmark : string;
4787 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4789 BBSID, BBSKey: string;
4790 {tmpBoard,} Board: TBoard;
4791 ThreadItem: TThreadItem;
4794 tmpThread : TThreadItem;
4795 shiftDown : Boolean;
4799 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4800 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4801 //
\83A
\83N
\83V
\83\87\83\93\82©
\82ç
\8cÄ
\82Î
\82ê
\82é
\82Æshift/ctrl
\82Í
\82¨
\82µ
\82Á
\82Ï
\82Ì
\8fê
\8d\87\82ª
\82Ù
\82Æ
\82ñ
\82Ç
\82È
\82Ì
\82Å
\83}
\83X
\83N
\82·
\82é
4802 if not KeyMask then begin
4803 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4804 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4805 if shiftDown then begin
4806 GikoSys.OpenBrowser(inURL, gbtUserApp);
4808 end else if ctrlDown then begin
4809 GikoSys.OpenBrowser(inURL, gbtIE);
4814 //=====
\83v
\83\89\83O
\83C
\83\93
4817 bi := Length(BoardGroups) - 1;
4818 for i := 1 to bi do begin
4819 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4820 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4823 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4824 Board := BBSsFindBoardFromURL( boardURL );
4827 if Board = nil then begin
4829 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4830 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4833 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4834 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4835 ShowBBSTree( BBSs[ 1 ] );
4838 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4839 if not Board.IsThreadDatRead then begin
4840 GikoSys.ReadSubjectFile( Board );
4844 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4845 if ThreadItem = nil then begin
4846 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4847 ThreadItem := tmpThread;
4848 Board.Insert( 0, ThreadItem );
4849 if ActiveList is TBoard then begin
4850 if TBoard(ActiveList) = Board then
4851 ListView.Items.Count := ListView.Items.Count + 1;
4856 OpenThreadItem(ThreadItem, inURL);
4863 Board := BBSsFindBoardFromURL(
4864 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4866 if Board <> nil then begin
4867 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4868 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4869 SelectTreeNode( Board, True );
4877 // exception
\82ª
\94
\90¶
\82µ
\82½
\8fê
\8d\87\82Í
\93à
\95\94\8f\88\97\9d\82É
\94C
\82¹
\82½
\82¢
\82Ì
\82Å
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
4881 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4882 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4883 Board := BBSsFindBoardFromURL( boardURL );
4884 if Board = nil then begin
4885 //
\93ü
\82é
\82×
\82«
\94Â
\82ª
\8c©
\82Â
\82©
\82ç
\82È
\82©
\82Á
\82½
\82Ì
\82Å
\81A
\95\81\92Ê
\82Ì
\83u
\83\89\83E
\83U
\82Å
\8aJ
\82
4886 GikoSys.OpenBrowser(inURL, gbtUserApp);
4889 //
\8aO
\95\94\82Ì
\94Â
\82È
\82Ì
\82É2ch
\82ÌURL
\82É
\82³
\82ê
\82Ä
\82µ
\82Ü
\82Á
\82½
\93z
\82ð
\82±
\82±
\82Å
\8am
\94F
\82·
\82é
4891 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4892 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4893 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4894 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4895 GikoSys.OpenBrowser(inURL, gbtUserApp);
4900 if not Board.IsThreadDatRead then
4901 GikoSys.ReadSubjectFile(Board);
4902 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4903 ThreadItem := Board.FindThreadFromURL( URL );
4904 //
\81@
\89ß
\8b\8e\83\8d\83O
\91q
\8cÉ
\82©
\82ç
\81A
\83_
\83E
\83\
\82µ
\82½
\83X
\83\8c\82ª
\94
\8c©
\82Å
\82«
\82È
\82¢
\82Ì
\82Å
\82±
\82±
\82Å
\92T
\82·
\82æ
\82¤
\82É
\82·
\82é (2004/01/22)
4905 if ThreadItem = nil then begin
4906 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4909 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ª
\82È
\82¢
\82È
\82ç
\90¶
\90¬
\82·
\82é
\81B
4910 if ThreadItem = nil then begin
4911 ThreadItem := TThreadItem.Create( nil, Board, URL );
4912 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4913 Board.Insert(0, ThreadItem);
4914 if ActiveList is TBoard then begin
4915 if TBoard(ActiveList) = Board then
4916 ListView.Items.Count := ListView.Items.Count + 1;
4919 //
\83\8d\83O
\82È
\82µ
\83X
\83\8c\83b
\83h
\82Ì
\82Æ
\82«
\82Í
\81A
\83z
\83X
\83g
\96¼
\82Ì
\83`
\83F
\83b
\83N
\82ð
\82·
\82é
4920 if (not ThreadItem.IsLogFile) then begin
4921 if AnsiPos(Host, Board.URL) = 0 then
4922 ThreadItem.DownloadHost := Host
4924 ThreadItem.DownloadHost := '';
4926 OpenThreadItem(ThreadItem, inURL);
4930 Board := BBSsFindBoardFromURL( inURL );
4931 if Board = nil then begin
4932 GikoSys.OpenBrowser(inURL, gbtAuto);
4934 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4935 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4936 SelectTreeNode( Board, True );
4941 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4943 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4944 CoolBarResized( Sender, MainCoolBar );
4947 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4948 Shift: TShiftState);
4950 if Key = VK_RETURN then
4951 GikoDM.MoveToAction.Execute;
4954 procedure TGikoForm.BrowserEnter(Sender: TObject);
4956 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4959 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4961 CDS:PCopyDataStruct;
4965 CDS := Message.CopyDataStruct;
4966 GetMem(PC, CDS^.cbData);
4968 lstrcpy(PC,CDS^.lpData);
4969 SetString(sURL, PC,lstrlen(PC));
4974 Message.Result := 1;
4977 procedure TGikoForm.WndProc(var Message: TMessage);
4979 senderBrowser : TWebBrowser;
4985 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4988 if Message.WParam = SC_MINIMIZE then begin
4990 PostMessage(Handle, USER_MINIMIZED, 0, 0);
4993 TreeClick( TreeView.Selected );
4998 if (GikoSys.Setting.StoredTaskTray) then begin
5005 USER_DOCUMENTCOMPLETE:
5006 if (Message.WParam <> 0) and
5007 (TObject(Message.WParam) is TWebBrowser) then begin
5008 senderBrowser := TWebBrowser( Message.WParam );
5009 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
5012 if (TObject(Message.WParam) is TResPopupBrowser) then begin
5014 TResPopupBrowser( Message.WParam ).Clear;
5017 end else if (TObject(Message.WParam) is TPreviewBrowser) then begin
5018 if FPreviewBrowser <> nil then begin
5019 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
5029 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
5034 //
\83A
\83h
\83\8c\83X
\82à
\82µ
\82
\82Í
\8di
\82è
\8d\9e\82Ý
\83R
\83\93\83{
\83{
\83b
\83N
\83X
\82à
\82µ
\82
\82Í
\82¨
\8bC
\82É
\93ü
\82è
\82ª
\95Ò
\8fW
\92\86\82Í
5035 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
5036 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
5037 if Msg.CharCode in [VK_BACK] then begin
5038 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
5039 if Msg.KeyData > 0 then begin
5042 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
5046 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
5047 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
5050 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
5053 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
5054 if Msg.CharCode in [VK_BACK] then begin
5055 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
5056 if Msg.KeyData > 0 then begin
5059 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
5062 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
5065 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
5069 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
5073 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
5078 PreviewTimer.Enabled := False;
5082 ARect := FPreviewBrowser.GetWindowRect(p);
5084 FPreviewBrowser.PreviewImage(FPreviewURL);
5086 if ARect.Bottom > Screen.DesktopHeight then begin
5087 OffsetRect(ARect, 0, -(ARect.Bottom - Screen.DesktopHeight));
5089 if (ARect.Right > Screen.DesktopWidth) then begin
5090 OffsetRect(ARect, -(ARect.Right - Screen.DesktopWidth), 0);
5092 if (ARect.Left < Screen.DesktopLeft) then begin
5093 OffsetRect(ARect, +(Screen.DesktopLeft - ARect.Left), 0);
5095 if (ARect.Top < Screen.DesktopTop) then begin
5096 OffsetRect(ARect, 0, (Screen.DesktopTop - ARect.Top));
5099 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST,
5100 ARect.Left, ARect.Top,
5101 (ARect.Right - ARect.Left), (ARect.Bottom - ARect.Top),
5102 SWP_NOACTIVATE or SWP_HIDEWINDOW);
5104 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
5105 FPreviewBrowserRect := ARect;
5108 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
5112 if PreviewTimer.Enabled then
5113 PreviewTimer.Enabled := False;
5115 //Window
\8aO
\82É
\88Ú
\93®
\82µ
\82½
\82Æ
\82«
\82Í
\8fÁ
\82¦
\82é
\82æ
\82¤
\82É
\82·
\82é
\82½
\82ß
\95\9c\8a\88
5116 if (FResPopupBrowser <> nil) and (IsWindowVisible(FResPopupBrowser.Handle)) then begin
5117 //
\89E
\83N
\83\8a\83b
\83N
\82Ì
\8e\9e\82Í
\8fÁ
\82³
\82È
\82¢
\82æ
\82¤
\82É
\8fð
\8c\8f\92Ç
\89Á
5118 if (Message.MouseMsg <> WM_RBUTTONUP) then begin
5119 FResPopupBrowser.Clear;
5123 if (FPreviewBrowser <> nil)
5124 and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
5125 //
\82±
\82±
\82Å
\8fÁ
\82³
\82ê
\82é
\82Ì
\82ª
\96â
\91è
5126 //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Å
\95\
\8e¦
\94Í
\88Í
\94»
\92è
\82Å
\82«
\82Ä
\82¢
\82é
\82Í
\82¸
5127 Pos := Mouse.CursorPos;
5128 Pos.X := Pos.X + Left;
5129 Pos.Y := Pos.Y + Top;
5130 if (FPreviewBrowserRect.Left > Pos.X) or
5131 (FPreviewBrowserRect.Right < Pos.X) or
5132 (FPreviewBrowserRect.Top > Pos.Y) or
5133 (FPreviewBrowserRect.Bottom < Pos.Y) then begin
5134 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
5138 Message.Result := 1;
5141 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
5143 GikoDM.MsgBarCloseAction.Execute;
5146 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
5148 doc: IHtmlDocument2;
5149 Range: IHTMLTxtRange;
5152 ThreadItem: TThreadItem;
5155 FactiveContent.IDAnchorPopup('');
5157 doc := FactiveContent.Browser.ControlInterface.Document as IHtmlDocument2;
5158 if not Assigned(doc) then
5161 Range := doc.selection.createRange as IHTMLTxtRange;
5162 if not Assigned(Range) then
5165 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
5166 s := ZenToHan(Trim(s));
5167 if GikoSys.IsNumeric(s) then begin
5168 Num := StrToInt64Def(s, -1);
5169 ThreadItem := GetActiveContent(true);
5170 if (ThreadItem <> nil) and (Num <= ThreadItem.Count)
5171 and (Num > 0)then begin
5172 CreateResPopupBrowser;
5173 FResPopupBrowser.CreateNewBrowser.PopupType := gptThread;
5174 HTMLCreater.SetResPopupText(FResPopupBrowser.CreateNewBrowser, ThreadItem, Num, Num, False, False);
5175 FResPopupBrowser.Popup;
5184 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
5186 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
5187 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
5189 if FTreeType = gttHistory then begin
5190 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
5191 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
5194 TreeView.Items.Clear;
5198 procedure TGikoForm.SetLinkBar;
5202 ToolButton: TLinkToolButton;
5203 MenuItem: TMenuItem;
5204 oldIgnoreResize : TResizeType;
5206 oldIgnoreResize := FIsIgnoreResize;
5207 FIsIgnoreResize := rtResizing;
5208 MainCoolBar.Bands.BeginUpdate;
5210 LinkBarPopupMenu.Items.Clear;
5211 for i := LinkToolBar.ButtonCount - 1 downto 0 do
5212 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
5213 LinkToolBar.Buttons[i].Free;
5214 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5215 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5216 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5217 ToolButton := TLinkToolButton.Create(LinkToolBar);
5218 // ToolButton.Parent := LinkToolBar;
5219 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
5220 MenuItem := TMenuItem.Create(Self);
5221 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
5222 LinkBarPopupMenu.Items.Add(MenuItem);
5223 ToolButton.MenuItem := MenuItem;
5224 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
5225 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
5226 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
5227 ToolButton.OnClick := FavoriteClick;
5228 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
5229 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
5230 ToolButton.OnClick := FavoriteClick;
5232 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
5233 ToolButton.Left := 10000;
5234 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
5235 ToolButton.AutoSize := True;
5236 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
5237 ToolButton.OnDragOver := FavoriteDragOver;
5238 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
5239 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
5240 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
5241 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
5242 //ToolButton.DragMode := dmAutomatic;
5243 ToolButton.DragMode := dmManual;
5244 ToolButton.PopupMenu := FavoriteTreePopupMenu;
5246 LinkToolBar.InsertControl(ToolButton);
5251 { if LinkToolBar.ButtonCount = 0 then begin
5252 ToolButton := TLinkToolButton.Create(LinkToolBar);
5253 ToolButton.Style := tbsButton;
5254 ToolButton.ImageIndex := -1;
5255 ToolButton.Caption := '';
5256 LinkToolBar.InsertControl(ToolButton);
5259 MainCoolBar.Bands.EndUpdate;
5260 LoadCoolBarSettings;
5261 FIsIgnoreResize := oldIgnoreResize;
5265 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5273 if Sender = FavoriteTreeView then begin
5274 Node := FavoriteTreeView.GetNodeAt(X, Y);
5279 bound := Node.DisplayRect( False );
5280 height := bound.Bottom - bound.Top;
5281 if (bound.Top + height / 2) <= Y then
5282 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
5287 if Node.IsFirstNode then
5292 if FDropSpaceNode <> nil then
5293 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
5296 if Change then begin
5297 if FDropSpaceNode <> nil then
5298 FDropSpaceNode.Free;
5300 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
5301 FDropSpaceNode.MoveTo( Node, naInsert );
5302 FDropSpaceNode.ImageIndex := -1;
5303 FDropSpaceNode.SelectedIndex := -1;
5307 if Source = FavoriteTreeView then begin
5308 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
5313 end else if Source = BrowserTab then
5315 else if Source = ListView then
5317 else if Source is TLinkToolButton then
5319 else if Source = TreeView then
5325 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5328 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
5331 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
5333 // FDragging := true;
5336 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
5338 SenderNode: TTreeNode;
5339 LinkToolButton: TLinkToolButton;
5342 LinkToolButton := TLinkToolButton( Sender );
5343 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5344 SenderNode.Selected := False;
5345 FavoriteDragDrop( SenderNode, Source );
5347 PostMessage( Handle, USER_SETLINKBAR, 0, 0 );
5350 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5352 favButton : TLinkToolButton;
5353 favThreadItem : TFavoriteThreadItem;
5359 if Sender is TLinkToolButton then begin
5360 favButton := TLinkToolButton( Sender );
5361 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5362 favThreadItem := TFavoriteThreadItem( favButton.Data );
5363 if favThreadItem.Item <> nil then
5364 InsertBrowserTab( favThreadItem.Item, False );
5372 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5376 TToolButton( Sender ).DragMode := dmManual;
5377 if ssLeft in Shift then begin
5378 // TToolButton( Sender ).Down := true; //
\83\8a\83\93\83N
\83c
\81[
\83\8b\83o
\81[
\82Ì
\8b\93\93®
\95s
\90R
\82Ì
\8c´
\88ö
\82Ì
\82æ
\82¤
\82È
\82Ì
\82Å
\83R
\83\81\83\93\83g
\83A
\83E
\83g
\82µ
\82½(2003-dec-02)
5379 if FDragTime = 0 then begin
5380 FDragTime := GetTickCount();
5382 Now := GetTickCount();
5383 if (Now - FDragTime) > 500 then begin
5384 if FDragButton <> TToolButton( Sender ) then begin
5386 FDragButton := TToolButton( Sender );
5387 TToolButton(Sender).BeginDrag(false ,5);
5390 {$IF Defined(debug)}
5391 ShowMessage('Error');
5402 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5407 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5412 for i := 0 to ToolBar.ButtonCount - 1 do
5413 if ToolBar.Buttons[i].Visible then
5414 Result := Result + ToolBar.Buttons[i].Width;
5417 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5419 Control : TWinControl;
5422 Control := FindControl(BandInfo^.hwndChild);
5423 if Control = nil then
5426 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5427 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5428 idx := MainCoolBar.Bands[ i ].ID;
5432 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5433 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
5434 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5435 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5436 BandInfo^.cxMinChild := 0;
5437 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
5438 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5439 end else if Control = LinkToolBar then begin
5440 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5441 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5442 BandInfo^.cxMinChild := 0;
5443 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5444 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5445 end else begin // AddressToolBar
5446 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5447 BandInfo^.cxMinChild := 0;
5448 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5452 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5458 ChevronPopupMenu.Items.Clear;
5460 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5461 if MainCoolBar.Bands[ i ].Visible then begin
5462 if Idx = Int64(RebarChevron^.uBand) then begin
5469 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5470 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5472 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5473 ToolBarChevronMenu(StdToolBar);
5474 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5478 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5479 ChevronPopupMenu.Popup(p.x, p.y);
5483 procedure TGikoForm.MenuBarChevronMenu;
5484 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5490 for i := 0 to MenuItem.Count - 1 do begin
5492 if MenuItem[i] is TFavoriteMenuItem then begin
5493 Item := TFavoriteMenuItem.Create(Self);
5494 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5496 Item := TMenuItem.Create(Self);
5497 Item.Caption := MenuItem[i].Caption;
5498 Item.Action := MenuItem[i].Action;
5499 Item.ImageIndex := MenuItem[i].ImageIndex;
5500 Item.OnClick := MenuItem[i].OnClick;
5501 PopupItem.Add(Item);
5502 if MenuItem[i].Count > 0 then
5503 SetSubMenu(MenuItem[i], Item);
5512 ChevronPopupMenu.Items.Clear;
5513 ChevronPopupMenu.Images := MainMenu.Images;
5514 bw := GetWidthAllToolButton(MenuToolBar);
5515 if MenuToolBar.Width < bw then begin
5517 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5518 w := w + MenuToolBar.Buttons[i].Width;
5519 if MenuToolBar.Width <= w then begin
5520 Item := TMenuItem.Create(Self);
5521 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5522 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5523 ChevronPopupMenu.Items.Add(Item);
5524 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5530 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5531 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5536 if Assigned(PopupMenu.OnPopup) then
5537 PopupMenu.OnPopup(nil);
5538 for i := 0 to PopupMenu.Items.Count - 1 do begin
5540 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5541 Item := TFavoriteMenuItem.Create(Self);
5542 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5544 Item := TMenuItem.Create(Self);
5545 Item.Caption := PopupMenu.Items[i].Caption;
5546 Item.Action := PopupMenu.Items[i].Action;
5547 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5548 Item.OnClick := PopupMenu.Items[i].OnClick;
5549 PopupItem.Add(Item);
5558 ChevronPopupMenu.Items.Clear;
5559 ChevronPopupMenu.Images := ToolBar.HotImages;
5560 bw := GetWidthAllToolButton(ToolBar);
5561 if ToolBar.Width < bw then begin
5563 for i := 0 to ToolBar.ButtonCount - 1 do begin
5564 if ToolBar.Buttons[i].Visible then
5565 w := w + ToolBar.Buttons[i].Width;
5566 if ToolBar.Width <= w then begin
5567 if ToolBar.Buttons[i].Tag = 0 then begin
5568 Item := TMenuItem.Create(Self);
5569 if ToolBar.Buttons[i].Style = tbsSeparator then
5572 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5573 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5576 Item.Caption := ToolBar.Buttons[i].Caption;
5577 Item.Action := ToolBar.Buttons[i].Action;
5579 //Item.Visible := True;
5581 ChevronPopupMenu.Items.Add(Item);
5582 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5584 Item.OnClick := nil;
5585 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5593 procedure TGikoForm.LinkBarChevronMenu;
5598 Item: TFavoriteMenuItem;
5600 Button: TLinkToolButton;
5602 ChevronPopupMenu.Items.Clear;
5603 ChevronPopupMenu.Images := LinkToolBar.Images;
5604 bw := GetWidthAllToolButton(LinkToolBar);
5605 if LinkToolBar.Width < bw then begin
5607 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5608 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5609 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5610 w := w + LinkToolBar.Buttons[j].Width;
5611 if LinkToolBar.Width <= w then begin
5612 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5613 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5614 Item := TFavoriteMenuItem.Create(Self);
5615 if TObject(Button.Data) is TFavoriteFolder then begin
5616 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5617 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5618 Item.OnClick := FavoriteClick;
5619 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5620 Item.OnClick := FavoriteClick;
5622 Item.Data := Button.Data;
5623 Item.Caption := LinkToolBar.Buttons[j].Caption;
5624 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5625 ChevronPopupMenu.Items.Add(Item);
5636 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5637 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5638 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5640 \93Æ
\8e©
\82É
\83o
\83\93\83h
\82É
\94z
\92u
\82³
\82ê
\82Ä
\82¢
\82é
\83R
\83\93\83g
\83\8d\81[
\83\8b\82Ì
\83T
\83C
\83Y
\82ð
\95Ï
\8dX
\82µ
\82½
\8fê
\8d\87\82É
5641 \83V
\83F
\83u
\83\8d\83\93\82Ì
\95\
\8e¦
\88Ê
\92u
\82ð
\8dÄ
\90Ý
\92è
\82·
\82é
\82½
\82ß
\82É
\8eg
\97p
\82µ
\82Ü
\82·
\81B
5643 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5645 bandInfo : tagREBARBANDINFOA;
5646 pBandInfo : PReBarBandInfoA;
5653 pBandInfo := @bandInfo;
5654 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5655 bandInfo.cbSize := sizeof( bandInfo );
5656 bandInfo.hwndChild := h;
5657 bandInfo.cyMinChild := bar.Height;
5658 bar.OnBandInfo( nil, pBandInfo );
5659 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5661 for i := bar.Bands.Count - 1 downto 0 do begin
5662 if bar.Bands[ i ].Control.Handle = h then begin
5668 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5672 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5674 Control: TWinControl;
5677 Control := FindControl(BandInfo^.hwndChild);
5678 if Control = nil then
5681 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5682 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5683 idx := ListCoolBar.Bands[ i ].ID;
5687 if Control = ListToolBar then begin
5688 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5689 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5690 BandInfo^.cxMinChild := 0;
5691 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5692 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5694 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5695 BandInfo^.cxMinChild := 0;
5696 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5700 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5705 ChevronPopupMenu.Items.Clear;
5706 Idx := RebarChevron^.uBand;
5707 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5708 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5709 ToolBarChevronMenu(ListToolBar);
5712 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5713 ChevronPopupMenu.Popup(p.x, p.y);
5717 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5719 Control: TWinControl;
5722 Control := FindControl(BandInfo^.hwndChild);
5723 if Control = nil then
5726 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5727 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5728 idx := BrowserCoolBar.Bands[ i ].ID;
5732 if Control = BrowserToolBar then begin
5733 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5734 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5735 BandInfo^.cxMinChild := 0;
5736 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5737 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5739 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5740 BandInfo^.cxMinChild := 0;
5741 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5745 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5750 ChevronPopupMenu.Items.Clear;
5751 Idx := RebarChevron^.uBand;
5752 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5753 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5754 ToolBarChevronMenu(BrowserToolBar)
5757 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5758 ChevronPopupMenu.Popup(p.x, p.y);
5762 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5764 if Column^.iImage = -1 then begin
5765 Column^.mask := Column^.mask or LVCF_FMT;
5767 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5768 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5772 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5777 for i := bar.ButtonCount - 1 downto 0 do begin
5778 if bar.Buttons[ i ].Action = action then begin
5779 Result := bar.Buttons[ i ];
5785 procedure TGikoForm.SetToolBarPopup;
5788 aIEButton : TToolButton;
5789 aCabinetBBSButton : TToolButton;
5790 aResRangeButton : TToolButton;
5791 aThreadRangeButton: TToolButton;
5793 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5795 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5796 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5797 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5798 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5799 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5801 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5802 if aIEButton <> nil then
5803 aIEButton.DropdownMenu := BrowserPopupMenu;
5804 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5805 if aCabinetBBSButton <> nil then
5806 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5807 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5808 if aResRangeButton <> nil then
5809 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5810 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5811 if aThreadRangeButton <> nil then
5812 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5815 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5816 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5820 // browserPos : TPoint;
5824 Wnd := WindowFromPoint(Mouse.CursorPos);
5826 if WheelDelta > 0 then
5831 if (Wnd = BrowserTab.Handle) or
5832 (Wnd = BrowserTab.Parent.Handle) then begin
5833 BrowserTab.ScrollTabs(Delta);
5835 if FIsHandledWheel then begin
5836 FIsHandledWheel := False;
5839 FIsHandledWheel := True;
5840 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5841 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5843 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5851 procedure TGikoForm.SetSelectWord( const text : string );
5853 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5854 ClearThreadRengeAction;
5856 if Length( text ) = 0 then
5858 GikoDM.AllItemAction.Checked := True;
5859 SetListViewType( gvtAll )
5861 SetListViewType( gvtUser, text, false );
5865 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5868 SetSelectWord( SelectComboBox.Text );
5872 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5873 Shift: TShiftState);
5881 if Key = VK_Return then
5884 end else if Key = 229 then begin
5885 if GikoSys.Setting.UseUndecided then begin
5886 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5887 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5888 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5889 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5890 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5891 SetLength(Str, Len);
5892 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5893 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5894 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5896 Str := SelectComboBox.Text + Str;
5898 if (Length(Str) > 0) then begin
5902 end else if (Key = Windows.VK_DELETE) and (ssCtrl in Shift) then begin
5903 // Ctrl + DEL
\82Å
\8dí
\8f\9c\82·
\82é
5904 Str := SelectComboBox.Text;
5905 idx := GikoSys.Setting.SelectTextList.IndexOf( Str );
5906 if idx <> -1 then begin
5907 GikoSys.Setting.SelectTextList.Delete( idx );
5909 idx := SelectComboBox.Items.IndexOf( Str );
5910 if idx <> -1 then begin
5911 SelectComboBox.Items.Delete( idx );
5913 SelectComboBox.Text := '';
5914 //
\8di
\8d\9e\82Ý
\82ð
\89ð
\8f\9c\82·
\82é
\82½
\82ß
\82É
\95Ï
\8dX
\83C
\83x
\83\93\83g
\82ð
\8cÄ
\82Ñ
\8fo
\82·
5915 SelectComboBox.OnChange(Sender);
5916 end else if Length( SelectComboBox.Text ) = 0 then
5918 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5919 *
\8bó
\82Ì
\82Æ
\82«
\82ÉDel
\83L
\81[
\82ð
\89\9f\82µ
\82½
\82Æ
\82©
\82È
\82Ì
\82Å
\81A
\83X
\83\8c\82Ì
\8di
\8d\9e\82Ý
\82ð
\88Û
\8e\9d\82·
\82é
\81B
5920 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5923 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5924 ClearThreadRengeAction;
5928 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
5929 procedure TGikoForm.ClearThreadRengeAction;
5931 //
\83`
\83\89\82Â
\82
\82Æ
\8c\99\82¾
\82©
\82ç
\81A
\88ê
\89\9e\89\9f\82µ
\82Ä
\82 \82é
\82Æ
\82«
\82¾
\82¯
\8f\88\97\9d\82·
\82é
5932 if GikoDM.AllItemAction.Checked then
5933 GikoDM.AllItemAction.Checked := False;
5934 if GikoDM.LogItemAction.Checked then
5935 GikoDM.LogItemAction.Checked := False;
5936 if GikoDM.NewItemAction.Checked then
5937 GikoDM.NewItemaction.Checked := False;
5938 if GikoDM.LiveItemAction.Checked then
5939 GikoDM.LiveItemAction.Checked := False;
5940 if GikoDM.ArchiveItemAction.Checked then
5941 GikoDM.ArchiveItemAction.Checked := False;
5945 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5950 if Length( SelectComboBox.Text ) = 0 then
5952 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5953 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5958 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5959 procedure TGikoForm.ModifySelectList;
5966 if not SelectComboBoxPanel.Visible then
5969 if Length( SelectComboBox.Text ) > 0 then
5971 oldText := SelectComboBox.Text;
5972 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5974 GikoSys.Setting.SelectTextList.Delete( idx );
5975 idx := SelectComboBox.Items.IndexOf( oldText );
5977 SelectComboBox.Items.Delete( idx );
5978 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5979 SelectComboBox.Items.Insert( 0, oldText );
5980 SelectComboBox.Text := oldText;
5988 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5989 Shift: TShiftState; X, Y: Integer);
5994 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5997 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5998 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5999 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
6001 If w <= 50 Then Begin
6002 //
\8e\9f\82Ì
\88Ú
\93®
\82Ì
\8aî
\8f\80\82ª
\81u
\89ß
\82¬
\82Ä
\82µ
\82Ü
\82Á
\82½
\88Ê
\92u
\81v
\82Å
\82Í
\82È
\82
6003 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
6004 pos.X := pos.X + (50 - w);
6006 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
6010 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
6011 //If SelectComboBox.Width <> w Then Begin
6012 If SelectComboBoxPanel.Width <> w Then Begin
6013 SelectComboBoxPanel.Width := w;
6014 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
6015 GikoSys.Setting.SelectComboBoxWidth := w;
6016 DraggingSelectComboBoxPosition := pos;
6018 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
6019 ResetBandInfo( ListCoolBar, ListToolBar );
6025 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
6026 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6030 IsDraggingSelectComboBox := True;
6033 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
6037 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
6038 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6040 IsDraggingSelectComboBox := False;
6044 procedure TGikoForm.StatusBarResize(Sender: TObject);
6046 StatusBar.Panels[1].Width := StatusBar.Width -
6047 StatusBar.Panels[0].Width -
6048 StatusBar.Panels[THREADSIZE_PANEL].Width -
6049 StatusBar.Panels[NGWORDNAME_PANEL].Width;
6051 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
6054 if (Length( SelectComboBox.Text ) = 0) or
6055 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
6057 SelectComboBox.Text := '';
6058 SelectComboBox.Color := clWindow;
6063 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
6066 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
6069 if TObject(SenderNode.Data) is TFavoriteFolder then
6070 SourceNode.MoveTo(SenderNode, naAddChild)
6072 SourceNode.MoveTo(SenderNode, naInsert);
6076 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
6080 FavoBoardItem: TFavoriteBoardItem;
6081 FavoThreadItem: TFavoriteThreadItem;
6083 ThreadItem: TThreadItem;
6086 if (SenderNode = nil) or (Source = nil) then
6089 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
6090 FavNode := SenderNode.Parent
6092 FavNode := SenderNode;
6096 if Source is TBoard then begin
6097 Board := TBoard( Source );
6098 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
6099 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
6100 Node.ImageIndex := 15;
6101 Node.SelectedIndex := 15;
6102 end else if Source is TFavoriteBoardItem then begin
6103 FavoBoardItem := TFavoriteBoardItem( Source );
6104 Board := FavoBoardItem.Item;
6105 if Board <> nil then
6106 if not Board.IsThreadDatRead then
6107 GikoSys.ReadSubjectFile(Board);
6108 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
6109 Node.ImageIndex := 15;
6110 Node.SelectedIndex := 15;
6111 end else if Source is TThreadItem then begin
6112 ThreadItem := TThreadItem( Source );
6113 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
6114 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
6115 Node.ImageIndex := 16;
6116 Node.SelectedIndex := 16;
6117 end else if Source is TBrowserRecord then begin
6118 ThreadItem := TBrowserRecord( Source ).Thread;
6119 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
6120 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
6121 Node.ImageIndex := 16;
6122 Node.SelectedIndex := 16;
6123 end else if Source is TFavoriteThreadItem then begin
6124 FavoThreadItem := TFavoriteThreadItem( Source );
6125 ThreadItem := FavoThreadItem.Item;
6126 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
6127 Node.ImageIndex := 16;
6128 Node.SelectedIndex := 16;
6131 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
6133 FavoriteMoveTo( SenderNode, Node );
6137 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
6140 SourceNode: TTreeNode;
6141 LinkToolButton: TLinkToolButton;
6144 if SenderNode = nil then
6147 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
6148 if FDropSpaceNode <> nil then
6149 SenderNode := FDropSpaceNode;
6151 if Source = FavoriteTreeView then begin
6152 SourceNode := FavoriteTreeView.Selected;
6153 FavoriteMoveTo( SenderNode, SourceNode );
6154 end else if Source is TLinkToolButton then begin
6155 LinkToolButton := TLinkToolButton( Source );
6156 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
6157 FavoriteMoveTo( SenderNode, SourceNode );
6158 end else if Source = BrowserTab then begin
6159 idx := BrowserTab.TabIndex;
6160 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
6161 end else if Source = ListView then begin
6162 FavoriteAddTo( SenderNode, ListView.Selected.Data );
6163 end else if Source = TreeView then begin
6164 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
6168 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
6171 SenderNode: TTreeNode;
6174 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
6175 if SenderNode <> nil then begin
6176 FavoriteDragDrop( SenderNode, Source );
6179 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
6180 if FDropSpaceNode <> nil then begin
6182 FDropSpaceNode.Delete;
6184 FDropSpaceNode := nil;
6187 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6188 FavoriteDM.Modified := true;
6194 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
6195 Node: TTreeNode; var S: String);
6197 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6198 FavoriteDM.Modified := true;
6200 FavoriteTreeView.ReadOnly := True;
6205 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
6206 Shift: TShiftState);
6208 if not TTreeView(Sender).IsEditing then begin
6212 FClickNode := FavoriteTreeView.Selected;
6213 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
6217 FClickNode := FavoriteTreeView.Selected;
6218 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
6222 FavoriteClick( FavoriteTreeView.Selected );
6223 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
6227 FClickNode := FavoriteTreeView.Selected;
6228 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
6232 //
\95Ò
\8fW
\92\86\82ÉESC
\82ð
\89\9f\82µ
\82½
\82ç
\81A
\95Ò
\8fW
\82ð
\8fI
\97¹
\82µ
\82Ä
\81A
\8c³
\82Ì
\95¶
\8e\9a\97ñ
\82É
\96ß
\82·
6233 if Key = VK_ESCAPE then begin
6234 if (TTreeView(Sender).Selected <> nil) then begin
6235 TTreeView(Sender).Selected.Text := FOrigenCaption;
6237 TTreeView(Sender).Selected.Focused := False;
6243 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
6246 LinkToolButton: TLinkToolButton;
6249 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
6251 FClickNode := FavoriteTreeView.Selected;
6253 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
6255 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
6256 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6257 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6258 FClickNode := FavoriteTreeView.Items[i];
6262 for i := 0 to FClickNode.Count - 1 do begin
6263 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
6264 FClickNode := FClickNode.Item[i];
6271 if FClickNode = nil then begin
6272 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6273 FavoriteTreeDeletePopupMenu.Visible := False;
6274 FavoriteTreeRenamePopupMenu.Visible := False;
6275 FavoriteTreeNewFolderPopupMenu.Visible := False;
6276 FavoriteTreeURLCopyPopupMenu.Visible := False;
6277 FavoriteTreeNameCopyPopupMenu.Visible := False;
6278 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6279 FavoriteTreeReloadPopupMenu.Visible := False;
6280 FavoriteTreeLogDeletePopupMenu.Visible := False;
6281 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6282 end else if FClickNode.IsFirstNode then begin
6283 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6284 FavoriteTreeDeletePopupMenu.Visible := False;
6285 FavoriteTreeRenamePopupMenu.Visible := False;
6286 FavoriteTreeNewFolderPopupMenu.Visible := True;
6287 FavoriteTreeURLCopyPopupMenu.Visible := False;
6288 FavoriteTreeNameCopyPopupMenu.Visible := False;
6289 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6290 FavoriteTreeReloadPopupMenu.Visible := False;
6291 FavoriteTreeLogDeletePopupMenu.Visible := False;
6292 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6293 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
6294 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6295 FavoriteTreeDeletePopupMenu.Visible := True;
6296 FavoriteTreeRenamePopupMenu.Visible := False;
6297 FavoriteTreeNewFolderPopupMenu.Visible := True;
6298 FavoriteTreeURLCopyPopupMenu.Visible := False;
6299 FavoriteTreeNameCopyPopupMenu.Visible := False;
6300 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6301 FavoriteTreeReloadPopupMenu.Visible := False;
6302 FavoriteTreeLogDeletePopupMenu.Visible := False;
6303 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6304 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
6305 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6306 FavoriteTreeDeletePopupMenu.Visible := True;
6307 FavoriteTreeRenamePopupMenu.Visible := True;
6308 FavoriteTreeNewFolderPopupMenu.Visible := True;
6309 FavoriteTreeURLCopyPopupMenu.Visible := False;
6310 FavoriteTreeNameCopyPopupMenu.Visible := True;
6311 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6312 FavoriteTreeReloadPopupMenu.Visible := False;
6313 FavoriteTreeLogDeletePopupMenu.Visible := False;
6314 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6315 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
6316 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6317 FavoriteTreeDeletePopupMenu.Visible := True;
6318 FavoriteTreeRenamePopupMenu.Visible := True;
6319 FavoriteTreeNewFolderPopupMenu.Visible := True;
6320 FavoriteTreeURLCopyPopupMenu.Visible := True;
6321 FavoriteTreeNameCopyPopupMenu.Visible := True;
6322 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6323 FavoriteTreeReloadPopupMenu.Visible := True;
6324 FavoriteTreeLogDeletePopupMenu.Visible := True;
6325 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6326 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
6327 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6328 FavoriteTreeDeletePopupMenu.Visible := True;
6329 FavoriteTreeRenamePopupMenu.Visible := True;
6330 FavoriteTreeNewFolderPopupMenu.Visible := True;
6331 FavoriteTreeURLCopyPopupMenu.Visible := True;
6332 FavoriteTreeNameCopyPopupMenu.Visible := True;
6333 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6334 FavoriteTreeReloadPopupMenu.Visible := True;
6335 FavoriteTreeLogDeletePopupMenu.Visible := False;
6336 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6338 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6339 FavoriteTreeDeletePopupMenu.Visible := False;
6340 FavoriteTreeRenamePopupMenu.Visible := False;
6341 FavoriteTreeNewFolderPopupMenu.Visible := False;
6342 FavoriteTreeURLCopyPopupMenu.Visible := False;
6343 FavoriteTreeNameCopyPopupMenu.Visible := False;
6344 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6345 FavoriteTreeReloadPopupMenu.Visible := False;
6346 FavoriteTreeLogDeletePopupMenu.Visible := False;
6347 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6352 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
6357 if not (TObject(node.Data) is TFavoriteFolder) then
6360 for i := 0 to node.Count - 1 do
6362 if TObject(node.Item[i].Data) is TFavoriteFolder then
6363 FavoriteBrowseFolder( node.Item[i] )
6364 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
6365 FavoriteClick( node.Item[i], False );
6369 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6375 for i := 0 to Node.Count - 1 do begin
6376 if Node.Item[i].Data = FindPointer then begin
6377 Result := Node.Item[i];
6379 end else if Node.Item[i].Count > 0 then begin
6380 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6381 if Found <> nil then begin
6392 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6396 SenderNode: TTreeNode;
6400 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6401 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6402 SenderNode := FavoriteTreeView.Items[i];
6406 SenderNode.Selected := False;
6408 FavoriteDragDrop( SenderNode, Source );
6413 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6414 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6416 if FDragWFirst = true then
6417 FDragWFirst := false;
6419 //
\83}
\83E
\83X
\82Ì
\92\86\83{
\83^
\83\93\82Å
\95Â
\82¶
\82½
\82Æ
\82«
\82É
\8dÅ
\91å
\89»
\82µ
\82Ä
\82µ
\82Ü
\82¤
\82Ì
\82ð
\96h
\82®
\81@
6420 if Button <> mbMiddle then begin
6421 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6422 if GikoSys.Setting.ListWidthState = glsMin then begin
6423 GikoDM.BrowserMaxAndFocusAction.Execute;
6426 if GikoSys.Setting.ListHeightState = glsMin then begin
6427 GikoDM.BrowserMaxAndFocusAction.Execute;
6433 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6434 Y: Integer; State: TDragState; var Accept: Boolean);
6437 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6441 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6445 if FDropSpaceNode <> nil then begin
6447 FDropSpaceNode.Delete;
6449 FDropSpaceNode := nil;
6451 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6452 FavoriteDM.Modified := true;
6458 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6460 if FListViewBackGroundColor <> value then begin
6461 FListViewBackGroundColor := value;
6462 ListView.Color := FListViewBackGroundColor;
6465 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6467 threadItem : TThreadItem;
6471 if FClickNode = nil then Exit;
6473 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6475 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6476 if threadItem = nil then
6478 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6480 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6482 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6483 if boardItem = nil then
6485 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6491 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6492 MousePos: TPoint; var Handled: Boolean);
6496 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6497 if BrowserTab.TabIndex <> idx then begin
6498 BrowserTab.TabIndex := idx;
6499 BrowserTab.OnChange(nil);
6503 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6505 ThreadItem: TThreadItem;
6511 boardPlugIn : TBoardPlugIn;
6513 if Number = 0 then Exit;
6514 ThreadItem := GetActiveContent(True);
6516 if ThreadItem <> nil then begin
6517 //if ThreadItem.IsBoardPlugInAvailable then begin
6518 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6519 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6520 //boardPlugIn := ThreadItem.BoardPlugIn;
6521 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6523 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6524 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6525 //
\82±
\82±
\82Å
\82Q
\82¿
\82á
\82ñ
\82Ë
\82é
\82Ìdat
\82Ì
\8c`
\8e®
\82Å
\82P
\8ds
\93Ç
\82Ý
\8d\9e\82ß
\82ê
\82Î¥¥¥
\81B
6526 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6528 FileName := ThreadItem.FilePath;
6529 tmp := GikoSys.ReadThreadFile(FileName, Number);
6531 if tmp <> '' then begin
6532 THTMLCreate.DivideStrLine(tmp, @Res);
6534 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6535 if ReplaceTag then begin
6536 Header := CustomStringReplace(Header, '</b>', '',true);
6537 Header := CustomStringReplace(Header, '<b>', '',true);
6538 Header := CustomStringReplace(Header, '<br>', '',true);
6539 Header := DeleteFontTag(Header);
6541 //if ThreadItem.IsBoardPlugInAvailable then begin
6542 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6543 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6544 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6546 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6547 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6548 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6549 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6552 Body := CustomStringReplace(Body, '</a>', '',true);
6554 Body := HTMLCreater.DeleteLink(Body);
6555 if ReplaceTag then begin
6556 Body := CustomStringReplace(Body, '<', '<');
6557 Body := CustomStringReplace(Body, '>', '>');
6558 Body := CustomStringReplace(Body, '"', '"');
6559 Body := CustomStringReplace(Body, '&', '&');
6560 //Body := CustomStringReplace(Body, ' ', ' ');
6563 Header := Header + Body;
6565 Clipboard.SetTextBuf( PChar(Header) );
6571 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6575 for i := 0 to BrowserTabPopupMenu.Items.Count - 1 do begin
6576 if (BrowserTabPopupMenu.Items[i].Name='RoundItem') then begin
6577 AddRoundNameMenu(BrowserTabPopupMenu.Items[i]);
6578 end else if (BrowserTabPopupMenu.Items[i].Name='BoardThreadItem') then begin
6579 AddMenuSameBoardThread(BrowserTabPopupMenu.Items[i])
6583 //!
\83A
\83N
\83e
\83B
\83u
\82È
\83^
\83u
\82Æ
\93¯
\82¶
\94Â
\82Ì
\8aJ
\82¢
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83\81\83j
\83\85\81[
\83A
\83C
\83e
\83\80\82É
\92Ç
\89Á
6584 procedure TGikoForm.AddMenuSameBoardThread(MenuItem: TMenuItem);
6590 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6591 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6592 if (FActiveContent.Thread.ParentBoard =
6593 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6594 //
\8e©
\95ª
\82Í
\8aO
\82·
6595 if FActiveContent.Thread <>
6596 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6597 Item := TMenuItem.Create(Self);
6598 Item.Caption := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.Title;
6599 Item.Hint := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.URL;
6600 Item.OnClick := SameBoardThreadSubItemOnClick;
6605 //
\89½
\82à
\96³
\82¢
\82È
\82ç
\8eg
\97p
\82Å
\82«
\82È
\82¢
\82æ
\82¤
\82É
\82·
\82é
6606 MenuItem.Enabled := MenuItem.Count > 0;
6608 //!
\83A
\83N
\83e
\83B
\83u
\82È
\83^
\83u
\82Æ
\93¯
\82¶
\94Â
\82Ì
\8aJ
\82¢
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6609 procedure TGikoForm.SameBoardThreadSubItemOnClick(Sender: TObject);
6612 MenuItem: TMenuItem;
6614 if Sender is TMenuItem then begin
6616 MenuItem := TMenuItem(Sender);
6617 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6618 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6619 if (FActiveContent.Thread.ParentBoard =
6620 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6621 if FActiveContent.Thread <>
6622 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6623 if (MenuItem.Hint = TBrowserRecord(BrowserTab.Tabs.Objects[i])
6624 .Thread.URL) then begin
6625 MoveToURL( MenuItem.Hint);
6635 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6637 FavoriteDM.URLReplace(oldURLs, newURLs);
6640 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6642 RoundList.URLReplace(oldURLs, newURLs);
6645 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6647 Filename = 'tab.sav';
6648 bFilename = '~tab.sav';
6654 oldBoardName: string;
6656 newBoardName: string;
6657 TabList: TStringList;
6660 if oldURLs.Count <> newURLs.Count then begin
6663 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6664 TabList := TStringList.Create;
6666 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6668 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6669 //
\96Ê
\93|
\82¾
\82¯
\82Çthread
\82Í
\82»
\82ê
\82¼
\82êURL
\82ð
\83`
\83\83\83b
\83N
\82µ
\82È
\82ª
\82ç
\82â
\82Á
\82Ä
\82©
\82È
\82«
\82á
\82¢
\82¯
\82È
\82¢
\81B
6670 for i := 0 to oldURLs.Count - 1 do begin
6671 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6672 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6673 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6674 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6675 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6676 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6678 for j := 0 to TabList.Count - 1 do begin
6679 tempString := TabList[j];
6680 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6681 tempString := StringReplace(tempString, oldHost, newHost,[]);
6682 TabList[j] := tempString;
6686 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6688 if FileExists( GikoSys.GetAppDir + Filename) then begin
6689 if FileExists( GikoSys.GetAppDir + bFilename) then
6690 DeleteFile(GikoSys.GetAppDir + bFilename);
6692 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6693 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6696 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6704 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6705 procedure TGikoForm.OnMinimize;
6707 doc: IHTMLDocument2;
6709 if FActiveContent <> nil then begin
6710 FIsMinimize := mtMinimizing;
6711 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6712 if Assigned(doc) then begin
6713 FActiveContent.Thread.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
6718 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6719 procedure TGikoForm.OnMinimized;
6721 FIsMinimize := mtMinimized;
6725 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6727 CoolBarResized( Sender, BrowserCoolBar );
6730 // *************************************************************************
6731 // ExternalBoardPlugInMain
6732 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6733 // *************************************************************************
6734 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6737 boardPlugIn : TBoardPlugIn;
6740 if not (Sender is TMenuItem) then
6743 item := TMenuItem( Sender );
6744 if not Assigned( Pointer( item.Tag ) ) then
6747 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83\81\83j
\83\85\81[
\83n
\83\93\83h
\83\89\82ð
\8cÄ
\82Ñ
\8fo
\82·
6748 boardPlugIn := TBoardPlugIn( item.Tag );
6749 boardPlugIn.PlugInMenu( item.Handle );
6752 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6753 procedure TGikoForm.TreeClick( Node : TTreeNode );
6759 if FTreeType = gttHistory then begin
6761 if TObject( Node.Data ) is TFavoriteThreadItem then
6762 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6763 FavoriteClick( Node );
6766 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6767 if ActiveList = Node.Data then
6770 ActiveListColumnSave;
6772 if TObject(Node.Data) is TBBS then begin
6773 SetActiveList(Node.data);
6774 end else if TObject(Node.Data) is TCategory then begin
6775 SetActiveList(Node.data);
6776 end else if TObject(Node.Data) is TBoard then begin
6777 if not TBoard(Node.Data).IsThreadDatRead then begin
6778 Screen.Cursor := crHourGlass;
6780 if not TBoard(Node.Data).IsThreadDatRead then
6781 GikoSys.ReadSubjectFile(Node.Data);
6783 Screen.Cursor := crDefault;
6786 Sort.SetSortDate(Now());
6787 SetActiveList(Node.data);
6790 if TObject( Node.Data ) is TBoard then begin // not TCategory
6791 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6792 if GikoSys.Setting.ListWidthState = glsMax then begin
6793 GikoDM.BrowserMinAction.Execute;
6794 if GikoForm.Visible then
6798 if GikoSys.Setting.ListHeightState = glsMax then begin
6799 GikoDM.BrowserMinAction.Execute;
6800 if GikoForm.Visible then
6808 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6809 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6812 ThreadItem : TThreadItem;
6813 shiftDown : Boolean;
6816 if Node = nil then Exit;
6818 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6820 if FTreeType = gtt2ch then begin
6821 if not (TObject(Node.Data) is TBoard) then Exit;
6822 Board := TBoard(Node.Data);
6823 DownloadList(Board, shiftDown);
6824 end else if FTreeType = gttHistory then begin
6825 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6826 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6827 DownloadContent(ThreadItem, shiftDown);
6831 // *************************************************************************
6832 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82ÌKeyDown
\83C
\83x
\83\93\83g
6833 // *************************************************************************
6834 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6835 Shift: TShiftState);
6837 if Key = VK_BACK then begin
6838 // UpFolderButtonClick(Sender);
6839 end else if Key = VK_SPACE then begin
6840 TreeDoubleClick( TreeView.Selected );
6841 end else if Key = VK_RETURN then begin
6842 TreeClick( TreeView.Selected );
6843 //
\97\9a\97ð
\82Ì
\8fê
\8d\87\81A
\8fÁ
\82³
\82ê
\82Ä
\82¢
\82é
\82Ì
\82Å
\83`
\83F
\83b
\83N
\82·
\82é
6844 if (TreeView.Selected <> nil) then begin
6845 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6849 //!
\82¨
\8bC
\82É
\93ü
\82è
\82ÌMouseDown
\83C
\83x
\83\93\83g
6850 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6851 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6853 favItem : TTreeNode;
6854 favThreadItem : TFavoriteThreadItem;
6860 if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6861 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6862 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6863 rect := FavoriteTreeView.Selected.DisplayRect(true);
6864 //
\83A
\83C
\83R
\83\93\95ª
\8d¶
\82É
\82¸
\82ç
\82·
6865 if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
6866 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6867 if ssDouble in Shift then begin
6868 FClickNode := FavoriteTreeView.Selected;
6869 GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6873 TObject(FavoriteTreeView.Selected));
6880 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6881 if favItem = nil then Exit;
6883 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6884 favThreadItem := TFavoriteThreadItem( favItem.Data );
6885 if favThreadItem.Item <> nil then
6886 InsertBrowserTab( favThreadItem.Item, False );
6893 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6896 if FIsIgnoreResize <> rtNone then
6899 if GikoSys.Setting.ListOrientation = gloVertical then begin
6900 if GikoSys.Setting.ListHeightState = glsMin then begin
6901 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6902 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6908 procedure TGikoForm.OnResized;
6910 doc : IHTMLDocument2;
6912 FOldFormWidth := Width;
6913 FIsIgnoreResize := rtNone;
6918 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6919 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6924 //
\8dÅ
\8f¬
\89»
\82Í
\8aù
\82É
\8a®
\97¹
\82µ
\82Ä
\82¢
\82é (
\82Â
\82Ü
\82è
\83^
\83X
\83N
\83o
\81[
\82©
\82ç
\83E
\83B
\83\93\83h
\83E
\82ð
\95\9c\8c³
\92\86)
6925 if FActiveContent <> nil then begin
6926 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6927 (doc.body as IHTMLElement2).ScrollTop := FActiveContent.Thread.ScrollTop;
6929 FIsMinimize := mtNone;
6934 // *************************************************************************
6935 //!
\83X
\83\8c\83b
\83h
\83u
\83\89\83E
\83U
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6936 // *************************************************************************
6937 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6940 doc : IHTMLDocument2;
6941 FOleInPlaceActiveObject: IOleInPlaceActiveObject;
6946 if not Assigned(FActiveContent) then
6948 if not Assigned(FActiveContent.Browser) then
6952 FOleInPlaceActiveObject := FActiveContent.Browser.ControlInterface as IOleInPlaceActiveObject;
6953 FOleInPlaceActiveObject.OnFrameWindowActivate(True);
6956 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6957 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6959 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6960 if not Assigned(doc) then
6963 e := doc.elementFromPoint(p.x, p.y);
6964 if not Assigned(e) then
6967 if (e.className = 'date') or (e.id = 'date') then begin
6968 AID := GikoSys.ExtructResID(e.innerText);
6969 ShowSameIDAncher(AID);
6974 procedure TGikoForm.ShowSameIDAncher(const AID: String);
6978 numbers : TStringList;
6981 numbers := TStringList.Create;
6984 GikoSys.GetSameIDRes(AID, FActiveContent.Thread, numbers);
6986 if not (GikoSys.Setting.LimitResCountMessage) then begin
6988 end else if (numbers.Count > LIMIT) then begin
6989 if (GikoUtil.MsgBox(Handle,
6990 IntToStr(LIMIT) + '
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6991 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6992 MB_YESNO or MB_ICONQUESTION) = ID_YES) then begin
6996 FActiveContent.IDAnchorPopup(
6997 GikoSys.CreateResAnchor(numbers, FActiveContent.Thread, limited));
7002 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
7003 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
7005 SelectTimer.Interval := 0;
7006 if not (ListView.Selected = nil) then
7007 if( FActiveContent = nil) or
7008 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
7013 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
7014 procedure TGikoForm.ActiveListColumnSave;
7016 ActivListObj : TObject;
7017 i, id, idx : Integer;
7018 BBSOrder : TGikoBBSColumnList;
7019 CategoryOrder : TGikoCategoryColumnList;
7020 BoardOrder : TGikoBoardColumnList;
7023 ActivListObj := ActiveList;
7024 if ActivListObj is TBBS then begin
7025 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
7026 BBSOrder := TGikoBBSColumnList.Create;
7028 for i := 0 to ListView.Columns.Count - 1 do begin
7029 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
7030 idx := ListView.Column[ i ].Tag;
7031 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
7032 BBSOrder.Add( TGikoBBSColumnID( id ) );
7033 //
\95\9d\82Ì
\95Û
\91¶
7034 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
7036 for i := 0 to ListView.Columns.Count - 1 do
7037 //
\8f\87\8f\98\82Ì
\95Û
\91¶
7038 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
7042 end else if ActivListObj is TCategory then begin
7043 //=====
\94Â
\83\8a\83X
\83g =====
7044 CategoryOrder := TGikoCategoryColumnList.Create;
7046 for i := 0 to ListView.Columns.Count - 1 do begin
7047 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
7048 idx := ListView.Column[ i ].Tag;
7049 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
7050 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
7051 //
\95\9d\82Ì
\95Û
\91¶
7052 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
7054 for i := 0 to ListView.Columns.Count - 1 do
7055 //
\8f\87\8f\98\82Ì
\95Û
\91¶
7056 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
7060 end else if ActivListObj is TBoard then begin
7061 //=====
\83X
\83\8c\83\8a\83X
\83g =====
7062 BoardOrder := TGikoBoardColumnList.Create;
7064 for i := 0 to ListView.Columns.Count - 1 do begin
7065 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
7066 idx := ListView.Column[ i ].Tag;
7067 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
7068 BoardOrder.Add( TGikoBoardColumnID( id ) );
7069 //
\95\9d\82Ì
\95Û
\91¶
7070 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
7072 for i := 0 to ListView.Columns.Count - 1 do
7073 //
\8f\87\8f\98\82Ì
\95Û
\91¶
7074 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
7082 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
7083 Column: TListColumn; Point: TPoint);
7089 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
7090 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
7091 ListColumnPopupMenu.Items.Items[ i ].Free;
7093 //
\83\81\83j
\83\85\81[
\82Ì
\8dì
\90¬ (
\83\81\83C
\83\93\83J
\83\89\83\80\82Í
\95K
\90{
\82È
\82Ì
\82Å
\83\81\83j
\83\85\81[
\82É
\8aÜ
\82ß
\82È
\82¢)
7094 if TObject( FActiveList ) is TBBS then begin
7096 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
7097 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
7098 item := TMenuItem.Create( ListColumnPopupMenu );
7099 item.Caption := GikoBBSColumnCaption[ i ];
7101 item.OnClick := ListColumnPopupMenuOnClick;
7102 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
7103 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
7104 item.Checked := True;
7108 ListColumnPopupMenu.Items.Add( item );
7111 end else if TObject( FActiveList ) is TCategory then begin
7113 //=====
\94Â
\83\8a\83X
\83g =====
7114 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
7115 item := TMenuItem.Create( ListColumnPopupMenu );
7116 item.Caption := GikoCategoryColumnCaption[ i ];
7118 item.OnClick := ListColumnPopupMenuOnClick;
7119 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
7120 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
7121 item.Checked := True;
7125 ListColumnPopupMenu.Items.Add( item );
7128 end else if TObject( FActiveList ) is TBoard then begin
7130 //=====
\83X
\83\8c\83\8a\83X
\83g =====
7131 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
7132 item := TMenuItem.Create( ListColumnPopupMenu );
7133 item.Caption := GikoBoardColumnCaption[ i ];
7135 item.OnClick := ListColumnPopupMenuOnClick;
7136 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
7137 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
7138 item.Checked := True;
7142 ListColumnPopupMenu.Items.Add( item );
7147 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
7148 Point := ListView.ClientToScreen( Point );
7149 if ListColumnPopupMenu.Items.Count > 0 then
7150 ListColumnPopupMenu.Popup( Point.X, Point.Y );
7154 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
7155 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
7162 if not (Sender is TMenuItem) then
7165 ActiveListColumnSave;
7166 item := TMenuItem( Sender );
7168 if TObject( FActiveList ) is TBBS then
7169 orderList := GikoSys.Setting.BBSColumnOrder
7170 else if TObject( FActiveList ) is TCategory then
7171 orderList := GikoSys.Setting.CategoryColumnOrder
7172 else if TObject( FActiveList ) is TBoard then
7173 orderList := GikoSys.Setting.BoardColumnOrder
7177 if item.Checked then begin
7178 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
7179 for i := orderList.Count - 1 downto 0 do begin
7180 if Integer( orderList[ i ] ) = item.Tag then begin
7181 orderList.Delete( i );
7186 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
7187 orderList.Add( Pointer( item.Tag ) );
7190 SetActiveList( FActiveList );
7194 procedure TGikoForm.OnGestureStart(Sender: TObject);
7199 procedure TGikoForm.OnGestureMove(Sender: TObject);
7206 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
7208 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
7209 s := MouseGesture.GetGestureStr;
7211 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7212 if Action <> nil then
7213 ActStr := '
\81i' + Action.Caption + '
\81j';
7214 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
7215 StatusBar.Panels[1].Text := s;
7218 procedure TGikoForm.OnGestureEnd(Sender: TObject);
7223 s := MouseGesture.GetGestureStr;
7225 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7226 if Action <> nil then
7228 StatusBar.Panels[1].Text := '';
7231 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
7232 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
7234 ThreadItem: TThreadItem;
7236 DefaultDraw := true;
7237 if TObject(Item.Data) is TThreadItem then begin
7238 ThreadItem := TThreadItem(Item.Data);
7239 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
7240 ListView.Canvas.Brush.Color := FOddColor;
7241 //
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\82¯
\82Ç
\81A
\83t
\83H
\81[
\83J
\83X
\82ª
\82È
\82¢
\82Æ
\81A
\83O
\83\8c\83C
\82É
\82È
\82é
\82Ì
\82Å
\81A
\91¾
\8e\9a\82É
\95Ï
\8dX
7242 if (GikoSys.Setting.UnFocusedBold) and
7243 (Item.Selected) and (not ListView.Focused) then begin
7244 ListView.Canvas.Font.Style := [fsBold];
7247 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
7250 if ThreadItem.UnRead then
7251 ListView.Canvas.Font.Style := [fsBold];
7256 procedure TGikoForm.FormActivate(Sender: TObject);
7258 if GikoSys.Setting.GestureEnabled then begin
7259 GikoSys.Setting.Gestures.ClearGesture;
7260 GikoSys.Setting.Gestures.LoadGesture(
7261 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
7262 MouseGesture.UnHook;
7263 MouseGesture.OnGestureStart := OnGestureStart;
7264 MouseGesture.OnGestureMove := OnGestureMove;
7265 MouseGesture.OnGestureEnd := OnGestureEnd;
7266 MouseGesture.SetHook(Handle);
7268 //MouseGesture.UnHook;
7269 MouseGesture.OnGestureStart := nil;
7270 MouseGesture.OnGestureMove := nil;
7271 MouseGesture.OnGestureEnd := nil;
7275 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
7277 if (FIsMinimize <> mtMinimizing) then begin
7278 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
7279 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
7283 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
7288 affectedBand : TCoolBand;
7291 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
7292 FIsIgnoreResize := rtResizing;
7293 PostMessage( Handle, USER_RESIZED, 0, 0 );
7295 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
7296 if CoolBar = MainCoolBar then begin
7297 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
7298 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7299 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7300 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7301 GikoSys.Setting.MainCoolSet[i] := CoolSet;
7303 end else if CoolBar = ListCoolBar then begin
7304 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
7305 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7306 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7307 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7308 GikoSys.Setting.ListCoolSet[i] := CoolSet;
7310 end else if CoolBar = BrowserCoolBar then begin
7311 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
7312 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7313 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7314 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7315 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
7318 if not (Sender is TToolBar) or (CoolBar = nil) then
7320 toolbar := TToolBar( Sender );
7321 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
7322 affectedBand := nil;
7323 for i := CoolBar.Bands.Count - 1 downto 0 do begin
7324 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
7325 band := CoolBar.Bands[ i ];
7326 if band.Break or (i = 0) then begin
7327 if i + 1 < CoolBar.Bands.Count then
7328 if not CoolBar.Bands[ i + 1 ].Break then
7329 affectedBand := CoolBar.Bands[ i + 1 ];
7332 affectedBand := CoolBar.Bands[ i - 1 ];
7337 //
\83h
\83\89\83b
\83O
\92\86\82Í band.Width
\82ª
\8dX
\90V
\82³
\82ê
\82È
\82¢
\82Ì
\82Å
\81A
\93à
\91¤
\82Ì
\83T
\83C
\83Y
\82©
\82ç
\82Ð
\82Ë
\82è
\8fo
\82·
7338 if CoolBar = MainCoolBar then begin
7339 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
7340 coolSet.FCoolWidth := toolbar.Width + 25;
7341 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
7342 if affectedBand <> nil then begin
7343 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
7344 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7345 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
7347 end else if CoolBar = ListCoolBar then begin
7348 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
7349 coolSet.FCoolWidth := toolbar.Width + 25;
7350 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
7351 if affectedBand <> nil then begin
7352 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
7353 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7354 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
7356 end else if CoolBar = BrowserCoolBar then begin
7357 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
7358 coolSet.FCoolWidth := toolbar.Width + 25;
7359 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
7360 if affectedBand <> nil then begin
7361 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
7362 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7363 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
7370 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
7372 CoolBarResized( Sender, MainCoolBar );
7375 procedure TGikoForm.ListToolBarResize(Sender: TObject);
7377 CoolBarResized( Sender, ListCoolBar );
7380 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
7382 CoolBarResized( Sender, BrowserCoolBar );
7385 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
7386 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
7388 doc : IHTMLDocument2;
7389 ThreadItem : TThreadItem;
7390 ReadList : TStringList;
7391 wordCount : TWordCount;
7393 if not Assigned(FActiveContent) then
7395 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7396 if not Assigned(doc) then
7399 ThreadItem := GetActiveContent(True);
7400 ReadList := TStringList.Create;
7401 wordCount := TWordCount.Create;
7403 ThreadItem.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
7404 {$IFDEF SPAM_FILTER_ENABLED}
7405 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7406 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7407 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
7408 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7409 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7411 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7412 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7417 FActiveContent.Repaint := true;
7418 if ThreadItem <> nil then
7419 InsertBrowserTab( ThreadItem, True );
7421 //
\93¯
\88êID
\82ðNG
\83\8f\81[
\83h
\82É
\93o
\98^
7422 procedure TGikoForm.AddIDtoNGWord(invisible : boolean);
7424 doc : IHTMLDocument2;
7425 ThreadItem : TThreadItem;
7427 {$IFDEF SPAM_FILTER_ENABLED}
7429 ReadList : TStringList;
7430 wordCount : TWordCount;
7432 id, dateStr: String;
7434 No := KokoPopupMenu.Tag;
7435 if No = 0 then Exit;
7436 ThreadItem := GikoForm.KokoPopupThreadItem;
7437 if ThreadItem = nil then Exit;
7439 id := GikoSys.GetResID(No, ThreadItem);
7440 if (id <> '') and (not IsNoValidID(id)) then begin
7441 //
\83R
\83\81\83\93\83g
\82Æ
\82µ
\82Ä
\81A
\83X
\83\8c\83b
\83h
\96¼
\82Æ
\8d¡
\93ú
\82Ì
\93ú
\95t
\82ð
\92Ç
\89Á
7442 DateTimeToString(dateStr, 'yyyymmdd', Now);
7443 id := id + #9'>>add ' + dateStr + ',' + ThreadItem.Title;
7444 if (GikoSys.FAbon.AddToken(id, invisible)) then begin
7445 GikoSys.FAbon.ReLoadFromNGwordFile;
7446 FActiveContent.Repaint := True;
7449 ShowMessage('ID
\82ð
\8eæ
\93¾
\82Å
\82«
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B');
7451 {$IFDEF SPAM_FILTER_ENABLED}
7452 body := TStringList.Create;
7454 GikoSys.GetSameIDRes(id, ThreadItem, body);
7455 ReadList := TStringList.Create;
7456 wordCount := TWordCount.Create;
7458 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7459 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7460 for i := 0 to body.Count - 1 do begin
7461 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7462 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7463 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7473 if (FActiveContent.Repaint) then begin
7474 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7476 if not Assigned(doc) then
7478 ThreadItem.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
7479 if ThreadItem <> nil then
7480 InsertBrowserTab( ThreadItem, True );
7484 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
7485 procedure TGikoForm.IndividualAbonID(Atype : Integer);
7487 ThreadItem : TThreadItem;
7490 ReadList : TStringList;
7491 wordCount : TWordCount;
7493 No := KokoPopupMenu.Tag;
7494 if No = 0 then Exit;
7495 ThreadItem := GikoForm.KokoPopupThreadItem;
7496 if ThreadItem = nil then Exit;
7497 body := TStringList.Create;
7499 GikoSys.GetSameIDRes(No, ThreadItem, body);
7501 ReadList := TStringList.Create;
7502 wordCount := TWordCount.Create;
7504 ThreadItem.ScrollTop := FActiveContent.Browser.OleObject.Document.Body.ScrollTop;
7505 {$IFDEF SPAM_FILTER_ENABLED}
7506 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7507 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7509 for i := 0 to body.Count - 1 do begin
7510 {$IFDEF SPAM_FILTER_ENABLED}
7511 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7512 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7513 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7515 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7516 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7522 FActiveContent.Repaint := true;
7523 if ThreadItem <> nil then
7524 InsertBrowserTab( ThreadItem, True );
7531 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7533 firstElement: IHTMLElement;
7534 doc: IHTMLDocument2;
7537 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7538 if Assigned(doc) then
7539 firstElement := doc.all.item('idSearch', 0) as IHTMLElement;
7540 if Assigned(firstElement) then
7541 if firstElement.style.visibility <> 'hidden' then
7542 firstElement.style.visibility := 'hidden';
7547 procedure TGikoForm.RepaintAllTabsBrowser();
7550 ThreadItem: TThreadItem;
7552 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7553 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7555 ThreadItem := GetActiveContent;
7556 if ThreadItem <> nil then
7557 InsertBrowserTab( ThreadItem, True );
7561 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7562 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7563 Shift: TShiftState);
7565 //
\83u
\83\89\83E
\83U
\83^
\83u
\96³
\82µ
\82Å
\81A
\83L
\81[
\88Ú
\93®
\82Å
\93Ç
\82Ý
\94ò
\82Î
\82µ
\82ð
\89Â
\94\
\82É
\82·
\82é
\82½
\82ß
\82Ì
7566 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7567 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7568 SelectTimer.Interval := 0;
7569 if not (GikoSys.Setting.BrowserTabVisible) then begin
7570 if (GetActiveList is TBoard) then begin
7571 //Shift Alt Ctrl
\82ª
\98b
\82³
\82ê
\82½
\82Æ
\82«
\82Í
\81A
\95û
\8cü
\83L
\81[
\82ð
\97£
\82µ
\82Ä
\82¢
\82Ä
\82à
\96³
\8e\8b
7572 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7573 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7574 (Key = VK_UP) or (Key = VK_DOWN)) then
7575 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7579 // *************************************************************************
7580 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7581 // *************************************************************************
7582 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7583 Node: TTreeNode; var AllowEdit: Boolean);
7585 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7586 FOrigenCaption := Node.Text;
7588 // *************************************************************************
7589 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7590 // *************************************************************************
7591 function TGikoForm.GetMainForm(): TComponent;
7593 Result := Application.MainForm;
7595 // *************************************************************************
7596 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7597 // *************************************************************************
7598 function TGikoForm.GetScreenCursor(): TCursor;
7600 Result := Screen.Cursor;
7602 // *************************************************************************
7603 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7604 // *************************************************************************
7605 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7607 if (Screen.Cursor <> Cursor) then
7608 Screen.Cursor := Cursor;
7610 // *************************************************************************
7611 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82ð
\95Â
\82¶
\82é
\81~
\83{
\83^
\83\93\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
7612 // *************************************************************************
7613 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7615 //Action
\82Å
\90Ý
\92è
\82·
\82é
\82Æ
\83L
\83\83\83v
\83V
\83\87\83\93\82ª
\8fÁ
\82¹
\82È
\82¢
\82Ì
\82Å
\81AOnClick
\83C
\83x
\83\93\83g
\82Å
\82Ì
7616 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7617 if GikoDM.CabinetVisibleAction.Enabled then begin
7618 GikoDM.CabinetVisibleAction.Execute;
7621 // *************************************************************************
7622 //!
\82¨
\8bC
\82É
\93ü
\82è
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\90®
\97\9d\83{
\83^
\83\93\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
7623 // *************************************************************************
7624 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7626 if GikoDM.FavoriteArrangeAction.Enabled then begin
7627 GikoDM.FavoriteArrangeAction.Execute;
7630 // *************************************************************************
7631 //!
\83M
\83R
\83i
\83r
\82Ì
\83\81\83b
\83Z
\81[
\83W
\83n
\83\93\83h
\83\8a\83\93\83O (
\92\8d\88Ó
\81j
\8f\88\97\9d\97Ê
\82É
\92\8d\88Ó
\81I
7632 // *************************************************************************
7633 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7634 var Handled: Boolean);
7638 //GikoForm
\82ª
\83A
\83N
\83e
\83B
\83u
\82È
\82Æ
\82«
\82¾
\82¯
\8eó
\82¯
\8eæ
\82é
\91¼
\82Ì
\83t
\83H
\81[
\83\80\82Ì
\82ð
\89¡
\8eæ
\82è
\82µ
\82È
\82¢
\82½
\82ß
7639 if Self.Active then begin
7641 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7642 WM_KEYFIRST..WM_KEYLAST :
7644 //
\83L
\81[
\83A
\83b
\83v
\82Í
\96³
\8e\8b\82·
\82é
\81@KeyDown
\82Æ
\8d\87\82í
\82¹
\82Ä
\82Q
\89ñ
\8cÄ
\82Î
\82ê
\82é
\82©
\82ç
7645 if (Msg.message <> WM_KEYUP)
7646 and (Msg.message <> WM_CHAR)
7647 and (Msg.message <> WM_SYSKEYUP) then begin
7648 wmMsg.Msg := Msg.message;
7649 wmMsg.CharCode := Word(Msg.wParam);
7650 wmMsg.KeyData := Msg.lParam;
7651 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7652 Self.OnShortCut(wmMsg, Handled);
7657 // Explorer
\82ÌD&D
\82ð
\8eó
\82¯
\82é
\82Æ
\82Ì
\94ñ
\83A
\83N
\83e
\83B
\83u
7658 if Msg.message = WM_DROPFILES then begin
7659 AcceptDropFiles(Msg);
7664 // *************************************************************************
7665 //!
\83A
\83v
\83\8a\83P
\81[
\83V
\83\87\83\93\82ª
\83A
\83N
\83e
\83B
\83u
\82Å
\82È
\82
\82È
\82Á
\82½
\82Æ
\82«
\82Ì
\83C
\83x
\83\93\83g
7666 // *************************************************************************
7667 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7669 Application.ProcessMessages;
7670 if not Application.Terminated then begin
7671 if PreviewTimer.Enabled then
7672 PreviewTimer.Enabled := False;
7673 //
\83t
\83H
\81[
\83J
\83X
\82ª
\91¼
\82Ì
\83A
\83v
\83\8a\82É
\95Ï
\82í
\82Á
\82½
\82Æ
\82«
\82É
\83|
\83b
\83v
\83A
\83b
\83v
\8fÁ
\8b\8e
7674 if (FResPopupBrowser <> nil) then
7675 FResPopupBrowser.Clear;
7677 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7678 if FPreviewBrowser <> nil then
7679 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7683 // *************************************************************************
7684 //!
\83A
\83v
\83\8a\83P
\81[
\83V
\83\87\83\93\82ª
\8f\88\97\9d\82³
\82ê
\82È
\82¢
\97á
\8aO
\82ð
\8fE
\82Á
\82½
\82Æ
\82«
\82Ì
\83C
\83x
\83\93\83g
7685 // *************************************************************************
7686 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7691 if (Sender <> nil) then begin
7692 s := ' [' + Sender.ClassName + ']' + #13#10;
7694 s := ' [ Sender is nil ] ' + #13#10;
7697 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7699 // *************************************************************************
7700 //!
\83_
\83E
\83\93\83\8d\81[
\83h
\83R
\83\93\83g
\83\8d\81[
\83\8b\83X
\83\8c\83b
\83h
\82Ì
\90¶
\90¬
7701 // *************************************************************************
7702 procedure TGikoForm.CreateControlThread();
7704 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7705 FControlThread := TThreadControl.Create(True);
7706 FControlThread.MaxThreadCount := 1;
7707 FControlThread.Resume;
7708 FControlThread.OnDownloadEnd := DownloadEnd;
7709 FControlThread.OnDownloadMsg := DownloadMsg;
7710 FControlThread.OnWork := Work;
7711 FControlThread.OnWorkBegin := WorkBegin;
7712 FControlThread.OnWorkEnd := WorkEnd;
7714 // *************************************************************************
7715 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7716 // *************************************************************************
7717 procedure TGikoForm.CreateBrowsers(count: Integer);
7720 newBrowser: TWebBrowser;
7722 BrowserNullTab := TBrowserRecord.Create;
7723 BrowserNullTab.Browser := Browser;
7724 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7726 FBrowsers := TList.Create;
7728 for i := 0 to count -1 do begin
7729 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7730 newBrowser := FBrowsers[FBrowsers.Count - 1];
7731 TOleControl(newBrowser).Parent := BrowserPanel;
7732 TOleControl(newBrowser).Align := alNone;
7733 TOleControl(newBrowser).Left := 0;
7734 TOleControl(newBrowser).Top := 0;
7735 newBrowser.RegisterAsDropTarget := False;
7736 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7737 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7738 newBrowser.OnEnter := BrowserEnter;
7739 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7740 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7741 newBrowser.Navigate(BLANK_HTML);
7742 ShowWindow(newBrowser.Handle, SW_HIDE);
7743 GikoSys.ShowRefCount('Browser' + IntToStr(i), newBrowser.ControlInterface);
7744 GikoSys.ShowRefCount('Document' + IntToStr(i), newBrowser.ControlInterface.Document);
7746 BrowserNullTab.Browser.BringToFront;
7747 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7749 //
\8bN
\93®
\8e\9e\82É
\83^
\83u
\8e©
\93®
\95\9c\8c³
\82ð
\93ü
\82ê
\82Ä
\82¢
\82é
\82Æ
\81A
\8bó
\83y
\81[
\83W
\97p
\82ÌBrowser
\82Ì
7750 //
\95`
\89æ
\82ª
\8fI
\82í
\82Á
\82Ä
\82¢
\82È
\82
\82Ä
\81A
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
\82Ì
\90Ý
\92è
\93\99\82É
\93Ë
\93ü
\82·
\82é
\82Ì
\82Å
7751 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7752 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7753 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7754 Application.ProcessMessages;
7757 // *************************************************************************
7758 //!
\83c
\81[
\83\8b\83o
\81[
\82É
\83X
\83\8c\8di
\8d\9e\82Ý
\83R
\83\93\83{
\83{
\83b
\83N
\83X
\82ð
\90Ý
\92è
\82·
\82é
7759 // *************************************************************************
7760 procedure TGikoForm.SetSelectComboBox();
7762 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7765 ToolButton: TToolButton;
7767 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7768 SelectComboBoxPanel.Visible := False;
7770 for i := ListToolBar.ControlCount - 1 downto 0 do
7772 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7774 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7775 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7776 SelectComboBoxPanel.Parent := ListToolBar;
7777 SelectComboBoxPanel.Visible := True;
7779 SelectComboBox.Left := 0;
7780 SelectComboBox.Top := 0;
7781 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7782 SelectComboBox.Width := SelectComboBoxPanel.Width -
7783 SelectComboBoxSplitter.Width;
7785 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7786 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7787 if ToolButton = nil then begin
7788 ToolButton := TToolButton.Create(ListToolBar);
7789 ToolButton.Name := DUMMYCOMPNAME;
7791 ToolButton.Style := tbsSeparator;
7792 ToolButton.Width := 0;
7793 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7794 ListToolBar.InsertControl(ToolButton);
7795 ToolButton.Visible := False;
7797 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\82Ì
\97×
\82É
\83Z
\83p
\83\8c\81[
\83^
\82ª
\82 \82é
\8fê
\8d\87\82Í
\89B
\82·
7798 if (i + 1) < ListToolBar.ControlCount then
7799 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7800 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7801 ListToolBar.Controls[ i + 1 ].Visible := False;
7804 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7805 ListToolBar.Controls[ i ].Visible := False;
7813 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\83}
\83E
\83X
\83_
\83E
\83\93\83C
\83x
\83\93\83g
7814 procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7815 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7822 if (TreeView.Selected <> nil) and
7823 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7824 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
7825 rect := TreeView.Selected.DisplayRect(true);
7826 //
\83A
\83C
\83R
\83\93\95ª
\82¾
\82¯
\8d¶
\82É
\82¸
\82ç
\82·
7827 if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
7828 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7829 //
\83N
\83\8a\83b
\83N
\82Æ
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82ð
\83R
\83R
\82Å
\94»
\92è
7830 if ssDouble in Shift then begin
7831 TreeDoubleClick( TreeView.Selected );
7833 TreeClick(TreeView.Selected);
7840 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
7841 procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7845 if ActionList <> nil then begin
7846 SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7848 for i := 0 to ActionList.ActionCount - 1 do begin
7850 FActionListGroupIndexes[i] :=
7851 TCustomAction(ActionList.Actions[i]).GroupIndex;
7852 TCustomAction(ActionList.Actions[i]).GroupIndex
7855 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7861 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
7862 procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7866 if ActionList <> nil then begin
7867 if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7868 for i := 0 to ActionList.ActionCount - 1 do begin
7870 TCustomAction(ActionList.Actions[i]).GroupIndex
7871 := FActionListGroupIndexes[i];
7873 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7879 //!
\82±
\82Ì
\83\8c\83X
\82ÌURL
\8eæ
\93¾
7880 procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
7884 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
7885 procedure TGikoForm.RefreshListView(Thread: TThreadItem);
7887 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
7888 if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin
7893 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
7894 MousePos: TPoint; var Handled: Boolean);
7897 coolBar: TGikoCoolBar;
7900 if (Sender <> nil) and (Sender is TGikoCoolBar) then begin
7901 coolBar := TGikoCoolBar(Sender);
7902 if (coolBar = MainCoolBar) then begin
7903 FToolBarSettingSender := tssMain;
7904 end else if (coolBar = ListCoolBar) then begin
7905 FToolBarSettingSender := tssList;
7906 end else if (coolBar = BrowserCoolBar) then begin
7907 FToolBarSettingSender := tssBrowser;
7909 FToolBarSettingSender := tssNone;
7911 pos := coolBar.ClientToScreen( MousePos );
7912 MainCoolBarPopupMenu.Popup( pos.X, pos.Y );
7917 procedure TGikoForm.TaskTrayIconMessage(var Msg: TMsg);
7921 //
\8d¶
\83N
\83\8a\83b
\83N
\82È
\82ç
\95\9c\8c³
\82·
\82é
7922 if (Msg.wParam = WM_LBUTTONUP) then begin
7924 end else if (Msg.wParam=WM_RBUTTONUP) then begin
7925 //
\89E
\83N
\83\8a\83b
\83N
\82È
\82ç
\8fI
\97¹
\82·
\82é
7927 SetForegroundWindow ( Self.Handle );
7928 TaskTrayPopupMenu.Popup ( p.X, p.Y );
7931 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
7932 procedure TGikoForm.StoredTaskTray;
7935 if (FIconData.uID = 0) then begin
7936 FIconData.cbSize := SizeOf(TNotifyIconData);
7937 FIconData.uID := Self.Handle;
7938 FIconData.Wnd := Handle;
7939 FIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
7940 FIconData.uCallbackMessage := USER_TASKTRAY;
7941 FIconData.hIcon := Application.Icon.Handle; {
\83A
\83C
\83R
\83\93\8ew
\92è}
7942 FIconData.szTip := '
\83M
\83R
\83i
\83r'; {
\83q
\83\93\83g
\95¶
\8e\9a\97ñ}
7943 Shell_NotifyIcon(NIM_ADD, @FIconData);
7944 ShowEditors(SW_HIDE);
7945 ShowWindow(Self.Handle, SW_HIDE);
7950 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82Ì
\83A
\83C
\83R
\83\93\8dí
\8f\9c\81\95\83t
\83H
\81[
\83\80\95\
\8e¦
7951 procedure TGikoForm.UnStoredTaskTray;
7955 Shell_NotifyIcon(NIM_DELETE, @FIconData);
7956 SetForegroundWindow(Application.Handle);
7961 // Action
\82©
\82ç
\8ai
\94[
\82µ
\82½
\82Æ
\82«
\82ÍTag
\82Ì
\92l
\82Í0
\88È
\8aO
7962 if (GikoDM.StoredTaskTrayAction.Tag = 0) then begin
7963 ShowWindow(Self.Handle, SW_RESTORE);
7965 ShowWindow(Self.Handle, SW_SHOW);
7967 ShowEditors(SW_SHOW);
7968 GikoDM.StoredTaskTrayAction.Tag := 0;
7972 \brief
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
7973 \param nCmdShow Windows.ShowWindow
\82É
\91\97\82é
\83p
\83\89\83\81\81[
\83^
\82Æ
\93¯
\82¶
7975 procedure TGikoForm.ShowEditors(nCmdShow: Integer);
7979 //
\83\8c\83X
\83G
\83f
\83B
\83^
\82ð
\92T
\82·
7980 for i := 0 to Screen.CustomFormCount - 1 do begin
7981 if TObject(Screen.CustomForms[i]) is TEditorForm then
7982 ShowWindow(Screen.CustomForms[i].Handle, nCmdShow);
7986 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83u
\83\89\83E
\83U
\8dì
\90¬
7987 procedure TGikoForm.CreateResPopupBrowser;
7989 if (FResPopupBrowser = nil) then begin
7990 FResPopupBrowser := TResPopupBrowser.Create(BrowserPanel);
7993 //! ListView
\82ÌD&D
\8eó
\82¯
\8eæ
\82è
7994 procedure TGikoForm.AcceptDropFiles(var Msg: TMsg);
7996 FileName: Array[0..MAX_PATH] of Char;
8000 datList: TStringList;
8002 //
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\94Â
\82Ì
\82Æ
\82«
\88È
\8aO
\82Í
\8b\91\94Û
8003 if GetActiveList is TBoard then begin
8004 Board := TBoard(GetActiveList);
8005 if MsgBox(Handle, Board.Title
8006 + '
\94Â
\82É
\93ü
\82ê
\82Ä
\82¢
\82¢
\82Å
\82·
\82©
\81H', '
\83M
\83R
\83i
\83r', MB_YESNO or MB_ICONQUESTION) = IDYES then begin
8007 //
\94Â
\82Ì
\8e\9e\82Í
\81A
\83\8d\83O
\83t
\83H
\83\8b\83_
\82É
\83R
\83s
\81[
\82µ
\82Ä
\82Í
\82®
\82ê
\83\8d\83O
\91Î
\89\9e\82Æ
\93¯
\82¶
\8f\88\97\9d\81H
8008 datList := TStringList.Create;
8010 Cnt := DragQueryFile(Msg.WParam, $FFFFFFFF, FileName, SizeOf(FileName));
8011 for K := 0 to Cnt - 1 do begin
8012 DragQueryFile(Msg.WParam, K, FileName, SizeOf(FileName));
8013 // FileName
\82Édrop
\82³
\82ê
\82½
\83t
\83@
\83C
\83\8b\96¼
\82ª
\93ü
\82Á
\82Ä
\82¢
\82é
\82Ì
\82Å
\81A
\82±
\82±
\82Å
\89½
\82ç
\82©
\82Ì
\8f\88\97\9d\82ð
\82·
\82é
\81B
\82½
\82Æ
\82¦
\82Î
\8e\9f\82Ì
\8ds
8014 //
\83t
\83@
\83C
\83\8b\82Ì
\83`
\83F
\83b
\83N
8015 if (isValidFile(FileName)) then begin
8016 LogFolder := ExtractFilePath(Board.FilePath);
8017 if (FileExists( LogFolder + ExtractFileName(FileName))) then begin
8018 GikoUtil.MsgBox(Handle, LogFolder + '
\82É' + ExtractFileName(FileName) + '
\82ª
\8aù
\82É
\91¶
\8dÝ
\82µ
\82Ü
\82·
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
8020 if (not DirectoryExists(LogFolder)) then begin
8021 if (not GikoSys.ForceDirectoriesEx(LogFolder) ) then begin
8022 GikoUtil.MsgBox(Handle, LogFolder + '
\82Ì
\90¶
\90¬
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
8025 if (not Windows.CopyFile(FileName, PChar(LogFolder + ExtractFileName(FileName)), true)) then begin
8026 GikoUtil.MsgBox(Handle, FileName + '
\82Ì
\83R
\83s
\81[
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
8028 datList.Add(ExtractFileName(FileName));
8033 DragFinish(Msg.WParam);
8034 if (datList.Count > 0) then begin
8035 GikoSys.AddOutofIndexDat(Board, datList, False);
8036 ShowMessage(IntToStr(datList.Count) + '
\8cÂ
\82Ìdat
\83t
\83@
\83C
\83\8b\82ª
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82µ
\82½
\81B' );
8037 if GikoForm.TreeView.Visible then begin
8038 GikoForm.TreeView.Refresh;
8040 if GikoForm.ListView.Visible then begin
8044 ShowMessage('
\88ê
\82Â
\82à
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B' );
8052 ShowMessage('
\94Â
\82ð
\95\
\8e¦
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
8055 procedure TGikoForm.UpdateListView();
8057 //ListView
\82Å
\82±
\82Ì
\83X
\83\8c\82ª
\8aÜ
\82Ü
\82ê
\82é
\94Â
\82ð
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Æ
\82«
\82Ì
\8dX
\90V
\8f\88\97\9d
8058 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
8059 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
8060 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
8061 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
8062 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
8063 case GikoForm.ViewType of
8064 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
8065 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
8066 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
8067 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
8068 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
8069 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
8074 //!
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
8075 function TGikoForm.isValidFile(FileName: String) : boolean;
8080 //
\91¶
\8dÝ
\82·
\82é
\82©
\81A
\8ag
\92£
\8eqdat
\81A
\83t
\83@
\83C
\83\8b\96¼
8081 if ( not FileExists(FileName) ) then begin
8083 GikoUtil.MsgBox(Handle, FileName + '
\82Í
\91¶
\8dÝ
\82µ
\82Ü
\82¹
\82ñ
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
8084 end else if (ExtractFileExt(ExtractFileName(FileName)) <> '.dat' ) then begin
8086 GikoUtil.MsgBox(Handle, ExtractFileName(FileName) + '
\82Ì
\8ag
\92£
\8eq
\82ª".dat"
\82Å
\82 \82è
\82Ü
\82¹
\82ñ
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
8088 //
\83\8d\83O
\83t
\83@
\83C
\83\8b\82Ì
\8ag
\92£
\8eq
\82ð
\82Í
\82¸
\82µ
\82½
\82à
\82Ì
\82ª
\83X
\83\8c\8dì
\90¬
\93ú
\8e\9e
8090 dt := GikoSys.GetCreateDateFromName(ExtractFileName(FileName));
8091 if ((UnixToDateTime(ZERO_DATE) + OffsetFromUTC) = dt) then begin
8093 GikoUtil.MsgBox(Handle, ExtractFileName(FileName) + '
\82Ì
\83t
\83@
\83C
\83\8b\96¼
\82ª
\95s
\90³
\82Å
\82·
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
8097 GikoUtil.MsgBox(Handle, ExtractFileName(FileName) + '
\82Ì
\83t
\83@
\83C
\83\8b\96¼
\82ª
\95s
\90³
\82Å
\82·
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
8102 procedure TGikoForm.ResPopupClearTimerTimer(Sender: TObject);
8104 ResPopupClearTimer.Enabled := False;
8105 if ResPopupClearTimer.Tag = 0 then begin
8106 FResPopupBrowser.Clear;
8108 FResPopupBrowser.CurrentBrowser.ChildClear;
8111 //!
\83A
\83C
\83R
\83\93\93Ç
\82Ý
\8d\9e\82Ý
8112 procedure TGikoForm.LoadIcon();
8114 ICONI6 = 'icon16.bmp';
8115 ICON32 = 'icon32.bmp';
8116 ICONSTAT = 'state_icon.bmp';
8117 ICONMES = 'message_icon.bmp';
8118 ICONADD = 'address_icon.bmp';
8119 ICONITEM = 'item_icon.bmp';
8120 ICONTOOL = 'hottoolbar_icon.bmp';
8122 if FileExists(GikoSys.Setting.GetAppDir + ICONI6) then begin
8124 ItemIcon16.FileLoad(rtBitmap,
8125 GikoSys.Setting.GetAppDir + ICONI6, clPurple);
8127 if FileExists(GikoSys.Setting.GetAppDir + ICON32) then begin
8129 ItemIcon32.FileLoad(rtBitmap,
8130 GikoSys.Setting.GetAppDir + ICON32, clPurple);
8132 if FileExists(GikoSys.Setting.GetAppDir + ICONSTAT) then begin
8133 StateIconImageList.Clear;
8134 StateIconImageList.FileLoad(rtBitmap,
8135 GikoSys.Setting.GetAppDir + ICONSTAT, clPurple);
8137 if FileExists(GikoSys.Setting.GetAppDir + ICONMES) then begin
8138 MessageImageList.Clear;
8139 MessageImageList.FileLoad(rtBitmap,
8140 GikoSys.Setting.GetAppDir + ICONMES, clPurple);
8142 if FileExists(GikoSys.Setting.GetAppDir + ICONADD) then begin
8143 AddressImageList.Clear;
8144 AddressImageList.FileLoad(rtBitmap,
8145 GikoSys.Setting.GetAppDir + ICONADD, clPurple);
8147 if FileExists(GikoSys.Setting.GetAppDir + ICONITEM) then begin
8148 ItemImageList.Clear;
8149 ItemImageList.FileLoad(rtBitmap,
8150 GikoSys.Setting.GetAppDir + ICONITEM, clPurple);
8152 if FileExists(GikoSys.Setting.GetAppDir + ICONTOOL) then begin
8153 HotToobarImageList.Clear;
8154 HotToobarImageList.FileLoad(rtBitmap,
8155 GikoSys.Setting.GetAppDir + ICONTOOL, clPurple);
8158 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\93Ç
\82Ý
\8d\9e\82Ý
8159 procedure TGikoForm.LoadPopupMenu();