6 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
7 OleCtrls, ComCtrls, ExtCtrls, Menus, StdCtrls, MMSystem, DateUtils, Math,
15 IdHTTP, ActiveX, ActnList, ImgList,
16 ToolWin, Buttons, {Clipbrd,} {HTTPApp,} YofUtils, IdComponent,
17 ShellAPI, UrlMon, Tabs, IdGlobal, StrUtils,
18 CommCtrl, IniFiles, Dialogs,
19 GikoSystem, GikoUtil, Setting, BoardGroup, ThreadControl, ItemDownload,
20 Editor, RoundData, RoundName, KeySetting, GikoPanel, Favorite, FavoriteAdd,
21 FavoriteArrange, AddressHistory, Preview, HTMLDocumentEvent, Kotehan,
22 HintWindow, GikoCoolBar, GikoListView, ToolBarSetting, ToolBarUtil,
23 IndividualAbon, Search, ExternalBoardManager, ExternalBoardPlugInMain,
24 StdActns, GikoXMLDoc, Variants, ExtActns,IdTCPConnection, IdBaseComponent,
28 TGikoTreeType = (gttNone, gtt2ch, gttHistory, gttFavorite);
29 TToolBarSettingSenderType = (tssNone, tssMain, tssList, tssBrowser);
30 TMinimizeType = (mtNone, mtMinimizing, mtMinimized);
31 TResizeType = (rtNone, rtResizing);
33 TBrowserRecord = class;
35 TGikoForm = class(TForm)
36 StatusBar: TStatusBar;
39 TreeSplitter: TSplitter;
42 ThreadMainPanel: TPanel;
43 ListSplitter: TSplitter;
45 ListView: TGikoListView;
49 MessageHideButton: TSpeedButton;
50 MessageListView: TListView;
51 MessageSplitter: TSplitter;
53 SpeedButton1: TSpeedButton;
55 CabinetSelectToolButton: TToolButton;
56 HistoryToolBar: TToolBar;
57 ToolButton15: TToolButton;
58 ToolButton18: TToolButton;
59 ItemIcon16: TImageList;
60 ItemIcon32: TImageList;
61 HotToobarImageList: TImageList;
62 ToobarImageList: TImageList;
63 ItemImageList: TImageList;
64 ActionList: TActionList;
65 LogDeleteAction: TAction;
66 KidokuAction: TAction;
67 StdToolBarVisibleAction: TAction;
68 SearchAction: TAction;
69 GikoNaviWebPageAction: TAction;
72 MsgBarVisibleAction: TAction;
73 StatusBarVisibleAction: TAction;
74 LargeIconAction: TAction;
75 SmallIconAction: TAction;
76 ListIconAction: TAction;
77 DetailIconAction: TAction;
78 CabinetBBSAction: TAction;
79 CabinetHistoryAction: TAction;
80 CabinetVisibleAction: TAction;
81 MidokuAction: TAction;
82 AllSelectAction: TAction;
83 UpFolderAction: TAction;
84 ListNumberVisibleAction: TAction;
85 AllItemAction: TAction;
86 LogItemAction: TAction;
87 NewItemAction: TAction;
88 SelectItemAction: TAction;
89 ShowThreadAction: TAction;
93 DeleteMenu: TMenuItem;
95 KidokuMenu: TMenuItem;
96 MidokuMenu: TMenuItem;
97 AllSelectMenu: TMenuItem;
99 StdToolBarMenu: TMenuItem;
100 CabinetMenu: TMenuItem;
103 CabinetVisibleMenu: TMenuItem;
104 MessageMenu: TMenuItem;
105 StatusBarMenu: TMenuItem;
107 LargeIconMenu: TMenuItem;
108 SmallIconMenu: TMenuItem;
110 DetailMenu: TMenuItem;
113 RoundMenu: TMenuItem;
115 OptionMenu: TMenuItem;
119 AboutMenu: TMenuItem;
121 BrowserPopupMenu: TPopupMenu;
122 ShowThreadMenu: TMenuItem;
123 ShowBoardMenu: TMenuItem;
124 ShowBoardAction: TAction;
125 ListIconPopupMenu: TPopupMenu;
126 LargeIconPMenu: TMenuItem;
127 SmallIconPMenu: TMenuItem;
128 ListPMenu: TMenuItem;
129 DetailPMenu: TMenuItem;
130 CabinetCloseAction: TAction;
131 ClosePopupMenu: TPopupMenu;
132 CloseMenu: TMenuItem;
133 OptionAction: TAction;
143 RoundAction: TAction;
144 ListPopupMenu: TPopupMenu;
145 ListRoundPMenu: TMenuItem;
146 ListReservPMenu: TMenuItem;
148 ItemRoundPMenu: TMenuItem;
150 KidokuPMenu: TMenuItem;
151 MidokuPMenu: TMenuItem;
152 AllSelectPMenu: TMenuItem;
153 UrlCopyPMenu: TMenuItem;
155 DeletePMenu: TMenuItem;
157 ViewPMenu: TMenuItem;
158 LargeIconLPMenu: TMenuItem;
159 SmallIconLPMenu: TMenuItem;
160 ListLPMenu: TMenuItem;
161 DetailLPMenu: TMenuItem;
165 URLCopyAction: TAction;
169 MsgBarCloseAction: TAction;
170 ScrollTopAction: TAction;
171 ScrollLastAction: TAction;
172 ScrollNewAction: TAction;
173 ScrollKokoAction: TAction;
174 EditorAction: TAction;
176 ItemReloadAction: TAction;
177 BrowserMaxAction: TAction;
189 SelectListReloadAction: TAction;
190 SelectThreadReloadAction: TAction;
191 KokoPopupMenu: TPopupMenu;
192 KokomadePMenu: TMenuItem;
194 MenuItem1: TMenuItem;
195 MenuItem2: TMenuItem;
196 BrowserTabCloseAction: TAction;
197 BrowserTabPopupMenu: TPopupMenu;
199 KokomadeAction: TAction;
200 ZenbuAction: TAction;
201 KokoResAction: TAction;
202 SelectItemURLCopyAction: TAction;
203 SelectReservAction: TAction;
204 NotSelectTabCloseAction: TAction;
208 TreePopupMenu: TPopupMenu;
209 TreeSelectThreadPupupMenu: TMenuItem;
210 TreeSelectBoardPupupMenu: TMenuItem;
212 TreeSelectURLPupupMenu: TMenuItem;
213 TreeSelectBoradReload: TAction;
214 TreeSelectThreadReload: TAction;
215 TreeSelectURLCopy: TAction;
216 ListToolBarVisibleAction: TAction;
217 BrowserToolBarVisibleAction: TAction;
221 BrowserBottomPanel: TGikoPanel;
222 CabinetSelectPopupMenu: TPopupMenu;
224 ItemReservPMenu: TMenuItem;
225 RoundNamePopupMenu: TPopupMenu;
226 SelectNewRoundName: TAction;
227 SelectDeleteRound: TAction;
228 NewBoardAction: TAction;
231 LoginAction: TAction;
233 KeySettingAction: TAction;
235 AllTabCloseAction: TAction;
243 MessageImageList: TImageList;
244 ProgressBar: TProgressBar;
245 ArrangeAction: TAction;
247 NameURLCopyAction: TAction;
248 SelectItemNameURLCopyAction: TAction;
249 NameUrlCopyPMenu: TMenuItem;
256 ListCoolBar: TGikoCoolBar;
257 ListToolBar: TToolBar;
258 BrowserCoolBar: TGikoCoolBar;
259 BrowserToolBar: TToolBar;
260 ToolButton3: TToolButton;
261 ToolButton9: TToolButton;
262 ToolButton11: TToolButton;
263 ToolButton5: TToolButton;
264 ListNameToolBar: TToolBar;
265 ListNameLabel: TLabel;
267 BrowserNameToolBar: TToolBar;
268 ItemBoardImage: TImage;
269 BrowserBoardNameLabel: TLabel;
271 BrowserNameLabel: TLabel;
272 ActiveLogDeleteAction: TAction;
276 ListNameBarVisibleAction: TAction;
278 BrowserNameBarVisibleAction: TAction;
281 TreeSelectNameURLCopy: TAction;
282 TreeSelectNameURLPupupMenu: TMenuItem;
285 PaneInitAction: TAction;
287 BrowserTabToolBar: TToolBar;
288 BrowserTab: TTabControl;
289 BrowserMinAction: TAction;
292 SelectTextClearAction: TAction;
293 MailTextClearAction: TAction;
294 NameTextClearAction: TAction;
298 LeftmostTabSelectAction: TAction;
299 LeftTabSelectAction: TAction;
300 RightTabSelectAction: TAction;
301 RightmostTabSelectAction: TAction;
307 FavoriteMenu: TMenuItem;
308 FavoriteAddAction: TAction;
310 BoardFavoriteAddMenu: TMenuItem;
311 BoardFavoriteAddAction: TAction;
312 ThreadFavoriteAddAction: TAction;
313 ThreadFavoriteAddMenu: TMenuItem;
314 TreeSelectFavoriteAddAction: TAction;
316 TreeSelectFavoriteAddPupupMenu: TMenuItem;
317 FavoriteArrangeAction: TAction;
318 FavoriteTreeView: TTreeView;
319 StateIconImageList: TImageList;
321 TopRightPanel: TPanel;
324 TopCoolPanel: TPanel;
325 MainCoolBar: TGikoCoolBar;
326 MenuToolBar: TToolBar;
327 StdToolBar: TToolBar;
328 AddressToolBar: TToolBar;
329 AddressComboBox: TComboBox;
330 MoveToToolButton: TToolButton;
331 MoveToAction: TAction;
332 AddressImageList: TImageList;
333 AddressBarVisibleAction: TAction;
334 AddressToolBarMenu: TMenuItem;
336 BrowserTabVisibleAction: TAction;
339 BrowserTabTopAction: TAction;
340 BrowserTabBottomAction: TAction;
344 BrowserTabTabStyleAction: TAction;
345 BrowserTabButtonStyleAction: TAction;
346 BrowserTabFlatStyleAction: TAction;
350 PreviewTimer: TTimer;
351 MonazillaWebPageAction: TAction;
352 MonazillaWebPageAction1: TMenuItem;
353 GikoHelpAction: TAction;
356 KotehanAction: TAction;
358 LinkBarVisibleAction: TAction;
362 ChevronPopupMenu: TPopupMenu;
363 BBS2chWebPageAction: TAction;
366 GikoFolderOpenAction: TAction;
368 LinkToolBar: TToolBar;
370 ThreadEditorAction: TAction;
374 LinkBarPopupMenu: TPopupMenu;
375 ToolBarSettingAction: TAction;
377 ThreadPopupMenu: TPopupMenu;
378 MenuItem4: TMenuItem;
379 MenuItem5: TMenuItem;
380 MenuItem6: TMenuItem;
382 NameCopyAction: TAction;
383 BoardIEAction: TAction;
385 SelectItemNameCopyAction: TAction;
386 SelectItemNameCopyAction1: TMenuItem;
390 SelectComboBox: TComboBox;
391 MainCoolBarPopupMenu: TPopupMenu;
392 StdToolBarVisiblePMenu: TMenuItem;
393 AddressToolBarVisiblePMenu: TMenuItem;
394 LinkToolBarVisiblePMenu: TMenuItem;
415 SelectResAction: TAction;
416 ToolButton16: TToolButton;
417 AllResAction: TAction;
424 EditNGAction: TAction;
425 ReloadAction: TAction;
426 GoFowardAction: TAction;
427 GoBackAction: TAction;
428 IndividualAbon1: TMenuItem;
430 IndividualAbon2: TMenuItem;
432 CancellIndividualAbon: TAction;
433 AntiIndividualAbon: TMenuItem;
437 SearchBoardName: TMenuItem;
438 TreeSelectLogDeleteSeparator: TMenuItem;
439 TreeSelectSearchBoardName: TAction;
440 CabinetFavoriteAction: TAction;
443 FavoriteTreePopupMenu: TPopupMenu;
444 FavoriteTreeViewRenameAction: TAction;
445 FavoriteTreeRenamePopupMenu: TMenuItem;
446 FavoriteTreeViewNewFolderAction: TAction;
447 FavoriteTreeNewFolderPopupMenu: TMenuItem;
449 FavoriteTreeViewDeleteAction: TAction;
450 FavoriteTreeDeletePopupMenu: TMenuItem;
451 FavoriteToolBar: TToolBar;
452 ToolButton17: TToolButton;
453 ToolButton19: TToolButton;
454 FavoriteTreeViewBrowseFolderAction: TAction;
455 FavoriteTreeBrowseFolderPopupMenu: TMenuItem;
457 FavoriteTreeReloadPopupMenu: TMenuItem;
459 FavoriteTreeURLCopyPopupMenu: TMenuItem;
460 FavoriteTreeNameCopyPopupMenu: TMenuItem;
461 FavoriteTreeLogDeletePopupMenu: TMenuItem;
463 FavoriteTreeNameURLCopyPopupMenu: TMenuItem;
464 FavoriteTreeViewReloadAction: TAction;
465 FavoriteTreeViewURLCopyAction: TAction;
466 FavoriteTreeViewNameCopyAction: TAction;
467 FavoriteTreeViewNameURLCopyAction: TAction;
468 FavoriteTreeViewLogDeleteAction: TAction;
469 ResRangeAction: TAction;
470 ToolButton20: TToolButton;
472 ExportFavoriteFileAction1: TMenuItem;
473 ExportFavoriteFile: TFileSaveAs;
476 FavoriteTreeViewBrowseBoardAction: TAction;
477 FavoriteTreeViewBrowseThreadAction: TAction;
478 UpBoardAction: TAction;
488 TreeSelectLogDeletePopupMenu: TMenuItem;
490 BBSSelectPopupMenu: TPopupMenu;
491 PlugInMenu: TMenuItem;
492 TreeSelectNameCopy: TAction;
493 TreeSelectNamePupupMenu: TMenuItem;
494 BrowserPanel: TPanel;
495 SetFocusForBrowserAction: TAction;
496 SetFocusForThreadListAction: TAction;
497 SetFocusForCabinetAction: TAction;
499 ThreadlistMaxAndFocusAction: TAction;
500 BrowserMaxAndFocusAction: TAction;
502 SelectThreadSave: TMenuItem;
503 SelectItemSaveForHTML: TAction;
504 FileSaveAs1: TFileSaveAs;
508 SelectItemSaveForDat: TAction;
509 LogFolderOpenAction: TAction;
510 OpenLogFolder: TMenuItem;
511 Browser: TWebBrowser;
514 TabsSaveAction: TAction;
515 TabsOpenAction: TAction;
516 ResRangePopupMenu: TPopupMenu;
520 OnlyAHundredResAction: TAction;
521 OnlyNewResAction: TAction;
522 OnlyKokoResAction: TAction;
524 BrowsBoradHeadAction: TAction;
525 BrowsBoradHeadAction1: TMenuItem;
526 ThreadRangeAction: TAction;
527 ThreadRangePopupMenu: TPopupMenu;
535 TabAutoSaveAction: TAction;
536 TabAutoLoadAction: TAction;
537 ListColumnPopupMenu: TPopupMenu;
538 JumpToNumOfResAction: TAction;
539 FavoriteTreeViewCollapseAction: TAction;
540 RightTabCloseAction: TAction;
541 LeftTabCloseAction: TAction;
543 SameIDResAnchorAction: TAction;
545 IndividualAbon1Action: TAction;
546 IndividualAbon0Action: TAction;
547 AntiIndividualAbonAction: TAction;
548 AntiIndividualAbonDlgAction: TAction;
549 IndividualAbonID1Action: TAction;
553 IndividualAbonID0Action: TAction;
558 SortActiveColumnAction: TAction;
559 SortNextColumnAction: TAction;
560 SortPrevColumnAction: TAction;
561 BeLogInOutAction: TAction;
562 UnSelectedListViewAction: TAction;
563 SelectComboBoxPanel: TPanel;
564 SelectComboBoxSplitter: TImage;
565 ToolButton1: TToolButton;
567 procedure FormCreate(Sender: TObject);
568 procedure FormDestroy(Sender: TObject);
569 procedure CabinetPanelHide(Sender: TObject);
570 procedure ListViewData(Sender: TObject; Item: TListItem);
571 procedure ListViewDataFind(Sender: TObject; Find: TItemFind;
572 const FindString: String; const FindPosition: TPoint;
573 FindData: Pointer; StartIndex: Integer; Direction: TSearchDirection;
574 Wrap: Boolean; var Index: Integer);
575 procedure ListViewDataHint(Sender: TObject; StartIndex,
577 procedure ListViewDataStateChange(Sender: TObject; StartIndex,
578 EndIndex: Integer; OldState, NewState: TItemStates);
579 procedure BrowserStatusTextChange(Sender: TObject;
580 const Text: WideString);
581 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
582 procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
583 var AllowChange: Boolean);
584 procedure ListViewKeyDown(Sender: TObject; var Key: Word;
586 procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
587 procedure ListViewSort(Sender: TObject; Column: TListColumn);
588 procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
589 Button: TToolButton; State: TCustomDrawState;
590 var DefaultDraw: Boolean);
591 procedure BrowserBeforeNavigate2(Sender: TObject;
592 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
593 Headers: OleVariant; var Cancel: WordBool);
594 procedure TreeViewCustomDraw(Sender: TCustomTreeView;
595 const ARect: TRect; var DefaultDraw: Boolean);
596 procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
597 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
598 procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
599 procedure TreeViewDblClick(Sender: TObject);
600 procedure ListViewCustomDraw(Sender: TCustomListView;
601 const ARect: TRect; var DefaultDraw: Boolean);
602 procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
603 Shift: TShiftState; X, Y: Integer);
604 procedure TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
605 procedure MessageListViewResize(Sender: TObject);
606 procedure ExitActionExecute(Sender: TObject);
607 procedure AllSelectActionExecute(Sender: TObject);
608 procedure StdToolBarVisibleActionExecute(Sender: TObject);
609 procedure MsgBarVisibleActionExecute(Sender: TObject);
610 procedure StatusBarVisibleActionExecute(Sender: TObject);
611 procedure LargeIconActionExecute(Sender: TObject);
612 procedure SmallIconActionExecute(Sender: TObject);
613 procedure ListIconActionExecute(Sender: TObject);
614 procedure DetailIconActionExecute(Sender: TObject);
615 procedure SearchActionExecute(Sender: TObject);
616 procedure OptionActionExecute(Sender: TObject);
617 procedure GikoNaviWebPageActionExecute(Sender: TObject);
618 procedure AboutActionExecute(Sender: TObject);
619 procedure CabinetHistoryActionExecute(Sender: TObject);
620 procedure CabinetVisible( isVisible : Boolean );
621 procedure CabinetVisibleActionExecute(Sender: TObject);
622 procedure AllItemActionExecute(Sender: TObject);
623 procedure LogItemActionExecute(Sender: TObject);
624 procedure NewItemActionExecute(Sender: TObject);
625 procedure SelectItemActionExecute(Sender: TObject);
626 procedure ListNumberVisibleActionExecute(Sender: TObject);
627 procedure UpFolderActionExecute(Sender: TObject);
628 procedure IconStyleExecute(Sender: TObject);
629 procedure RoundActionExecute(Sender: TObject);
630 procedure StopActionExecute(Sender: TObject);
631 procedure MsgBarCloseActionExecute(Sender: TObject);
632 procedure BrowserMaxActionExecute(Sender: TObject);
633 procedure ScrollTopActionExecute(Sender: TObject);
634 procedure ScrollLastActionExecute(Sender: TObject);
635 procedure ScrollNewActionExecute(Sender: TObject);
636 procedure ScrollKokoActionExecute(Sender: TObject);
637 procedure EditorActionExecute(Sender: TObject);
638 procedure IEActionExecute(Sender: TObject);
639 procedure ShowThreadActionExecute(Sender: TObject);
640 procedure ShowBoardActionExecute(Sender: TObject);
641 procedure URLCopyActionExecute(Sender: TObject);
642 procedure ItemReloadActionExecute(Sender: TObject);
643 procedure SelectListReloadActionExecute(Sender: TObject);
644 procedure SelectThreadReloadActionExecute(Sender: TObject);
645 procedure SelectListReloadActionUpdate(Sender: TObject);
646 procedure UpFolderActionUpdate(Sender: TObject);
647 procedure FormResize(Sender: TObject);
648 procedure ScrollKokoActionUpdate(Sender: TObject);
649 procedure SelectThreadReloadActionUpdate(Sender: TObject);
650 procedure LogDeleteActionExecute(Sender: TObject);
651 procedure KokomadeActionExecute(Sender: TObject);
652 procedure ZenbuActionExecute(Sender: TObject);
653 procedure KokoResActionExecute(Sender: TObject);
654 procedure ListPopupMenuPopup(Sender: TObject);
655 procedure SelectItemURLCopyActionExecute(Sender: TObject);
656 procedure AllSelectActionUpdate(Sender: TObject);
657 procedure BrowserTabCloseActionExecute(Sender: TObject);
658 procedure NotSelectTabCloseActionExecute(Sender: TObject);
659 procedure TreeSelectBoradReloadExecute(Sender: TObject);
660 procedure TreeSelectThreadReloadExecute(Sender: TObject);
661 procedure TreeSelectURLCopyExecute(Sender: TObject);
662 procedure TreePopupMenuPopup(Sender: TObject);
663 procedure ListToolBarVisibleActionExecute(Sender: TObject);
664 procedure BrowserToolBarVisibleActionExecute(Sender: TObject);
665 procedure BrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
666 var Cancel: WordBool);
667 procedure ListSplitterMoved(Sender: TObject);
668 procedure BrowserTabChange(Sender: TObject);
669 procedure BrowserTabMouseDown(Sender: TObject; Button: TMouseButton;
670 Shift: TShiftState; X, Y: Integer);
671 procedure BrowserTabDragOver(Sender, Source: TObject; X, Y: Integer;
672 State: TDragState; var Accept: Boolean);
673 procedure BrowserTabDragDrop(Sender, Source: TObject; X, Y: Integer);
674 procedure BrowserTabMouseMove(Sender: TObject; Shift: TShiftState; X,
676 procedure BrowserDocumentComplete(Sender: TObject;
677 const pDisp: IDispatch; var URL: OleVariant);
678 procedure SelectReservActionUpdate(Sender: TObject);
679 procedure RoundNamePopupMenuPopup(Sender: TObject);
680 procedure SelectNewRoundNameExecute(Sender: TObject);
681 procedure SelectDeleteRoundExecute(Sender: TObject);
682 procedure SelectReservActionExecute(Sender: TObject);
683 procedure NewBoardActionExecute(Sender: TObject);
684 procedure LoginActionExecute(Sender: TObject);
685 procedure KeySettingActionExecute(Sender: TObject);
686 procedure AllTabCloseActionExecute(Sender: TObject);
687 procedure ArrangeActionExecute(Sender: TObject);
688 procedure NameURLCopyActionExecute(Sender: TObject);
689 procedure SelectItemNameURLCopyActionExecute(Sender: TObject);
690 procedure AllTabCloseActionUpdate(Sender: TObject);
691 procedure ActiveLogDeleteActionExecute(Sender: TObject);
692 procedure ListNameBarVisibleActionExecute(Sender: TObject);
693 procedure BrowserNameBarVisibleActionExecute(Sender: TObject);
694 procedure TreeSelectNameURLCopyExecute(Sender: TObject);
695 procedure PaneInitActionExecute(Sender: TObject);
696 procedure FormShow(Sender: TObject);
697 procedure BrowserTabToolBarResize(Sender: TObject);
698 procedure BrowserMinActionExecute(Sender: TObject);
699 procedure SelectTextClearActionExecute(Sender: TObject);
700 procedure NameTextClearActionExecute(Sender: TObject);
701 procedure MailTextClearActionExecute(Sender: TObject);
702 procedure LeftmostTabSelectActionExecute(Sender: TObject);
703 procedure LeftTabSelectActionExecute(Sender: TObject);
704 procedure RightTabSelectActionExecute(Sender: TObject);
705 procedure RightmostTabSelectActionExecute(Sender: TObject);
706 procedure LeftTabSelectActionUpdate(Sender: TObject);
707 procedure RightTabSelectActionUpdate(Sender: TObject);
708 procedure FavoriteMenuClick(Sender: TObject);
709 procedure FavoriteAddActionExecute(Sender: TObject);
710 procedure BoardFavoriteAddActionExecute(Sender: TObject);
711 procedure BoardFavoriteAddActionUpdate(Sender: TObject);
712 procedure ThreadFavoriteAddActionExecute(Sender: TObject);
713 procedure TreeSelectFavoriteAddActionExecute(Sender: TObject);
714 procedure FavoriteArrangeActionExecute(Sender: TObject);
715 procedure MainCoolBarResize(Sender: TObject);
716 procedure MoveToActionExecute(Sender: TObject);
717 procedure AddressToolBarResize(Sender: TObject);
718 procedure AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
720 procedure AddressBarVisibleActionExecute(Sender: TObject);
721 procedure BrowserEnter(Sender: TObject);
722 procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
723 procedure BrowserTabVisibleActionExecute(Sender: TObject);
724 procedure BrowserTabTopActionExecute(Sender: TObject);
725 procedure BrowserTabBottomActionExecute(Sender: TObject);
726 procedure BrowserTabTabStyleActionExecute(Sender: TObject);
727 procedure BrowserTabButtonStyleActionExecute(Sender: TObject);
728 procedure BrowserTabFlatStyleActionExecute(Sender: TObject);
729 procedure PreviewTimerTimer(Sender: TObject);
730 procedure MessageHideButtonClick(Sender: TObject);
731 procedure MonazillaWebPageActionExecute(Sender: TObject);
732 procedure GikoHelpActionExecute(Sender: TObject);
733 procedure ToolButton18Click(Sender: TObject);
734 procedure KotehanActionExecute(Sender: TObject);
735 procedure LinkBarVisibleActionExecute(Sender: TObject);
736 procedure BBS2chWebPageActionExecute(Sender: TObject);
737 procedure GikoFolderOpenActionExecute(Sender: TObject);
738 procedure MainCoolBarBandInfo(Sender: TObject;
739 var BandInfo: PReBarBandInfoA);
740 procedure MainCoolBarChevronClick(Sender: TObject;
741 RebarChevron: PNMRebarChevron);
742 procedure ListCoolBarBandInfo(Sender: TObject;
743 var BandInfo: PReBarBandInfoA);
744 procedure ListCoolBarChevronClick(Sender: TObject;
745 RebarChevron: PNMRebarChevron);
746 procedure BrowserCoolBarBandInfo(Sender: TObject;
747 var BandInfo: PReBarBandInfoA);
748 procedure BrowserCoolBarChevronClick(Sender: TObject;
749 RebarChevron: PNMRebarChevron);
750 procedure ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
751 procedure ThreadEditorActionExecute(Sender: TObject);
752 procedure ToolBarSettingActionExecute(Sender: TObject);
753 procedure NameCopyActionExecute(Sender: TObject);
754 procedure BoardIEActionExecute(Sender: TObject);
755 procedure SelectItemNameCopyActionExecute(Sender: TObject);
756 procedure SelectItemNameCopyActionUpdate(Sender: TObject);
757 procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
758 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
759 procedure SelectComboBoxChange(Sender: TObject);
760 procedure SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
762 procedure SelectComboBoxExit(Sender: TObject);
763 procedure SelectResActionExecute(Sender: TObject);
764 procedure AllResActionExecute(Sender: TObject);
765 procedure ReloadClick(Sender: TObject);
766 procedure GoBackClick(Sender: TObject);
767 procedure GoFowardClick(Sender: TObject);
768 procedure SelectComboBoxSplitterMouseMove(Sender: TObject;
769 Shift: TShiftState; X, Y: Integer);
770 procedure SelectComboBoxSplitterMouseDown(Sender: TObject;
771 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
772 procedure SelectComboBoxSplitterMouseUp(Sender: TObject;
773 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
774 procedure StatusBarResize(Sender: TObject);
775 procedure SelectComboBoxEnter(Sender: TObject);
776 procedure TreeSelectSearchBoardNameExecute(Sender: TObject);
777 procedure CabinetFavoriteActionExecute(Sender: TObject);
778 procedure FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
780 procedure FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
781 procedure FavoriteTreeViewEdited(Sender: TObject; Node: TTreeNode;
783 procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
785 procedure FavoriteTreePopupMenuPopup(Sender: TObject);
786 procedure FavoriteTreeViewDeleteActionExecute(Sender: TObject);
787 procedure FavoriteTreeViewRenameActionExecute(Sender: TObject);
788 procedure FavoriteTreeViewNewFolderActionExecute(Sender: TObject);
789 procedure ToolButton19Click(Sender: TObject);
790 procedure FavoriteTreeViewBrowseFolderActionExecute(Sender: TObject);
791 procedure FavoriteTreeViewDblClick(Sender: TObject);
792 procedure FavoriteTreeViewLogDeleteActionExecute(Sender: TObject);
793 procedure FavoriteTreeViewReloadActionExecute(Sender: TObject);
794 procedure FavoriteTreeViewURLCopyActionExecute(Sender: TObject);
795 procedure FavoriteTreeViewNameCopyActionExecute(Sender: TObject);
796 procedure FavoriteTreeViewNameURLCopyActionExecute(Sender: TObject);
797 procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
798 procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
799 Shift: TShiftState; X, Y: Integer);
800 procedure LinkToolBarDragOver(Sender, Source: TObject; X, Y: Integer;
801 State: TDragState; var Accept: Boolean);
802 procedure ResRangeActionExecute(Sender: TObject);
803 procedure FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
805 procedure ListCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
806 var Handled: Boolean);
807 procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
808 var Handled: Boolean);
809 procedure BrowserCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
810 var Handled: Boolean);
811 procedure ExportFavoriteFileAccept(Sender: TObject);
812 procedure ExportFavoriteFileBeforeExecute(Sender: TObject);
813 procedure CabinetBBSActionExecute(Sender: TObject);
814 procedure FavoriteTreeViewBrowseThreadActionExecute(Sender: TObject);
815 procedure FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
816 procedure UpBoardActionExecute(Sender: TObject);
817 procedure BrowserTabContextPopup(Sender: TObject; MousePos: TPoint;
818 var Handled: Boolean);
819 procedure KoreCopyExecute(Sender: TObject);
820 procedure BrowserTabPopupMenuPopup(Sender: TObject);
821 procedure BrowserTabResize(Sender: TObject);
822 procedure TreeViewClick(Sender: TObject);
823 procedure TreeViewKeyDown(Sender: TObject; var Key: Word;
825 procedure FavoriteTreeViewMouseDown(Sender: TObject;
826 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
827 procedure MessagePanelResize(Sender: TObject);
829 procedure TreeSelectNameCopyExecute(Sender: TObject);
830 procedure FavoriteTreeViewMouseUp(Sender: TObject;
831 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
832 procedure SetFocusForBrowserActionExecute(Sender: TObject);
833 procedure SetFocusForBrowserActionUpdate(Sender: TObject);
834 procedure SetFocusForThreadListActionExecute(Sender: TObject);
835 procedure SetFocusForCabinetActionExecute(Sender: TObject);
836 procedure BrowserMaxAndFocusActionExecute(Sender: TObject);
837 procedure ThreadlistMaxAndFocusActionExecute(Sender: TObject);
838 procedure SetFocusForCabinetActionUpdate(Sender: TObject);
839 procedure SelectTimerTimer(Sender: TObject);
840 procedure SelectItemSaveForHTMLExecute(Sender: TObject);
841 procedure KidokuActionExecute(Sender: TObject);
842 procedure MidokuActionExecute(Sender: TObject);
843 procedure SelectItemSaveForDatExecute(Sender: TObject);
844 procedure LogFolderOpenActionExecute(Sender: TObject);
845 procedure TabsSaveActionExecute(Sender: TObject);
846 procedure TabsOpenActionExecute(Sender: TObject);
847 procedure OnlyAHundredResActionExecute(Sender: TObject);
848 procedure OnlyKokoResActionExecute(Sender: TObject);
849 procedure OnlyNewResActionExecute(Sender: TObject);
850 procedure BrowsBoradHeadActionExecute(Sender: TObject);
851 procedure EditNGActionExecute(Sender: TObject);
852 procedure ThreadRangeActionExecute(Sender: TObject);
853 procedure TabAutoSaveActionExecute(Sender: TObject);
854 procedure TabAutoLoadActionExecute(Sender: TObject);
855 procedure ListViewColumnRightClick(Sender: TObject;
856 Column: TListColumn; Point: TPoint);
857 procedure JumpToNumOfResActionExecute(Sender: TObject);
858 procedure FavoriteTreeViewCollapseActionExecute(Sender: TObject);
859 procedure ListViewCustomDrawItem(Sender: TCustomListView;
860 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
861 procedure FormActivate(Sender: TObject);
862 procedure BrowserPanelResize(Sender: TObject);
863 procedure MenuToolBarResize(Sender: TObject);
864 procedure ListToolBarResize(Sender: TObject);
865 procedure BrowserToolBarResize(Sender: TObject);
866 procedure RightTabCloseActionExecute(Sender: TObject);
867 procedure RightTabCloseActionUpdate(Sender: TObject);
868 procedure LeftTabCloseActionExecute(Sender: TObject);
869 procedure SameIDResAnchorActionExecute(Sender: TObject);
870 procedure IndividualAbon1ActionExecute(Sender: TObject);
871 procedure IndividualAbon0ActionExecute(Sender: TObject);
872 procedure AntiIndividualAbonActionExecute(Sender: TObject);
873 procedure AntiIndividualAbonDlgActionExecute(Sender: TObject);
874 procedure IndividualAbonID1ActionExecute(Sender: TObject);
875 procedure IndividualAbonID0ActionExecute(Sender: TObject);
876 procedure KokoPopupMenuPopup(Sender: TObject);
877 procedure MuteActionExecute(Sender: TObject);
878 procedure SortActiveColumnActionExecute(Sender: TObject);
879 procedure SortNextColumnActionExecute(Sender: TObject);
880 procedure SortPrevColumnActionExecute(Sender: TObject);
881 procedure MessageListViewAdvancedCustomDrawItem(
882 Sender: TCustomListView; Item: TListItem; State: TCustomDrawState;
883 Stage: TCustomDrawStage; var DefaultDraw: Boolean);
884 procedure BeLogInOutActionExecute(Sender: TObject);
885 procedure BeLogInOutActionUpdate(Sender: TObject);
886 procedure UnSelectedListViewActionExecute(Sender: TObject);
887 procedure ListViewKeyUp(Sender: TObject; var Key: Word;
889 procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
890 var AllowEdit: Boolean);
896 FEnabledCloseButton: Boolean;
897 // ThreadCreate: TThreadCreate;
899 FClickNode: TTreeNode;
902 FPreviewBrowser: TWebBrowser;
905 FBrowserSizeHeight: Integer;
906 FBrowserSizeWidth: Integer;
908 // FFavorite: TFavorite;
909 FTabHintIndex: Integer;
910 FListStyle: TViewStyle; //
\83\8a\83X
\83g
\83A
\83C
\83R
\83\93\83X
\83^
\83C
\83\8b
911 FItemNoVisible: Boolean; //
\83\8a\83X
\83g
\94Ô
\8d\86\95\
\8e¦
\83t
\83\89\83O
912 FViewType: TGikoViewType; //
\83\8a\83X
\83g
\83A
\83C
\83e
\83\80\95\
\8e¦
\83^
\83C
\83v
913 FActiveList: TObject;
914 FActiveContent: TBrowserRecord; //
916 FHistoryList: TList; //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
917 FTreeType: TGikoTreeType;
921 // FLastRoundTime: TDateTime;
922 BrowserNullTab: TBrowserRecord;
923 // DoubleClickOccurred: array [TMouseButton] of Boolean;
924 FDownloadTitle: string; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\83^
\83C
\83g
\83\8b\96¼
925 FDownloadMax: Integer; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\8dÅ
\91å
\83T
\83C
\83Y
926 FEvent: THTMLDocumentEventSink;//
\83u
\83\89\83E
\83U
\83h
\83L
\83\85\83\81\83\93\83g
\83C
\83x
\83\93\83g
928 // Fkeynum : Integer; //
\83L
\81[
\83{
\81[
\83h
\83\8c\83X
\83|
\83b
\83v
\83A
\83b
\83v
\97p
930 IsDraggingSelectComboBox : Boolean;
931 DraggingSelectComboBoxPosition : TPoint;
933 FSearchDialog: TSearchDialog;
935 FDropSpaceNode: TTreeNode;
937 FDragTime : Cardinal; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
938 FDragButton : TToolButton; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
\82ÉDrag
\82µ
\82Ä
\82éButton
\95Û
\91¶
939 FDragWFirst : Boolean; ///< WebTab
\82ÌD&D
\97p
941 FListViewBackGroundColor : TColor; ///< ListView
\82ÌBackGroundColor
942 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¦
943 FOddColor : TColor; ///<
\82»
\82Ì
\90F
945 FSelectResWord : string; ///<
\83\8c\83X
\8di
\8d\9e\83\8f\81[
\83h
946 FIsIgnoreResize : TResizeType; ///<
\83\8a\83T
\83C
\83Y
\83C
\83x
\83\93\83g
\82ð
\96³
\8e\8b\82·
\82é
\82©
\82Ç
\82¤
\82©
947 FIsMinimize : TMinimizeType; ///<
\8dÅ
\8f¬
\89»
\82µ
\82Ä
\82¢
\82é
\8dÅ
\92\86\82©
948 FOldFormWidth : Integer; ///<
\92¼
\91O
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\95\9d
949 FToolBarSettingSender : TToolBarSettingSenderType; ///<
\83c
\81[
\83\8b\83o
\81[
\90Ý
\92è
\82ð
\83N
\83\8a\83b
\83N
\82µ
\82½
\83N
\81[
\83\8b\83o
\81[
950 FMouseDownPos : TPoint; ///<
\83u
\83\89\83E
\83U
\83^
\83u
\82Å
\83}
\83E
\83X
\82ð
\89\9f\82µ
\82½
\82Æ
\82«
\82Ì
\8dÀ
\95W
952 FResRangeMenuSelect : Longint; ///< ResRangeButton
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\8d\80\96Ú (
\83t
\83H
\81[
\83}
\83b
\83g
\82Í ResRange
\8cÝ
\8a·)
954 FIsHandledWheel : Boolean; ///<
\8aù
\82É
\8eó
\82¯
\8eæ
\82Á
\82½ WM_MOUSEWHEEL
\82©
\82Ç
\82¤
\82©
955 DiffComp: Boolean; //Add by Genyakun
\83X
\83\8c\82ª
\8dX
\90V
\82³
\82ê
\82½
\82Æ
\82«
\82ÉTrue
\82É
\82È
\82é
956 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ñ
957 procedure SetBoardTreeNode( inBBS : TBBS );
958 function SetCategoryListItem(ABBS2ch: TBBS): Integer;
959 function SetBoardListItem(Category: TCategory): Integer;
960 function SetThreadListItem(Board: TBoard): Integer;
961 // function GetRoundName(index: integer): string;
963 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
964 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
965 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
966 procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
967 procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
971 procedure ListDoubleClick(Shift: TShiftState);
972 procedure BrowserMovement(const AName: string); overload;
973 procedure BrowserMovement(const AName: string; BrowserRecord: TBrowserRecord); overload;
974 procedure SelectListItem(List: TList);
975 procedure DeleteTab(ThreadItem: TThreadItem); overload;
976 procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
977 function Hook(var Message: TMessage): Boolean;
978 procedure AddRoundNameMenu(MenuItem: TMenuItem);
979 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
980 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
981 procedure SetSelectRoundName(Sender: TObject);
982 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
984 procedure SetMenuFont;
985 procedure CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
986 procedure FavoriteClick(Sender: TObject; ActiveTab: Boolean); overload;
987 procedure FavoriteClick(Sender: TObject); overload;
988 procedure FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
989 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
990 function OnDocumentContextMenu(Sender: TObject): WordBool;
991 procedure SetResPopupText(ThreadItem : TThreadItem; StNum, ToNum: Integer; Title, First: Boolean);
992 procedure ShowTextPopup;
993 procedure SetLinkBar;
994 function GetWidthAllToolButton(ToolBar: TToolBar): Integer;
995 procedure MenuBarChevronMenu;
996 procedure LinkBarChevronMenu;
997 procedure ToolBarChevronMenu(ToolBar: TToolBar);
998 procedure ModifySelectList;
999 procedure FavoriteBrowseFolder( node: TTreeNode );
1000 procedure LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
1001 procedure LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
1002 procedure LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
1003 procedure LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
1004 procedure LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
1005 function TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
1006 procedure FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
1007 procedure FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
1008 procedure FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
1010 procedure SetListViewBackGroundColor(value: TColor);
1011 procedure BBSMenuItemOnClick( Sender : TObject );
1013 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
1014 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1015 procedure SaveCoolBarSettings;
1016 procedure SaveMainCoolBarSettings;
1017 procedure SaveBoardCoolBarSettings;
1018 procedure SaveBrowserCoolBarSettings;
1019 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1020 procedure LoadCoolBarSettings;
1021 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
1022 procedure OnMinimize;
1023 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½
1024 procedure OnMinimized;
1025 /// TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
1026 procedure TreeClick( Node : TTreeNode );
1027 /// TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
1028 procedure TreeDoubleClick( Node : TTreeNode );
1029 ///
\83M
\83R
\83i
\83r
\82Ì
\83\81\83b
\83Z
\81[
\83W
\83\8b\81[
\83v
\82ð
\89¡
\8eæ
\82è
\82µ
\82Ü
\82·
1030 procedure HandleAppMessage(var Msg: TMsg; var Handled: Boolean);
1031 ///
\83u
\83\89\83E
\83U
\82Ì
\83L
\81[
\83_
\83E
\83\93\83C
\83x
\83\93\83g
1032 ///
\83C
\83x
\83\93\83g
\82ð
\8eæ
\82è
\88µ
\82Á
\82½
\8fê
\8d\87\82Í True
\82ð
\95Ô
\82·
1033 // function BrowserKeydown(var Msg: TMsg; Key: Word; State:TShiftState) : Boolean;
1034 ///
\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
1035 procedure SetBBSMenu;
1036 function WebBrowserClick(Sender: TObject): WordBool;
1037 procedure SkinorCSSFilesCopy(path: string);
1038 ///
\83^
\83u
\8eæ
\93¾
1039 function GetTabURLs(AStringList: TStringList) : Boolean;
1040 ///
\83^
\83u
\95Û
\91¶
1041 function SaveTabURLs : Boolean;
1042 ///
\83^
\83u
\93Ç
\82Ý
\8fo
\82µ
1043 function LoadTabURLs : Boolean;
1044 ///
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
1045 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
1046 /// ListView
\82Ì Column
\82ð
\90^
\82Ì
\83J
\83\89\83\80\82É
\95Ï
\8a·
1047 function ActiveListTrueColumn( column : TListColumn ) : TListColumn;
1048 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
1049 procedure ListColumnPopupMenuOnClick( Sender : TObject );
1050 // BrowserRecord
\82É
\82Â
\82¢
\82Ä
\82¢
\82éFBrowser
\82ð
\8aO
\82·
1051 procedure ReleaseBrowser( BRecord: TBrowserRecord);
1052 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
1053 procedure OnGestureStart(Sender: TObject);
1054 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
1055 procedure OnGestureMove(Sender: TObject);
1056 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
1057 procedure OnGestureEnd(Sender: TObject);
1058 //!
\8di
\82è
\8d\9e\82Ý
\95¶
\8e\9a\97ñ
\90Ý
\92è
1059 procedure SetSelectWord( const text : string );
1060 //
\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Ý
1061 procedure RepaintAllTabsBrowser();
1062 //
\83\8a\83\93\83N
\82Ì
\95¶
\8e\9a\97ñ
\82©
\82ç
\83\8c\83X
\83|
\83b
\83v
\83A
\83b
\83v
\97p
\82ÌURL
\82É
\95Ï
\8a·
\82·
\82é
1063 function GetRespopupURL(AText, AThreadURL : string): string;
1065 procedure CreateParams(var Params: TCreateParams); override;
1066 procedure WndProc(var Message: TMessage); override;
1067 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
1068 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
1069 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
1073 LastRoundTime: TDateTime;
1074 FControlThread: TThreadControl;
1075 procedure MoveToURL(const inURL: string);
1076 function InsertBrowserTab(
1077 ThreadItem : TThreadItem;
1078 ActiveTab : Boolean = True
1080 procedure ReloadBBS;
1081 function GetHttpState: Boolean;
1082 procedure SetEnabledCloseButton(Enabled: Boolean);
1083 function GetTreeNode(Data: TObject): TTreeNode;
1084 procedure AppFormDeactivate(Sender: TObject);
1085 procedure ListViewAllSelect;
1086 property ListStyle: TViewStyle read FListStyle write FListStyle;
1087 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
1088 property ViewType: TGikoViewType read FViewType write FViewType;
1089 property NameCookie: string read FNameCookie write FNameCookie;
1090 property MailCookie: string read FMailCookie write FMailCookie;
1091 procedure SetContent(inThread: TBrowserRecord);
1092 function GetActiveContent: TThreadItem;
1093 function GetActiveList: TObject;
1094 procedure SetListViewType(AViewType: TGikoViewType); overload;
1095 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
1096 procedure DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
1097 procedure DownloadList(Board: TBoard; ForceDownload: Boolean = False);
1098 procedure PlaySound(SoundEventName: string);
1099 function AddHistory( FavItem: TFavoriteThreadItem ): Boolean;
1100 procedure DeleteHistory( threadItem: TThreadItem );
1101 procedure ClearHistory;
1102 procedure SaveHistory;
1103 procedure LoadHistory;
1104 procedure ShowBBSTree( inBBS : TBBS );
1105 procedure ShowBBSTreeOld( inBBS : TBBS );
1106 procedure ShowHistoryTree;
1107 procedure SetHistoryTreeNode;
1108 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
1109 procedure SetBrowserTabState;
1110 procedure SetToolBarPopup;
1111 procedure ShowFavoriteAddDialog( Item : TObject );
1112 procedure FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
1113 procedure RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
1114 property ListViewBackGroundColor: TColor read FListViewBackGroundColor write SetListViewBackGroundColor;
1115 property UseOddResOddColor : Boolean read FUseOddResOddColor write FUseOddResOddColor;
1116 property OddColor : TColor read FOddColor write FOddColor;
1117 function FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
1118 procedure OnPlugInMenuItem( Sender : TObject );
1119 procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
1120 /// 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Å
1121 procedure ActiveListColumnSave;
1122 procedure SetActiveList(Obj: TObject);
1123 property ActiveList: TObject read GetActiveList write SetActiveList;
1124 /// CoolBar
\82ª
\83T
\83C
\83Y
\95Ï
\8dX
\82³
\82ê
\82½
1125 procedure CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
1126 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
1127 procedure IndividualAbonID(Atype : Integer);
1128 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
1129 procedure IndividualAbon(Atag, Atype : Integer);
1130 //ID
\83A
\83\93\83J
\81[
\92Ç
\89Á
1131 procedure IDAnchorPopup(Abody :string);
1133 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
1134 //TAction
\82ÅGetActiveContent
\82ªnil
\88È
\8aO
\82Å
\97L
\8cø
\82É
\82È
\82é
1135 procedure DependActiveCntentActionUpdate(Sender: TObject);
1136 //TAction
\82ÅGetActiveContent
\82ªnil
\88È
\8aO
\82©
\82Â
\83\8d\83O
\82ð
\8e\9d\82Á
\82Ä
\82¢
\82é
\82Æ
\97L
\8cø
\82É
\82È
\82é
1137 procedure DependActiveCntentLogActionUpdate(Sender: TObject);
1138 //TAction
\82ÅActiveList
\82ªTBoard
\82Å
\97L
\8cø
\82É
\82È
\82é
1139 procedure DependActiveListTBoardActionUpdate(Sender: TObject);
1140 //
\97á
\8aO
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO
\82ð
\8f\88\97\9d\82·
\82é
1141 procedure AppException(Sender: TObject; E: Exception);
1144 TFavoriteMenuItem = class(TMenuItem)
1148 property Data: Pointer read FData write FData;
1151 TBBSMenuItem = class(TMenuItem)
1155 property Data: Pointer read FData write FData;
1158 TLinkToolButton = class(TToolButton)
1162 property Data: Pointer read FData write FData;
1165 TBrowserRecord = class( TObject )
1167 FBrowser : TWebBrowser;
1168 FEvent: THTMLDocumentEventSink; ///<
\83u
\83\89\83E
\83U
\83h
\83L
\83\85\83\81\83\93\83g
\83C
\83x
\83\93\83g
1169 FThread : TThreadItem;
1170 FLastSize : Integer;
1172 FMovement : string; ///<
\83X
\83N
\83\8d\81[
\83\8b\90æ
\83A
\83\93\83J
\81[
1174 destructor Destroy; override;
1175 property Browser : TWebBrowser read FBrowser write FBrowser;
1176 property Thread : TThreadItem read FThread write FThread;
1177 property LastSize : Integer read FLastSize write FLastSize;
1178 property Repaint : Boolean read FRepaint write FRepaint;
1179 property Movement : string read FMovement write FMovement;
1183 GikoForm: TGikoForm;
1188 About, Option, Round, Splash, Sort, ListSelect, Imm,
1189 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
1193 CAPTION_NAME: string = '
\83M
\83R
\83i
\83r';
1194 BLANK_HTML: string = 'about:blank';
1195 SELECTCOMBOBOX_NAME: string = ''; // '
\83X
\83\8c\83b
\83h
\8di
\8d\9e\8c\9f\8dõ';
1196 SELECTCOMBOBOX_COLOR: TColor = clWindow;
1198 DandD_THRESHOLD = 5; //D&D
\82Ìè
\87\92l
\81ipixcel)
1199 //
\83c
\83\8a\81[
\81E
\83\8a\83X
\83g
\83A
\83C
\83R
\83\93
1200 ITEM_ICON_2CH1 = 0; //2ch
\83A
\83C
\83R
\83\93
1201 ITEM_ICON_2CH2 = 1; //2ch
\83A
\83C
\83R
\83\93
1202 ITEM_ICON_CATEGORY1 = 2; //
\83J
\83e
\83S
\83\8a\83A
\83C
\83R
\83\93
1203 ITEM_ICON_CATEGORY2 = 3; //
\83J
\83e
\83S
\83\8a\83A
\83C
\83R
\83\93
1204 ITEM_ICON_BOARD_NOSUBJECT = 3; //
\93Ç
\82Ý
\8d\9e\82Ü
\82ê
\82Ä
\82¢
\82È
\82¢
\94Â
\83A
\83C
\83R
\83\93
1205 ITEM_ICON_BOARD1 = 4; //
\94Â
\83A
\83C
\83R
\83\93
1206 ITEM_ICON_BOARD2 = 5; //
\94Â
\83A
\83C
\83R
\83\93
1207 ITEM_ICON_THREADLOG1 = 6; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
1208 ITEM_ICON_THREADLOG2 = 7; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
1209 ITEM_ICON_THREAD1 = 8; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82È
\82µ
\81j
1210 ITEM_ICON_THREAD2 = 9; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82È
\82µ
\81j
1211 ITEM_ICON_THREADNEW1 = 10; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\90V
\92\85\81j
1212 ITEM_ICON_THREADNEW2 = 11; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\90V
\92\85\81j
1213 ITEM_ICON_SORT1 = 12; //
\83\
\81[
\83g
\83A
\83C
\83R
\83\93
1214 ITEM_ICON_SORT2 = 13; //
\83\
\81[
\83g
\83A
\83C
\83R
\83\93
1215 ITEM_ICON_BOARD_LOG = 17; //
\83X
\83\8c\83\8d\83O
\82 \82è
\94Â
\83A
\83C
\83R
\83\93
1216 ITEM_ICON_BOARD_NEW = 18; //
\83X
\83\8c\90V
\92\85\94Â
\83A
\83C
\83R
\83\93
1218 //
\83c
\81[
\83\8b\83o
\81[
\83A
\83C
\83R
\83\93
1219 TOOL_ICON_HEIGHT_MAX = 16; //
\8d\82\82³
\8dÅ
\91å
\83A
\83C
\83R
\83\93
1220 TOOL_ICON_HEIGHT_MIN = 17; //
\8d\82\82³
\8dÅ
\8f¬
\83A
\83C
\83R
\83\93
1221 TOOL_ICON_HEIGHT_NORMAL = 18; //
\8d\82\82³
\95W
\8f\80\83A
\83C
\83R
\83\93
1222 TOOL_ICON_WIDTH_MAX = 19; //
\95\9d\8dÅ
\91å
\83A
\83C
\83R
\83\93
1223 TOOL_ICON_WIDTH_MIN = 20; //
\95\9d\8dÅ
\8f¬
\83A
\83C
\83R
\83\93
1224 TOOL_ICON_WIDTH_NORMAL = 21; //
\95\9d\95W
\8f\80\83A
\83C
\83R
\83\93
1226 TOOL_ICON_FAV_FOLDER = 30; //
\82¨
\8bC
\82É
\93ü
\82è
\83t
\83H
\83\8b\83_
\83A
\83C
\83R
\83\93
1227 TOOL_ICON_FAV_BOARD = 31; //
\82¨
\8bC
\82É
\93ü
\82è
\94Â
\83A
\83C
\83R
\83\93
1228 TOOL_ICON_FAV_THREAD = 32; //
\82¨
\8bC
\82É
\93ü
\82è
\83X
\83\8c\83A
\83C
\83R
\83\93
1230 HTML_FILE_NAME = 'temp_preview.html';
1232 WM_XBUTTONDOWN = $020B;
1233 WM_XBUTTONUP = $020C;
1234 WM_XBUTTONDBLCLK = $020D;
1237 USER_TREECLICK = WM_USER + 2000;
1238 USER_RESIZED = WM_USER + 2001;
1239 USER_MINIMIZED = WM_USER + 2002;
1240 USER_SETLINKBAR = WM_USER + 2003;
1241 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
1242 SELECTTIME_INTERBAL = 110;
1244 BROWSER_COUNT = 5; //
\83u
\83\89\83E
\83U
\82Ì
\90\94
1247 procedure TGikoForm.CreateParams(var Params: TCreateParams);
1250 if FormStyle in [fsNormal, fsStayOnTop] then begin
1251 if BorderStyle in [bsSingle, bsSizeable] then begin
1252 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
1253 Params.WndParent := 0;
1258 procedure TGikoForm.FormCreate(Sender: TObject);
1260 TVS_NOTOOLTIPS = $0080;
1266 wp: TWindowPlacement;
1268 newbrowser: TWebBrowser;
1269 ToolButton: TToolButton;
1273 Writeln('============================================================');
1274 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
1276 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
1277 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¢');
1278 Writeln('============================================================');
1280 FTreeType := gttNone;
1281 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô
1283 // LockWindowUpdate(Self.Handle);
1284 Application.OnDeactivate := AppFormDeactivate;
1285 //Self.OnDeactivate := AppFormDeactivate;
1286 Application.HookMainWindow(Hook);
1287 Application.OnException := AppException; //
\8f\88\97\9d\82³
\82ê
\82È
\82¢
\97á
\8aO
\82ð
\95â
\91«
1288 // Application.OnMessage := HandleAppMessage; //
\82È
\82ñ
\82©
\96³
\82
\82Ä
\82à
\91å
\8fä
\95v
\82É
\82È
\82Á
\82½
\81@by
\81@
\82à
\82¶
\82ã
1289 FIsIgnoreResize := rtResizing;
1291 FSearchDialog := nil;
1292 BrowserNullTab := TBrowserRecord.Create;
1293 BrowserNullTab.Browser := Browser;
1294 BrowserNullTab.Browser.Navigate(BLANK_HTML);
1295 FBrowsers := TList.Create;
1296 for i := 0 to BROWSER_COUNT -1 do begin
1297 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
1298 newBrowser := FBrowsers[FBrowsers.Count - 1];
1299 TOleControl(newBrowser).Parent := BrowserPanel;
1300 TOleControl(newBrowser).Align := alNone;
1301 TOleControl(newBrowser).Left := 0;
1302 TOleControl(newBrowser).Top := 0;
1303 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
1304 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
1305 newBrowser.OnEnter := BrowserEnter;
1306 newBrowser.OnNewWindow2 := BrowserNewWindow2;
1307 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
1308 newBrowser.Navigate(BLANK_HTML);
1309 ShowWindow(newBrowser.Handle, SW_HIDE);
1311 BrowserNullTab.Browser.BringToFront;
1312 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
1314 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
1317 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
1318 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
1320 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1321 //AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.AddressHistoryCount);
1322 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1324 EnabledCloseButton := True;
1326 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
1327 ListView.ViewStyle := GikoSys.Setting.ListStyle;
1329 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
1330 AnimePanel.Top := 0;
1331 AnimePanel.Left := 0;
1333 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
1335 //
\83L
\83\83\83r
\83l
\83b
\83g
1336 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
1338 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
1339 MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
1340 MsgBarVisibleActionExecute(nil);
1341 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
1343 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
1344 StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
1345 StatusBarVisibleActionExecute(nil);
1347 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
1348 TreeView.Items.BeginUpdate;
1349 FavoriteTreeView.Items.BeginUpdate;
1350 ListView.Items.BeginUpdate;
1352 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
1353 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
1354 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
1355 TreeView.Color := GikoSys.Setting.CabinetBackColor;
1356 FavoriteTreeView.Font.Assign(TreeView.Font);
1357 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
1359 ListView.Font.Name := GikoSys.Setting.ListFontName;
1360 ListView.Font.Size := GikoSys.Setting.ListFontSize;
1361 ListView.Font.Color := GikoSys.Setting.ListFontColor;
1362 ListView.Font.Style := [];
1363 if GikoSys.Setting.ListFontBold then
1364 ListView.Font.Style := [fsbold];
1365 if GikoSys.Setting.ListFontItalic then
1366 ListView.Font.Style := ListView.Font.Style + [fsitalic];
1368 ListViewBackGroundColor := clWhite; //
\83f
\83t
\83H
\83\8b\83g
\82É
\90Ý
\92è
\82µ
\82½
\82Ì
\82¿
1369 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; //
\83\86\81[
\83U
\92è
\8b`
\82É
\95Ï
\8dX
1370 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
1371 FOddColor := GikoSys.Setting.OddColor;
1374 TreeView.Items.EndUpdate;
1375 FavoriteTreeView.Items.EndUpdate;
1376 ListView.Items.EndUpdate;
1378 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
1379 ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
1381 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
1382 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1383 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1384 BrowserTab.Font.Style := [];
1385 if GikoSys.Setting.BrowserTabFontBold then
1386 BrowserTab.Font.Style := [fsBold];
1387 if GikoSys.Setting.BrowserTabFontItalic then
1388 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1389 FDragWFirst := false;
1390 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1392 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1393 ProgressBar.Parent := StatusBar;
1394 ProgressBar.Top := 2;
1395 ProgressBar.Left := 0;
1396 ProgressBar.Width := StatusBar.Panels[0].Width;
1397 ProgressBar.Height := StatusBar.Height - 2;
1398 ProgressBar.Position := 0;
1400 //
\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Æ)
1401 InitializeBoardPlugIns;
1403 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1404 GikoSys.ListBoardFile;
1406 //
\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è
1407 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1409 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1410 for i := Length(BBSs) - 1 downto 0 do begin
1411 if not BBSs[i].IsBoardFileRead then
1412 GikoSys.ReadBoardFile(BBSs[i]);
1414 if SplashWindow <> nil then begin
1415 SplashWindow.ProgressBar.StepBy(20);
1416 SplashWindow.Update;
1419 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1420 RoundList := TRoundList.Create;
1421 RoundList.LoadRoundBoardFile;
1422 RoundList.LoadRoundThreadFile;
1424 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1425 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1426 Style := Style or TVS_NOTOOLTIPS;
1427 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1429 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1430 TreeView.Align := alClient;
1431 FavoriteTreeView.Align := alClient;
1432 FavoriteTreeView.Visible := False;
1434 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1437 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1438 wp.length := sizeof(wp);
1439 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1440 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1441 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1442 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1443 wp.showCmd := SW_HIDE;
1444 SetWindowPlacement(Handle, @wp);
1447 if GikoSys.Setting.WindowMax then
1448 WindowState := wsMaximized;
1450 //
\83M
\83R
\83A
\83j
\83\81
1452 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1453 if FileExists(FileName) then
1454 Animate.FileName := FileName;
1462 //
\83X
\83\8c\91S
\95\94\95\
\8e¦
\83{
\83^
\83\93\82ð
\89\9f\82³
\82ê
\82½
\8fó
\91Ô
\82É
\82·
\82é
1463 AllItemAction.Checked := True;
1464 AllResAction.Checked := True;
1466 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1467 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1468 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1471 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1472 FHistoryList := TList.Create;
1474 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1477 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1478 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1479 FavoriteDM.ReadFavorite;
1481 ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1482 ArrangeAction.Execute;
1484 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1485 case GikoSys.Setting.ListWidthState of
1487 ViewPanel.Width := 1;
1488 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
1489 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
1492 ViewPanel.Width := GikoSys.Setting.ListWidth;
1493 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
1494 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
1497 ViewPanel.Width := GikoSys.Setting.ListWidth;
1498 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
1499 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
1503 case GikoSys.Setting.ListHeightState of
1505 ViewPanel.Height := 1;
1506 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_NORMAL;
1507 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
1510 ViewPanel.Height := GikoSys.Setting.ListHeight;
1511 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
1512 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_NORMAL;
1515 ViewPanel.Height := GikoSys.Setting.ListHeight;
1516 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
1517 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
1522 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1523 FControlThread := TThreadControl.Create(True);
1524 FControlThread.MaxThreadCount := 1;
1525 FControlThread.Resume;
1526 FControlThread.OnDownloadEnd := DownloadEnd;
1527 FControlThread.OnDownloadMsg := DownloadMsg;
1528 FControlThread.OnWork := Work;
1529 FControlThread.OnWorkBegin := WorkBegin;
1530 FControlThread.OnWorkEnd := WorkEnd;
1531 // ProgressPanel.Width := FControlThread.MaxThreadCount * 12;
1533 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1534 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1536 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1539 BrowserBoardNameLabel.Caption := '';
1540 BrowserNameLabel.Caption := '';
1543 FTabHintIndex := -1;
1545 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1546 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1547 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1549 MakeDefaultINIFile();
1550 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1551 ReadToolBarSetting(ActionList, StdToolBar);
1552 ReadToolBarSetting(ActionList, ListToolBar);
1553 ReadToolBarSetting(ActionList, BrowserToolBar);
1556 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1557 SelectComboBoxPanel.Visible := False;
1559 for i := ListToolBar.ControlCount - 1 downto 0 do
1561 if ListToolBar.Controls[ i ].Action = SelectItemAction then
1563 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
1564 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
1565 SelectComboBoxPanel.Parent := ListToolBar;
1566 SelectComboBoxPanel.Visible := True;
1568 SelectComboBox.Left := 0;
1569 SelectComboBox.Top := 0;
1570 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
1571 SelectComboBox.Width := SelectComboBoxPanel.Width -
1572 SelectComboBoxSplitter.Width;
1574 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
1575 ToolButton := TToolButton.Create(ListToolBar);
1576 ToolButton.Name := 'SelectComboBoxDummy';
1577 ToolButton.Style := tbsSeparator;
1578 ToolButton.Width := 0;
1579 ToolButton.Left := ListToolBar.Controls[ i ].Left;
1580 ListToolBar.InsertControl(ToolButton);
1581 ToolButton.Visible := False;
1583 //
\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·
1584 if (i + 1) < ListToolBar.ControlCount then
1585 if ListToolBar.Controls[ i + 1 ] is TToolButton then
1586 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
1587 ListToolBar.Controls[ i + 1 ].Visible := False;
1590 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
1591 ListToolBar.Controls[ i ].Visible := False;
1600 //
\83A
\83h
\83\8c\83X
\83o
\81[
1601 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1603 //
\83\8a\83\93\83N
\83o
\81[
1606 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1607 FResRangeMenuSelect := GikoSys.ResRange;
1608 case GikoSys.ResRange of
1611 AllResAction.Execute;
1615 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
1616 SelectResAction.Checked := True;
1619 // ResRangeAction.Execute;
1620 case FResRangeMenuSelect of
1621 Ord( grrKoko ): OnlyKokoResAction.Checked := True;
1622 Ord( grrNew ): OnlyNewResAction.Checked := True;
1623 100: OnlyAHundredResAction.Checked := True;
1627 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\95\
\8e¦
\94Í
\88Í
1628 // ThreadRangeAction.Execute;
1629 case GikoSys.Setting.ThreadRange of
1632 AllItemAction.Checked := True;
1637 LogItemAction.Checked := True;
1642 NewItemAction.Checked := True;
1648 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1650 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1651 if not FileExists(GikoSys.GetBoardFileName) then begin
1652 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
1653 + '
\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
1654 + '
\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';
1655 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1656 NewBoardAction.Execute;
1659 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1660 GikoSys.LoadKeySetting(ActionList);
1662 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1663 // FLastRoundTime := 0;
1666 FHint := TResPopup.Create(Self);
1668 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1669 CabinetVisible( False );
1670 if GikoSys.Setting.CabinetVisible then begin
1671 i := CabinetSelectPopupMenu.Items.Count - 1;
1672 if GikoSys.Setting.CabinetIndex = i - 1 then
1673 CabinetHistoryAction.Execute
1674 else if GikoSys.Setting.CabinetIndex = i then
1675 CabinetFavoriteAction.Execute
1677 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1678 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1679 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1680 FIsIgnoreResize := rtResizing;
1681 CabinetBBSAction.Execute;
1684 ShowBBSTreeOld( BBSs[ 0 ] );
1685 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1689 //
\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
1690 for i := 1 to ParamCount do begin
1691 MoveToURL(ParamStr(i));
1694 s := GikoSys.FAbon.NGwordname;
1695 StatusBar.Panels[2].Text := s;
1696 StatusBar.Panels[2].Width := Max(StatusBar.Canvas.TextWidth(s), 100);
1697 StatusBarResize(Sender);
1699 dummy1.Caption := ItemReservPMenu.Caption;
1700 dummy1.Hint := ItemReservPMenu.Hint;
1702 //Samba24
\82Ì
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
1703 GikoSys.SambaFileExists();
1705 {$IFDEF SPAM_FILTER_ENABLED}
1706 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1707 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1710 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1711 MouseGesture := TMouseGesture.Create;
1712 GikoSys.Setting.Gestures.LoadGesture(
1713 GikoSys.Setting.GetGestureFileName, ActionList );
1714 MouseGesture.Margin := GikoSys.Setting.Gestures.Margin;
1715 MouseGesture.OnGestureStart := OnGestureStart;
1716 MouseGesture.OnGestureMove := OnGestureMove;
1717 MouseGesture.OnGestureEnd := OnGestureEnd;
1718 if GikoSys.Setting.GestureEnabled then
1719 MouseGesture.SetHook( Handle );
1721 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1722 GikoSys.Setting.SetMessages;
1724 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1725 if GikoSys.Setting.AutoLogin then
1726 LoginAction.Execute;
1728 MuteAction.Checked := GikoSys.Setting.Mute;
1730 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1731 // LockWindowUpdate(0);
1734 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1735 procedure TGikoForm.SaveCoolBarSettings;
1738 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1740 SaveMainCoolBarSettings;
1741 SaveBoardCoolBarSettings;
1742 SaveBrowserCoolBarSettings;
1745 procedure TGikoForm.SaveMainCoolBarSettings;
1750 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1751 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1752 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1753 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1754 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1755 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1758 procedure TGikoForm.SaveBoardCoolBarSettings;
1763 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1764 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1765 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1766 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1767 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1768 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1771 procedure TGikoForm.SaveBrowserCoolBarSettings;
1776 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1777 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1778 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1779 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1780 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1781 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1784 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1785 procedure TGikoForm.LoadCoolBarSettings;
1791 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1792 MainCoolBar.Bands.BeginUpdate;
1794 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1795 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1796 CoolSet := GikoSys.Setting.MainCoolSet[i];
1797 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1798 FIsIgnoreResize := rtNone;
1799 SaveCoolBarSettings;
1802 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1803 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1804 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1807 MainCoolBar.Bands.EndUpdate;
1810 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1811 ListCoolBar.Bands.BeginUpdate;
1813 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1814 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1815 CoolSet := GikoSys.Setting.ListCoolSet[i];
1816 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1817 FIsIgnoreResize := rtNone;
1818 SaveCoolBarSettings;
1821 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1822 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1823 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1826 ListCoolBar.Bands.EndUpdate;
1829 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1830 BrowserCoolBar.Bands.BeginUpdate;
1832 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1833 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1834 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1835 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1836 FIsIgnoreResize := rtNone;
1837 SaveCoolBarSettings;
1840 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1841 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1842 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1845 BrowserCoolBar.Bands.EndUpdate;
1853 procedure TGikoForm.FormShow(Sender: TObject);
1855 if FStartUp then begin
1856 ShowWindow(Application.Handle, SW_HIDE);
1858 //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½
1859 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1860 StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1861 StdToolBarVisibleActionExecute( nil );
1862 AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1863 AddressBarVisibleActionExecute( nil );
1864 LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1865 LinkBarVisibleActionExecute( nil );
1866 ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1867 ListToolBarVisibleActionExecute( nil );
1868 ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1869 ListNameBarVisibleActionExecute( nil );
1870 BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1871 BrowserToolBarVisibleActionExecute( nil );
1872 BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1873 BrowserNameBarVisibleActionExecute( nil );
1875 //
\83u
\83\89\83E
\83U
\83^
\83u
1876 BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1877 BrowserTabVisibleActionExecute(nil);
1879 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1880 BrowserTabTopAction.Checked := True;
1881 BrowserTabTopActionExecute(nil);
1883 BrowserTabBottomAction.Checked := True;
1884 BrowserTabBottomActionExecute(nil);
1887 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1888 BrowserTabTabStyleAction.Checked := True;
1889 BrowserTabTabStyleActionExecute(nil);
1890 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1891 BrowserTabButtonStyleAction.Checked := True;
1892 BrowserTabButtonStyleActionExecute(nil);
1894 BrowserTabFlatStyleAction.Checked := True;
1895 BrowserTabFlatStyleActionExecute(nil);
1898 // ListView
\82Ì
\83w
\83b
\83_
\83h
\83\89\83b
\83O
1899 // ListView.FullDrag := True;
1901 // CoolBar
\95\9c\8c³
1902 LoadCoolBarSettings;
1904 //
\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é
1905 // ResetBandInfo( ListCoolBar, ListToolBar );
1906 FIsIgnoreResize := rtNone;
1909 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1910 if GikoSys.Setting.TabAutoLoadSave then begin
1911 TabAutoLoadAction.Execute;
1913 //
\82É
\82¿
\82á
\82ñ
\8cê
\88Ä
\93à
\83T
\83|
\81[
\83g
\8b@
\94\
1914 if GikoSys.Setting.GengoSupport then begin
1922 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1924 // if GikoForm.WindowState <> wsMinimized then
1925 // SaveCoolBarSettings;
1926 if ( GikoSys.Setting.ShowDialogForEnd ) and
1927 (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
1932 if GikoSys.Setting.TabAutoLoadSave then begin
1933 TabAutoSaveAction.Execute;
1936 { //2ch
\8c¾
\8cȩ̂²ÙFree
1937 if GikoSys.Setting.Gengo <> nil then begin
1938 GikoSys.Setting.Gengo.Free;
1941 //Application.HookMainWindow(Hook);
1942 Application.UnhookMainWindow(Hook);
1943 Application.Terminate;
1946 procedure TGikoForm.FormDestroy(Sender: TObject);
1949 // CoolSet: TCoolSet;
1950 wp : TWindowPlacement;
1953 // Application.OnDeactivate := nil;
1954 // Self.OnDeactivate := nil;
1955 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1957 MouseGesture.UnHook;
1961 ActiveListColumnSave;
1965 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1966 wp.length := sizeof(wp);
1967 GetWindowPlacement(Handle, @wp);
1968 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1969 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1970 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1971 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1972 GikoSys.Setting.WindowMax := WindowState = wsMaximized;
1974 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1975 GikoSys.Setting.CabinetVisible := CabinetVisibleAction.Checked;
1976 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1977 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1978 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1979 if ArrangeAction.Checked then
1980 GikoSys.Setting.ListOrientation := gloVertical
1982 GikoSys.Setting.ListOrientation := gloHorizontal;
1983 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1988 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1989 if not GikoSys.Setting.ResRangeHold then
1990 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1993 if WindowState <> wsNormal then
1994 WindowState := wsNormal;
1995 SaveCoolBarSettings;
1997 GikoSys.Setting.WriteWindowSettingFile;
1998 GikoSys.Setting.WriteNameMailSettingFile;
2001 //
\83\8a\83A
\83\8b\83^
\83C
\83\80\82É
\95Û
\91¶
\82³
\82ê
\82é
\82Ì
\82Å
\81A
\82Ü
\82½
\81A
\83E
\83B
\83\93\83h
\83E
\83T
\83C
\83Y
\82ª CoolBar
\82æ
\82è
2002 //
\8f¬
\82³
\82
\82È
\82Á
\82Ä
\82¢
\82é
\82Æ
\82«
\82É
\95Û
\91¶
\82·
\82é
\82Æ
\92l
\82ª
\8fã
\8f\91\82«
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\82Ì
\82Å
\82±
\82±
\82Å
\82Í
\95Û
\91¶
\82µ
\82È
\82¢
2004 //
\81ªFormDestroy
\92\86\82É
\88Ú
\93®
\82µ
\82½
\82Ì
\82Å
\81A
\82±
\82±
\82Å
\95Û
\91¶
\82µ
\82È
\82¢
\82Æ
\82¢
\82¯
\82È
\82¢
\82Æ
\8ev
\82¤
\81B
\81i
\82à
\82¶
\82ã
\81@2004/04/09
\81j
2006 //if (GikoForm.WindowState <> wsMinimized) and (GikoForm.WindowState <> wsMaximized) then
2009 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
2011 //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é
2012 FavoriteDM.WriteFavorite;
2016 LockWindowUpdate(Self.Handle);
2018 //
\83^
\83u
\83N
\83\8d\81[
\83Y
2019 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
2020 GikoSys.Setting.ShowDialogForAllTabClose := false;
2021 AllTabCloseAction.Execute;
2022 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
2026 for i := FBrowsers.Count - 1 downto 0 do begin
2027 TWebBrowser(FBrowsers[i]).Free;
2030 FBrowsers.Capacity := 0;
2035 if BrowserNullTab <> nil then begin
2036 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
2037 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
2039 BrowserNullTab.Free;
2045 TreeView.Items.BeginUpdate;
2046 TreeView.Items.GetFirstNode.Free;
2047 TreeView.Items.Clear;
2048 TreeView.Items.EndUpdate;
2052 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
2054 //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
2055 //AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.AddressHistoryCount);
2056 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
2060 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
2074 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶&
\94j
\8aü
2076 RoundList.SaveRoundFile;
2090 FControlThread.Terminate;
2091 FControlThread.WaitFor;
2095 FControlThread.Free;
2098 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
2099 // 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Å
2100 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
2101 for i := Length(BoardGroups) - 1 downto 0 do begin
2102 //BoardGroups[i].Clear;
2103 BoardGroups[i].Free;
2107 for i := Length( BBSs ) - 1 downto 0 do begin
2108 if BBSs[ i ] <> nil then
2117 for i := Length( BoardPlugIns ) - 1 downto 0 do begin
2118 if BoardPlugIns[ i ] <> nil then
2119 BoardPlugIns[ i ].Free;
2120 BoardPlugIns[ i ] := nil;
2126 if FEvent <> nil then
2130 if FHint <> nil then begin
2131 FHint.ReleaseHandle;
2136 if TPreviewBrowser <> nil then begin
2137 FPreviewBrowser.Free;
2138 FPreviewBrowser := nil;
2142 LockWindowUpdate(0);
2145 //
\83L
\83\83\83r
\83l
\83b
\83g
\81~
\83{
\83^
\83\93\83N
\83\8a\83b
\83N
2146 procedure TGikoForm.CabinetPanelHide(Sender: TObject);
2148 CabinetVisibleAction.Execute;
2149 // CabinetPanelVisible(false);
2152 //
\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
2153 procedure TGikoForm.SetBBSMenu;
2156 item : TBBSMenuItem;
2159 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
2160 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
2162 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
2163 CabinetSelectPopupMenu.Items[ i ].Free;
2164 CabinetMenu.Items[ i ].Free;
2165 BBSSelectPopupMenu.Items[ i ].Free;
2171 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
2172 for i := Length( BBSs ) - 1 downto 0 do begin
2174 item := TBBSMenuItem.Create( PopupMenu );
2175 item.Caption := BBSs[ i ].Title;
2176 item.Data := BBSs[ i ];
2177 item.OnClick := BBSMenuItemOnClick;
2178 CabinetSelectPopupMenu.Items.Insert( 0, item );
2179 item := TBBSMenuItem.Create( PopupMenu );
2180 item.Caption := BBSs[ i ].Title;
2181 item.Data := BBSs[ i ];
2182 item.OnClick := BBSMenuItemOnClick;
2183 CabinetMenu.Insert( 0, item );
2184 item := TBBSMenuItem.Create( PopupMenu );
2185 item.Caption := BBSs[ i ].Title;
2186 item.Data := BBSs[ i ];
2187 item.OnClick := BBSMenuItemOnClick;
2188 BBSSelectPopupMenu.Items.Insert( 0, Item );
2195 procedure TGikoForm.ReloadBBS;
2200 LockWindowUpdate(Self.Handle);
2202 //
\83^
\83u
\83N
\83\8d\81[
\83Y
2203 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
2204 GikoSys.Setting.ShowDialogForAllTabClose := false;
2205 AllTabCloseAction.Execute;
2206 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
2208 SetContent(BrowserNullTab);
2209 //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
2210 TreeView.Items.Clear;
2212 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
2214 RoundList.SaveRoundFile;
2217 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
2223 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
2230 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
2232 FavoriteDM.WriteFavorite;
2237 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
2238 for i := Length(BoardGroups) - 1 downto 0 do begin
2240 BoardGroups[i].Free;
2246 for i := Length( BBSs ) - 1 downto 0 do begin
2247 if BBSs[ i ] <> nil then
2256 FTreeType := gttNone;
2258 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
2260 //
\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Æ)
2261 InitializeBoardPlugIns;
2263 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
2265 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
2266 for i := Length(BBSs) - 1 downto 0 do begin
2267 if not BBSs[i].IsBoardFileRead then
2268 GikoSys.ReadBoardFile(BBSs[i]);
2271 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
2274 ShowBBSTree( BBSs[ 0 ] );
2276 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
2279 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
2280 FavoriteDM.ReadFavorite;
2284 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
2285 RoundList.LoadRoundBoardFile;
2286 RoundList.LoadRoundThreadFile;
2288 LockWindowUpdate(0);
2290 TabsOpenAction.Execute;
2293 //
\83{
\81[
\83h
\83c
\83\8a\81[
\90Ý
\92è
2294 procedure TGikoForm.SetBoardTreeNode(
2300 CategoryNode: TTreeNode;
2301 BoardNode: TTreeNode;
2302 Category: TCategory;
2305 //
\94Â
\83\8a\83X
\83g
\82Ì
\90Ý
\92è
2306 FActiveBBS := inBBS;
2307 TreeView.Items.BeginUpdate;
2308 TreeView.Items.Clear;
2310 if not inBBS.IsBoardFileRead then
2311 GikoSys.ReadBoardFile( inBBS );
2313 //if SplashWindow <> nil then
2314 //SplashWindow.ProgressBar.Max := inBBS.Count;
2315 // SplashWindow.ProgressBar.Max := inBBS.Count + Length(BBSs) * 20;
2319 //
\83L
\83\83\83r
\83l
\83b
\83g
\95\
\8e¦
\91O
\82É
\8dÄ
\83\
\81[
\83g
2320 if ( GikoSys.Setting.BBSSortIndex <> 0 ) or ( GikoSys.Setting.BBSSortOrder <> true ) then begin
2321 Sort.SortOrder := true;
2322 Sort.SortIndex := 0;
2323 Sort.SortNoFlag := true;
2324 inBBS.Sort(CategorySortProc);
2327 Root := TreeView.Items.Add( nil, inBBS.Title );
2328 Root.ImageIndex := ITEM_ICON_2CH1;
2329 Root.SelectedIndex := ITEM_ICON_2CH2;
2331 for i := inBBS.Count - 1 downto 0 do begin
2332 Category := TCategory(inBBS.Items[i]);
2333 CategoryNode := TreeView.Items.AddChildFirst(Root, Category.Title);
2334 CategoryNode.Data := Category;
2335 CategoryNode.ImageIndex := ITEM_ICON_CATEGORY1;
2336 CategoryNode.SelectedIndex := ITEM_ICON_CATEGORY2;
2338 //
\83L
\83\83\83r
\83l
\83b
\83g
\95\
\8e¦
\91O
\82É
\8dÄ
\83\
\81[
\83g
2339 if ( GikoSys.Setting.CategorySortIndex <> 0 ) or ( GikoSys.Setting.CategorySortOrder <> true ) then begin
2340 Sort.SortOrder := true;
2341 Sort.SortIndex := 0;
2342 Sort.SortNoFlag := true;
2343 Category.CustomSort(BoardSortProc);
2346 for j := Category.Count - 1 downto 0 do begin
2347 Board := TBoard(Category.Items[j]);
2349 BoardNode := TreeView.Items.AddChildFirst(CategoryNode, Board.Title);
2350 BoardNode.Data := Board;
2351 //if (Board.LastGetTime = 0) or (Board.LastGetTime = ZERO_DATE) then begin
2352 if not Board.IsLogFile then begin
2353 BoardNode.ImageIndex := ITEM_ICON_BOARD_NOSUBJECT;
2354 BoardNode.SelectedIndex := ITEM_ICON_BOARD_NOSUBJECT;
2356 BoardNode.ImageIndex := ITEM_ICON_BOARD1;
2357 BoardNode.SelectedIndex := ITEM_ICON_BOARD2;
2358 for k := 0 to Board.Count - 1 do begin
2359 if Board.Items[ k ].IsLogFile then begin
2360 BoardNode.ImageIndex := ITEM_ICON_BOARD_LOG;
2361 BoardNode.SelectedIndex := ITEM_ICON_BOARD_LOG;
2370 CategoryNode.Expanded := Category.NodeExpand;
2372 //if SplashWindow <> nil then begin
2373 // SplashWindow.ProgressBar.StepIt;
2374 //Application.ProcessMessages;
2375 // SplashWindow.Update;
2379 TreeView.Items.EndUpdate;
2383 function TGikoForm.SetCategoryListItem(ABBS2ch: TBBS): Integer;
2385 TitleColumn : TListColumn;
2386 ListColumn : TListColumn;
2387 i, id, idx : Integer;
2389 ListView.Items.BeginUpdate;
2391 Screen.Cursor := crHourGlass;
2393 ListView.Columns.Clear;
2394 TitleColumn := ListView.Columns.Add;
2395 TitleColumn.Caption := GikoBBSColumnCaption[ Ord( gbbscTitle ) ];
2396 TitleColumn.Width := GikoSys.Setting.BBSColumnWidth[ Ord( gbbscTitle ) ];
2398 for i := 0 to GikoSys.Setting.BBSColumnOrder.Count - 1 do begin
2399 if GikoSys.Setting.BBSColumnOrder[ i ] = gbbscTitle then begin
2400 TitleColumn.Tag := i;
2403 id := Ord( GikoSys.Setting.BBSColumnOrder[ i ] );
2404 if (Integer( Low( TGikoBBSColumnID ) ) <= id) and
2405 (id <= Integer( High( TGikoBBSColumnID ) )) then begin
2406 ListColumn := ListView.Columns.Add;
2407 // ListColumn.Tag := id;
2408 ListColumn.Tag := i;
2409 ListColumn.Caption := GikoBBSColumnCaption[ id ];
2410 ListColumn.Width := GikoSys.Setting.BBSColumnWidth[ id ];
2414 TitleColumn.Index := idx;
2416 ListView.Items.Count := 0;
2417 ListView.Items.Clear;
2418 ListView.Items.Count := ABBS2ch.Count;
2420 // UpFolderAction.Enabled := False;
2421 // AllItemAction.Enabled := False;
2422 // LogItemAction.Enabled := False;
2423 // NewItemAction.Enabled := False;
2424 // SelectItemAction.Enabled := False;
2425 // ListDownloadToolButton.Enabled := False;
2426 // BoardReservToolButton.Enabled := False;
2427 // ListThreadDownloadToolButton.Enabled := False;
2429 ListNameLabel.Caption := ABBS2ch.Title;
2430 FolderImage.Picture := nil;
2431 ItemIcon16.GetBitmap(1, FolderImage.Picture.Bitmap);
2433 FSortIndex := GikoSys.Setting.BBSSortIndex;
2434 FSortOrder := GikoSys.Setting.BBSSortOrder;
2435 for i := ListView.Columns.Count - 1 downto 0 do begin
2436 idx := ListView.Column[ i ].Tag;
2437 if FSortIndex = Ord( GikoSys.Setting.BBSColumnOrder[ idx ] ) then
2438 ListViewSort( nil, ListView.Column[ i ] );
2441 Result := ABBS2ch.Count;
2443 Screen.Cursor := crDefault;
2444 ListView.Items.EndUpdate;
2448 function TGikoForm.SetBoardListItem(Category: TCategory): Integer;
2450 TitleColumn : TListColumn;
2451 ListColumn : TListColumn;
2452 i, id, idx : Integer;
2454 ListView.Items.BeginUpdate;
2456 Screen.Cursor := crHourGlass;
2458 ListView.Columns.Clear;
2459 TitleColumn := ListView.Columns.Add;
2460 TitleColumn.Caption := GikoCategoryColumnCaption[ Ord( gccTitle ) ];
2461 TitleColumn.Width := GikoSys.Setting.CategoryColumnWidth[ Ord( gccTitle ) ];
2463 for i := 0 to GikoSys.Setting.CategoryColumnOrder.Count - 1 do begin
2464 if GikoSys.Setting.CategoryColumnOrder[ i ] = gccTitle then begin
2465 TitleColumn.Tag := i;
2468 id := Ord( GikoSys.Setting.CategoryColumnOrder[ i ] );
2469 if (Integer( Low( TGikoCategoryColumnID ) ) <= id) and
2470 (id <= Integer( High( TGikoCategoryColumnID ) )) then begin
2471 ListColumn := ListView.Columns.Add;
2472 // ListColumn.Tag := id;
2473 ListColumn.Tag := i;
2474 ListColumn.Caption := GikoCategoryColumnCaption[ id ];
2475 ListColumn.Width := GikoSys.Setting.CategoryColumnWidth[ id ];
2479 TitleColumn.Index := idx;
2481 ListView.Items.Count := 0;
2482 ListView.Items.Clear;
2483 ListView.Items.Count := Category.Count;
2485 for i := Category.Count - 1 downto 0 do begin
2486 if( Category.Items[i].ParentCategory <> Category ) then begin
2487 Category.Items[i].ParentCategory := Category;
2488 Category.Items[i].No := i + 1;
2491 // UpFolderAction.Enabled := True;
2492 // AllItemAction.Enabled := False;
2493 // LogItemAction.Enabled := False;
2494 // NewItemAction.Enabled := False;
2495 // SelectItemAction.Enabled := False;
2496 // ListDownloadToolButton.Enabled := False;
2497 // BoardReservToolButton.Enabled := False;
2498 // ListThreadDownloadToolButton.Enabled := False;
2500 ListNameLabel.Caption := Category.Title;
2501 FolderImage.Picture := nil;
2502 ItemIcon16.GetBitmap(3, FolderImage.Picture.Bitmap);
2504 FSortIndex := GikoSys.Setting.CategorySortIndex;
2505 FSortOrder := GikoSys.Setting.CategorySortOrder;
2506 for i := ListView.Columns.Count - 1 downto 0 do begin
2507 idx := ListView.Column[ i ].Tag;
2508 if FSortIndex = Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] ) then
2509 ListViewSort( nil, ListView.Column[ i ] );
2512 Result := Category.Count;
2514 Screen.Cursor := crDefault;
2515 ListView.Items.EndUpdate;
2519 function TGikoForm.SetThreadListItem(Board: TBoard): Integer;
2521 TitleColumn : TListColumn;
2522 ListColumn : TListColumn;
2523 i, id, idx : Integer;
2525 ListView.Items.BeginUpdate;
2527 Screen.Cursor := crHourGlass;
2530 //
\83`
\83\89\82Â
\82«
\96h
\8e~
\82Ì
\82½
\82ß
\81A
\95Ï
\8dX
\82³
\82ê
\82Ä
\82¢
\82é
\8fê
\8d\87\82Ì
\82Ý
2531 //
\81¦
\96¼
\8fÌ
\82Í
\88á
\82¤
\82ª
\83J
\83\89\83\80\90\94\82ª
\93¯
\82¶
\81A
\82Æ
\82¢
\82Á
\82½
\8fê
\8d\87\82É
\91Î
\8f\88\82Å
\82«
\82È
\82¢
\82Ì
\82Å
\92\8d\88Ó
2532 if ListView.Columns.Count <> GikoSys.Setting.BoardColumnOrder.Count then
2535 ListView.Columns.Clear;
2536 TitleColumn := ListView.Columns.Add;
2537 TitleColumn.Caption := GikoBoardColumnCaption[ Ord( gbcTitle ) ];
2538 TitleColumn.Width := GikoSys.Setting.BoardColumnWidth[ Ord( gbcTitle ) ];
2540 for i := 0 to GikoSys.Setting.BoardColumnOrder.Count - 1 do begin
2541 if GikoSys.Setting.BoardColumnOrder[ i ] = gbcTitle then begin
2542 TitleColumn.Tag := i;
2545 id := Ord( GikoSys.Setting.BoardColumnOrder[ i ] );
2546 if (Integer( Low( TGikoBoardColumnID ) ) <= id) and
2547 (id <= Integer( High( TGikoBoardColumnID ) )) then begin
2548 ListColumn := ListView.Columns.Add;
2549 ListColumn.Caption := GikoBoardColumnCaption[ id ];
2550 // ListColumn.Tag := id;
2551 ListColumn.Tag := i;
2552 ListColumn.Width := GikoSys.Setting.BoardColumnWidth[ id ];
2553 ListColumn.Alignment := GikoBoardColumnAlignment[ id ];
2557 TitleColumn.Index := idx;
2560 ListView.Items.Count := 0;
2561 ListView.Items.Clear;
2563 {case GikoForm.ViewType of
2564 gvtAll: ListView.Items.Count := Board.Count;
2565 gvtLog: ListView.Items.Count := Board.GetLogThreadCount;
2566 gvtNew: ListView.Items.Count := Board.GetNewThreadCount;
2567 gvtUser: ListView.Items.Count := Board.GetUserThreadCount;
2570 case GikoForm.ViewType of
2571 gvtAll: ListView.Items.Count := Board.Count;
2574 Board.LogThreadCount := Board.GetLogThreadCount;
2575 ListView.Items.Count := Board.LogThreadCount;
2579 Board.NewThreadCount := Board.GetNewThreadCount;
2580 ListView.Items.Count := Board.NewThreadCount;
2584 Board.UserThreadCount:= Board.GetUserThreadCount;
2585 ListView.Items.Count := Board.UserThreadCount;
2589 ListNameLabel.Caption := Board.Title;
2590 FolderImage.Picture := nil;
2591 ItemIcon16.GetBitmap(5, FolderImage.Picture.Bitmap);
2593 FSortIndex := GikoSys.Setting.BoardSortIndex;
2594 FSortOrder := GikoSys.Setting.BoardSortOrder;
2595 for i := ListView.Columns.Count - 1 downto 0 do begin
2596 idx := ListView.Column[ i ].Tag;
2597 if FSortIndex = Ord( GikoSys.Setting.BoardColumnOrder[ idx ] ) then
2598 ListViewSort( nil, ListView.Column[ i ] );
2601 Result := Board.Count;
2603 Screen.Cursor := crDefault;
2604 ListView.Items.EndUpdate;
2608 procedure TGikoForm.ListViewData(Sender: TObject; Item: TListItem);
2610 // FileName: string;
2611 // DateTime: TDateTime;
2614 Category: TCategory;
2616 ThreadItem: TThreadItem;
2618 ActivListObj : TObject;
2621 ActivListObj := ActiveList;
2622 if ActivListObj is TBBS then begin
2623 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
2624 BBS := TBBS(ActivListObj);
2626 ListView.StateImages := nil;
2628 if (BBS = nil) or (BBS.Count <= 0) or (Item = nil)
2629 or (Item.Index >= BBS.Count) or (ListView.Items.Count = 0)
2630 or (not (BBS.Items[Item.index] is TCategory)) then Exit;
2631 //if BBS.Count <= 0 then Exit;
2632 //if Item = nil then Exit;
2633 //if Item.Index >= BBS.Count then Exit;
2634 //if ListView.Items.Count = 0 then Exit;
2636 //if not (BBS.Items[Item.index] is TCategory) then Exit;
2637 Category := TCategory(BBS.Items[Item.index]);
2639 if Category = nil then Exit;
2641 if ListNumberVisibleAction.Checked then
2642 Item.Caption := IntToStr(Category.No) + ': ' + Category.Title
2644 Item.Caption := Category.Title;
2646 Item.ImageIndex := ITEM_ICON_CATEGORY1;
2647 Item.Data := Category;
2649 end else if ActivListObj is TCategory then begin
2651 //=====
\94Â
\83\8a\83X
\83g =====
2652 Category := TCategory(ActivListObj);
2654 ListView.StateImages := nil;
2656 if (Category = nil) or (Category.Count <= 0) or (Item = nil)
2657 or (Item.Index >= Category.Count) or (ListView.Items.Count = 0)
2658 or (not (Category.Items[Item.Index] is TBoard)) then Exit;
2659 //if Category.Count <= 0 then Exit;
2660 //if Item = nil then Exit;
2661 //if Item.Index >= Category.Count then Exit;
2662 //if ListView.Items.Count = 0 then Exit;
2664 //if not (Category.Items[Item.Index] is TBoard) then Exit;
2665 Board := TBoard(Category.Items[Item.Index]);
2667 if Board = nil then Exit;
2669 if ListNumberVisibleAction.Checked then
2670 Item.Caption := IntToStr(Board.No) + ': ' + Board.Title
2671 //Item.Caption := IntToStr(Item.Index + 1) + ': ' + Board.Title
2673 Item.Caption := Board.Title;
2675 if Item.SubItems.Count <> ListView.Columns.Count then begin
2676 Item.SubItems.Clear;
2677 Item.SubItems.Capacity := GikoSys.Setting.CategoryColumnOrder.Count;
2678 for i := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 1 do
2679 Item.SubItems.Add('');
2682 Item.ImageIndex := ITEM_ICON_BOARD1;
2684 for i := 0 to ListView.Columns.Count - 1 do begin
2685 if GikoSys.Setting.CategoryColumnOrder.Count <= i then
2687 // case TGikoCategoryColumnID( ListView.Column[ i ].Tag ) of
2688 case GikoSys.Setting.CategoryColumnOrder[ i ] of
2690 // Item.Caption
\82Í SubItems
\82É
\8aÜ
\82Ü
\82ê
\96³
\82¢
\82Ì
\82Å
2695 Item.SubItems[ idx ] := Board.RoundName // '
\97\
\96ñ'
2697 Item.SubItems[ idx ] := '';
2700 if Board.RoundDate = ZERO_DATE then begin
2701 Item.SubItems[ idx ] := '';
2703 Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', Board.RoundDate);
2710 end else if ActivListObj is TBoard then begin
2712 //=====
\83X
\83\8c\83\8a\83X
\83g =====
2713 Board := TBoard(ActivListObj);
2715 if GikoSys.Setting.ListIconVisible then
2716 ListView.StateImages := StateIconImageList
2718 ListView.StateImages := nil;
2721 case GikoForm.ViewType of
2722 gvtAll: BoardCnt := Board.Count;
2723 gvtLog: BoardCnt := Board.LogThreadCount;
2724 gvtNew: BoardCnt := Board.NewThreadCount;
2725 gvtUser: BoardCnt := Board.UserThreadCount;
2730 case GikoForm.ViewType of
2731 gvtAll: BoardCnt := Board.Count;
2732 gvtLog: BoardCnt := Board.GetLogThreadCount;
2733 gvtNew: BoardCnt := Board.GetNewThreadCount;
2734 gvtUser: BoardCnt := Board.GetUserThreadCount;
2739 // if Board = nil then Exit;
2740 if (BoardCnt <= 0) or (Item = nil) or (Item.Index > BoardCnt)
2741 or (ListView.Items.Count = 0) or (not (Board.Items[Item.Index] is TThreadItem)) then Exit;
2743 //
\89ü
\91P
\82·
\82×
\82«
\83u
\83\8d\83b
\83N/////////////////////////////////////////////////////
2745 case GikoForm.ViewType of
2746 gvtAll: if Item.Index >= Board.Count then Exit else
2747 ThreadItem := TThreadItem(Board.Items[Item.Index]);
2748 gvtLog: ThreadItem := Board.GetLogThread(Item.Index);
2749 gvtNew: ThreadItem := Board.GetNewThread(Item.Index);
2750 gvtUser: ThreadItem := Board.GetUserThread(Item.Index);
2752 //////////////////////////////////////////////////////////////////////////
2754 if ThreadItem = nil then Exit;
2756 RepStr := CustomStringReplace(ThreadItem.Title, '<', '<' );
2757 RepStr := CustomStringReplace(RepStr, '>', '>' );
2758 RepStr := CustomStringReplace(RepStr, '"', '"' );
2759 RepStr := CustomStringReplace(RepStr, '&', '&' );
2760 //RepStr := StringReplace(RepStr, '
\81\97\81M', ',', [rfReplaceAll]);
2761 if Item.SubItems.Count <> ListView.Columns.Count then begin
2762 Item.SubItems.Clear;
2763 Item.SubItems.Capacity := GikoSys.Setting.BoardColumnOrder.Count;
2764 for i := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 1 do
2765 Item.SubItems.Add('');
2768 if ListNumberVisibleAction.Checked then
2769 Item.Caption := IntToStr(ThreadItem.No) + ': ' + RepStr
2771 Item.Caption := RepStr;
2773 case ThreadItem.AgeSage of
2774 gasNone: Item.StateIndex := -1;
2775 gasNew: Item.StateIndex := 0;
2776 gasAge: Item.StateIndex := 1;
2777 gasSage: Item.StateIndex := 2;
2780 if ThreadItem.IsLogFile then begin
2782 for i := 0 to ListView.Columns.Count - 1 do begin
2783 if GikoSys.Setting.BoardColumnOrder.Count <= i then
2785 // case TGikoBoardColumnID( ListView.Column[ i ].Tag ) of
2786 case GikoSys.Setting.BoardColumnOrder[ i ] of
2788 // Item.Caption
\82Í SubItems
\82É
\8aÜ
\82Ü
\82ê
\96³
\82¢
\82Ì
\82Å
2792 Item.SubItems[ idx ] := IntToStr(ThreadItem.AllResCount);
2795 Item.SubItems[ idx ] := IntToStr(ThreadItem.Count);
2798 Item.SubItems[ idx ] := IntToStr(ThreadItem.AllResCount - ThreadItem.Count);
2801 if ThreadItem.NewResCount = 0 then
2802 Item.SubItems[ idx ] := ''
2804 Item.SubItems[ idx ] := IntToStr(ThreadItem.NewResCount);
2807 Item.SubItems[ idx ] := '';
2810 if ThreadItem.Round then
2811 Item.SubItems[ idx ] := ThreadItem.RoundName
2813 Item.SubItems[ idx ] := '';
2815 gbcRoundDate://gbcLastModified:
2816 if (ThreadItem.RoundDate = ZERO_DATE) then begin
2817 Item.SubItems[ idx ] := '';
2819 Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.RoundDate);
2822 if ThreadItem.CreateDate = ZERO_DATE then begin
2823 Item.SubItems[ idx ] := '';
2825 Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.CreateDate);
2828 if (ThreadItem.LastModified = ZERO_DATE) then begin
2829 Item.SubItems[ idx ] := '';
2831 Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.LastModified);
2838 if ThreadItem.NewArrival then
2839 Item.ImageIndex := ITEM_ICON_THREADNEW1
2841 Item.ImageIndex := ITEM_ICON_THREADLOG1;
2846 for i := 0 to GikoSys.Setting.BoardColumnOrder.Count - 1 do begin
2847 // case TGikoBoardColumnID( ListView.Column[ i ].Tag ) of
2848 case GikoSys.Setting.BoardColumnOrder[ i ] of
2850 // Item.Caption
\82Í SubItems
\82É
\8aÜ
\82Ü
\82ê
\96³
\82¢
\82Ì
\82Å
2854 Item.SubItems[ idx ] := IntToStr(ThreadItem.AllResCount);
2856 gbcRoundDate://gbcLastModified:
2857 Item.SubItems[ idx ] := '';
2860 if ThreadItem.CreateDate = ZERO_DATE then begin
2861 Item.SubItems[ idx ] := '';
2863 Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.CreateDate);
2866 Item.SubItems[ idx ] := '';
2869 Item.SubItems[ idx ] := '';
2873 if ThreadItem.NewArrival then
2874 Item.ImageIndex := ITEM_ICON_THREADNEW1
2876 Item.ImageIndex := ITEM_ICON_THREAD1;
2879 Item.Data := ThreadItem;
2884 procedure TGikoForm.ListViewDataFind(Sender: TObject; Find: TItemFind;
2885 const FindString: String; const FindPosition: TPoint; FindData: Pointer;
2886 StartIndex: Integer; Direction: TSearchDirection; Wrap: Boolean;
2887 var Index: Integer);
2893 procedure TGikoForm.ListViewDataHint(Sender: TObject; StartIndex,
2899 procedure TGikoForm.ListViewDataStateChange(Sender: TObject; StartIndex,
2900 EndIndex: Integer; OldState, NewState: TItemStates);
2905 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
2913 threadItem : TThreadItem;
2915 Protocol, Host, Path, Document, Port, Bookmark: string;
2920 ActiveFileName: string;
2923 // buf, buf2: string;
2926 if not( TObject(Sender) is TWebBrowser )then
2930 if (TWebBrowser(Sender) <> nil) and (not TWebBrowser(Sender).Busy) and (Assigned(TWebBrowser(Sender).Document)) then begin
2931 if LowerCase(OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset) <> 'shift_jis' then begin
2932 OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset := 'shift_jis';
2939 if PreviewTimer.Enabled then
2940 PreviewTimer.Enabled := False;
2941 Application.CancelHint;
2943 if GetActiveContent <> nil then
2944 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
2946 ActiveFileName := '';
2948 FActiveContent := nil;
2952 StatusBar.Panels[1].Text := Text;
2954 if FHint <> nil then begin
2955 FHint.ReleaseHandle;
2958 if FPreviewBrowser <> nil then
2959 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2961 if not GikoSys.Setting.UnActivePopup then
2962 if not GikoForm.Active then
2965 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
2966 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
2969 Ext := AnsiLowerCase(ExtractFileExt(Text));
2970 if (Pos('http://', Text) = 1) and (GikoSys.Setting.PreviewVisible) and
2971 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) then begin
2972 if FPreviewBrowser = nil then begin
2973 FPreviewBrowser := TPreviewBrowser.Create(Self);
2974 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2975 TOleControl(FPreviewBrowser).Parent := nil;
2977 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
2978 FPreviewURL := Text;
2979 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
2980 PreviewTimer.Enabled := True;
2981 end else if (Pos('about:blank', Text) = 1) or (Pos('http://', Text) = 1) or (Pos('mailto:', Text) = 1) then begin
2982 if Pos('mailto:', Text) = 1 then begin
2983 s := StringReplace(Text, 'mailto:', '', [rfIgnoreCase]);
2984 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
2986 p.x := p.x - TWebBrowser(Sender).ClientOrigin.x;
2987 p.y := p.y - TWebBrowser(Sender).ClientOrigin.y;
2988 e := IHTMLDocument2(TWebBrowser(Sender).Document).elementFromPoint(p.x, p.y);
2989 if (Assigned(e)) then begin
2990 tmp2 := ZenToHan(e.Get_outerText);
2991 if (GikoSys.IsNumeric(tmp2)) then begin
2992 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
2993 wkIntSt := StrToInt(tmp2);
2994 wkIntTo := StrToInt(tmp2);
2995 //s := GetThreadText(wkBBS, wkKey, wkIntSt, wkIntTo, False, False);
2996 FHint.PopupType := gptThread;
2997 SetResPopupText(GetActiveContent, wkIntSt, wkIntTo, False, False);
2999 FHint.PopupType := gptRaw;
3004 threadItem := GetActiveContent;
3005 URL := GetRespopupURL(Text, threadItem.URL);
3006 PathRec := Gikosys.Parse2chURL2(URL);
3007 if (PathRec.FNoParam) then begin
3011 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
3013 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
3015 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
3017 URL := GikoSys.GetBrowsableThreadURL( URL );
3018 wkIntSt := PathRec.FSt;
3019 wkIntTo := PathRec.FTo;
3021 if (wkIntSt = 0) and (wkIntTo = 0) then begin
3024 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
3026 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
3028 end else if wkIntSt > wkIntTo then begin
3033 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
3038 threadItem := BBSsFindThreadFromURL( URL );
3040 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
3041 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
3042 if board <> nil then begin
3043 if not board.IsThreadDatRead then
3044 GikoSys.ReadSubjectFile( board );
3045 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
3049 if threadItem <> nil then begin
3050 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
3051 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
3052 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
3056 FHint.PopupType := gptThread;
3057 SetResPopupText( threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
3063 // ShowTextPopup(s);
3064 if FHint.PopupType = gptRaw then begin
3065 if FHint.Caption <> '' then
3068 if (FHint.ResCount <> 0) or (FHint.Title <> '') then
3074 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
3077 //SysMenuApp: HMenu;
3079 FEnabledCloseButton := Enabled;
3080 SysMenu := GetSystemMenu(Handle, False);
3081 //SysMenuApp := GetSystemMenu(Application.Handle, False);
3083 if Enabled then begin
3084 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
3085 //EnableMenuItem(SysMenuApp, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
3087 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
3088 //EnableMenuItem(SysMenuApp, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
3091 DrawMenuBar(Handle);
3092 //DrawMenuBar(Application.Handle);
3095 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
3096 var AllowChange: Boolean);
3098 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
3099 // if FTreeType = gtt2ch then
3100 // FSortIndex := -1;
3103 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
3104 Shift: TShiftState);
3108 if GetActiveList is TBoard then begin
3110 VK_BACK:; // UpFolderButtonClick(Sender);
3111 VK_SPACE: ListDoubleClick(Shift);
3112 VK_RETURN: ListClick;
3115 if ListView.Selected <> nil then begin
3116 pos.X := ListView.Column[ 0 ].Width;
3117 pos.Y := ListView.Selected.Top;
3119 pos.X := ListView.Left;
3120 pos.Y := ListView.Top;
3122 Windows.ClientToScreen( ListView.Handle, pos );
3123 ListPopupMenu.Popup( pos.X, pos.Y );
3126 end else begin // TBBS, TCategory
3128 VK_BACK:; // UpFolderButtonClick(Sender);
3129 VK_SPACE: ListClick;
3130 VK_RETURN: ListDoubleClick(Shift);
3133 if ListView.Selected <> nil then begin
3134 pos.X := ListView.Column[ 0 ].Width;
3135 pos.Y := ListView.Selected.Top;
3137 pos.X := ListView.Left;
3138 pos.Y := ListView.Top;
3140 Windows.ClientToScreen( ListView.Handle, pos );
3141 ListPopupMenu.Popup( pos.X, pos.Y );
3147 function TGikoForm.GetHttpState: Boolean;
3149 Result := FHttpState;
3153 \brief ListView
\82Ì Column
\82ð
\90^
\82Ì
\83J
\83\89\83\80\82É
\95Ï
\8a·
3155 Delphi 6 Personal
\82Å
\82Ì ListView
\82Å
\82Í ListViewColumnClick
\83C
\83x
\83\93\83g
\82Å
3156 \90³
\82µ
\82¢
\83J
\83\89\83\80\82ª
\93n
\82³
\82ê
\82È
\82¢
\82½
\82ß
\81A
\90³
\82µ
\82¢
\83J
\83\89\83\80\82É
\95Ï
\8a·
\82µ
\82Ü
\82·
\81B
3158 function TGikoForm.ActiveListTrueColumn( column : TListColumn ) : TListColumn;
3166 //
\90³
\82µ
\82
\95Ï
\8a·
\82·
\82é
\95û
\96@
\82ª
\95ª
\82©
\82ç
\82È
\82¢
\82Ì
\82Å
\95Û
\97¯
3172 if TObject( FActiveList ) is TBBS then
3173 orderList := GikoSys.Setting.BBSColumnOrder
3174 else if TObject( FActiveList ) is TCategory then
3175 orderList := GikoSys.Setting.CategoryColumnOrder
3176 else if TObject( FActiveList ) is TBoard then
3177 orderList := GikoSys.Setting.BoardColumnOrder
3183 for i := 0 to ListView.Columns.Count - 1 do begin
3184 if Integer( orderList[ ListView.Column[ i ].Tag ] ) = 0 then begin
3186 Result := ListView.Column[ i ]
3187 else if idx <= i then
3188 Result := ListView.Column[ idx - 1 ];
3196 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
3197 Column: TListColumn);
3202 idx := ActiveListTrueColumn( Column ).Tag;
3204 if TObject( FActiveList ) is TBBS then
3205 orderList := GikoSys.Setting.BBSColumnOrder
3206 else if TObject( FActiveList ) is TCategory then
3207 orderList := GikoSys.Setting.CategoryColumnOrder
3208 else if TObject( FActiveList ) is TBoard then
3209 orderList := GikoSys.Setting.BoardColumnOrder
3213 id := Integer( orderList[ idx ] );
3215 if FSortIndex = id then
3216 FSortOrder := not FSortOrder
3218 FSortOrder := id = 0;
3221 ListViewSort(Sender, Column);
3224 procedure TGikoForm.ListViewSort(Sender: TObject; Column: TListColumn);
3226 i, id, idx : Integer;
3229 wkCategory: TCategory;
3232 idx := ActiveListTrueColumn( Column ).Tag;
3234 for i := 0 to ListView.Columns.Count - 1 do begin
3235 ListView.Column[i].ImageIndex := -1;
3239 ListView.Column[ idx ].ImageIndex := ITEM_ICON_SORT1
3241 ListView.Column[ idx ].ImageIndex := ITEM_ICON_SORT2;
3243 Sort.SortNoFlag := ListNumberVisibleAction.Checked;
3245 //if TObject(TreeView.Selected.Data) is TBBS then begin
3246 if TObject( FActiveList ) is TBBS then begin
3247 //wkBBS := TBBS(TreeView.Selected.Data);
3248 wkBBS := TBBS( FActiveList );
3249 orderList := GikoSys.Setting.BBSColumnOrder;
3250 id := Integer( orderList[ idx ] );
3251 Sort.SortOrder := FSortOrder;
3252 Sort.SortIndex := id;
3253 GikoSys.Setting.BBSSortIndex := id;
3254 GikoSys.Setting.BBSSortOrder := FSortOrder;
3255 wkBBS.Sort(CategorySortProc);
3256 //end else if TObject(TreeView.Selected.Data) is TCategory then begin
3257 end else if TObject( FActiveList ) is TCategory then begin
3258 //wkCategory := TCategory(TreeView.Selected.Data);
3259 wkCategory := TCategory( FActiveList );
3260 orderList := GikoSys.Setting.CategoryColumnOrder;
3261 id := Integer( orderList[ idx ] );
3262 Sort.SortOrder := FSortOrder;
3263 Sort.SortIndex := id;
3264 GikoSys.Setting.CategorySortIndex := id;
3265 GikoSys.Setting.CategorySortOrder := FSortOrder;
3266 wkCategory.CustomSort(BoardSortProc);
3267 //end else if TObject(TreeView.Selected.Data) is TBoard then begin
3268 end else if TObject( FActiveList ) is TBoard then begin
3269 //wkBoard := TBoard(TreeView.Selected.Data);
3270 wkBoard := TBoard( FActiveList );
3271 orderList := GikoSys.Setting.BoardColumnOrder;
3272 id := Integer( orderList[ idx ] );
3273 Sort.SortOrder := FSortOrder;
3274 Sort.SortIndex := id;
3275 GikoSys.Setting.BoardSortIndex := id;
3276 GikoSys.Setting.BoardSortOrder := FSortOrder;
3277 wkBoard.CustomSort(ThreadItemSortProc);
3286 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
3287 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
3291 DefaultDraw := True;
3293 DefaultDraw := False;
3294 if (cdsSelected in State) or (cdsHot in State) then begin
3295 Sender.Canvas.Brush.Color := clHighlight;
3296 Sender.Canvas.Font.Color := clHighlightText;
3298 Sender.Canvas.Brush.Color := clBtnFace;
3299 Sender.Canvas.Font.Color := clBtnText;
3301 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
3302 Sender.Canvas.FillRect(ARect);
3303 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
3306 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
3311 Nodes := TreeView.Items;
3313 for i := 0 to Nodes.Count - 1 do begin
3314 if Nodes.Item[i].Data = Data then begin
3315 Result := Nodes.Item[i];
3322 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
3323 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
3324 Headers: OleVariant; var Cancel: WordBool);
3329 kMenuName: string = 'menu:';
3332 if Pos(kMenuName, URL) <> 0 then begin
3333 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
3335 if not GikoSys.IsNumeric(sNo) then Exit;
3339 KokoPopupMenu.Tag := StrToInt(sNo);
3340 KokoPopupMenu.Popup(p.x, p.y);
3341 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
3342 Cancel := not GikoSys.Setting.OpenMailer;
3347 procedure TGikoForm.AppFormDeactivate(Sender: TObject);
3349 Application.ProcessMessages;
3350 if not Application.Terminated then begin
3351 if PreviewTimer.Enabled then
3352 PreviewTimer.Enabled := False;
3353 //
\83t
\83H
\81[
\83J
\83X
\82ª
\91¼
\82Ì
\83A
\83v
\83\8a\82É
\95Ï
\82í
\82Á
\82½
\82Æ
\82«
\82É
\83q
\83\93\83g
\82ð
\8fÁ
\8b\8e
3354 if FHint <> nil then begin
3355 FHint.ReleaseHandle;
3358 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
3359 if FPreviewBrowser <> nil then
3360 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
3364 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
3365 const ARect: TRect; var DefaultDraw: Boolean);
3369 IsBoardNode: Boolean;
3375 Category: TCategory;
3379 DefaultDraw := True;
3381 if FTreeType = gttHistory then Exit;
3383 TreeView.Canvas.Font.Color := clBlue;
3384 IsBoardNode := False;
3385 for i := 0 to TreeView.Items.Count - 1 do begin
3387 if not TreeView.Items[i].IsVisible then
3390 if TObject(TreeView.Items[i].Data) is TCategory then begin
3391 if TreeView.Items[i].Expanded then
3394 IsBoardNode := False;
3395 Category := TCategory(TreeView.Items[i].Data);
3396 for j := 0 to Category.Count - 1 do begin
3397 Board := Category.Items[j];
3398 if Board <> nil then begin
3399 if Board.UnRead > 0 then begin
3407 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
3408 IsBoardNode := True;
3409 Board := TBoard(TreeView.Items[i].Data);
3411 Cnt := Board.UnRead;
3417 Bitmap := TBitmap.Create;
3419 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
3420 Bitmap.Canvas.Font.Style := [fsBold];
3421 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
3426 NodeRect := TreeView.Items[i].DisplayRect(True);
3429 CntText := '(' + IntToStr(Cnt) + ')'
3430 else if Cnt = 1 then
3434 TextWidth := TreeView.Canvas.TextWidth(CntText);
3436 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
3438 NodeRect.Left + NodeWidth + TextWidth + 8,
3440 DrawText(TreeView.Canvas.Handle,
3444 DT_SINGLELINE or DT_VCENTER);
3446 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
3449 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
3450 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
3453 Category: TCategory;
3456 DefaultDraw := True;
3458 if FTreeType = gttHistory then Exit;
3460 TreeView.Canvas.Font.Style := [];
3461 if Node <> nil then begin
3462 if TObject(Node.Data) is TCategory then begin
3463 Category := TCategory(Node.Data);
3464 for i := 0 to Category.Count - 1 do begin
3465 Board := Category.Items[i];
3466 if Board <> nil then begin
3467 if Board.UnRead > 0 then begin
3468 TreeView.Canvas.Font.Style := [fsBold];
3473 end else if TObject(Node.Data) is TBoard then begin
3474 Board := TBoard(Node.Data);
3475 if Board.UnRead > 0 then
3476 TreeView.Canvas.Font.Style := [fsBold];
3481 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
3483 TreeView.Invalidate;
3485 if TObject(Node.Data) is TBBS then begin
3486 TBBS(Node.Data).NodeExpand := True;
3487 end else if TObject(Node.Data) is TCategory then begin
3488 TCategory(Node.Data).NodeExpand := True;
3489 end else if TObject(Node.Data) is TBoard then begin
3490 TBoard(Node.Data).NodeExpand := True;
3494 {procedure TGikoForm.CabinetPanelVisible(PanelVisible: Boolean);
3496 TreeSplitter.Visible := PanelVisible;
3497 CabinetPanel.Visible := PanelVisible;
3498 CabinetToolButton.Down := PanelVisible;
3501 procedure TGikoForm.ListViewAllSelect;
3507 procedure TGikoForm.TreeViewDblClick(Sender: TObject);
3512 GetCursorPos(APoint);
3513 APoint := TreeView.ScreenToClient(APoint);
3514 HitTest := TreeView.GetHitTestInfoAt(APoint.x, APoint.y);
3515 if not (htOnLabel in HitTest) then Exit;
3517 TreeDoubleClick( TreeView.Selected );
3520 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
3522 AddMessageList(Msg, nil, Icon);
3525 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
3529 boardPlugIn : TBoardPlugIn;
3531 browserRec : TBrowserRecord;
3534 if Item.DownType = gdtBoard then
3535 ATitle := Item.Board.Title
3537 ATitle := Item.ThreadItem.Title;
3539 ATitle := GikoSys.Setting.GetMessage(Ord(gmUnKnown));
3541 if Item.State in [gdsComplete, gdsDiffComplete] then begin
3543 if Item.DownType = gdtBoard then begin
3546 AddMessageList(ATitle + ' ' + GikoSys.Setting.GetMessage(Ord(gmSureItiran)), nil, gmiOK);
3547 if GetActiveList = Item.Board then begin
3549 SetActiveList(Item.Board);
3551 Item.Board.Modified := True;
3552 Item.Board.IsThreadDatRead := True;
3554 end else if Item.DownType = gdtThread then begin
3557 Item.ThreadItem.NewArrival := True;
3558 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
3559 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
3560 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
3561 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
3562 Item.ThreadItem.Title := DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 )).FTitle;
3563 ATitle := Item.ThreadItem.Title;
3564 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
3565 ATitle := DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1)).FTitle;
3567 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
3568 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
3569 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
3573 if GikoSys.Setting.BrowserTabVisible then begin
3574 if GetActiveContent = Item.ThreadItem then
3575 browserRec := InsertBrowserTab(Item.ThreadItem)
3576 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
3577 browserRec := InsertBrowserTab(Item.ThreadItem, True)
3579 browserRec := InsertBrowserTab(Item.ThreadItem, False);
3580 if browserRec.Thread = BrowserNullTab.Thread then begin
3581 browserRec.Movement := BrowserNullTab.Movement;
3582 BrowserNullTab.Movement := '';
3585 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
3586 InsertBrowserTab(Item.ThreadItem);
3589 Application.ProcessMessages;
3591 if Item.State = gdsComplete then begin
3593 AddMessageList(ATitle + ' ' + GikoSys.Setting.GetMessage(Ord(gmSureSyutoku)), nil, gmiOK);
3597 PlaySound('NewDiff');
3598 AddMessageList(ATitle + ' ' + GikoSys.Setting.GetMessage(Ord(gmSureDiff)), nil, gmiOK);
3603 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
3604 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
3605 Item.ThreadItem.Round := False;
3606 //Item.ThreadItem.RoundName := '';
3607 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);
3610 //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
3611 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
3612 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
3613 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
3614 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
3615 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
3616 case GikoForm.ViewType of
3617 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
3618 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
3619 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
3620 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
3625 end else if Item.State = gdsNotModify then begin
3627 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
3628 //SetContent(Item.ThreadItem);
3629 InsertBrowserTab(Item.ThreadItem);
3631 AddMessageList(ATitle + ' ' + GikoSys.Setting.GetMessage(Ord(gmNotMod)), nil, gmiSAD);
3632 PlaySound('NoChange');
3633 Screen.Cursor := crDefault;
3634 end else if Item.State = gdsAbort then begin
3636 AddMessageList(ATitle + ' ' + GikoSys.Setting.GetMessage(Ord(gmAbort)), nil, gmiOK);
3637 end else if Item.State = gdsError then begin
3642 AddMessageList(ATitle + ' ' + GikoSys.Setting.GetMessage(Ord(gmError)) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
3643 // if Item.ResponseCode = 302 then
3644 // 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);
3650 if FWorkCount < 0 then FWorkCount := 0;
3651 if FWorkCount = 0 then begin
3653 Animate.Active := False;
3655 Screen.Cursor := crDefault;
3662 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
3664 // SetProgressValue(Number, 0, AWorkCountMax);
3665 // ProgressBar.Visible := True;
3666 ProgressBar.Position := 0;
3667 ProgressBar.Max := AWorkCountMax;
3668 FDownloadTitle := AWorkTitle;
3669 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
3670 FDownloadMax := AWorkCountMax;
3673 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
3675 ProgressBar.Position := 0;
3676 if FDownloadMax <> 0 then
3677 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
3680 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
3682 ProgressBar.Position := AWorkCount;
3683 // SetProgressValue(Number, AWorkCount);
3684 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
3688 procedure TGikoForm.SetProgressValue(Number: Integer; Value: Integer; Max: Integer = -1);
3690 Component: TComponent;
3692 Component := FindComponent('ProgressBar' + IntToStr(Number + 1));
3693 if Component <> nil then begin
3694 if not (Component is TProgressBar) then Exit;
3696 TProgressBar(Component).Max := Max;
3697 TProgressBar(Component).Position := Value;
3702 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
3704 ListItem: TListItem;
3706 MessageListView.Items.BeginUpdate;
3708 ListItem := MessageListView.Items.Add;
3709 ListItem.Caption := ACaption;
3710 ListItem.Data := AObject;
3711 ListItem.MakeVisible(False);
3713 gmiOK: ListItem.ImageIndex := 0;
3714 gmiSAD: ListItem.ImageIndex := 1;
3715 gmiNG: ListItem.ImageIndex := 2;
3716 gmiWhat: ListItem.ImageIndex := 3;
3719 MessageListView.Items.EndUpdate;
3724 function TGikoForm.InsertBrowserTab(
3725 ThreadItem : TThreadItem;
3726 ActiveTab : Boolean = True
3729 i, j, idx : Integer;
3730 favItem : TFavoriteThreadItem;
3731 newBrowser : TBrowserRecord;
3735 if Threaditem = nil then Exit;
3737 if ThreadItem.IsLogFile then begin
3738 //
\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é
3739 //
\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é
3740 if (FActiveContent <> nil) and (FActiveContent.FBrowser <> nil) and
3741 (FActiveContent.FBrowser <> BrowserNullTab.Browser)then begin
3742 j := FBrowsers.IndexOf(FActiveContent.FBrowser);
3743 if j = BROWSER_COUNT - 1 then
3744 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3746 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
3747 if not AddHistory( favItem ) then
3750 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3751 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
3752 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3753 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
3754 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).FBrowser = nil then begin
3755 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
3756 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).FBrowser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
3757 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
3761 TBrowserRecord(BrowserTab.Tabs.Objects[i]).FBrowser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3762 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
3763 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3765 if ActiveTab then begin
3766 BrowserTab.TabIndex := i;
3767 BrowserTab.OnChange(nil);
3774 idx := BrowserTab.TabIndex;
3775 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
3776 newBrowser := TBrowserRecord.Create;
3777 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
3778 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).FBrowser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
3779 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
3783 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3784 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3785 //newBrowser.Browser.Navigate(BLANK_HTML);
3786 newBrowser.thread := ThreadItem;
3787 newBrowser.Repaint := true;
3788 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
3790 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
3791 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
3792 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
3796 if ActiveTab then begin
3797 BrowserTab.TabIndex := 0;
3801 newBrowser := TBrowserRecord.Create;
3802 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
3803 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).FBrowser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
3804 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
3808 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3809 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3810 //newBrowser.Browser.Navigate(BLANK_HTML);
3811 newBrowser.thread := ThreadItem;
3812 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
3813 newBrowser.Repaint := true;
3815 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
3816 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
3817 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
3821 if ActiveTab then begin
3822 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
3823 BrowserTab.TabIndex := 0
3825 BrowserTab.TabIndex := i;
3828 Result := newBrowser;
3829 if(ActiveTab) or (idx = -1) then begin
3830 BrowserTab.OnChange(nil);
3833 if BrowserNullTab = nil then begin
3834 BrowserNullTab := TBrowserRecord.Create;
3835 BrowserNullTab.Browser := Browser;
3837 BrowserNullTab.thread := ThreadItem;
3838 Result := BrowserNullTab;
3839 BrowserTab.TabIndex := -1;
3840 SetContent(BrowserNullTab);
3843 if GikoSys.Setting.URLDisplay then
3844 AddressComboBox.Text := ThreadItem.URL;
3848 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
3857 ThreadItem: TThreadItem;
3858 Thread: TBrowserRecord;
3859 ThreadTitle, ThreadPTitle: string;
3860 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
3863 idx := BrowserTab.TabIndex;
3864 if (FActiveContent <> nil) and
3865 (FActiveContent.Thread <> Thread.Thread) and
3866 (Assigned(FActiveContent.Browser.Document)) then begin
3870 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document).Body).ScrollTop;
3873 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
3878 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
3879 Thread.Browser.Navigate(BLANK_HTML);
3880 BrowserBoardNameLabel.Caption := '';
3881 ItemBoardImage.Picture := nil;
3882 BrowserNameLabel.Caption := '';
3883 ItemImage.Picture := nil;
3884 BrowserNullTab.Thread := nil;
3885 //TOleControl(BrowserNullTab.Browser).Visible := true;
3886 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
3887 FActiveContent := nil;
3889 end else if Thread.Browser = nil then begin
3890 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
3891 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3892 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
3893 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).FBrowser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
3894 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
3898 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3899 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3902 ThreadTitle := Thread.Thread.Title;
3903 ThreadPTitle := Thread.Thread.ParentBoard.Title;
3904 //ThreadScrollTop := Thread.Thread.ScrollTop;
3905 ThreadIsLog := Thread.Thread.IsLogFile;
3906 ThreadItem := Thread.Thread;
3907 ThreadNewArraical := Thread.Thread.NewArrival;
3908 //ThreadUnRead := Thread.Thread.UnRead;
3909 BBSID := ThreadItem.ParentBoard.BBSID;
3910 FileName := ThreadItem.FileName;
3912 if GetCapture = ListView.Handle then
3915 Screen.Cursor := crHourGlass;
3919 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
3920 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
3921 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
3923 ShowWindow(Thread.FBrowser.Handle, SW_SHOW);
3924 if (not Assigned(Thread.Browser.Document)) then begin
3925 Thread.Browser.Navigate('about:blank');
3928 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
3929 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
3930 Application.ProcessMessages;
3931 if idx <> BrowserTab.TabIndex then begin
3936 //ActiveContent
\81@
\82Ì
\8dX
\90V
3937 FActiveContent := Thread;
3939 if not ThreadIsLog then begin
3940 Self.Caption := CAPTION_NAME ;
3942 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
3943 doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
3945 doc.charset := 'Shift_JIS';
3951 Self.Caption := CAPTION_NAME + ' - [' + ThreadTitle + ']';
3952 //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«
3953 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
3954 if Thread.Repaint then begin
3955 Thread.Repaint := false;
3957 Thread.Browser.OnStatusTextChange := nil;
3958 doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
3960 //GikoSys.CreateHTML2(doc, ThreadItem, sTitle);
3961 HTMLCreater.CreateHTML2(doc, ThreadItem, sTitle);
3962 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
3964 if ThreadItem = nil then begin
3965 FActiveContent := nil;
3969 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
3972 if (Thread <> nil) and (ThreadItem <>nil) then begin
3973 BrowserBoardNameLabel.Caption := ThreadPTitle;
3974 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
3975 BrowserNameLabel.Caption := ThreadTitle;
3976 ItemImage.Picture := nil;
3978 if ThreadNewArraical then
3979 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
3981 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
3983 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
3985 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
3986 BrowserNameLabel.Left := ItemImage.Left + 20;
3988 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
3989 if (FActiveList is TBoard) and (TBoard(ActiveList) = ThreadItem.ParentBoard) then
3992 FActiveContent := nil;
3995 Screen.Cursor := crDefault;
3999 function TGikoForm.GetActiveContent: TThreadItem;
4002 if FActiveContent <> nil then
4003 Result := FActiveContent.Thread
4012 procedure TGikoForm.SetActiveList(Obj: TObject);
4016 // if FActiveList <> Obj then begin
4019 if ListView.Selected <> nil then
4020 idx := ListView.Selected.Index
4026 ListView.Items.Count := 0;
4027 ListView.Items.Clear;
4028 ListView.Selected := nil;
4029 // ListView.Columns.Clear;
4030 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
4031 and (FActiveContent.Thread.IsLogFile) then
4032 Self.Caption := CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
4034 Self.Caption := CAPTION_NAME;
4035 //Application.Title := CAPTION_NAME;
4037 // ActiveListColumnSave;
4039 if Obj is TBBS then begin
4040 SetCategoryListItem(TBBS(Obj));
4041 end else if Obj is TCategory then begin
4042 SetBoardListItem(TCategory(Obj));
4043 end else if Obj is TBoard then begin
4044 SetThreadListItem(TBoard(Obj));
4047 if idx >= 0 then begin
4048 if idx >= ListView.Items.Count then
4049 idx := ListView.Items.Count - 1;
4050 ListView.ItemIndex := idx;
4051 ListView.ItemFocused := ListView.Items.Item[ idx ];
4057 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
4058 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
4059 function TGikoForm.GetActiveList: TObject;
4061 Result := FActiveList;
4064 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
4066 SetListViewType(AViewType, '', False);
4069 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
4074 for i := Length( BBSs ) - 1 downto 0 do begin
4075 BBSs[i].SelectText := SelectText;
4076 BBSs[i].KubetsuChk := KubetsuChk;
4078 ViewType := AViewType;
4079 if ActiveList is TBoard then begin
4080 Board := TBoard(ActiveList);
4082 //gvtAll: ListView.Items.Count := Board.Count;
4083 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
4084 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
4085 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
4088 SetActiveList(Board);
4090 //SetThreadListItem(Board); //SetActiveList
\93à
\82Å
\8cÄ
\82Î
\82ê
\82é
\82©
\82ç2
\8fd
\82É
\8cÄ
\82Ñ
\8fo
\82·
\95K
\97v
\82È
\82µ
4094 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
4095 const ARect: TRect; var DefaultDraw: Boolean);
4101 if ListView.Items.Count = 0 then begin
4102 DefaultDraw := true;
4103 ListView.Canvas.Brush.Color := ListView.Color;
4104 ListView.Canvas.FillRect(ARect);
4108 ListView.Canvas.Font.Color := clWindowText;
4109 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
4112 ListView.Canvas.Font.Color := clBlue;
4113 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';
4116 ListView.Canvas.Font.Color := clGreen;
4117 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
4120 ListView.Canvas.Font.Color := clNavy;
4121 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';
4122 if GetActiveList is TBoard then
4123 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
4131 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
4132 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
4133 ListView.Canvas.TextOut(p.X, p.Y, s);
4135 DefaultDraw := True;
4139 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
4141 Item: TDownloadItem;
4143 if not Board.IsThreadDatRead then
4144 GikoSys.ReadSubjectFile(Board);
4145 Item := TDownloadItem.Create;
4147 Item.Board := Board;
4148 Item.DownType := gdtBoard;
4149 Item.ForceDownload := ForceDownload;
4150 FControlThread.AddItem(Item);
4151 if FWorkCount = 0 then begin
4153 Animate.Active := True;
4156 Screen.Cursor := crAppStart;
4164 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
4166 Item: TDownloadItem;
4168 Item := TDownloadItem.Create;
4170 Item.ThreadItem := ThreadItem;
4171 Item.DownType := gdtThread;
4172 Item.ForceDownload := ForceDownload;
4173 FControlThread.AddItem(Item);
4174 if FWorkCount = 0 then begin
4176 Animate.Active := True;
4179 Screen.Cursor := crAppStart;
4187 procedure TGikoForm.PlaySound(SoundEventName: string);
4191 if not GikoSys.Setting.Mute then begin
4192 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
4193 if FileExists(FileName) then begin
4194 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
4195 sndPlaySound(nil, SND_SYNC);
4196 Application.ProcessMessages;
4198 sndPlaySound(PChar(FileName), SND_ASYNC);
4204 function TGikoForm.AddHistory( favItem : TFavoriteThreadItem ): Boolean;
4207 Item: TFavoriteThreadItem;
4211 // if (GetActiveContent = ThreadItem) and
4212 // (ThreadItem.Count <= ThreadItem.Kokomade) then
4214 // if GetActiveContent = ThreadItem then
4218 if FTreeType = gttHistory then
4219 TreeView.Selected := nil;
4221 for i := 0 to FHistoryList.Count - 1 do begin
4222 if TObject(FHistoryList[i]) is TFavoriteThreadItem then begin
4223 Item := TFavoriteThreadItem(FHistoryList[i]);
4224 if Item.URL = favItem.URL then begin
4225 // SetContent(ThreadItem);
4226 FHistoryList.Move(i, 0);
4227 if FTreeType = gttHistory then
4228 if TreeView.Items.GetFirstNode <> TreeView.Items[ i ] then
4229 TreeView.Items[ i ].MoveTo( TreeView.Items.GetFirstNode, naInsert );
4236 if FHistoryList.Count > 0 then
4237 FHistoryList.Insert( 0, favItem )
4239 FHistoryList.Add( favItem );
4240 // SetContent(ThreadItem);
4241 // while GikoSys.Setting.AddressHistoryCount < FHistoryList.Count do begin
4242 while GikoSys.Setting.MaxRecordCount < FHistoryList.Count do begin
4243 i := FHistoryList.Count - 1;
4244 TObject( FHistoryList.Items[ i ] ).Free;
4245 FHistoryList.Delete( i );
4248 if FTreeType = gttHistory then begin
4249 Node := TreeView.Items.Add( nil, favItem.Title );
4250 Node.MoveTo( TreeView.Items.GetFirstNode, naInsert );
4252 if favItem.NewArrival then begin
4253 Node.ImageIndex := ITEM_ICON_THREADNEW1;
4254 Node.SelectedIndex := ITEM_ICON_THREADNEW2;
4256 Node.ImageIndex := ITEM_ICON_THREADLOG1;
4257 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
4260 //
\95\89\89×
\82ð
\82©
\82¯
\82½
\82
\82È
\82¢
\82Ì
\82Å NewArrival
\82Ì
\83`
\83F
\83b
\83N
\82ð
\8ds
\82í
\82È
\82¢
4261 //
\81¦favItem.Item
\83v
\83\8d\83p
\83e
\83B
\82Í dat
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\82ð
\95K
\97v
\82Æ
\82·
\82é
4262 Node.ImageIndex := ITEM_ICON_THREADLOG1;
4263 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
4264 Node.Data := favItem;
4265 //while GikoSys.Setting.AddressHistoryCount < TreeView.Items.Count do begin
4266 while GikoSys.Setting.MaxRecordCount < TreeView.Items.Count do begin
4267 i := TreeView.Items.Count - 1;
4268 TreeView.Items.Item[ i ].Delete;
4273 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
4277 for i := 0 to FHistoryList.Count - 1 do begin
4278 if threadItem.URL = TFavoriteThreadItem( FHistoryList.Items[i] ).URL then begin
4279 TFavoriteThreadItem( FHistoryList.Items[ i ] ).Free;
4280 FHistoryList.Delete(i);
4281 FHistoryList.Capacity := FHistoryList.Count;
4287 procedure TGikoForm.ClearHistory;
4291 //FHistoryList.Clear;
4294 for i := FHistoryList.Count - 1 downto 0 do begin
4295 if TObject(FHistoryList[ i ]) is TFavoriteThreadItem then
4296 TFavoriteThreadItem(FHistoryList[ i ]).Free
4297 else if TObject(FHistoryList[ i ]) is TFavoriteBoardItem then
4298 TFavoriteBoardItem(FHistoryList[ i ]).Free;
4300 //FHistoryList.Delete(i);
4306 FHistoryList.Capacity := FHistoryList.Count;
4310 procedure TGikoForm.SaveHistory;
4313 saveList : TstringList;
4316 saveList := TStringList.Create;
4319 FHistoryList.Capacity := FHistoryList.Count;
4320 saveList.Add('<?xml version="1.0" encoding="Shift_JIS" standalone="yes"?>');
4321 saveList.Add('<address>');
4322 bound := FHistoryList.Count - 1;
4323 for i := bound downto 0 do begin
4324 // title
\82Í
\8d¡
\82Ì
\82Æ
\82±
\82ë
\8eg
\82Á
\82Ä
\82¢
\82È
\82¢
4326 '<history url="' + HtmlEncode( TFavoriteThreadItem( FHistoryList[ i ] ).URL ) + '"' +
4327 ' title="' + HtmlEncode( TFavoriteThreadItem( FHistoryList[ i ] ).Title ) + '"/>');
4329 saveList.Add('</address>');
4330 saveList.SaveToFile( GikoSys.GetConfigDir + 'History.xml' );
4337 procedure TGikoForm.LoadHistory;
4341 XMLDoc : IXMLDocument;
4343 HistoryNode : IXMLNode;
4345 favItem : TFavoriteThreadItem;
4348 fileName := GikoSys.GetConfigDir + 'History.xml';
4350 if FileExists( fileName ) then begin
4352 XMLDoc := IXMLDocument.Create;
4353 //XMLDoc := LoadXMLDocument(FileName);
4354 LoadXMLDocument(FileName, XMLDoc);
4356 XMLNode := XMLDoc.DocumentElement;
4358 if XMLNode.NodeName = 'address' then begin
4359 bound := XMLNode.ChildNodes.Count - 1;
4360 for i := 0 to bound do begin
4361 HistoryNode := XMLNode.ChildNodes[i];
4362 if HistoryNode.NodeName = 'history' then begin
4363 //if FReadCount >= sl.Count then begin
4364 s := Trim(HistoryNode.Attributes['url']);
4365 if s <> '' then begin
4366 favItem := TFavoriteThreadItem.Create(
4367 s, HistoryNode.Attributes[ 'title' ] );
4368 if not AddHistory( favItem ) then
4384 procedure TGikoForm.ShowBBSTreeOld(
4392 FavoriteTreeView.Visible := False;
4393 FavoriteToolBar.Hide;
4394 TreeView.Visible := True;
4396 b := CabinetSelectPopupMenu.Items.Count - 1;
4397 for i := 0 to b do begin
4398 item := CabinetSelectPopupMenu.Items[ i ];
4399 if item is TBBSMenuItem then begin
4400 if TBBSMenuItem( item ).Data = inBBS then begin
4401 item.Checked := True;
4402 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
4403 CabinetMenu.Items[ i ].Checked := True;
4404 GikoSys.Setting.CabinetIndex := i;
4408 item.Checked := False;
4409 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
4410 CabinetMenu.Items[ i ].Checked := False;
4412 CabinetSelectToolButton.Caption := inBBS.Title;
4414 CabinetHistoryAction.Checked := False;
4415 CabinetFavoriteAction.Checked := False;
4417 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
4418 FTreeType := gtt2ch;
4419 HistoryToolBar.Hide;
4420 SetBoardTreeNode( inBBS );
4421 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
4422 //?c???[??g?b?v?????I????
4423 if GetActiveList = nil then
4424 TreeView.Selected := TreeView.Items[0]
4426 for i := 0 to TreeView.Items.Count - 1 do begin
4427 if TreeView.Items[i].Data = GetActiveList then begin
4428 TreeView.Selected := TreeView.Items[i];
4432 TreeView.Selected := TreeView.Items[0]
4440 procedure TGikoForm.ShowBBSTree(
4449 FavoriteTreeView.Visible := False;
4450 FavoriteToolBar.Hide;
4451 TreeView.Visible := True;
4453 b := CabinetSelectPopupMenu.Items.Count - 1;
4454 for i := 0 to b do begin
4455 item := CabinetSelectPopupMenu.Items[ i ];
4456 if item is TBBSMenuItem then begin
4457 if TBBSMenuItem( item ).Data = inBBS then begin
4458 item.Checked := True;
4459 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
4460 CabinetMenu.Items[ i ].Checked := True;
4461 GikoSys.Setting.CabinetIndex := i;
4465 item.Checked := False;
4466 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
4467 CabinetMenu.Items[ i ].Checked := False;
4469 CabinetSelectToolButton.Caption := inBBS.Title;
4471 CabinetHistoryAction.Checked := False;
4472 CabinetFavoriteAction.Checked := False;
4474 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
4475 FTreeType := gtt2ch;
4476 HistoryToolBar.Hide;
4477 SetBoardTreeNode( inBBS );
4478 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
4479 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
4480 if GetActiveList = nil then begin
4482 TreeClick( TreeView.Items[0] );
4486 for i := 0 to TreeView.Items.Count - 1 do begin
4487 if TreeView.Items[i].Data = GetActiveList then begin
4488 TreeClick( TreeView.Items[i] );
4492 TreeClick( TreeView.Items[0] );
4500 procedure TGikoForm.ShowHistoryTree;
4505 if CabinetPanel.Visible then begin
4506 if FTreeType = gttHistory then begin
4507 CabinetVisible( False );
4508 CabinetHistoryAction.Checked := False;
4510 CabinetHistoryAction.Checked := True;
4513 CabinetVisible( True );
4514 CabinetHistoryAction.Checked := True;
4517 // BBS...BBS, History, Favorite
4518 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
4520 FavoriteTreeView.Visible := False;
4521 TreeView.Visible := True;
4523 CabinetBBSAction.Checked := False;
4524 CabinetFavoriteAction.Checked := False;
4526 if FTreeType <> gttHistory then begin
4527 b := CabinetSelectPopupMenu.Items.Count - 1;
4528 for i := 0 to b do begin
4529 item := CabinetSelectPopupMenu.Items[ i ];
4530 if item is TBBSMenuItem then begin
4531 item.Checked := False;
4532 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
4533 CabinetMenu.Items[ i ].Checked := False;
4537 FTreeType := gttHistory;
4538 HistoryToolBar.Show;
4539 FavoriteToolBar.Hide;
4541 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
4545 procedure TGikoForm.SetHistoryTreeNode;
4549 Item: TFavoriteThreadItem;
4551 TreeView.Items.BeginUpdate;
4553 TreeView.Items.Clear;
4554 for i := 0 to FHistoryList.Count - 1 do begin
4555 Item := TFavoriteThreadItem(FHistoryList[i]);
4556 Node := TreeView.Items.Add(nil, Item.Title);
4558 if Item.Item.NewArrival then begin
4559 Node.ImageIndex := ITEM_ICON_THREADNEW1;
4560 Node.SelectedIndex := ITEM_ICON_THREADNEW2;
4562 Node.ImageIndex := ITEM_ICON_THREADLOG1;
4563 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
4566 //
\95\89\89×
\82ð
\82©
\82¯
\82½
\82
\82È
\82¢
\82Ì
\82Å NewArrival
\82Ì
\83`
\83F
\83b
\83N
\82ð
\8ds
\82í
\82È
\82¢
4567 //
\81¦Item.Item
\83v
\83\8d\83p
\83e
\83B
\82Í dat
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\82ð
\95K
\97v
\82Æ
\82·
\82é
4568 Node.ImageIndex := ITEM_ICON_THREADLOG1;
4569 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
4573 TreeView.Items.EndUpdate;
4577 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
4579 ChangeEvent: TTVChangedEvent;
4580 ChangingEvent: TTVChangingEvent;
4584 if Item is TCategory then
4585 bbs := TCategory( Item ).ParenTBBS
4586 else if Item is TBoard then
4587 bbs := TBoard( Item ).ParentCategory.ParenTBBS
4591 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
4592 if Item <> FActiveList then begin
4594 ChangingEvent := nil;
4596 if not CallEvent then begin
4597 ChangeEvent := TreeView.OnChange;
4598 ChangingEvent := TreeView.OnChanging;
4601 if not CallEvent then begin
4602 TreeView.OnChange := nil;
4603 TreeView.OnChanging := nil;
4605 //Application.ProcessMessages;
4606 for i := 0 to TreeView.Items.Count - 1 do begin
4607 if TreeView.Items[i].Data = Item then begin
4608 TreeView.Items[i].Selected := True;
4610 TreeClick(TreeView.Items[i]);
4614 //Application.ProcessMessages;
4616 if not CallEvent then begin
4617 TreeView.OnChange := ChangeEvent;
4618 TreeView.OnChanging := ChangingEvent;
4623 if Item <> FActiveList then begin
4624 ActiveListColumnSave;
4626 if (Item is TBBS) or (Item is TCategory) then begin
4627 ListView.Columns.Clear;
4628 SetActiveList( Item );
4629 end else if Item is TBoard then begin
4630 if not TBoard( Item ).IsThreadDatRead then begin
4631 Screen.Cursor := crHourGlass;
4633 if not TBoard( Item ).IsThreadDatRead then
4634 GikoSys.ReadSubjectFile(TBoard( Item ));
4636 Screen.Cursor := crDefault;
4639 SetActiveList( Item );
4644 if Item is TBoard then begin // not TCategory
4645 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4646 if GikoSys.Setting.ListWidthState = glsMax then begin
4647 BrowserMinAction.Execute;
4648 if GikoForm.Visible then
4652 if GikoSys.Setting.ListHeightState = glsMax then begin
4653 BrowserMinAction.Execute;
4654 if GikoForm.Visible then
4661 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
4662 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
4664 listItem : TListItem;
4665 threadItem : TThreadItem;
4672 if not (GetActiveList is TBoard) then Exit;
4673 listItem := ListView.GetItemAt( X, Y );
4674 if listItem = nil then Exit;
4675 if not (TObject(listItem.Data) is TThreadItem) then Exit;
4677 threadItem := TThreadItem(ListItem.Data);
4678 InsertBrowserTab(threadItem, False);
4679 if threadItem.IsLogFile then
4680 ListView.UpdateItems(listItem.Index, listItem.Index);
4684 //
\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Å
4685 if (ssDouble in Shift) then
4686 ListDoubleClick(Shift)
4694 Windows.ClientToScreen( ListView.Handle, pos );
4695 ListPopupMenu.Popup( pos.X, pos.Y );
4701 procedure TGikoForm.ListClick;
4703 ListItem: TListItem;
4704 ThreadItem: TThreadItem;
4706 if ListView.SelCount <> 1 then Exit;
4707 ListItem := ListView.Selected;
4708 if ListItem = nil then Exit;
4709 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
4711 ThreadItem := TThreadItem(ListItem.Data);
4712 if ThreadItem.IsLogFile then begin
4713 InsertBrowserTab(ThreadItem);
4714 ListView.UpdateItems(ListItem.Index, ListItem.Index);
4716 InsertBrowserTab(ThreadItem);
4719 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
4720 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4721 if GikoSys.Setting.ListWidthState = glsMin then begin
4722 BrowserMaxAndFocusAction.Execute;
4725 if GikoSys.Setting.ListHeightState = glsMin then begin
4726 BrowserMaxAndFocusAction.Execute;
4732 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
4734 ThreadItem: TThreadItem;
4737 shiftDown := (ssShift in Shift);
4739 if ListView.Selected = nil then Exit;
4741 if TObject(ListView.Selected.Data) is TCategory then begin
4742 SelectTreeNode(ListView.Selected.Data, True);
4743 end else if TObject(ListView.Selected.Data) is TBoard then begin
4744 SelectTreeNode(ListView.Selected.Data, True)
4745 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
4746 Application.ProcessMessages;
4747 ThreadItem := TThreadItem(ListView.Selected.Data);
4748 DownloadContent(ThreadItem, shiftDown);
4750 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
4751 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4752 if GikoSys.Setting.ListWidthState = glsMin then begin
4753 BrowserMaxAction.Execute;
4754 SetFocusForBrowserAction.Execute;
4757 if GikoSys.Setting.ListHeightState = glsMin then begin
4758 BrowserMaxAction.Execute;
4759 SetFocusForBrowserAction.Execute;
4765 procedure TGikoForm.BrowserMovement(const AName: string; BrowserRecord: TBrowserRecord);
4770 activeBrower :TWebBrowser;
4773 while (BrowserRecord.Browser.ReadyState <> READYSTATE_COMPLETE) and
4774 (BrowserRecord.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
4776 Application.ProcessMessages;
4779 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
4780 if(BrowserRecord <> nil) and (BrowserRecord.FBrowser <> nil) then begin
4781 activeBrower := BrowserRecord.FBrowser;
4785 item := OleVariant( activeBrower.Document as IHTMLDocument2).anchors.item(nm);
4788 top := top + item.offsetTop;
4789 item := item.offsetParent;
4790 until AnsiCompareText(item.tagName, 'body' ) = 0;
4791 OleVariant(activeBrower.Document as IHTMLDocument2).body.scrollTop := top;
4797 procedure TGikoForm.BrowserMovement(const AName: string);
4802 activeBrower :TWebBrowser;
4804 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
4805 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0) then begin
4806 activeBrower := FActiveContent.Browser;
4810 item := OleVariant( activeBrower.Document as IHTMLDocument2).anchors.item(nm);
4813 top := top + item.offsetTop;
4814 item := item.offsetParent;
4815 until AnsiCompareText(item.tagName, 'body' ) = 0;
4817 OleVariant(activeBrower.Document as IHTMLDocument2).body.scrollTop := top;
4823 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
4825 if TObject(Node.Data) is TBBS then begin
4826 TBBS(Node.Data).NodeExpand := False;
4827 end else if TObject(Node.Data) is TCategory then begin
4828 TCategory(Node.Data).NodeExpand := False;
4829 end else if TObject(Node.Data) is TBoard then begin
4830 TBoard(Node.Data).NodeExpand := False;
4834 procedure TGikoForm.MessageListViewResize(Sender: TObject);
4836 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
4839 procedure TGikoForm.SelectListItem(List: TList);
4841 TmpListItem: TListItem;
4845 TmpListItem := ListView.Selected;
4846 while TmpListItem <> nil do begin
4847 List.Add(TmpListItem.Data);
4848 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
4853 procedure TGikoForm.ExitActionExecute(Sender: TObject);
4858 procedure TGikoForm.AllSelectActionExecute(Sender: TObject);
4863 procedure TGikoForm.StdToolBarVisibleActionExecute(Sender: TObject);
4865 CoolBand: TCoolBand;
4867 CoolBand := GetCoolBand(MainCoolBar, StdToolBar);
4868 if CoolBand = nil then
4870 GikoSys.Setting.StdToolBarVisible := StdToolBarVisibleAction.Checked;
4871 CoolBand.Visible := GikoSys.Setting.StdToolBarVisible;
4872 StdToolBarVisiblePMenu.Checked := GikoSys.Setting.StdToolBarVisible;
4875 procedure TGikoForm.AddressBarVisibleActionExecute(Sender: TObject);
4877 CoolBand: TCoolBand;
4879 CoolBand := GetCoolBand(MainCoolBar, AddressToolBar);
4880 if CoolBand = nil then
4882 GikoSys.Setting.AddressBarVisible := AddressBarVisibleAction.Checked;
4883 CoolBand.Visible := GikoSys.Setting.AddressBarVisible;
4884 AddressToolBarVisiblePMenu.Checked := GikoSys.Setting.AddressBarVisible;
4887 procedure TGikoForm.LinkBarVisibleActionExecute(Sender: TObject);
4889 CoolBand: TCoolBand;
4891 CoolBand := GetCoolBand(MainCoolBar, LinkToolBar);
4892 if CoolBand = nil then
4894 GikoSys.Setting.LinkBarVisible := LinkBarVisibleAction.Checked;
4895 CoolBand.Visible := GikoSys.Setting.LinkBarVisible;
4896 LinkToolBarVisiblePMenu.Checked := GikoSys.Setting.LinkBarVisible;
4899 procedure TGikoForm.ListToolBarVisibleActionExecute(Sender: TObject);
4901 CoolBand: TCoolBand;
4903 CoolBand := GetCoolBand(ListCoolBar, ListToolBar);
4904 if CoolBand = nil then
4906 CoolBand.Visible := ListToolBarVisibleAction.Checked;
4907 GikoSys.Setting.ListToolBarVisible := ListToolBarVisibleAction.Checked;
4911 procedure TGikoForm.ListNameBarVisibleActionExecute(Sender: TObject);
4913 CoolBand: TCoolBand;
4915 CoolBand := GetCoolBand(ListCoolBar, ListNameToolBar);
4916 if CoolBand = nil then
4918 CoolBand.Visible := ListNameBarVisibleAction.Checked;
4919 GikoSys.Setting.ListNameBarVisible := ListNameBarVisibleAction.Checked;
4922 procedure TGikoForm.BrowserToolBarVisibleActionExecute(Sender: TObject);
4924 CoolBand: TCoolBand;
4926 CoolBand := GetCoolBand(BrowserCoolBar, BrowserToolBar);
4927 if CoolBand = nil then
4929 CoolBand.Visible := BrowserToolBarVisibleAction.Checked;
4930 GikoSys.Setting.BrowserToolBarVisible := BrowserToolBarVisibleAction.Checked;
4933 procedure TGikoForm.BrowserNameBarVisibleActionExecute(Sender: TObject);
4935 CoolBand: TCoolBand;
4937 CoolBand := GetCoolBand(BrowserCoolBar, BrowserNameToolBar);
4938 if CoolBand = nil then
4940 CoolBand.Visible := BrowserNameBarVisibleAction.Checked;
4941 GikoSys.Setting.BrowserNameBarVisible := BrowserNameBarVisibleAction.Checked;
4944 procedure TGikoForm.MsgBarVisibleActionExecute(Sender: TObject);
4946 MessageSplitter.Visible := MsgBarVisibleAction.Checked;
4947 MessagePanel.Top := MessageSplitter.Top + MessageSplitter.Height;
4948 MessageSplitter.Top := MessagePanel.Top + 1;
4949 MessagePanel.Visible := MsgBarVisibleAction.Checked;
4950 GikoSys.Setting.MessageBarVisible := MsgBarVisibleAction.Checked;
4953 procedure TGikoForm.StatusBarVisibleActionExecute(Sender: TObject);
4955 StatusBar.Visible := StatusBarVisibleAction.Checked;
4956 GikoSys.Setting.StatusBarVisible := StatusBarVisibleAction.Checked;
4959 procedure TGikoForm.IconStyleExecute(Sender: TObject);
4961 case ListView.ViewStyle of
4962 vsIcon: SmallIconAction.Execute;
4963 vsSmallIcon: ListIconAction.Execute;
4964 vsList: DetailIconAction.Execute;
4965 vsReport: LargeIconAction.Execute;
4969 procedure TGikoForm.LargeIconActionExecute(Sender: TObject);
4971 ListView.ViewStyle := vsIcon;
4972 LargeIconAction.Checked := True;
4975 procedure TGikoForm.SmallIconActionExecute(Sender: TObject);
4977 ListView.ViewStyle := vsSmallIcon;
4978 SmallIconAction.Checked := True;
4981 procedure TGikoForm.ListIconActionExecute(Sender: TObject);
4983 ListView.ViewStyle := vsList;
4984 ListIconAction.Checked := True;
4987 procedure TGikoForm.DetailIconActionExecute(Sender: TObject);
4989 ListView.ViewStyle := vsReport;
4990 DetailIconAction.Checked := True;
4993 procedure TGikoForm.SearchActionExecute(Sender: TObject);
4998 if FSearchDialog = nil then begin
4999 if (GikoForm.GetActiveList is TCategory) or (GikoForm.GetActiveList is TBoard) then
5000 chk := GikoForm.GetActiveList
5004 FSearchDialog := TSearchDialog.Create(Self, chk);
5005 FSearchDialog.SearchComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
5015 procedure TGikoForm.OptionActionExecute(Sender: TObject);
5019 Dlg := TOptionDialog.Create(Self);
5027 procedure TGikoForm.GikoNaviWebPageActionExecute(Sender: TObject);
5029 URL_GIKONAVI: string = 'http://gikonavi.sourceforge.jp/';
5031 GikoSys.OpenBrowser(URL_GIKONAVI, gbtAuto);
5034 procedure TGikoForm.MonazillaWebPageActionExecute(Sender: TObject);
5036 URL_MONAZILLA: string = 'http://www.monazilla.org/';
5038 GikoSys.OpenBrowser(URL_MONAZILLA, gbtAuto);
5041 procedure TGikoForm.BBS2chWebPageActionExecute(Sender: TObject);
5043 URL_2ch: string = 'http://www.2ch.net/';
5045 GikoSys.OpenBrowser(URL_2ch, gbtAuto);
5048 procedure TGikoForm.GikoFolderOpenActionExecute(Sender: TObject);
5050 // GikoSys.OpenBrowser(GikoSys.GetAppDir, gbtIE);
5051 GikoSys.CreateProcess('explorer.exe', '/e,"' + GikoSys.GetAppDir + '"');
5054 procedure TGikoForm.AboutActionExecute(Sender: TObject);
5058 Dlg := TAboutDialog.Create(Self);
5066 procedure TGikoForm.CabinetHistoryActionExecute(Sender: TObject);
5071 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
5073 TreeSplitter.Visible := isVisible;
5074 CabinetPanel.Visible := isVisible;
5075 CabinetVisibleAction.Checked := isVisible;
5078 procedure TGikoForm.CabinetVisibleActionExecute(Sender: TObject);
5081 gttHistory: CabinetHistoryAction.Execute;
5082 gttFavorite: CabinetFavoriteAction.Execute;
5084 CabinetBBSAction.Execute;
5088 procedure TGikoForm.AllItemActionExecute(Sender: TObject);
5091 if ViewType <> gvtAll then
5092 SetListViewType(gvtAll);
5093 GikoSys.Setting.ThreadRange := gtrAll;
5094 AllItemAction.Checked := True;
5095 // SelectComboBox
\82Ì
\97\9a\97ð
\82ð
\8dX
\90V
\82µ
\82Ä
\82¨
\82
5097 // SelectComboBox
\82Ì
\92l
\82ð
\83N
\83\8a\83A
5098 if SelectComboBoxPanel.Visible then begin
5099 SelectComboBox.Text := SELECTCOMBOBOX_NAME;
5100 SelectComboBox.Color := SELECTCOMBOBOX_COLOR;
5107 procedure TGikoForm.LogItemActionExecute(Sender: TObject);
5110 if ViewType <> gvtLog then
5111 SetListViewType(gvtLog);
5112 GikoSys.Setting.ThreadRange := gtrLog;
5113 LogItemAction.Checked := True;
5114 // SelectComboBox
\82Ì
\97\9a\97ð
\82ð
\8dX
\90V
\82µ
\82Ä
\82¨
\82
5116 // SelectComboBox
\82Ì
\92l
\82ð
\83N
\83\8a\83A
5117 if SelectComboBoxPanel.Visible then begin
5118 SelectComboBox.Text := SELECTCOMBOBOX_NAME;
5119 SelectComboBox.Color := SELECTCOMBOBOX_COLOR;
5126 procedure TGikoForm.NewItemActionExecute(Sender: TObject);
5130 if ViewType <> gvtNew then
5131 SetListViewType(gvtNew);
5132 GikoSys.Setting.ThreadRange := gtrNew;
5133 NewItemAction.Checked := True;
5134 // SelectComboBox
\82Ì
\97\9a\97ð
\82ð
\8dX
\90V
\82µ
\82Ä
\82¨
\82
5136 // SelectComboBox
\82Ì
\92l
\82ð
\83N
\83\8a\83A
5137 if SelectComboBoxPanel.Visible then begin
5138 SelectComboBox.Text := SELECTCOMBOBOX_NAME;
5139 SelectComboBox.Color := SELECTCOMBOBOX_COLOR;
5146 procedure TGikoForm.SelectItemActionExecute(Sender: TObject);
5149 Dlg: TListSelectDialog;
5152 if SelectComboBoxPanel.Visible then begin
5153 if SelectComboBoxPanel.Left + SelectComboBoxPanel.Width < ListToolBar.Width then begin
5154 // SelectComboBox
\82ª
\82 \82é
\8fê
\8d\87\82Í
\83t
\83H
\81[
\83J
\83X
\82ð
\88Ú
\82·
5155 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
5156 if GikoSys.Setting.ListWidthState = glsMax then
5157 BrowserMinAction.Execute;
5159 if GikoSys.Setting.ListHeightState = glsMax then
5160 BrowserMinAction.Execute;
5162 SelectComboBox.SetFocus;
5169 if SelectComboBox.Text = SELECTCOMBOBOX_NAME then begin
5170 SelectComboBox.Text := '';
5171 SelectComboBox.Color := clWindow;
5174 AllItemAction.Checked := False;
5175 LogItemAction.Checked := False;
5176 NewItemAction.Checked := False;
5177 //SelectItemAction.Checked := True;
5179 Dlg := TListSelectDialog.Create(Self);
5181 Dlg.SelectComboBox.Items.Assign(GikoSys.Setting.SelectTextList);
5182 Dlg.SelectComboBox.Text := SelectComboBox.Text;
5184 if Dlg.ModalResult = mrCancel then begin
5185 if Length( SelectComboBox.Text ) = 0 then begin
5186 AllItemAction.Checked := True;
5187 SelectComboBox.Text := SELECTCOMBOBOX_NAME;
5188 SelectComboBox.Color := SELECTCOMBOBOX_COLOR;
5191 if GetActiveList is TBoard then
5192 SetListViewType(gvtUser, TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText , Dlg.KubetsuCheckBox.Checked);
5194 idx := GikoSys.Setting.SelectTextList.IndexOf(Dlg.SelectComboBox.Text);
5196 GikoSys.Setting.SelectTextList.Delete(idx);
5197 GikoSys.Setting.SelectTextList.Insert(0, Dlg.SelectComboBox.Text);
5198 while Dlg.SelectComboBox.Items.Count > 100 do begin
5199 Dlg.SelectComboBox.Items.Delete(Dlg.SelectComboBox.Items.Count - 1);
5202 if Length( Dlg.SelectComboBox.Text ) = 0 then begin
5203 SelectComboBox.Text := SELECTCOMBOBOX_NAME;
5204 SelectComboBox.Color := SELECTCOMBOBOX_COLOR;
5206 SelectComboBox.Text := Dlg.SelectComboBox.Text;
5207 SelectComboBox.Color := clWindow;
5209 SetListViewType(gvtUser, Dlg.SelectComboBox.Text, Dlg.KubetsuCheckBox.Checked);
5216 procedure TGikoForm.ListNumberVisibleActionExecute(Sender: TObject);
5218 GikoSys.Setting.ListViewNo := ListNumberVisibleAction.Checked;
5222 procedure TGikoForm.UpFolderActionExecute(Sender: TObject);
5224 if GetActiveList is TBoard then begin
5225 if TBoard(GetActiveList).ParentCategory <> nil then
5226 SelectTreeNode(TBoard(GetActiveList).ParentCategory, True);
5227 end else if GetActiveList is TCategory then begin
5228 SelectTreeNode(TCategory(GetActiveList).ParenTBBS, True);
5232 procedure TGikoForm.RoundActionExecute(Sender: TObject);
5236 Dlg := TRoundDialog.Create(Self);
5244 procedure TGikoForm.StopActionExecute(Sender: TObject);
5246 FControlThread.DownloadAbort;
5247 if FWorkCount <> 0 then FWorkCount := 0;
5249 Animate.Active := False;
5252 Screen.Cursor := crDefault;
5255 procedure TGikoForm.MsgBarCloseActionExecute(Sender: TObject);
5257 // MessagePanel.Visible := False;
5258 // MessageSplitter.Visible := False;
5259 // MsgBarVisibleAction.Checked := False;
5260 MsgBarVisibleAction.Execute;
5263 procedure TGikoForm.BrowserMaxActionExecute(Sender: TObject);
5265 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
5266 case GikoSys.Setting.ListWidthState of
5268 //
\92Ê
\8fí
\95\
\8e¦
\82É
\82·
\82é
5269 if FActiveContent <> nil then
5270 SendMessage(FActiveContent.FBrowser.Handle, WM_SETREDRAW, 0, 0); //
\95`
\89æ
\92â
\8e~
5271 ViewPanel.Width := FBrowserSizeWidth;
5272 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
5273 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
5274 GikoSys.Setting.ListWidthState := glsNormal;
5275 if FActiveContent <> nil then
5276 SendMessage(FActiveContent.FBrowser.Handle, WM_SETREDRAW, 1, 0); //
\95`
\89æ
5278 glsMin, glsNormal: begin
5279 //
\8dÅ
\91å
\95\
\8e¦
\82É
\82·
\82é
5280 if FActiveContent <> nil then
5281 SendMessage(FActiveContent.FBrowser.Handle, WM_SETREDRAW, 0, 0); //
\95`
\89æ
\92â
\8e~
5282 if GikoSys.Setting.ListWidthState = glsNormal then
5283 FBrowserSizeWidth := ViewPanel.Width;
5284 if FActiveContent <> nil then
5285 SendMessage(FActiveContent.FBrowser.Handle, WM_SETREDRAW, 1, 0); //
\95`
\89æ
5286 ViewPanel.Width := 1;
5287 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
5288 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
5289 GikoSys.Setting.ListWidthState := glsMax;
5293 case GikoSys.Setting.ListHeightState of
5295 //
\92Ê
\8fí
\95\
\8e¦
\82É
\82·
\82é
5296 if FActiveContent <> nil then
5297 SendMessage(FActiveContent.FBrowser.Handle, WM_SETREDRAW, 0, 0); //
\95`
\89æ
\92â
\8e~
5298 ViewPanel.Height := FBrowserSizeHeight;
5299 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
5300 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
5301 GikoSys.Setting.ListHeightState := glsNormal;
5302 if FActiveContent <> nil then
5303 SendMessage(FActiveContent.FBrowser.Handle, WM_SETREDRAW, 1, 0); //
\95`
\89æ
5305 glsMin, glsNormal: begin
5306 //
\8dÅ
\91å
\95\
\8e¦
\82É
\82·
\82é
5307 if FActiveContent <> nil then
5308 SendMessage(FActiveContent.FBrowser.Handle, WM_SETREDRAW, 0, 0); //
\95`
\89æ
\92â
\8e~
5309 if GikoSys.Setting.ListHeightState = glsNormal then
5310 FBrowserSizeHeight := ViewPanel.Height;
5311 if FActiveContent <> nil then
5312 SendMessage(FActiveContent.FBrowser.Handle, WM_SETREDRAW, 1, 0); //
\95`
\89æ
5313 ViewPanel.Height := 1;
5314 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_NORMAL;
5315 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
5316 GikoSys.Setting.ListHeightState := glsMax;
5320 // Mouse.CursorPos := BrowserSizeButton.ClientToScreen(Point(
5321 // System.Round(BrowserToolBar.ButtonWidth div 2),
5322 // System.Round(BrowserToolBar.ButtonHeight div 2)));
5323 //BrowserTab.OnChange(nil);
5326 procedure TGikoForm.BrowserMinActionExecute(Sender: TObject);
5329 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
5330 case GikoSys.Setting.ListWidthState of
5331 glsMax, glsNormal: begin
5332 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
5333 if FActiveContent <> nil then
5334 SendMessage(FActiveContent.FBrowser.Handle, WM_SETREDRAW, 0, 0); //
\95`
\89æ
\92â
\8e~
5335 if GikoSys.Setting.ListWidthState = glsNormal then
5336 FBrowserSizeWidth := ViewPanel.Width;
5337 if FActiveContent <> nil then
5338 SendMessage(FActiveContent.FBrowser.Handle, WM_SETREDRAW, 1, 0); //
\95`
\89æ
5339 ViewPanel.Width := ThreadMainPanel.Width - 80;
5340 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
5341 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
5342 GikoSys.Setting.ListWidthState := glsMin;
5345 //
\92Ê
\8fí
\95\
\8e¦
\82É
\82·
\82é
5346 if FActiveContent <> nil then
5347 SendMessage(FActiveContent.FBrowser.Handle, WM_SETREDRAW, 0, 0); //
\95`
\89æ
\92â
\8e~
5348 ViewPanel.Width := FBrowserSizeWidth;
5349 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
5350 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
5351 GikoSys.Setting.ListWidthState := glsNormal;
5352 if FActiveContent <> nil then
5353 SendMessage(FActiveContent.FBrowser.Handle, WM_SETREDRAW, 1, 0); //
\95`
\89æ
5357 case GikoSys.Setting.ListHeightState of
5358 glsMax, glsNormal: begin
5359 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
5360 if FActiveContent <> nil then
5361 SendMessage(FActiveContent.FBrowser.Handle, WM_SETREDRAW, 0, 0); //
\95`
\89æ
\92â
\8e~
5362 if GikoSys.Setting.ListHeightState = glsNormal then
5363 FBrowserSizeHeight := ViewPanel.Height;
5364 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
5365 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
5366 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_NORMAL;
5367 GikoSys.Setting.ListHeightState := glsMin;
5368 if FActiveContent <> nil then
5369 SendMessage(FActiveContent.FBrowser.Handle, WM_SETREDRAW, 1, 0); //
\95`
\89æ
5372 //
\92Ê
\8fí
\95\
\8e¦
\82É
\82·
\82é
5373 if FActiveContent <> nil then
5374 SendMessage(FActiveContent.FBrowser.Handle, WM_SETREDRAW, 0, 0); //
\95`
\89æ
\92â
\8e~
5375 ViewPanel.Height := FBrowserSizeHeight;
5376 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
5377 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
5378 GikoSys.Setting.ListHeightState := glsNormal;
5379 if FActiveContent <> nil then
5380 SendMessage(FActiveContent.FBrowser.Handle, WM_SETREDRAW, 1, 0); //
\95`
\89æ
5386 procedure TGikoForm.ScrollTopActionExecute(Sender: TObject);
5388 BrowserMovement('top');
5391 procedure TGikoForm.ScrollLastActionExecute(Sender: TObject);
5393 BrowserMovement('bottom');
5396 procedure TGikoForm.ScrollNewActionExecute(Sender: TObject);
5398 BrowserMovement('new');
5401 procedure TGikoForm.ScrollKokoActionExecute(Sender: TObject);
5403 BrowserMovement('koko');
5406 procedure TGikoForm.EditorActionExecute(Sender: TObject);
5408 Editor: TEditorForm;
5411 Item := GetActiveContent;
5412 if Item = nil then Exit;
5413 Editor := TEditorForm.Create(Application.MainForm);
5414 Editor.SetThreadItem(Item);
5415 GikoSys.LoadEditorKeySetting(Editor.ActionList);
5417 Editor.BodyEdit.SetFocus;
5420 procedure TGikoForm.IEActionExecute(Sender: TObject);
5422 ShowThreadAction.Execute;
5425 procedure TGikoForm.ShowThreadActionExecute(Sender: TObject);
5427 ThreadItem: TThreadItem;
5429 ThreadItem := GetActiveContent;
5430 if ThreadItem = nil then Exit;
5431 GikoSys.OpenBrowser(ThreadItem.URL, gbtAuto);
5434 procedure TGikoForm.ShowBoardActionExecute(Sender: TObject);
5436 ThreadItem: TThreadItem;
5438 ThreadItem := GetActiveContent;
5439 if ThreadItem = nil then Exit;
5440 GikoSys.OpenBrowser(ThreadItem.ParentBoard.URL, gbtAuto);
5443 //(Thread)URL
\82ð
\83R
\83s
\81[
5444 procedure TGikoForm.URLCopyActionExecute(Sender: TObject);
5449 if TObject(GetActiveContent) is TBoard then
5450 s := s + TBoard(GetActiveContent).URL + #13#10
5451 else if TObject(GetActiveContent) is TThreadItem then
5452 s := s + TThreadItem(GetActiveContent).URL + #13#10;
5454 Clipboard.AsText := s;
5457 //(Thread)
\83X
\83\8c\83b
\83h
\96¼
\82ð
\83R
\83s
\81[
5458 procedure TGikoForm.NameCopyActionExecute(Sender: TObject);
5463 if TObject(GetActiveContent) is TBoard then
5464 s := s + TBoard(GetActiveContent).Title + #13#10
5465 else if TObject(GetActiveContent) is TThreadItem then
5466 s := s + TThreadItem(GetActiveContent).Title + #13#10;
5468 Clipboard.AsText := s;
5471 //(Thread)
\83X
\83\8c\83b
\83h
\96¼
\82ÆURL
\82ð
\83R
\83s
\81[
5472 procedure TGikoForm.NameURLCopyActionExecute(Sender: TObject);
5477 if TObject(GetActiveContent) is TBoard then
5478 s := s + TBoard(GetActiveContent).Title + #13#10 + TBoard(GetActiveContent).URL + #13#10
5479 else if TObject(GetActiveContent) is TThreadItem then
5480 s := s + TThreadItem(GetActiveContent).Title + #13#10 + TThreadItem(GetActiveContent).URL + #13#10;
5482 Clipboard.AsText := s;
5485 procedure TGikoForm.ItemReloadActionExecute(Sender: TObject);
5487 ThreadItem: TThreadItem;
5490 ThreadItem := GetActiveContent;
5491 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
5492 if ThreadItem <> nil then
5493 DownloadContent(ThreadItem, shiftDown);
5496 procedure TGikoForm.SelectListReloadActionExecute(Sender: TObject);
5503 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
5504 if GetActiveList is TCategory then begin
5505 List := TList.Create;
5507 SelectListItem(List);
5508 if List.Count > 5 then begin
5509 msg := '5
\8cÂ
\88È
\8fã
\82Í
\8ew
\92è
\82Å
\82«
\82Ü
\82¹
\82ñ' + #13#10
5510 + '
\82Q
\82¿
\82á
\82ñ
\82Ë
\82é
\95\89\89×
\8cy
\8c¸
\82É
\82²
\8b¦
\97Í
\82
\82¾
\82³
\82¢';
5511 MsgBox(Handle, msg, '
\8cx
\8d\90', MB_ICONEXCLAMATION);
5514 for i := 0 to List.Count - 1 do begin
5515 if TObject(List[i]) is TBoard then
5516 DownloadList(TBoard(List[i]), shiftDown);
5521 end else if GetActiveList is TBoard then begin
5522 DownloadList(TBoard(GetActiveList), shiftDown);
5526 procedure TGikoForm.SelectThreadReloadActionExecute(Sender: TObject);
5533 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
5534 List := TList.Create;
5536 SelectListItem(List);
5537 if List.Count > 10 then begin
5538 msg := '10
\8cÂ
\88È
\8fã
\82Í
\8ew
\92è
\82Å
\82«
\82Ü
\82¹
\82ñ' + #13#10
5539 + '
\82Q
\82¿
\82á
\82ñ
\82Ë
\82é
\95\89\89×
\8cy
\8c¸
\82É
\82²
\8b¦
\97Í
\82
\82¾
\82³
\82¢';
5540 MsgBox(Handle, msg, '
\8cx
\8d\90', MB_ICONEXCLAMATION);
5543 for i := 0 to List.Count - 1 do begin
5544 if TObject(List[i]) is TThreadItem then
5545 DownloadContent(TThreadItem(List[i]), shiftDown);
5551 //ActiveList
\82ªTCategoy
\82Å
\83X
\83\8c\88ê
\97\97\82Å
\82P
\82Â
\88È
\8fã
\91I
\91ð
\82©ActiveList
\82ªTBoard
\82Å
\97L
\8cø
\82È
5552 //Action
\82Å
\8b¤
\92Ê
5553 procedure TGikoForm.SelectListReloadActionUpdate(Sender: TObject);
5556 //
\96³
\82
\82Ä
\82à
\82¢
\82¢IF
\95¶
\81@
\83R
\81[
\83h
\82©
\82ç
\96³
\97\9d\82â
\82è
\8cÄ
\82Î
\82È
\82¢
\82È
\82ç
\83`
\83F
\83b
\83N
\82µ
\82È
\82
\82Ä
\82à
\81c
5557 if (Sender <> nil) and (Sender is TAction) then begin
5559 if (GetActiveList is TCategory) and (ListView.SelCount > 0) then
5560 TAction(Sender).Enabled := True
5561 else if GetActiveList is TBoard then
5562 TAction(Sender).Enabled := True
5564 TAction(Sender).Enabled := False;
5569 //ActiveList
\82ªTBoard
\82Å
\83X
\83\8c\88ê
\97\97\82Å
\82P
\82Â
\88È
\8fã
\91I
\91ð
\82µ
\82Ä
\82¢
\82é
\82Æ
\97L
\8cø
\82É
\82È
\82éAction
\82Å
\8b¤
\92Ê
5570 procedure TGikoForm.SelectThreadReloadActionUpdate(Sender: TObject);
5573 //
\96³
\82
\82Ä
\82à
\82¢
\82¢IF
\95¶
\81@
\83R
\81[
\83h
\82©
\82ç
\96³
\97\9d\82â
\82è
\8cÄ
\82Î
\82È
\82¢
\82È
\82ç
\83`
\83F
\83b
\83N
\82µ
\82È
\82
\82Ä
\82à
\81c
5574 if (Sender <> nil) and (Sender is TAction) then begin
5576 TAction(Sender).Enabled := (GetActiveList is TBoard) and (ListView.SelCount > 0);
5582 procedure TGikoForm.UpFolderActionUpdate(Sender: TObject);
5584 UpFolderAction.Enabled := not (GetActiveList is TBBS);
5587 procedure TGikoForm.FormResize(Sender: TObject);
5590 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
5591 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
5593 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
5594 if GikoSys.Setting.ListWidthState = glsMin then begin
5595 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
5596 ViewPanel.Width := ThreadMainPanel.Width - 80;
5599 if GikoSys.Setting.ListHeightState = glsMin then begin
5600 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
5601 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
5605 FIsIgnoreResize := rtResizing;
5606 PostMessage( Handle, USER_RESIZED, 0, 0 );
5611 procedure TGikoForm.ScrollKokoActionUpdate(Sender: TObject);
5613 ScrollKokoAction.Enabled := (GetActiveContent <> nil)
5614 and (GetActiveContent.IsLogFile)
5615 and (GetActiveContent.Kokomade <> -1);
5619 //
\83u
\83\89\83E
\83U
\83^
\83u
\82ª
\82P
\82Â
\88È
\8fã
\82Å
\97L
\8cø
\82É
\82È
\82éAction
\82Å
\8b¤
\92Ê
\89»
5620 procedure TGikoForm.AllTabCloseActionUpdate(Sender: TObject);
5623 //
\96³
\82
\82Ä
\82à
\82¢
\82¢IF
\95¶
\81@
\83R
\81[
\83h
\82©
\82ç
\96³
\97\9d\82â
\82è
\8cÄ
\82Î
\82È
\82¢
\82È
\82ç
\83`
\83F
\83b
\83N
\82µ
\82È
\82
\82Ä
\82à
\81c
5624 if (Sender <> nil) and (Sender is TAction) then begin
5626 TAction(Sender).Enabled := (BrowserTab.Tabs.Count > 0);
5632 procedure TGikoForm.LogDeleteActionExecute(Sender: TObject);
5634 DEL_MSG = '
\81g^0
\81h
\82Ì
\83\8d\83O
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
5635 DEL_SAME_MSG = '
\82±
\82ê
\82ç ^0
\8cÂ
\82Ì
\83X
\83\8c\83b
\83h
\82Ì
\83\8d\83O
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
5636 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
5638 ThreadItem: TThreadItem;
5639 TmpListItem: TListItem;
5643 List := TList.Create;
5645 TmpListItem := ListView.Selected;
5646 while TmpListItem <> nil do begin
5647 if TObject(TmpListItem.Data) is TThreadItem then begin
5648 ThreadItem := TThreadItem(TmpListItem.Data);
5649 if ThreadItem.IsLogFile then
5650 List.Add(ThreadItem);
5652 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
5655 if GikoSys.Setting.DeleteMsg and (List.Count > 0) then begin
5656 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then begin
5657 if List.Count = 1 then begin
5658 if MsgBox(Handle, StringReplace( DEL_MSG, '^0', TThreadItem( List[ 0 ] ).Title, [rfReplaceAll] ) , DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
5661 if MsgBox(Handle, StringReplace( DEL_SAME_MSG, '^0', IntToStr( List.Count ), [rfReplaceAll] ), DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> IDYES then
5667 for i := 0 to List.Count - 1 do begin
5668 ThreadItem := TThreadItem(List[i]);
5669 DeleteHistory(ThreadItem);
5670 DeleteTab(ThreadItem);
5671 ThreadItem.DeleteLogFile;
5673 TreeView.Refresh; // UnRead
\82Ì
\95\
\8e¦
\82ð
\8dX
\90V
5680 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
5685 idx := BrowserTab.TabIndex;
5686 FTabHintIndex := -1;
5687 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
5688 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
5689 BrowserTab.Tabs.BeginUpdate;
5691 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
5692 doc := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser.Document;
5693 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ScrollTop := doc.Body.ScrollTop;
5696 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ScrollTop := 0;
5698 if( FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[i]) ) then
5699 FActiveContent := nil;
5700 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
5701 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser);
5703 FBrowsers.Move(j, BROWSER_COUNT - 1);
5705 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
5706 BrowserTab.Tabs.Delete(i);
5707 if idx > i then begin
5708 BrowserTab.TabIndex := idx - 1;
5710 if BrowserTab.Tabs.Count -1 >= idx then
5711 BrowserTab.TabIndex := idx
5713 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
5715 if BrowserTab.Tabs.Count = 0 then begin
5716 BrowserNullTab.Thread := nil;
5718 if(BrowserTab.TabIndex <> -1) and
5719 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
5720 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
5721 if(TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser
5722 = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) )then
5724 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
5728 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
5729 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
5730 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
5731 FBrowsers.Move(BROWSER_COUNT - 1, 0);
5733 BrowserTab.Tabs.EndUpdate;
5734 if( FActiveContent = nil) then
5735 BrowserTab.OnChange(nil);
5740 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
5745 idx := BrowserTab.TabIndex;
5746 FTabHintIndex := -1;
5747 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
5748 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
5749 BrowserTab.Tabs.BeginUpdate;
5751 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
5752 doc := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser.Document;
5753 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ScrollTop := doc.Body.ScrollTop;
5757 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ScrollTop := 0;
5759 if(FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[i])) then
5760 FActiveContent := nil;
5761 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
5762 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser);
5764 FBrowsers.Move(j, BROWSER_COUNT - 1);
5766 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
5767 BrowserTab.Tabs.Delete(i);
5768 if idx > i then begin
5769 BrowserTab.TabIndex := idx - 1;
5771 if BrowserTab.Tabs.Count -1 >= idx then
5772 BrowserTab.TabIndex := idx
5774 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
5776 if(BrowserTab.TabIndex <> -1) and
5777 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
5778 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
5779 if(TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser
5780 = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) )then
5782 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
5786 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
5787 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
5788 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
5789 FBrowsers.Move(BROWSER_COUNT - 1, 0);
5792 BrowserTab.Tabs.EndUpdate;
5793 if( FActiveContent = nil) then
5794 BrowserTab.OnChange(nil);
5799 procedure TGikoForm.KokomadeActionExecute(Sender: TObject);
5802 ThreadItem: TThreadItem;
5804 No := KokoPopupMenu.Tag;
5805 if No = 0 then Exit;
5806 ThreadItem := GetActiveContent;
5807 if ThreadItem = nil then Exit;
5808 ThreadItem.Kokomade := No;
5809 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
5810 FActiveContent.FRepaint := true;
5811 InsertBrowserTab(FActiveContent.Thread, true);
5812 Application.ProcessMessages;
5815 procedure TGikoForm.ZenbuActionExecute(Sender: TObject);
5817 ThreadItem: TThreadItem;
5819 ThreadItem := GetActiveContent;
5820 if ThreadItem = nil then Exit;
5821 ThreadItem.Kokomade := -1;
5822 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
5823 FActiveContent.FRepaint := true;
5824 InsertBrowserTab(FActiveContent.Thread, true);
5825 Application.ProcessMessages;
5828 function TGikoForm.Hook(var Message: TMessage): Boolean;
5830 //
\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Ì
5831 //
\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ð
5835 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
5837 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
5841 procedure TGikoForm.KokoResActionExecute(Sender: TObject);
5843 Editor: TEditorForm;
5847 Number := KokoPopupMenu.Tag;
5848 if Number = 0 then Exit;
5849 Item := GetActiveContent;
5850 if Item = nil then Exit;
5852 Editor := TEditorForm.Create(Self);
5853 Editor.SetThreadItem(Item);
5854 GikoSys.LoadEditorKeySetting(Editor.ActionList);
5855 Editor.BodyEdit.Text := '>>' + IntToStr(Number) + #13#10;
5857 Editor.BodyEdit.SetFocus;
5860 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
5862 ItemRoundPMenu.Visible := (GetActiveList is TBoard);
5863 ItemReservPMenu.Visible := (GetActiveList is TBoard);
5864 LPMSep01.Visible := (GetActiveList is TBoard);
5865 ListRoundPMenu.Visible := (GetActiveList is TCategory);// or (GetActiveList is TBoard);
5866 ListReservPMenu.Visible := (GetActiveList is TCategory);// or (GetActiveList is TBoard);
5867 LPMSep02.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
5868 KidokuPMenu.Visible := (GetActiveList is TBoard);
5869 MidokuPMenu.Visible := (GetActiveList is TBoard);
5870 UrlCopyPMenu.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
5871 NameUrlCopyPMenu.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
5872 AllSelectPMenu.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
5873 LPMSep05.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
5874 DeletePMenu.Visible := (GetActiveList is TBoard);
5875 LPMSep06.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
5876 BoardFavoriteAddMenu.Visible := (GetActiveList is TCategory);
5877 ThreadFavoriteAddMenu.Visible := (GetActiveList is TBoard);
5879 AddRoundNameMenu(ItemReservPMenu);
5880 AddRoundNameMenu(ListReservPMenu);
5883 procedure TGikoForm.BoardIEActionExecute(Sender: TObject);
5887 if GetActiveList is TBoard then begin
5888 URL := TBoard(GetActiveList).URL;
5889 GikoSys.OpenBrowser(URL, gbtAuto);
5893 procedure TGikoForm.SelectItemURLCopyActionExecute(Sender: TObject);
5900 List := TList.Create;
5902 SelectListItem(List);
5903 for i := 0 to List.Count - 1 do begin
5904 if TObject(List[i]) is TBoard then
5905 s := s + TBoard(List[i]).URL + #13#10
5906 else if TObject(List[i]) is TThreadItem then
5907 s := s + TThreadItem(List[i]).URL + #13#10;
5910 Clipboard.AsText := s;
5916 procedure TGikoForm.SelectItemNameCopyActionExecute(Sender: TObject);
5923 List := TList.Create;
5925 SelectListItem(List);
5926 for i := 0 to List.Count - 1 do begin
5927 if TObject(List[i]) is TBoard then
5928 s := s + TBoard(List[i]).Title + #13#10
5929 else if TObject(List[i]) is TThreadItem then
5930 s := s + TThreadItem(List[i]).Title + #13#10;
5933 Clipboard.AsText := s;
5939 procedure TGikoForm.SelectItemNameURLCopyActionExecute(Sender: TObject);
5946 List := TList.Create;
5948 SelectListItem(List);
5949 for i := 0 to List.Count - 1 do begin
5950 if TObject(List[i]) is TBoard then
5951 s := s + TBoard(List[i]).Title + #13#10 + TBoard(List[i]).URL + #13#10
5952 else if TObject(List[i]) is TThreadItem then
5953 s := s + TThreadItem(List[i]).Title + #13#10 + TThreadItem(List[i]).URL + #13#10;
5956 Clipboard.AsText := s;
5962 //ActiveList
\82ªTBoard
\82©TCategory
\82Å
\83X
\83\8c\88ê
\97\97\82Å
\82P
\82Â
\88È
\8fã
\91I
\91ð
\82µ
\82Ä
\82¢
\82é
\82Æ
\97L
\8cø
\82É
\82È
\82éActionde
\8b¤
\92Ê
5963 procedure TGikoForm.SelectItemNameCopyActionUpdate(Sender: TObject);
5966 //
\96³
\82
\82Ä
\82à
\82¢
\82¢IF
\95¶
\81@
\83R
\81[
\83h
\82©
\82ç
\96³
\97\9d\82â
\82è
\8cÄ
\82Î
\82È
\82¢
\82È
\82ç
\83`
\83F
\83b
\83N
\82µ
\82È
\82
\82Ä
\82à
\81c
5967 if (Sender <> nil) and (Sender is TAction) then begin
5969 if ((GetActiveList is TBoard) or (GetActiveList is TCategory))and (ListView.SelCount > 0) then
5970 TAction(Sender).Enabled := True
5972 TAction(Sender).Enabled := False;
5979 procedure TGikoForm.AllSelectActionUpdate(Sender: TObject);
5981 AllSelectAction.Enabled := ListView.SelCount > 0;
5984 procedure TGikoForm.BrowserTabCloseActionExecute(Sender: TObject);
5987 // ThreadItem: TThreadItem;
5989 idx := BrowserTab.TabIndex;
5990 if idx <> -1 then begin
5991 if BrowserTab.Tabs.Objects[idx] <> nil then begin
5992 //ThreadItem := TThreadItem(BrowserTab.Tabs.Objects[idx]);
5993 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
5998 procedure TGikoForm.NotSelectTabCloseActionExecute(Sender: TObject);
6003 idx := BrowserTab.TabIndex;
6004 if idx = -1 then Exit;
6005 BrowserTab.Tabs.BeginUpdate;
6006 for i := BrowserTab.Tabs.Count - 1 downto BrowserTab.TabIndex + 1 do begin
6007 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
6008 BrowserTab.Tabs.Delete(i);
6010 if idx > 0 then begin
6011 for i := BrowserTab.TabIndex - 1 downto 0 do begin
6012 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
6013 BrowserTab.Tabs.Delete(i);
6016 BrowserTab.Tabs.EndUpdate;
6019 procedure TGikoForm.AllTabCloseActionExecute(Sender: TObject);
6023 if GikoSys.Setting.ShowDialogForAllTabClose then
6024 if(MessageDlg('
\91S
\82Ä
\82Ì
\83^
\83u
\82ð
\95Â
\82¶
\82Ä
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H', mtConfirmation,[mbOk, mbCancel], 0) = mrCancel ) then
6027 FActiveContent := nil;
6028 BrowserNullTab.Thread := nil;
6029 BrowserTab.OnChange := nil;
6030 BrowserTab.Tabs.BeginUpdate;
6031 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
6032 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
6034 BrowserTab.Tabs.Clear;
6035 BrowserTab.Tabs.EndUpdate;
6036 BrowserTab.OnChange := BrowserTabChange;
6037 SetContent(BrowserNullTab);
6038 Self.Caption := CAPTION_NAME ;
6041 procedure TGikoForm.TreeSelectBoradReloadExecute(Sender: TObject);
6044 TmpTreeNode: TTreeNode;
6046 TmpTreeNode := FClickNode;
6047 TreeView.Selected := FClickNode;
6050 if TObject(TmpTreeNode.Data) is TBoard then
6051 Board := TBoard(TmpTreeNode.Data)
6052 else if TObject(TmpTreeNode.Data) is TFavoriteBoardItem then
6053 Board := TFavoriteBoardItem(TmpTreeNode.Data).Item;
6055 if Board <> nil then
6056 DownloadList(Board);
6059 procedure TGikoForm.TreeSelectThreadReloadExecute(Sender: TObject);
6061 ThreadItem: TThreadItem;
6062 TmpTreeNode: TTreeNode;
6064 TmpTreeNode := FClickNode;
6065 TreeView.Selected := FClickNode;
6068 if TObject(TmpTreeNode.Data) is TThreadItem then
6069 ThreadItem := TThreadItem(TmpTreeNode.Data)
6070 else if TObject(TmpTreeNode.Data) is TFavoriteThreadItem then
6071 ThreadItem := TFavoriteThreadItem(TmpTreeNode.Data).Item;
6073 if ThreadItem <> nil then
6074 DownloadContent(ThreadItem);
6077 procedure TGikoForm.TreeSelectURLCopyExecute(Sender: TObject);
6079 TmpTreeNode: TTreeNode;
6082 TmpTreeNode := FClickNode;
6083 TreeView.Selected := FClickNode;
6084 if TObject(TmpTreeNode.Data) is TBoard then begin
6085 s := TBoard(TmpTreeNode.Data).URL + #13#10;
6086 end else if TObject(TmpTreeNode.Data) is TFavoriteBoardItem then begin
6087 s := TFavoriteBoardItem(TmpTreeNode.Data).URL + #13#10;
6088 end else if (TObject(TmpTreeNode.Data) is TThreadItem) then begin
6089 s := TThreadItem(TmpTreeNode.Data).URL + #13#10;
6090 end else if TObject(TmpTreeNode.Data) is TFavoriteThreadItem then begin
6091 s := TFavoriteThreadItem(TmpTreeNode.Data).URL + #13#10;
6093 Clipboard.AsText := s;
6096 procedure TGikoForm.TreeSelectNameURLCopyExecute(Sender: TObject);
6098 TmpTreeNode: TTreeNode;
6101 TmpTreeNode := FClickNode;
6102 TreeView.Selected := FClickNode;
6103 if TObject(TmpTreeNode.Data) is TBoard then begin
6104 s := TBoard(TmpTreeNode.Data).Title + #13#10 + TBoard(TmpTreeNode.Data).URL + #13#10;
6105 end else if TObject(TmpTreeNode.Data) is TFavoriteBoardItem then begin
6106 s := TFavoriteBoardItem(TmpTreeNode.Data).Item.Title + #13#10 + TFavoriteBoardItem(TmpTreeNode.Data).URL + #13#10;
6107 end else if (TObject(TmpTreeNode.Data) is TThreadItem) then begin
6108 s := TThreadItem(TmpTreeNode.Data).Title + #13#10 + TThreadItem(TmpTreeNode.Data).URL + #13#10;
6109 end else if TObject(TmpTreeNode.Data) is TFavoriteThreadItem then begin
6110 s := TFavoriteThreadItem(TmpTreeNode.Data).Item.Title + #13#10 + TFavoriteThreadItem(TmpTreeNode.Data).URL + #13#10;
6112 Clipboard.AsText := s;
6115 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
6117 FClickNode := TreeView.Selected;
6118 if FClickNode = nil then begin
6119 TreeSelectThreadPupupMenu.Visible := False;
6120 TreeSelectBoardPupupMenu.Visible := False;
6121 TPMSep01.Visible := False;
6122 TreeSelectURLPupupMenu.Visible := False;
6123 TreeSelectNamePupupMenu.Visible := False;
6124 TreeSelectNameURLPupupMenu.Visible := False;
6125 TreeSelectFavoriteAddPupupMenu.Visible := False;
6126 TreeSelectLogDeleteSeparator.Visible := False;
6127 TreeSelectLogDeletePopupMenu.Visible := False;
6128 end else if TObject(FClickNode.Data) is TBoard then begin
6129 TreeSelectThreadPupupMenu.Visible := False;
6130 TreeSelectBoardPupupMenu.Visible := True;
6131 TPMSep01.Visible := True;
6132 TreeSelectURLPupupMenu.Visible := True;
6133 TreeSelectNamePupupMenu.Visible := True;
6134 TreeSelectNameURLPupupMenu.Visible := True;
6135 TreeSelectFavoriteAddPupupMenu.Visible := True;
6136 TreeSelectLogDeleteSeparator.Visible := False;
6137 TreeSelectLogDeletePopupMenu.Visible := False;
6138 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
6139 TreeSelectThreadPupupMenu.Visible := False;
6140 TreeSelectBoardPupupMenu.Visible := True;
6141 TPMSep01.Visible := True;
6142 TreeSelectURLPupupMenu.Visible := True;
6143 TreeSelectNamePupupMenu.Visible := True;
6144 TreeSelectNameURLPupupMenu.Visible := True;
6145 TreeSelectFavoriteAddPupupMenu.Visible := True;
6146 TreeSelectLogDeleteSeparator.Visible := False;
6147 TreeSelectLogDeletePopupMenu.Visible := False;
6148 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
6149 TreeSelectThreadPupupMenu.Visible := True;
6150 TreeSelectBoardPupupMenu.Visible := False;
6151 TPMSep01.Visible := True;
6152 TreeSelectURLPupupMenu.Visible := True;
6153 TreeSelectNamePupupMenu.Visible := True;
6154 TreeSelectNameURLPupupMenu.Visible := True;
6155 TreeSelectFavoriteAddPupupMenu.Visible := True;
6156 TreeSelectLogDeleteSeparator.Visible := True;
6157 TreeSelectLogDeletePopupMenu.Visible := True;
6158 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6159 TreeSelectThreadPupupMenu.Visible := True;
6160 TreeSelectBoardPupupMenu.Visible := False;
6161 TPMSep01.Visible := True;
6162 TreeSelectURLPupupMenu.Visible := True;
6163 TreeSelectNamePupupMenu.Visible := True;
6164 TreeSelectNameURLPupupMenu.Visible := True;
6165 TreeSelectFavoriteAddPupupMenu.Visible := True;
6166 TreeSelectLogDeleteSeparator.Visible := True;
6167 TreeSelectLogDeletePopupMenu.Visible := True;
6168 end else if (TObject(FClickNode.Data) is TCategory) then begin
6169 TreeSelectThreadPupupMenu.Visible := False;
6170 TreeSelectBoardPupupMenu.Visible := False;
6171 TPMSep01.Visible := False;
6172 TreeSelectURLPupupMenu.Visible := False;
6173 TreeSelectNamePupupMenu.Visible := True;
6174 TreeSelectNameURLPupupMenu.Visible := False;
6175 TreeSelectFavoriteAddPupupMenu.Visible := False;
6176 TreeSelectLogDeleteSeparator.Visible := False;
6177 TreeSelectLogDeletePopupMenu.Visible := False;
6178 end else if FClickNode.IsFirstNode then begin
6179 TreeSelectThreadPupupMenu.Visible := False;
6180 TreeSelectBoardPupupMenu.Visible := False;
6181 TPMSep01.Visible := False;
6182 TreeSelectURLPupupMenu.Visible := False;
6183 TreeSelectNamePupupMenu.Visible := True;
6184 TreeSelectNameURLPupupMenu.Visible := False;
6185 TreeSelectFavoriteAddPupupMenu.Visible := False;
6186 TreeSelectLogDeleteSeparator.Visible := False;
6187 TreeSelectLogDeletePopupMenu.Visible := False;
6189 TreeSelectThreadPupupMenu.Visible := False;
6190 TreeSelectBoardPupupMenu.Visible := False;
6191 TPMSep01.Visible := False;
6192 TreeSelectURLPupupMenu.Visible := False;
6193 TreeSelectNamePupupMenu.Visible := False;
6194 TreeSelectNameURLPupupMenu.Visible := False;
6195 TreeSelectFavoriteAddPupupMenu.Visible := False;
6196 TreeSelectLogDeleteSeparator.Visible := False;
6197 TreeSelectLogDeletePopupMenu.Visible := False;
6201 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
6202 var ppDisp: IDispatch; var Cancel: WordBool);
6210 document: IHTMLDocument2;
6212 threadItem: TThreadItem;
6216 if (IHTMLDocument2(TWebBrowser(Sender).Document).activeElement <> nil) then begin
6217 Text := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.Get_outerText;
6218 Html := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.Get_outerHTML;
6219 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
6220 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
6221 if GikoSys.Setting.ResAnchorJamp then begin
6222 Text := ZenToHan(Text);
6224 if(AnsiPos('>>', Text) = 1) then begin
6225 //Text := Copy(Text, 3, Length(Text) - 2);
6228 //Text := Copy(Text, 2, Length(Text) - 1);
6231 if AnsiPos('-', Text) <> 0 then begin
6232 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
6233 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
6234 wkIntTo := StrToIntDef(Text, 0);
6235 if wkIntTo < wkIntSt then
6238 wkIntSt := StrToIntDef(Text, 0);
6240 if wkIntSt <> 0 then begin
6241 document := FActiveContent.Browser.Document as IHTMLDocument2;
6243 BrowserMovement(IntToStr(wkIntSt));
6249 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
6251 URL := GikoSys.GetHRefText(Html);
6252 URL := GikoSys.HTMLDecode(URL);
6253 if AnsiPos('BE:', URL) = 1 then begin
6254 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
6255 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
6256 threadItem := FActiveContent.Thread;
6257 if threadItem = nil then Exit;
6258 URL := BE_PHP_URL + BNum + '&u=d'
6259 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
6262 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
6263 ( AnsiPos('ftp://', URL) = 1) then begin
6264 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
6265 if GikoSys.Setting.LinkAddAddressBar then begin
6266 idx := AddressComboBox.Items.IndexOf(URL);
6267 if idx = -1 then begin
6268 AddressComboBox.Items.Insert(0, URL);
6269 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
6270 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
6272 AddressComboBox.Items.Delete(idx);
6273 AddressComboBox.Items.Insert(0, URL);
6283 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
6285 if Mouse.Capture <> 0 then
6287 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6288 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
6289 FBrowserSizeWidth := ViewPanel.Width;
6291 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
6292 FBrowserSizeHeight := ViewPanel.Height;
6294 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6295 if ViewPanel.Width < 2 then begin
6296 ViewPanel.Width := 1;
6297 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
6298 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
6299 GikoSys.Setting.ListWidthState := glsMax;
6300 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
6301 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
6302 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
6303 GikoSys.Setting.ListWidthState := glsMin;
6305 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
6306 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
6307 GikoSys.Setting.ListWidthState := glsNormal;
6310 if ViewPanel.Height < 2 then begin
6311 ViewPanel.Height := 1;
6312 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_NORMAL;
6313 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
6314 GikoSys.Setting.ListHeightState := glsMax;
6315 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
6316 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
6317 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_NORMAL;
6318 GikoSys.Setting.ListHeightState := glsMin;
6320 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
6321 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
6322 GikoSys.Setting.ListHeightState := glsNormal;
6325 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
6326 FBrowserSizeHeight := ViewPanel.Height
6327 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
6328 FBrowserSizeWidth := ViewPanel.Width;}
6331 procedure TGikoForm.BrowserTabChange(Sender: TObject);
6337 // if NewTab = -1 then
6338 // ThreadItem := nil;
6339 if not BrowserTab.Dragging then begin
6340 FTabHintIndex := -1;
6341 BrowserTab.Hint := '';
6342 idx := BrowserTab.TabIndex;
6343 if idx = -1 then begin
6344 BrowserNullTab.Thread := nil;
6345 SetContent(BrowserNullTab);
6347 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
6348 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
6349 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
6351 FBrowsers.Move(j ,0);
6353 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
6354 (FActiveContent.Browser <> BrowserNullTab.Browser) and
6355 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
6356 FBrowsers.Move(BROWSER_COUNT - 1, 0);
6358 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6359 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
6360 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
6364 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
6365 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
6366 FBrowsers.Move(BROWSER_COUNT - 1, 0);
6368 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
6369 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
6370 // GikoSys.OnlyAHundredRes := TBrowserRecord(BrowserTab.Tabs.Objects[idx]).OnlyHundred;
6371 // OnlyAHundredRes.Checked := TBrowserRecord(BrowserTab.Tabs.Objects[idx]).OnlyHundred;
6372 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
6374 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
6375 AddressComboBox.Text := GetActiveContent.URL;
6377 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
6378 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
6381 SetFocusForBrowserAction.Execute;
6390 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
6391 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6397 if Button = mbMiddle then begin
6398 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
6401 p := BrowserTab.ScreenToClient(p);
6402 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
6404 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
6405 end else if Button = mbLeft then begin
6406 FDragWFirst := true;
6407 FMouseDownPos.X := X;
6408 FMouseDownPos.Y := Y;
6413 procedure TGikoForm.SetBrowserTabState;
6416 CoolBand: TCoolBand;
6418 BrowserBottomPanel.AutoSize := False;
6419 if GikoSys.Setting.BrowserTabVisible then begin
6420 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
6421 BrowserTab.Style := tsTabs;
6422 if GikoSys.Setting.BrowserTabPosition = gtpTop then
6423 BrowserTab.TabPosition := tpTop
6425 BrowserTab.TabPosition := tpBottom;
6426 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
6427 BrowserTab.TabPosition := tpTop;
6428 BrowserTab.Style := tsButtons;
6430 BrowserTab.TabPosition := tpTop;
6431 BrowserTab.Style := tsFlatButtons
6434 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
6435 BrowserTab.Parent := BrowserTabToolBar;
6436 BrowserBottomPanel.Hide;
6437 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
6438 if CoolBand <> nil then
6439 CoolBand.Visible := True;
6440 // BrowserTab.Parent := BrowserTopPanel;
6441 // BrowserTab.Parent := BrowserCoolBar;
6442 // BrowserTab.Top := 26;
6443 // BrowserTopPanel.Height := 44;
6446 BrowserTab.Parent := BrowserBottomPanel;
6447 BrowserTab.Top := 0;
6448 BrowserTab.Left := 0;
6449 BrowserBottomPanel.Show;
6450 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
6451 if CoolBand <> nil then
6452 CoolBand.Visible := False;
6453 // BrowserTopPanel.Height := 26;
6457 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
6458 if CoolBand <> nil then
6459 CoolBand.Visible := False;
6460 BrowserBottomPanel.Visible := False;
6461 // BrowserTab.Visible := False;
6462 // BrowserTopPanel.Height := 26;
6463 AllTabCloseAction.Execute;
6467 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
6468 Y: Integer; State: TDragState; var Accept: Boolean);
6472 idx := BrowserTab.IndexOfTabAt(X, Y);
6473 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
6476 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
6481 idx := BrowserTab.IndexOfTabAt(X, Y);
6483 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
6486 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
6487 Shift: TShiftState; X, Y: Integer);
6490 ThreadItem: TThreadItem;
6493 TabIdx := BrowserTab.IndexOfTabAt(x, y);
6495 if ( ssLeft in Shift ) and ( BrowserTab.Style = tsTabs ) then begin
6496 if FDragWFirst = false then begin
6497 FDragWFirst := true;
6499 BrowserTab.EndDrag(false);
6500 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
6501 FDragWFirst := false;
6504 BrowserTab.EndDrag(false);
6505 FDragWFirst := false;
6508 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
6509 Application.CancelHint;
6510 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
6511 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
6512 BrowserTab.Hint := ThreadItem.Title;
6513 Application.ShowHint := True;
6515 BrowserTab.Hint := '';
6516 Application.ShowHint := True;
6518 FTabHintIndex := TabIdx;
6523 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
6524 const pDisp: IDispatch; var URL: OleVariant);
6526 FDispHtmlDocument: DispHTMLDocument;
6527 BrowserRecord :TBrowserRecord;
6530 threadItem : TThreadItem;
6532 // AddMessageList('DocumentComplete', nil, gmiWhat);
6533 if TObject(Sender) is TWebBrowser then begin
6534 BrowserRecord := nil;
6535 if TWebBrowser(Sender) <> Browser then begin
6536 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
6537 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
6538 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
6542 if BrowserRecord <> nil then begin
6543 if BrowserRecord.FEvent <> nil then
6544 BrowserRecord.FEvent.Free;
6545 FDispHtmlDocument := Idispatch(OleVariant(BrowserRecord.Browser.ControlInterface).Document) as DispHTMLDocument;
6546 BrowserRecord.FEvent := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
6547 BrowserRecord.FEvent.OnContextMenu := OnDocumentContextMenu;
6548 BrowserRecord.FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
6551 if GetActiveContent <> nil then begin
6552 FDispHtmlDocument := Idispatch(OleVariant(Browser.ControlInterface).Document) as DispHTMLDocument;
6553 if FEvent <> nil then
6555 FEvent := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
6556 FEvent.OnContextMenu := OnDocumentContextMenu;
6557 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
6562 if (BrowserRecord <> nil) and
6563 Assigned( BrowserRecord.Thread ) then begin
6564 threadItem := BrowserRecord.Thread;
6566 if (BrowserRecord <> nil) and (Length( BrowserRecord.Movement ) > 0) then begin
6567 if threadItem.UnRead then begin
6568 threadItem.UnRead := False;
6569 threadItem.ParentBoard.UnRead := ThreadItem.ParentBoard.UnRead - 1;
6570 if threadItem.ParentBoard.UnRead < 0 then threadItem.ParentBoard.UnRead := 0;
6574 BrowserMovement( BrowserRecord.Movement, BrowserRecord );
6575 BrowserRecord.Movement := '';
6576 end else if threadItem.UnRead then begin
6577 threadItem.UnRead := False;
6578 threadItem.ParentBoard.UnRead := ThreadItem.ParentBoard.UnRead - 1;
6579 if threadItem.ParentBoard.UnRead < 0 then threadItem.ParentBoard.UnRead := 0;
6581 BrowserMovement( 'new', BrowserRecord );
6583 end else if threadItem.ScrollTop <> 0 then begin
6585 doc := Idispatch( OleVariant( BrowserRecord.Browser.ControlInterface ).Document ) as IHTMLDocument2;
6586 doc.Body.ScrollTop := threadItem.ScrollTop;
6589 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
6596 procedure TGikoForm.SelectReservActionUpdate(Sender: TObject);
6601 if (GetActiveList is TBoard) and (ListView.SelCount > 0) then begin
6602 List := TList.Create;
6604 SelectListItem(List);
6605 for i := 0 to List.Count - 1 do begin
6606 if TObject(List[i]) is TThreadItem then begin
6607 if TThreadItem(List[i]).IsLogFile then begin
6608 SelectReservAction.Enabled := True;
6613 SelectReservAction.Enabled := False;
6617 end else if (GetActiveList is TCategory) and (ListView.SelCount > 0) then
6618 SelectReservAction.Enabled := True
6620 SelectReservAction.Enabled := False;
6623 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
6625 AddRoundNameMenu(RoundNamePopupMenu.Items);
6628 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
6634 Item := TMenuItem.Create(Self);
6635 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
6636 Item.OnClick := SelectNewRoundNameExecute;
6638 Item := TMenuItem.Create(Self);
6639 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
6640 Item.OnClick := SelectDeleteRoundExecute;
6642 Item := TMenuItem.Create(Self);
6643 Item.Caption := '-';
6645 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
6646 Item := TMenuItem.Create(Self);
6647 Item.Caption := RoundList.RoundNameList[i];
6648 Item.OnClick := SetSelectRoundName;
6653 procedure TGikoForm.SelectNewRoundNameExecute(Sender: TObject);
6656 Dlg: TRoundNameDialog;
6660 //
\8cÄ
\82Ñ
\8fo
\82µ
\8c³
\82ª
\81ATAction
\82ÅListView
\82É
\91I
\91ð
\82ª
\82¢
\82È
\82¯
\82ê
\82Î
\81AEXIT
\82·
\82é
6661 if (Sender is TAction) and (ListView.Selected = nil) then
6664 //
\93o
\98^
\8fã
\8cÀ
\83`
\83F
\83b
\83N
6665 cnt := RoundList.Count[grtBoard];
6666 cnt := cnt + RoundList.Count[grtItem];
6667 if cnt > 500 then begin
6668 MsgBox(Handle, '
\8f\84\89ñ
\82Í500
\88È
\8fã
\93o
\98^
\82Å
\82«
\82Ü
\82¹
\82ñ', '
\83G
\83\89\81[', MB_OK or MB_ICONSTOP);
6672 Dlg := TRoundNameDialog.Create(Self);
6675 if Dlg.ModalResult <> mrCancel then begin
6676 s := Trim(Dlg.RoundNameEdit.Text);
6677 if (Sender is TMenuItem) then begin
6678 SetSelectItemRound(True, s, TMenuItem(Sender).Parent.Name);
6679 end else if (Sender is TAction) then begin
6680 if (ListView.Selected <> nil) then begin
6681 if (TObject(ListView.Selected.Data) is TThreadItem) then begin
6682 SetSelectItemRound(True, s,
6683 TThreadItem(ListView.Selected.Data).Title);
6684 end else if (TObject(ListView.Selected.Data) is TBoard) then begin
6685 SetSelectItemRound(True, s,
6686 TBoard(ListView.Selected.Data).Title);
6696 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
6698 threadItem : TThreadItem;
6701 if ParentName <> 'dummy1' then begin
6702 SetSelectItemRound(RoundFlag, RoundName);
6704 threadItem := GetActiveContent;
6705 if threadItem <> nil then begin
6706 threadItem.RoundName := RoundName;
6708 RoundList.RoundNameList.Add(RoundName);
6709 threadItem.Round := RoundFlag;
6714 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
6719 List := TList.Create;
6721 SelectListItem(List);
6722 for i := 0 to List.Count - 1 do begin
6723 if TObject(List[i]) is TBoard then begin
6724 TBoard(List[i]).RoundName := RoundName;
6726 RoundList.RoundNameList.Add(RoundName);
6727 TBoard(List[i]).Round := RoundFlag;
6728 end else if TObject(List[i]) is TThreadItem then begin
6729 if TThreadItem(List[i]).IsLogFile then begin
6730 TThreadItem(List[i]).RoundName := RoundName;
6732 RoundList.RoundNameList.Add(RoundName);
6733 TThreadItem(List[i]).Round := RoundFlag;
6742 procedure TGikoForm.SelectDeleteRoundExecute(Sender: TObject);
6746 if (Sender is TMenuItem) then begin
6748 SetSelectItemRound(False, '', TMenuItem(Sender).Parent.Name);
6751 end else if (Sender is TAction) then begin
6753 if ListView.Selected <> nil then begin
6754 if (TObject(ListView.Selected.Data) is TThreadItem) then begin
6755 s := TThreadItem(ListView.Selected.Data).Title;
6756 end else if (TObject(ListView.Selected.Data) is TBoard) then begin
6757 s := TBoard(ListView.Selected.Data).Title;
6759 SetSelectItemRound(False, '', s);
6768 procedure TGikoForm.SelectReservActionExecute(Sender: TObject);
6770 //
\82±
\82Ì
\83R
\83\81\83\93\83g
\8dí
\8f\9c\82µ
\82Ä
\82Í
\91Ê
\96Ú
6773 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
6775 MenuItem: TMenuItem;
6777 if Sender is TMenuItem then begin
6778 MenuItem := TMenuItem(Sender);
6779 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
6784 procedure TGikoForm.NewBoardActionExecute(Sender: TObject);
6786 Dlg: TNewBoardDialog;
6790 for i := 0 to Screen.CustomFormCount - 1 do begin
6791 if TObject(Screen.CustomForms[i]) is TEditorForm then begin
6792 Msg := '
\83\8c\83X
\83G
\83f
\83B
\83^
\82ð
\91S
\82Ä
\95Â
\82¶
\82Ä
\82
\82¾
\82³
\82¢';
6793 MsgBox(Handle, Msg, '
\83G
\83\89\81[', MB_OK or MB_ICONSTOP);
6797 Dlg := TNewBoardDialog.Create(Self);
6805 procedure TGikoForm.LoginActionExecute(Sender: TObject);
6810 if GikoSys.Dolib.Connected then begin
6811 //
\83\8d\83O
\83A
\83E
\83g
6812 GikoSys.Dolib.Disconnect;
6813 LoginAction.Checked := False;
6814 AddMessageList(GikoSys.Setting.GetMessage(Ord(gmLogout)), nil, gmiOK);
6815 LoginAction.Caption := '
\83\8d\83O
\83C
\83\93(&L)';
6817 TmpCursor := Screen.Cursor;
6818 Screen.Cursor := crHourGlass;
6820 //
\92Ê
\8fí
\83\8d\83O
\83C
\83\93
6821 if not GikoSys.Setting.ForcedLogin then begin
6822 GikoSys.Dolib.ClientUA := 'gikoNavi/1.00';
6823 GikoSys.Dolib.UserName := GikoSys.Setting.UserID;
6824 GikoSys.Dolib.Password := GikoSys.Setting.Password;
6825 if GikoSys.Setting.ReadProxy then begin
6826 GikoSys.Dolib.ProxyAddress := GikoSys.Setting.ReadProxyAddress;
6827 GikoSys.Dolib.ProxyPort := GikoSys.Setting.ReadProxyPort;
6829 GikoSys.Dolib.ProxyAddress := '';
6830 GikoSys.Dolib.ProxyPort := 0;
6832 if GikoSys.Dolib.Connect then begin
6833 LoginAction.Checked := True;
6834 AddMessageList(GikoSys.Setting.GetMessage(Ord(gmLogin)) + GikoSys.Setting.UserID, nil, gmiOK);
6835 LoginAction.Caption := '
\83\8d\83O
\83A
\83E
\83g(&L)';
6836 //LoginToolButton.Style := tbsCheck;
6838 // MsgBox(Handle, '
\83\8d\83O
\83C
\83\93\8fo
\97\88\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½', '
\83G
\83\89\81[', MB_OK or MB_ICONSTOP);
6839 AddMessageList(GikoSys.Dolib.ErrorMsg, nil, gmiNG);
6841 LoginAction.Checked := False;
6842 //LoginToolButton.Down := False;
6843 ///LoginToolButton.Style := tbsButton;
6846 msg := '
\8b
\90§
\83\8d\83O
\83C
\83\93\83\82\81[
\83h
\82Å
\82Í
\81C
\83T
\81[
\83o
\82Ì
\8fØ
\96¾
\8f\91\82Ì
\97L
\8cø
\90«
\82ð
\83`
\83F
\83b
\83N
\82µ
\82Ü
\82¹
\82ñ
\81B' + #13#10
6847 + '
\8bU
\91\95\83T
\81[
\83o
\82Ì
\8fê
\8d\87\81A
\82 \82È
\82½
\82Ì
\83p
\83X
\83\8f\81[
\83h
\93\90\82Ü
\82ê
\82é
\89Â
\94\
\90«
\82ª
\82 \82è
\82Ü
\82·
\81B' + #13#10
6848 + '
\82±
\82Ì
\83\82\81[
\83h
\82Å
\83\8d\83O
\83C
\83\93\82ð
\8e\8e\82Ý
\82Ü
\82·
\82©
\81H' + #13#10;
6849 if MsgBox(Handle, msg, '
\8cx
\8d\90', MB_YESNO or MB_ICONEXCLAMATION) = IDYES then begin
6850 GikoSys.Dolib.ClientUA := 'gikoNavi/1.00';
6851 GikoSys.Dolib.UserName := GikoSys.Setting.UserID;
6852 GikoSys.Dolib.Password := GikoSys.Setting.Password;
6853 if GikoSys.Setting.ReadProxy then begin
6854 GikoSys.Dolib.ProxyAddress := GikoSys.Setting.ReadProxyAddress;
6855 GikoSys.Dolib.ProxyPort := GikoSys.Setting.ReadProxyPort;
6857 GikoSys.Dolib.ProxyAddress := '';
6858 GikoSys.Dolib.ProxyPort := 0;
6860 //SSL
\8fá
\8aQ
\97p
\8b
\90§
\83\8d\83O
\83C
\83\93
6861 GikoSys.Dolib.ForcedConnect;
6862 if GikoSys.Dolib.Connect then begin
6863 LoginAction.Checked := True;
6864 AddMessageList(GikoSys.Setting.GetMessage(Ord(gmForceLogin)) + GikoSys.Setting.UserID, nil, gmiOK);
6865 LoginAction.Caption := '
\83\8d\83O
\83A
\83E
\83g(&L)';
6866 //LoginToolButton.Style := tbsCheck;
6868 // MsgBox(Handle, '
\83\8d\83O
\83C
\83\93\8fo
\97\88\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½', '
\83G
\83\89\81[', MB_OK or MB_ICONSTOP);
6869 AddMessageList(GikoSys.Dolib.ErrorMsg, nil, gmiNG);
6871 LoginAction.Checked := False;
6872 //LoginToolButton.Down := False;
6873 //LoginToolButton.Style := tbsButton;
6876 LoginAction.Checked := False;
6877 //LoginToolButton.Down := False;
6878 //LoginToolButton.Style := tbsButton;
6882 Screen.Cursor := TmpCursor;
6887 procedure TGikoForm.KeySettingActionExecute(Sender: TObject);
6889 Dlg: TKeySettingForm;
6891 Dlg := TKeySettingForm.Create(Self);
6893 if Dlg.ShowModal = mrOk then begin
6894 GikoSys.SaveKeySetting(ActionList);
6895 GikoSys.SaveEditorKeySetting(Dlg.EditorForm.ActionList);
6896 GikoSys.Setting.Gestures.SaveGesture( GikoSys.Setting.GetGestureFileName );
6901 MouseGesture.UnHook;
6902 MouseGesture.OnGestureStart := OnGestureStart;
6903 MouseGesture.OnGestureMove := OnGestureMove;
6904 MouseGesture.OnGestureEnd := OnGestureEnd;
6905 if GikoSys.Setting.GestureEnabled then begin
6906 GikoSys.Setting.Gestures.ClearGesture;
6907 GikoSys.Setting.Gestures.LoadGesture(
6908 GikoSys.Setting.GetGestureFileName, ActionList );
6909 MouseGesture.SetHook( Handle );
6914 procedure TGikoForm.ArrangeActionExecute(Sender: TObject);
6916 if ArrangeAction.Checked then begin
6918 ViewPanel.Align := alNone;
6919 ListSplitter.Align := alNone;
6920 ThreadPanel.Align := alNone;
6922 ViewPanel.Width := FBrowserSizeWidth;
6923 ViewPanel.Align := alLeft;
6925 ListSplitter.Width := 5;
6926 ListSplitter.Align := alLeft;
6928 ViewPanel.Left := -10;
6930 ThreadPanel.Align := alClient;
6932 GikoSys.Setting.ListOrientation := gloHorizontal;
6933 case GikoSys.Setting.ListWidthState of
6935 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
6936 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
6937 ViewPanel.Width := 1;
6940 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
6941 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
6944 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
6945 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
6946 ViewPanel.Width := ThreadMainPanel.Width - 80;
6951 ViewPanel.Align := alNone;
6952 ListSplitter.Align := alNone;
6953 ThreadPanel.Align := alNone;
6955 ViewPanel.Height := FBrowserSizeHeight;
6956 ViewPanel.Align := alTop;
6958 ListSplitter.Height := 5;
6959 ListSplitter.Align := alTop;
6961 ViewPanel.Top := -10;
6963 ThreadPanel.Align := alClient;
6964 GikoSys.Setting.ListOrientation := gloVertical;
6965 case GikoSys.Setting.ListHeightState of
6967 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_NORMAL;
6968 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
6969 ViewPanel.Height := 1;
6972 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
6973 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
6976 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
6977 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_NORMAL;
6978 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6985 procedure TGikoForm.PaneInitActionExecute(Sender: TObject);
6987 CabinetPanel.Width := 150;
6988 MessagePanel.Height := 40;
6990 FBrowserSizeWidth := 200;
6991 FBrowserSizeHeight := 200;
6992 if ArrangeAction.Checked then begin
6993 ViewPanel.Width := FBrowserSizeWidth;
6995 ViewPanel.Height := FBrowserSizeHeight;
6997 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6998 if GikoSys.Setting.ListHeightState = glsMax then begin
6999 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
7000 GikoSys.Setting.ListHeightState := glsNormal;
7003 if GikoSys.Setting.ListWidthState = glsMax then begin
7004 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
7005 GikoSys.Setting.ListWidthState := glsNormal;
7010 procedure TGikoForm.ActiveLogDeleteActionExecute(Sender: TObject);
7012 DEL_MSG = '
\81g^0
\81h
\82Ì
\83\8d\83O
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
7013 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
7016 ThreadItem: TThreadItem;
7018 idx := BrowserTab.TabIndex;
7019 if idx <> -1 then begin
7020 if BrowserTab.Tabs.Objects[idx] <> nil then begin
7021 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[idx]).FThread;
7022 if GikoSys.Setting.DeleteMsg then
7023 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
7024 if MsgBox(Handle, StringReplace( DEL_MSG, '^0', ThreadItem.Title, [rfReplaceAll] ) , DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
7026 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
7027 ThreadItem.DeleteLogFile;
7028 if ThreadItem.ParentBoard = FActiveList then
7034 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
7039 if CoolBar = nil then
7041 for i := 0 to CoolBar.Bands.Count - 1 do begin
7042 if CoolBar.Bands[i].Control = Control then begin
7043 Result := CoolBar.Bands[i];
7049 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
7051 if BrowserTab.Parent = BrowserTabToolBar then
7052 BrowserTab.Width := BrowserTabToolBar.Width;
7055 procedure TGikoForm.SelectTextClearActionExecute(Sender: TObject);
7057 DEL_MSG = '
\8di
\8d\9e\82Ý
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
7058 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
7060 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
7061 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
7063 GikoSys.Setting.SelectTextList.Clear;
7064 SelectComboBox.Items.Clear;
7065 SelectComboBox.Text := '';
7066 SetListViewType( gvtAll );
7069 procedure TGikoForm.NameTextClearActionExecute(Sender: TObject);
7073 DEL_MSG = '
\83\8c\83X
\83G
\83f
\83B
\83^
\96¼
\91O
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
7074 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
7076 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
7077 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
7079 GikoSys.Setting.NameList.Clear;
7080 for i := 0 to Screen.CustomFormCount - 1 do begin
7081 if TObject(Screen.CustomForms[i]) is TEditorForm then
7082 TEditorForm(Screen.CustomForms[i]).NameComboBox.Items.Clear;
7086 procedure TGikoForm.MailTextClearActionExecute(Sender: TObject);
7090 DEL_MSG = '
\83\8c\83X
\83G
\83f
\83B
\83^
\83\81\81[
\83\8b\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
7091 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
7093 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
7094 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
7096 GikoSys.Setting.MailList.Clear;
7097 for i := 0 to Screen.CustomFormCount - 1 do begin
7098 if TObject(Screen.CustomForms[i]) is TEditorForm then
7099 TEditorForm(Screen.CustomForms[i]).MailComboBox.Items.Clear;
7103 procedure TGikoForm.LeftmostTabSelectActionExecute(Sender: TObject);
7105 if BrowserTab.Tabs.Count > 0 then begin
7106 BrowserTab.TabIndex := 0;
7107 BrowserTab.OnChange(nil);
7111 procedure TGikoForm.LeftTabSelectActionExecute(Sender: TObject);
7113 if BrowserTab.Tabs.Count > 0 then begin
7114 if BrowserTab.TabIndex = -1 then begin
7115 BrowserTab.TabIndex := 0;
7116 BrowserTab.OnChange(nil);
7117 end else if BrowserTab.TabIndex > 0 then begin
7118 BrowserTab.TabIndex := BrowserTab.TabIndex - 1;
7119 BrowserTab.OnChange(nil);
7124 procedure TGikoForm.RightTabSelectActionExecute(Sender: TObject);
7126 if BrowserTab.Tabs.Count > 0 then begin
7127 if BrowserTab.TabIndex = -1 then begin
7128 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
7129 BrowserTab.OnChange(nil);
7130 end else if BrowserTab.TabIndex < (BrowserTab.Tabs.Count - 1) then begin
7131 BrowserTab.TabIndex := BrowserTab.TabIndex + 1;
7132 BrowserTab.OnChange(nil);
7137 procedure TGikoForm.RightmostTabSelectActionExecute(Sender: TObject);
7139 if BrowserTab.Tabs.Count > 0 then begin
7140 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
7141 BrowserTab.OnChange(nil);
7145 //
\83u
\83\89\83E
\83U
\83^
\83u
\82ª
\82P
\82Â
\88È
\8fã
\82Å
\8d¶
\92[
\82Å
\82È
\82¢Action
\82Å
\8b¤
\92Ê
7146 procedure TGikoForm.LeftTabSelectActionUpdate(Sender: TObject);
7149 //
\96³
\82
\82Ä
\82à
\82¢
\82¢IF
\95¶
\81@
\83R
\81[
\83h
\82©
\82ç
\96³
\97\9d\82â
\82è
\8cÄ
\82Î
\82È
\82¢
\82È
\82ç
\83`
\83F
\83b
\83N
\82µ
\82È
\82
\82Ä
\82à
\81c
7150 if (Sender <> nil) and (Sender is TAction) then begin
7152 TAction(Sender).Enabled := (BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex <> 0);
7157 //
\83u
\83\89\83E
\83U
\83^
\83u
\82ª
\82P
\82Â
\88È
\8fã
\82Å
\89E
\92[
\82Å
\82È
\82¢Action
\82Å
\8b¤
\92Ê
7158 procedure TGikoForm.RightTabSelectActionUpdate(Sender: TObject);
7161 //
\96³
\82
\82Ä
\82à
\82¢
\82¢IF
\95¶
\81@
\83R
\81[
\83h
\82©
\82ç
\96³
\97\9d\82â
\82è
\8cÄ
\82Î
\82È
\82¢
\82È
\82ç
\83`
\83F
\83b
\83N
\82µ
\82È
\82
\82Ä
\82à
\81c
7162 if (Sender <> nil) and (Sender is TAction) then begin
7164 TAction(Sender).Enabled := (BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex <> BrowserTab.Tabs.Count - 1);
7170 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
7175 procedure TGikoForm.SetMenuFont;
7177 // GikoSys.MenuFont(MenuToolBar.Font);
7178 // MenuToolBar.Buttons[0].AutoSize := False;
7179 // MenuToolBar.Buttons[0].AutoSize := True;
7180 // MenuToolBar.Font.Color := clMenuText;
7181 GikoSys.MenuFont(MainCoolBar.Font);
7182 MenuToolBar.Buttons[0].AutoSize := False;
7183 MenuToolBar.Buttons[0].AutoSize := True;
7184 MainCoolBar.AutoSize := False;
7185 MainCoolBar.AutoSize := True;
7187 GikoSys.MenuFont(ListCoolBar.Font);
7188 GikoSys.MenuFont(BrowserCoolBar.Font);
7189 // MenuToolBar.Font.Color := clMenuText;
7192 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
7198 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
7199 NewMenu := TMenuItem.Create(MainMenu);
7200 NewMenu.Action := FavoriteAddAction;
7201 FavoriteMenu.Add(NewMenu);
7202 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
7203 NewMenu := TMenuItem.Create(FavoriteMenu);
7204 NewMenu.Action := FavoriteArrangeAction;
7205 FavoriteMenu.Add(NewMenu);
7206 //
\83Z
\83p
\83\8c\81[
\83^
7207 NewMenu := TMenuItem.Create(FavoriteMenu);
7208 NewMenu.Caption := '-';
7209 FavoriteMenu.Add(NewMenu);
7211 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
7214 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
7219 for i := 0 to Node.Count - 1 do begin
7220 NewMenu := TFavoriteMenuItem.Create(Self);
7221 NewMenu.AutoHotkeys := maAutomatic;
7222 NewMenu.Caption := CustomStringReplace(Node.Item[i].Text, '&', '&&');
7223 TFavoriteMenuItem(NewMenu).Data := Node.Item[i].Data;
7224 MenuItem.Add(NewMenu);
7226 if TObject(Node.Item[i].Data) is TFavoriteFolder then begin
7227 NewMenu.ImageIndex := TOOL_ICON_FAV_FOLDER;
7228 CreateFavMenu(Node.Item[i], NewMenu);
7229 end else if TObject(Node.Item[i].Data) is TFavoriteBoardItem then begin
7230 NewMenu.ImageIndex := TOOL_ICON_FAV_BOARD;
7231 NewMenu.OnClick := FavoriteClick;
7232 end else if TObject(Node.Item[i].Data) is TFavoriteThreadItem then begin
7233 NewMenu.ImageIndex := TOOL_ICON_FAV_THREAD;
7234 NewMenu.OnClick := FavoriteClick;
7239 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
7241 Dlg : TFavoriteAddDialog;
7247 if Item is TFavoriteBoardItem then
7248 Item := TFavoriteBoardItem( Item ).Item
7249 else if Item is TFavoriteThreadItem then
7250 Item := TFavoriteThreadItem( Item ).Item;
7252 Node := FavoriteTreeView.Items.GetFirstNode;
7253 if Item is TBoard then begin
7254 ItemURL := TBoard( Item ).URL;
7255 while Node <> nil do begin
7257 if TObject( Data ) is TFavoriteBoardItem then begin
7258 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
7259 if Application.MessageBox( '
\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', '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á', MB_YESNO ) = IDNO then
7264 Node := Node.GetNext;
7266 Dlg := TFavoriteAddDialog.Create(Self);
7268 Dlg.SetBoard( TBoard( Item ) );
7273 end else if Item is TThreadItem then begin
7274 ItemURL := TThreadItem( Item ).URL;
7275 while Node <> nil do begin
7277 if TObject( Data ) is TFavoriteThreadItem then begin
7278 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
7279 if Application.MessageBox( '
\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', '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á', MB_YESNO ) = IDNO then
7284 Node := Node.GetNext;
7286 Dlg := TFavoriteAddDialog.Create(Self);
7288 Dlg.SetThreadItem( TThreadItem( Item ) );
7298 procedure TGikoForm.FavoriteAddActionExecute(Sender: TObject);
7300 ShowFavoriteAddDialog(GetActiveContent);
7303 procedure TGikoForm.FavoriteClick(Sender: TObject);
7306 FavoriteClick( Sender, True );
7310 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
7313 ThreadItem: TThreadItem;
7314 FavBoard: TFavoriteBoardItem;
7315 FavThread: TFavoriteThreadItem;
7319 if Sender is TFavoriteMenuItem then
7320 Item := TFavoriteMenuItem(Sender).Data
7321 else if Sender is TLinkToolButton then
7322 Item := TLinkToolButton(Sender).Data
7323 else if Sender is TTreeNode then
7324 Item := TTreeNode( Sender ).Data
7328 if TObject(Item) is TFavoriteBoardItem then begin
7329 FavBoard := TFavoriteBoardItem(Item);
7330 Board := FavBoard.Item;
7331 if Board <> nil then begin
7332 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
7333 ShowBBSTree( Board.ParentCategory.ParenTBBS );
7334 SelectTreeNode(Board, True);
7336 end else if TObject(Item) is TFavoriteThreadItem then begin
7337 FavThread := TFavoriteThreadItem(Item);
7338 ThreadItem := FavThread.Item;
7339 if ThreadItem = nil then
7342 InsertBrowserTab(ThreadItem, ActiveTab);
7344 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
7345 if GikoSys.Setting.ListWidthState = glsMin then begin
7346 BrowserMaxAndFocusAction.Execute;
7349 if GikoSys.Setting.ListHeightState = glsMin then begin
7350 BrowserMaxAndFocusAction.Execute;
7356 procedure TGikoForm.BoardFavoriteAddActionExecute(Sender: TObject);
7358 if TObject(ListView.Selected.Data) is TBoard then
7359 ShowFavoriteAddDialog(TObject(ListView.Selected.Data));
7362 procedure TGikoForm.BoardFavoriteAddActionUpdate(Sender: TObject);
7364 BoardFavoriteAddAction.Enabled := (GetActiveList is TCategory) and (ListView.SelCount > 0);
7367 procedure TGikoForm.ThreadFavoriteAddActionExecute(Sender: TObject);
7369 if TObject(ListView.Selected.Data) is TThreadItem then
7370 ShowFavoriteAddDialog(TObject(ListView.Selected.Data));
7373 procedure TGikoForm.TreeSelectFavoriteAddActionExecute(Sender: TObject);
7375 ShowFavoriteAddDialog(TObject(FClickNode.Data));
7378 procedure TGikoForm.FavoriteArrangeActionExecute(Sender: TObject);
7380 Dlg: TFavoriteArrangeDialog;
7382 Dlg := TFavoriteArrangeDialog.Create(Self);
7388 PostMessage( Handle, USER_SETLINKBAR, 0, 0 );
7391 procedure TGikoForm.BBSMenuItemOnClick(
7396 if Sender is TBBSMenuItem then
7397 ShowBBSTree( TBBSMenuItem( Sender ).Data );
7401 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
7403 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
7407 procedure TGikoForm.MoveToActionExecute(Sender: TObject);
7412 URL := Trim(AddressComboBox.Text);
7415 idx := AddressComboBox.Items.IndexOf(URL);
7416 if idx = -1 then begin
7417 AddressComboBox.Items.Insert(0, URL);
7418 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
7419 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
7421 AddressComboBox.Items.Delete(idx);
7422 AddressComboBox.Items.Insert(0, URL);
7426 procedure TGikoForm.MoveToURL(const inURL: string);
7428 protocol, host, path, document, port, bookmark : string;
7429 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
7431 BBSID, BBSKey: string;
7432 {tmpBoard,} Board: TBoard;
7433 ThreadItem: TThreadItem;
7436 tmpThread : TThreadItem;
7437 // category : TCategory;
7438 // categoryNode : TTreeNode;
7439 // boardNode : TTreeNode;
7440 shiftDown : Boolean;
7442 stRes, edRes : Int64;
7443 browserRec : TBrowserRecord;
7446 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
7447 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
7450 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
7451 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
7452 if shiftDown then begin
7453 GikoSys.OpenBrowser(inURL, gbtUserApp);
7455 end else if ctrlDown then begin
7456 GikoSys.OpenBrowser(inURL, gbtIE);
7460 //=====
\83v
\83\89\83O
\83C
\83\93
7463 //bi := High( BoardPlugIns );
7464 bi := Length(BoardGroups) - 1;
7465 //for i := Low( BoardPlugIns ) to bi do begin
7466 for i := 1 to bi do begin
7467 //if Assigned( Pointer( BoardPlugIns[ i ].Module ) ) then begin
7468 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
7469 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
7472 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
7473 Board := BBSsFindBoardFromURL( boardURL );
7476 if Board = nil then begin
7478 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
7479 //GikoSys.OpenBrowser(inURL, gbtUserApp);
7482 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
7483 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
7484 ShowBBSTree( BBSs[ 1 ] );
7487 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
7488 if not Board.IsThreadDatRead then begin
7489 GikoSys.ReadSubjectFile( Board );
7493 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
7494 if ThreadItem = nil then begin
7495 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
7496 ThreadItem := tmpThread;
7497 Board.Insert( 0, ThreadItem );
7498 if ActiveList is TBoard then begin
7499 if TBoard(ActiveList) = Board then
7500 ListView.Items.Count := ListView.Items.Count + 1;
7502 GikoSys.GetPopupResNumber( inURL, stRes, edRes );
7503 browserRec := InsertBrowserTab( ThreadItem );
7504 if (browserRec <> nil) and (stRes > 0) then
7505 browserRec.Movement := IntToStr( stRes );
7506 DownloadContent( ThreadItem );
7510 GikoSys.GetPopupResNumber( inURL, stRes, edRes );
7511 browserRec := InsertBrowserTab( ThreadItem );
7512 if ThreadItem.IsLogFile then begin
7513 if (browserRec <> nil) and (stRes > 0) then
7514 BrowserMovement( IntToStr( stRes ), browserRec );
7516 if (browserRec <> nil) and (stRes > 0) then
7517 browserRec.Movement := IntToStr( stRes );
7518 DownloadContent( ThreadItem );
7527 Board := BBSsFindBoardFromURL(
7528 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
7530 if Board <> nil then begin
7531 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
7532 ShowBBSTree( Board.ParentCategory.ParenTBBS );
7533 SelectTreeNode( Board, True );
7541 // 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¢
7545 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
7546 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
7547 Board := BBSsFindBoardFromURL( boardURL );
7548 //if Board = nil then
7549 // Board := BBSsFindBoardFromBBSID( BBSID );
7550 {
\82±
\82Ì
\95\94\95ª
\82àBBS
\82\93FindBoardFromURL
\82É
\8e\9d\82½
\82¹
\82½
\81@20050523
7551 if Board = nil then begin
7552 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
7553 //
\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)
7554 Board := BBSs[ 0 ].FindBBSID( BBSID );
7557 if Board = nil then begin
7558 //
\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
7559 GikoSys.OpenBrowser(inURL, gbtUserApp);
7562 //
\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é
7564 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
7565 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
7566 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
7567 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
7568 GikoSys.OpenBrowser(inURL, gbtUserApp);
7573 if not Board.IsThreadDatRead then
7574 GikoSys.ReadSubjectFile(Board);
7575 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
7576 ThreadItem := Board.FindThreadFromURL( URL );
7577 //
\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)
7578 if ThreadItem = nil then begin
7579 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
7581 if ThreadItem = nil then begin
7582 //shift ->
\90Ý
\92è
\83u
\83\89\83E
\83U
\81i
\96³
\82¯
\82ê
\82ÎIE
\81j
7584 {shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
7585 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
7587 GikoSys.OpenBrowser(URL1, gbtUserApp)
7588 else if ctrlDown then
7589 GikoSys.OpenBrowser(URL1, gbtIE)
7592 ThreadItem := TThreadItem.Create( nil, Board, URL );
7593 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
7594 if AnsiPos(Host, Board.URL) = 0 then
7595 ThreadItem.DownloadHost := Host
7597 ThreadItem.DownloadHost := '';
7598 Board.Insert(0, ThreadItem);
7599 if ActiveList is TBoard then begin
7600 if TBoard(ActiveList) = Board then
7601 ListView.Items.Count := ListView.Items.Count + 1;
7603 GikoSys.GetPopupResNumber( inURL, stRes, edRes );
7604 browserRec := InsertBrowserTab(ThreadItem);
7605 if (browserRec <> nil) and (stRes > 0) then
7606 browserRec.Movement := IntToStr( stRes );
7607 DownloadContent(ThreadItem);
7610 if ThreadItem.IsLogFile then begin
7611 GikoSys.GetPopupResNumber( inURL, stRes, edRes );
7612 browserRec := InsertBrowserTab(ThreadItem);
7613 if (browserRec <> nil) and (stRes > 0) then
7614 browserRec.Movement := IntToStr( stRes );
7616 if AnsiPos(Host, Board.URL) = 0 then
7617 ThreadItem.DownloadHost := Host
7619 ThreadItem.DownloadHost := '';
7620 GikoSys.GetPopupResNumber( inURL, stRes, edRes );
7621 browserRec := InsertBrowserTab(ThreadItem);
7622 if (browserRec <> nil) and (stRes > 0) then
7623 browserRec.Movement := IntToStr( stRes );
7624 DownloadContent(ThreadItem);
7628 Board := BBSsFindBoardFromURL( inURL );
7629 if Board = nil then begin
7630 GikoSys.OpenBrowser(inURL, gbtAuto);
7632 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
7633 ShowBBSTree( Board.ParentCategory.ParenTBBS );
7634 SelectTreeNode( Board, True );
7639 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
7641 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
7642 CoolBarResized( Sender, MainCoolBar );
7645 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
7646 Shift: TShiftState);
7648 if Key = VK_RETURN then
7649 MoveToAction.Execute;
7652 procedure TGikoForm.BrowserEnter(Sender: TObject);
7654 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
7657 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
7659 CDS:PCopyDataStruct;
7663 CDS := Message.CopyDataStruct;
7664 GetMem(PC, CDS^.cbData);
7666 lstrcpy(PC,CDS^.lpData);
7667 SetString(sURL, PC,lstrlen(PC));
7672 Message.Result := 1;
7675 procedure TGikoForm.WndProc(var Message: TMessage);
7677 senderBrowser : TWebBrowser;
7683 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
7686 if Message.WParam = SC_MINIMIZE then
7689 TreeClick( TreeView.Selected );
7696 USER_DOCUMENTCOMPLETE:
7697 if (Message.WParam <> 0) and
7698 (TObject(Message.WParam) is TWebBrowser) then begin
7699 senderBrowser := TWebBrowser( Message.WParam );
7700 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
7709 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
7711 hComboEdit: THandle;
7712 // KeyData: Integer;
7715 //
\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Í
7716 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
7717 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
7718 if Msg.CharCode in [VK_BACK] then begin
7719 hComboEdit := GetFocus;
7720 if hComboEdit <> 0 then
7721 SendMessage(hComboEdit, WM_CHAR, Msg.CharCode, Msg.KeyData);
7723 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
7724 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
7725 hComboEdit := GetFocus;
7726 if hComboEdit <> 0 then
7727 SendMessage(hComboEdit, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
7730 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
7731 if Msg.CharCode in [VK_BACK] then begin
7732 hComboEdit := GetFocus;
7733 if hComboEdit <> 0 then
7734 SendMessage(hComboEdit, WM_CHAR, Msg.CharCode, Msg.KeyData);
7736 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
7737 hComboEdit := GetFocus;
7738 if hComboEdit <> 0 then
7739 SendMessage(hComboEdit, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
7743 //
\83\81\83j
\83\85\81[
\82Ì
\83t
\83@
\83C
\83\8b(F)
\82Æ
\82©
\82ÅF
\82ð
\92P
\91Ì
\82Å
\89\9f\82µ
\82½
\82Æ
\82«
\82É
\91I
\91ð
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\8c»
\8fÛ
\82ð
\89ñ
\94ð
7744 KeyData := Msg.KeyData;
7745 if (KeyData and $20000000) = 0 then begin
7746 if Msg.CharCode in [Ord('F'), Ord('V'), Ord('B'), Ord('R'),
7747 Ord('A'), Ord('T'), Ord('H')] then begin
7748 if not ActionList.IsShortCut(Msg) then begin
7756 procedure TGikoForm.BrowserTabVisibleActionExecute(Sender: TObject);
7758 GikoSys.Setting.BrowserTabVisible := BrowserTabVisibleAction.Checked;
7762 procedure TGikoForm.BrowserTabTopActionExecute(Sender: TObject);
7764 BrowserTabBottomAction.Checked := False;
7765 BrowserTabTopAction.Checked := True;
7766 GikoSys.Setting.BrowserTabPosition := gtpTop;
7770 procedure TGikoForm.BrowserTabBottomActionExecute(Sender: TObject);
7772 BrowserTabTopAction.Checked := False;
7773 BrowserTabBottomAction.Checked := True;
7774 GikoSys.Setting.BrowserTabPosition := gtpBottom;
7778 procedure TGikoForm.BrowserTabTabStyleActionExecute(Sender: TObject);
7780 BrowserTabButtonStyleAction.Checked := False;
7781 BrowserTabFlatStyleAction.Checked := False;
7782 BrowserTabTabStyleAction.Checked := True;
7783 GikoSys.Setting.BrowserTabStyle := gtsTab;
7787 procedure TGikoForm.BrowserTabButtonStyleActionExecute(Sender: TObject);
7789 BrowserTabTabStyleAction.Checked := False;
7790 BrowserTabFlatStyleAction.Checked := False;
7791 BrowserTabButtonStyleAction.Checked := True;
7792 GikoSys.Setting.BrowserTabStyle := gtsButton;
7796 procedure TGikoForm.BrowserTabFlatStyleActionExecute(Sender: TObject);
7798 BrowserTabFlatStyleAction.Checked := True;
7799 BrowserTabTabStyleAction.Checked := False;
7800 BrowserTabButtonStyleAction.Checked := False;
7801 GikoSys.Setting.BrowserTabStyle := gtsFlat;
7805 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
7811 HtmlFileName: string;
7815 TargetFrameName: OleVariant;
7816 PostData: OleVariant;
7817 Headers: OleVariant;
7818 WindowHeight: Integer;
7819 WindowWidth: Integer;
7823 Protocol, Host, Path, Document, Port, Bookmark: string;
7825 PreviewTimer.Enabled := False;
7829 case GikoSys.Setting.PreviewSize of
7836 WindowHeight := 192;
7840 WindowHeight := 384;
7844 WindowHeight := 480;
7846 else begin //gpsMedium
7848 WindowHeight := 288;
7852 ARect := Rect(0, 0, WindowWidth, WindowHeight);
7854 case GikoSys.Setting.PopupPosition of
7855 gppRightTop: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - (ARect.Bottom - ARect.Top) - 15);
7856 gppRight: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
7857 gppRightBottom: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y + 15);
7858 gppTop: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - (ARect.Bottom - ARect.Top) - 15);
7859 gppCenter: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - ((ARect.Bottom - ARect.Top) div 2));
7860 gppBottom: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y + 15);
7861 gppLeftTop: OffsetRect(ARect, p.x + 15, p.y - (ARect.Bottom - ARect.Top) - 15);
7862 gppLeft: OffsetRect(ARect, p.x + 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
7863 gppLeftBottom: OffsetRect(ARect, p.x + 15, p.y + 15); //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g
\82P
\82Ì453
\8e\81\82É
\8a´
\8eÓ
7866 html := '<html><head>'#13#10
7868 + 'function init() {'#13#10
7869 + ' if ((document.body.clientHeight >= Image1.height) && (document.body.clientWidth >= Image1.width)) {'#13#10
7871 + ' var dh, ih;'#13#10
7872 + ' dh = document.body.clientWidth / document.body.clientHeight;'#13#10
7873 + ' ih = Image1.width / Image1.height;'#13#10
7874 + ' if (document.body.clientWidth < document.body.clientHeight) {'#13#10
7875 + ' if (ih > dh)'#13#10
7876 + ' Image1.width = document.body.clientWidth;'#13#10
7878 + ' Image1.height = document.body.clientHeight;'#13#10
7880 + ' if (ih < dh)'#13#10
7881 + ' Image1.height = document.body.clientHeight;'#13#10
7883 + ' Image1.width = document.body.clientWidth;'#13#10
7886 + ' Message.style.display = "none";'#13#10
7890 + '<body topmargin="0" leftmargin="0" style="border-width: 1px; overflow:hidden; border-style: solid;" onLoad="init()">'#13#10
7891 + '<div align="center" id="Message">
\83v
\83\8c\83r
\83\85\81[
\8dì
\90¬
\92\86</div>'#13#10
7892 + '<div align="center"><img name="Image1" border="0" src="%ImageURL%"></div>'#13#10
7894 sl := TStringList.Create;
7897 HtmlFileName := GikoSys.GetAppDir + HTML_FILE_NAME;
7898 sl.Text := AnsiReplaceStr(html, '%ImageURL%', FPreviewURL);
7899 sl.SaveToFile(HtmlFileName);
7906 NavURL := HtmlFileName;
7908 TargetFrameName := '';
7911 GikoSys.ParseURI(FPreviewURL, Protocol, Host, Path, Document, Port, Bookmark);
7912 Referer := Protocol + '://' + Host;
7914 Referer := Referer + ':' + Port;
7915 Referer := Referer + Path;
7916 Headers := 'Referer: ' + Referer;
7917 FPreviewBrowser.Navigate(NavURL, Flags, TargetFrameName, PostData, Headers);
7918 if ARect.Top + WindowHeight > Screen.DesktopHeight then
7919 ARect.Top := Screen.DesktopHeight - WindowHeight;
7920 if ARect.Left + WindowWidth > Screen.DesktopWidth then
7921 ARect.Left := Screen.DesktopWidth - WindowWidth;
7922 if ARect.Left < Screen.DesktopLeft then ARect.Left := Screen.DesktopLeft;
7923 if ARect.Bottom < Screen.DesktopTop then ARect.Bottom := Screen.DesktopTop;
7925 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST, ARect.Left, ARect.Top, WindowWidth, WindowHeight, SWP_NOACTIVATE or SWP_HIDEWINDOW);
7926 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
7928 // Style := GetWindowLong(FPreviewBrowser.Handle, GWL_EXSTYLE);
7929 // SetWindowLong(FPreviewBrowser.Handle, GWL_EXSTYLE, Style xor WS_EX_APPWINDOW);
7933 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
7935 if PreviewTimer.Enabled then
7936 PreviewTimer.Enabled := False;
7937 if (FHint <> nil) and (IsWindowVisible(FHint.Handle)) then begin
7938 FHint.ReleaseHandle;
7941 if (FPreviewBrowser <> nil) and (IsWindowVisible(FPreviewBrowser.Handle)) then
7942 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7943 Message.Result := 1;
7947 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
7949 MsgBarCloseAction.Execute;
7952 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
7954 Doc: IHtmlDocument2;
7955 Range: IHTMLTxtRange;
7958 ThreadItem: TThreadItem;
7962 Doc := FactiveContent.FBrowser.Document as IHtmlDocument2;
7963 if Assigned(Doc) then begin
7964 Range := Doc.selection.createRange as IHTMLTxtRange;
7965 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
7966 s := ZenToHan(Trim(s));
7967 if GikoSys.IsNumeric(s) then begin
7969 ThreadItem := GetActiveContent;
7970 if ThreadItem <> nil then begin
7972 FHint.PopupType := gptThread;
7973 SetResPopupText(ThreadItem, Num, Num, False, False);
7974 if FHint.ResCount <> 0 then
7985 procedure TGikoForm.SetResPopupText(threadItem: TThreadItem; StNum, ToNum: Integer; Title, First: Boolean);
7997 boardPlugIn : TBoardPlugIn;
8000 if StNum > ToNum then begin
8006 //
\8dÅ
\91å10
\83\8c\83X
\82Ü
\82Å
\95\
\8e¦
8007 if StNum + MAX_POPUP_RES < ToNum then
8008 ToNum := StNum + MAX_POPUP_RES;
8010 //
\83^
\83C
\83g
\83\8b\95\
\8e¦
8012 if ThreadItem <> nil then
8013 FHint.Title := ThreadItem.Title;
8015 if ThreadItem <> nil then begin
8016 //if ThreadItem.IsBoardPlugInAvailable then begin
8017 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
8018 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
8019 //boardPlugIn := ThreadItem.BoardPlugIn;
8020 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
8022 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
8023 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
8024 for i := StNum to ToNum do begin
8026 //
\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
\81«
\93Ç
\82ß
\82é
\82æ
\82¤
\82É
\82È
\82Á
\82½
8027 tmp := boardPlugIn.GetDat( DWORD( threadItem ), i );
8028 if (tmp <> '') And ( not GikoSys.FAbon.CheckAbonPopupRes(tmp) And( not GikoSys.FAbon.CheckIndividualAbonList(line))) then begin
8029 Res := DivideStrLine(tmp);
8030 if (GikoSys.Setting.ShowMail = false) or (Length(res.FMailTo) = 0) then
8031 Header := IntToStr(Line) + '
\96¼
\91O
\81F ' + Res.FName + '
\93\8a\8de
\93ú
\81F ' + Res.FDateTime
8033 Header := IntToStr(Line) + '
\96¼
\91O
\81F ' + Res.FName + ' [' + res.FMailTo + ']
\93\8a\8de
\93ú
\81F ' + Res.FDateTime;
8034 Header := DeleteFontTag(Header);
8035 Header := CustomStringReplace(Header, '<br>', '',true);
8037 Body := CustomStringReplace(Res.FBody, '<br> ', #10,true);
8038 Body := CustomStringReplace(Body, '<br>', #10,true);
8039 Body := CustomStringReplace(Body, '</a>', '',true);
8040 Body := GikoSys.DeleteLink(Body);
8041 Body := CustomStringReplace(Body, '<', '<');
8042 Body := CustomStringReplace(Body, '>', '>');
8043 Body := CustomStringReplace(Body, '"', '"');
8044 Body := CustomStringReplace(Body, '&', '&');
8045 Body := CustomStringReplace(Body, ' ', ' ');
8047 FHint.Add(Header, Body);
8048 //FHint.Title := '';
8052 for i := StNum to ToNum do begin
8054 FileName := ThreadItem.FilePath;
8055 tmp := GikoSys.ReadThreadFile(FileName, Line);
8056 if (tmp <> '') And ( not GikoSys.FAbon.CheckAbonPopupRes(tmp) And( not GikoSys.FAbon.CheckIndividualAbonList(line))) then begin
8057 Res := DivideStrLine(tmp);
8058 if (GikoSys.Setting.ShowMail = false) or (Length(res.FMailTo) = 0) then
8059 Header := IntToStr(Line) + '
\96¼
\91O
\81F ' + Res.FName + '
\93\8a\8de
\93ú
\81F ' + Res.FDateTime
8061 Header := IntToStr(Line) + '
\96¼
\91O
\81F ' + Res.FName + ' [' + res.FMailTo + ']
\93\8a\8de
\93ú
\81F ' + Res.FDateTime;
8063 Body := DeleteFontTag(Res.FBody);
8064 Body := CustomStringReplace(Body, '<br> ', #10,true);
8065 Body := CustomStringReplace(Body, '<br>', #10,true);
8066 Body := CustomStringReplace(Body, '</a>', '',true);
8067 Body := GikoSys.DeleteLink(Body);
8068 Body := CustomStringReplace(Body, '<', '<');
8069 Body := CustomStringReplace(Body, '>', '>');
8070 Body := CustomStringReplace(Body, '"', '"');
8071 Body := CustomStringReplace(Body, '&', '&');
8072 Body := CustomStringReplace(Body, ' ', ' ');
8073 FHint.Add(Header, Body);
8074 //FHint.Title := ''; //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Í
\82¢
\82ç
\82È
\82¢
\82ñ
\82¾
\82¯
\82Ç
\82Ë
\81B
\82à
\82¶
\82ã
\82â
\82Á
\82Ï
\82è
\82¢
\82ç
\82È
\82©
\82Á
\82½
\81i2004/01/13
\81j
8083 procedure TGikoForm.ShowTextPopup;
8088 // if Trim(s) = '' then
8091 FHint.Font.Name := GikoSys.Setting.HintFontName;
8092 FHint.Font.Size := GikoSys.Setting.HintFontSize;
8093 FHint.Font.Color := GikoSys.Setting.HintFontColor;
8094 FHint.Color := GikoSys.Setting.HintBackColor;
8095 FHint.HeaderBold := GikoSys.Setting.ResPopupHeaderBold;
8097 if FHint.PopupType = gptRaw then
8098 ARect := FHint.CalcHintRect(Screen.Width, FHint.Caption, nil)
8100 ARect := FHint.CalcHintRect(Screen.Width, '', nil);
8101 case GikoSys.Setting.PopupPosition of
8102 gppRightTop: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - (ARect.Bottom - ARect.Top) - 15);
8103 gppRight: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
8104 gppRightBottom: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y + 15);
8105 gppTop: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - (ARect.Bottom - ARect.Top) - 15);
8106 gppCenter: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - ((ARect.Bottom - ARect.Top) div 2));
8107 gppBottom: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y + 15);
8108 gppLeftTop: OffsetRect(ARect, p.x + 15, p.y - (ARect.Bottom - ARect.Top) - 15);
8109 gppLeft: OffsetRect(ARect, p.x + 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
8110 gppLeftBottom: OffsetRect(ARect, p.x + 15, p.y + 15); //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g
\82P
\82Ì453
\8e\81\82É
\8a´
\8eÓ
8112 //FHint.ActivateHint(ARect, s);
8113 if FHint.PopupType = gptRaw then
8114 FHint.ActivateHint(ARect, FHint.Caption)
8116 FHint.ActivateHint(ARect, '');
8118 FHint.ReleaseHandle;
8123 procedure TGikoForm.GikoHelpActionExecute(Sender: TObject);
8127 FileName := GikoSys.GetAppDir + 'batahlp.chm';
8128 if not FileExists(FileName) then begin
8131 '
\83w
\83\8b\83v
\82ª
\8c©
\82Â
\82©
\82è
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½' + #13#10 +
8132 '
\83w
\83\8b\83v
\83t
\83@
\83C
\83\8b\82ð
\83M
\83R
\83i
\83r
\82Ì
\83t
\83H
\83\8b\83_
\82É
\92u
\82¢
\82Ä
\82
\82¾
\82³
\82¢' + #13#10 +
8133 '
\83w
\83\8b\83v
\82Í
\83M
\83R
\83i
\83r
\82Ì
\83T
\83C
\83g
\82É
\92u
\82¢
\82Ä
\82 \82è
\82Ü
\82·',
8138 ShellExecute(Handle, 'open', PChar(FileName), '', PChar(GikoSys.GetAppDir), SW_SHOW);
8141 procedure TGikoForm.ToolButton18Click(Sender: TObject);
8143 DEL_MSG = '
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
8144 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
8146 if FTreeType = gttHistory then begin
8147 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
8148 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
8152 TreeView.Items.Clear;
8156 procedure TGikoForm.KotehanActionExecute(Sender: TObject);
8158 Dlg: TKotehanDialog;
8160 Dlg := TKotehanDialog.Create(Self);
8168 procedure TGikoForm.SetLinkBar;
8172 ToolButton: TLinkToolButton;
8173 MenuItem: TMenuItem;
8174 oldIgnoreResize : TResizeType;
8176 oldIgnoreResize := FIsIgnoreResize;
8177 FIsIgnoreResize := rtResizing;
8178 MainCoolBar.Bands.BeginUpdate;
8180 LinkBarPopupMenu.Items.Clear;
8181 for i := LinkToolBar.ButtonCount - 1 downto 0 do
8182 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
8183 LinkToolBar.Buttons[i].Free;
8184 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
8185 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
8186 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
8187 ToolButton := TLinkToolButton.Create(LinkToolBar);
8188 // ToolButton.Parent := LinkToolBar;
8189 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
8190 MenuItem := TMenuItem.Create(Self);
8191 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
8192 LinkBarPopupMenu.Items.Add(MenuItem);
8193 ToolButton.MenuItem := MenuItem;
8194 ToolButton.ImageIndex := TOOL_ICON_FAV_FOLDER;
8195 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
8196 ToolButton.ImageIndex := TOOL_ICON_FAV_BOARD;
8197 ToolButton.OnClick := FavoriteClick;
8198 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
8199 ToolButton.ImageIndex := TOOL_ICON_FAV_THREAD;
8200 ToolButton.OnClick := FavoriteClick;
8202 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
8203 ToolButton.Left := 10000;
8204 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
8205 ToolButton.AutoSize := True;
8206 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
8207 ToolButton.OnDragOver := FavoriteDragOver;
8208 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
8209 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
8210 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
8211 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
8212 //ToolButton.DragMode := dmAutomatic;
8213 ToolButton.DragMode := dmManual;
8214 ToolButton.PopupMenu := FavoriteTreePopupMenu;
8216 LinkToolBar.InsertControl(ToolButton);
8221 { if LinkToolBar.ButtonCount = 0 then begin
8222 ToolButton := TLinkToolButton.Create(LinkToolBar);
8223 ToolButton.Style := tbsButton;
8224 ToolButton.ImageIndex := -1;
8225 ToolButton.Caption := '';
8226 LinkToolBar.InsertControl(ToolButton);
8229 MainCoolBar.Bands.EndUpdate;
8230 LoadCoolBarSettings;
8231 FIsIgnoreResize := oldIgnoreResize;
8235 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
8243 if Sender = FavoriteTreeView then begin
8244 Node := FavoriteTreeView.GetNodeAt(X, Y);
8249 bound := Node.DisplayRect( False );
8250 height := bound.Bottom - bound.Top;
8251 if (bound.Top + height / 2) <= Y then
8252 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
8257 if Node.IsFirstNode then
8262 if FDropSpaceNode <> nil then
8263 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
8266 if Change then begin
8267 if FDropSpaceNode <> nil then
8268 FDropSpaceNode.Free;
8270 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
8271 FDropSpaceNode.MoveTo( Node, naInsert );
8272 FDropSpaceNode.ImageIndex := -1;
8273 FDropSpaceNode.SelectedIndex := -1;
8277 if Source = FavoriteTreeView then begin
8278 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
8283 end else if Source = BrowserTab then
8285 else if Source = ListView then
8287 else if Source is TLinkToolButton then
8289 else if Source = TreeView then
8295 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
8298 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
8301 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
8303 // FDragging := true;
8306 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
8308 SenderNode: TTreeNode;
8309 LinkToolButton: TLinkToolButton;
8312 LinkToolButton := TLinkToolButton( Sender );
8313 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
8314 SenderNode.Selected := False;
8315 FavoriteDragDrop( SenderNode, Source );
8321 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
8323 favButton : TLinkToolButton;
8324 favThreadItem : TFavoriteThreadItem;
8330 if Sender is TLinkToolButton then begin
8331 favButton := TLinkToolButton( Sender );
8332 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
8333 favThreadItem := TFavoriteThreadItem( favButton.Data );
8334 if favThreadItem.Item <> nil then
8335 InsertBrowserTab( favThreadItem.Item, False );
8343 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
8347 TToolButton( Sender ).DragMode := dmManual;
8348 if ssLeft in Shift then begin
8349 // 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)
8350 if FDragTime = 0 then begin
8351 FDragTime := GetTickCount();
8353 Now := GetTickCount();
8354 if (Now - FDragTime) > 500 then begin
8355 if FDragButton <> TToolButton( Sender ) then begin
8357 FDragButton := TToolButton( Sender );
8358 TToolButton(Sender).BeginDrag(false ,5);
8361 {$IF Defined(debug)}
8362 ShowMessage('Error');
8373 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
8378 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
8383 for i := 0 to ToolBar.ButtonCount - 1 do
8384 if ToolBar.Buttons[i].Visible then
8385 Result := Result + ToolBar.Buttons[i].Width;
8388 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
8390 Control : TWinControl;
8393 Control := FindControl(BandInfo^.hwndChild);
8394 if Control = nil then
8397 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
8398 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
8399 idx := MainCoolBar.Bands[ i ].ID;
8403 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
8404 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
8405 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
8406 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
8407 BandInfo^.cxMinChild := 0;
8408 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
8409 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
8410 end else if Control = LinkToolBar then begin
8411 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
8412 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
8413 BandInfo^.cxMinChild := 0;
8414 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
8415 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
8416 end else begin // AddressToolBar
8417 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
8418 BandInfo^.cxMinChild := 0;
8419 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
8423 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
8429 ChevronPopupMenu.Items.Clear;
8431 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
8432 if MainCoolBar.Bands[ i ].Visible then begin
8433 if Idx = Int64(RebarChevron^.uBand) then begin
8440 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
8441 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
8443 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
8444 ToolBarChevronMenu(StdToolBar);
8445 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
8449 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
8450 ChevronPopupMenu.Popup(p.x, p.y);
8454 procedure TGikoForm.MenuBarChevronMenu;
8455 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
8461 for i := 0 to MenuItem.Count - 1 do begin
8463 if MenuItem[i] is TFavoriteMenuItem then begin
8464 Item := TFavoriteMenuItem.Create(Self);
8465 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
8467 Item := TMenuItem.Create(Self);
8468 Item.Caption := MenuItem[i].Caption;
8469 Item.Action := MenuItem[i].Action;
8470 Item.ImageIndex := MenuItem[i].ImageIndex;
8471 Item.OnClick := MenuItem[i].OnClick;
8472 PopupItem.Add(Item);
8473 if MenuItem[i].Count > 0 then
8474 SetSubMenu(MenuItem[i], Item);
8483 ChevronPopupMenu.Items.Clear;
8484 ChevronPopupMenu.Images := MainMenu.Images;
8485 bw := GetWidthAllToolButton(MenuToolBar);
8486 if MenuToolBar.Width < bw then begin
8488 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
8489 w := w + MenuToolBar.Buttons[i].Width;
8490 if MenuToolBar.Width <= w then begin
8491 Item := TMenuItem.Create(Self);
8492 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
8493 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
8494 ChevronPopupMenu.Items.Add(Item);
8495 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
8501 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
8502 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
8507 if Assigned(PopupMenu.OnPopup) then
8508 PopupMenu.OnPopup(nil);
8509 for i := 0 to PopupMenu.Items.Count - 1 do begin
8511 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
8512 Item := TFavoriteMenuItem.Create(Self);
8513 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
8515 Item := TMenuItem.Create(Self);
8516 Item.Caption := PopupMenu.Items[i].Caption;
8517 Item.Action := PopupMenu.Items[i].Action;
8518 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
8519 Item.OnClick := PopupMenu.Items[i].OnClick;
8520 PopupItem.Add(Item);
8529 ChevronPopupMenu.Items.Clear;
8530 ChevronPopupMenu.Images := ToolBar.HotImages;
8531 bw := GetWidthAllToolButton(ToolBar);
8532 if ToolBar.Width < bw then begin
8534 for i := 0 to ToolBar.ButtonCount - 1 do begin
8535 if ToolBar.Buttons[i].Visible then
8536 w := w + ToolBar.Buttons[i].Width;
8537 if ToolBar.Width <= w then begin
8538 if ToolBar.Buttons[i].Tag = 0 then begin
8539 Item := TMenuItem.Create(Self);
8540 if ToolBar.Buttons[i].Style = tbsSeparator then
8543 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
8544 if TObject(ToolBar.Buttons[i]) is TPanel then begin
8547 Item.Caption := ToolBar.Buttons[i].Caption;
8548 Item.Action := ToolBar.Buttons[i].Action;
8550 //Item.Visible := True;
8552 ChevronPopupMenu.Items.Add(Item);
8553 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
8555 Item.OnClick := nil;
8556 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
8564 procedure TGikoForm.LinkBarChevronMenu;
8569 Item: TFavoriteMenuItem;
8571 Button: TLinkToolButton;
8573 ChevronPopupMenu.Items.Clear;
8574 ChevronPopupMenu.Images := LinkToolBar.Images;
8575 bw := GetWidthAllToolButton(LinkToolBar);
8576 if LinkToolBar.Width < bw then begin
8578 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
8579 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
8580 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
8581 w := w + LinkToolBar.Buttons[j].Width;
8582 if LinkToolBar.Width <= w then begin
8583 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
8584 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
8585 Item := TFavoriteMenuItem.Create(Self);
8586 if TObject(Button.Data) is TFavoriteFolder then begin
8587 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
8588 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
8589 Item.OnClick := FavoriteClick;
8590 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
8591 Item.OnClick := FavoriteClick;
8593 Item.Data := Button.Data;
8594 Item.Caption := LinkToolBar.Buttons[j].Caption;
8595 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
8596 ChevronPopupMenu.Items.Add(Item);
8607 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
8608 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
8609 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
8611 \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É
8612 \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
8614 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
8616 bandInfo : tagREBARBANDINFOA;
8617 pBandInfo : PReBarBandInfoA;
8624 pBandInfo := @bandInfo;
8625 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
8626 bandInfo.cbSize := sizeof( bandInfo );
8627 bandInfo.hwndChild := h;
8628 bandInfo.cyMinChild := bar.Height;
8629 bar.OnBandInfo( nil, pBandInfo );
8630 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
8632 for i := bar.Bands.Count - 1 downto 0 do begin
8633 if bar.Bands[ i ].Control.Handle = h then begin
8639 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
8643 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
8645 Control: TWinControl;
8648 Control := FindControl(BandInfo^.hwndChild);
8649 if Control = nil then
8652 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
8653 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
8654 idx := ListCoolBar.Bands[ i ].ID;
8658 if Control = ListToolBar then begin
8659 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
8660 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
8661 BandInfo^.cxMinChild := 0;
8662 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
8663 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
8665 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
8666 BandInfo^.cxMinChild := 0;
8667 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
8671 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
8676 ChevronPopupMenu.Items.Clear;
8677 Idx := RebarChevron^.uBand;
8678 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
8679 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
8680 ToolBarChevronMenu(ListToolBar);
8683 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
8684 ChevronPopupMenu.Popup(p.x, p.y);
8688 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
8690 Control: TWinControl;
8693 Control := FindControl(BandInfo^.hwndChild);
8694 if Control = nil then
8697 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
8698 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
8699 idx := BrowserCoolBar.Bands[ i ].ID;
8703 if Control = BrowserToolBar then begin
8704 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
8705 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
8706 BandInfo^.cxMinChild := 0;
8707 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
8708 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
8710 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
8711 BandInfo^.cxMinChild := 0;
8712 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
8716 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
8721 ChevronPopupMenu.Items.Clear;
8722 Idx := RebarChevron^.uBand;
8723 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
8724 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
8725 ToolBarChevronMenu(BrowserToolBar)
8728 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
8729 ChevronPopupMenu.Popup(p.x, p.y);
8733 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
8735 if Column^.iImage = -1 then begin
8736 Column^.mask := Column^.mask or LVCF_FMT;
8738 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
8739 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
8743 procedure TGikoForm.ThreadEditorActionExecute(Sender: TObject);
8745 Editor: TEditorForm;
8747 if not (GetActiveList is TBoard) then
8749 Editor := TEditorForm.Create(Self);
8750 Editor.SetBoard(TBoard(GetActiveList));
8752 Editor.BodyEdit.SetFocus;
8755 procedure TGikoForm.ToolBarSettingActionExecute(Sender: TObject);
8757 Dlg: TToolBarSettingDialog;
8759 //Component: TComponent;
8760 ToolButton : TToolButton;
8762 Dlg := TToolBarSettingDialog.Create(Self, ActionList);
8764 Dlg.AddToolBar(StdToolBar, gttStandard);
8765 Dlg.AddToolBar(ListToolBar, gttList);
8766 Dlg.AddToolBar(BrowserToolBar, gttBrowser);
8767 case FToolBarSettingSender of
8768 tssMain: Dlg.ToolBarIndex := 0;
8769 tssList: Dlg.ToolBarIndex := 1;
8770 tssBrowser: Dlg.ToolBarIndex := 2;
8772 if Dlg.ShowModal = mrOK then begin
8775 //
\8dÅ
\93K
\95\9d\82ð
\8dÄ
\90Ý
\92è
\82·
\82é
\82½
\82ß
\82É
\93K
\93\96\82È
\83v
\83\8d\83p
\83e
\83B
\82ð
\82¢
\82¶
\82
\82é
8776 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
8777 MainCoolBar.Bands[i].MinWidth := MainCoolBar.Bands[i].MinWidth + 1;
8778 MainCoolBar.Bands[i].MinWidth := MainCoolBar.Bands[i].MinWidth - 1;
8780 for i := 0 to ListCoolBar.Bands.Count - 1 do begin
8781 ListCoolBar.Bands[i].MinWidth := ListCoolBar.Bands[i].MinWidth + 1;
8782 ListCoolBar.Bands[i].MinWidth := ListCoolBar.Bands[i].MinWidth - 1;
8784 for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
8785 BrowserCoolBar.Bands[i].MinWidth := BrowserCoolBar.Bands[i].MinWidth + 1;
8786 BrowserCoolBar.Bands[i].MinWidth := BrowserCoolBar.Bands[i].MinWidth - 1;
8789 SaveToolBarSetting(StdToolBar);
8790 SaveToolBarSetting(ListToolBar);
8791 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
8792 SelectComboBoxPanel.Visible := False;
8794 for i := ListToolBar.ControlCount - 1 downto 0 do
8796 if ListToolBar.Controls[ i ].Action = SelectItemAction then
8798 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
8799 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
8800 SelectComboBoxPanel.Parent := ListToolBar;
8801 SelectComboBoxPanel.Visible := True;
8803 SelectComboBox.Left := 0;
8804 SelectComboBox.Top := 0;
8805 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
8806 SelectComboBox.Width := SelectComboBoxPanel.Width -
8807 SelectComboBoxSplitter.Width;
8810 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
8811 ToolButton := TToolButton(ListToolBar.FindComponent('SelectComboBoxDummy'));
8812 if ToolButton <> nil then begin
8813 ToolButton.Parent := nil;
8815 ToolButton := TToolButton.Create(ListToolBar);
8816 ToolButton.Name := 'SelectComboBoxDummy';
8819 ToolButton.Style := tbsSeparator;
8820 ToolButton.Width := 0;
8821 ToolButton.Left := ListToolBar.Controls[ i ].Left;
8822 ListToolBar.InsertControl(ToolButton);
8823 ToolButton.Visible := False;
8825 //
\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·
8826 if (i + 1) < ListToolBar.ControlCount then
8827 if ListToolBar.Controls[ i + 1 ] is TToolButton then
8828 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
8829 ListToolBar.Controls[ i + 1 ].Visible := False;
8832 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
8833 ListToolBar.Controls[ i ].Visible := False;
8840 ResetBandInfo( ListCoolBar, ListToolBar );
8841 SaveToolBarSetting(BrowserToolBar);
8845 FToolBarSettingSender := tssNone;
8849 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
8854 for i := bar.ButtonCount - 1 downto 0 do begin
8855 if bar.Buttons[ i ].Action = action then begin
8856 Result := bar.Buttons[ i ];
8865 procedure TGikoForm.SetToolBarPopup;
8868 aIEButton : TToolButton;
8869 aCabinetBBSButton : TToolButton;
8870 aResRangeButton : TToolButton;
8871 aThreadRangeButton: TToolButton;
8873 for i := 0 to StdToolBar.ButtonCount - 1 do begin
8875 for i := 0 to ListToolBar.ButtonCount - 1 do begin
8876 if ListToolBar.Buttons[i].Action = IconStyle then
8877 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
8878 if ListToolBar.Buttons[i].Action = SelectReservAction then
8879 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
8881 aIEButton := FindToolBarButton( BrowserToolBar, IEAction );
8882 if aIEButton <> nil then
8883 aIEButton.DropdownMenu := BrowserPopupMenu;
8884 aCabinetBBSButton := FindToolBarButton( StdToolBar, CabinetBBSAction );
8885 if aCabinetBBSButton <> nil then
8886 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
8887 aResRangeButton := FindToolBarButton( BrowserToolBar, ResRangeAction );
8888 if aResRangeButton <> nil then
8889 aResRangeButton.DropdownMenu := ResRangePopupMenu;
8890 aThreadRangeButton:= FindToolBarButton( ListToolBar, ThreadRangeAction );
8891 if aThreadRangeButton <> nil then
8892 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
8895 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
8896 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
8900 // browserPos : TPoint;
8904 Wnd := WindowFromPoint(Mouse.CursorPos);
8906 if WheelDelta > 0 then
8911 if (Wnd = BrowserTab.Handle) or
8912 (Wnd = BrowserTab.Parent.Handle) then begin
8913 BrowserTab.ScrollTabs(Delta);
8915 if FIsHandledWheel then begin
8916 FIsHandledWheel := False;
8919 FIsHandledWheel := True;
8920 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
8921 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
8923 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
8931 procedure TGikoForm.SetSelectWord( const text : string );
8934 if Length( text ) = 0 then
8936 AllItemAction.Checked := True;
8937 LogItemAction.Checked := False;
8938 NewItemAction.Checked := False;
8940 //
\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é
8941 if AllItemAction.Checked then
8942 AllItemAction.Checked := False;
8943 if LogItemAction.Checked then
8944 LogItemAction.Checked := False;
8945 if NewItemAction.Checked then
8946 NewItemaction.Checked := False;
8949 if Length( text ) = 0 then
8950 SetListViewType( gvtAll )
8952 SetListViewType( gvtUser, text, false );
8956 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
8959 SetSelectWord( SelectComboBox.Text );
8963 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
8964 Shift: TShiftState);
8972 if Key = VK_Return then
8975 end else if Key = 229 then begin
8976 if GikoSys.Setting.UseUndecided then begin
8977 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
8978 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
8979 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
8980 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
8981 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
8982 SetLength(Str, Len);
8983 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
8984 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
8985 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
8987 Str := SelectComboBox.Text + Str;
8991 end else if Length( SelectComboBox.Text ) = 0 then
8993 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
8994 *
\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
8995 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
8998 //
\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é
8999 if AllItemAction.Checked then
9000 AllItemAction.Checked := False;
9001 if LogItemAction.Checked then
9002 LogItemAction.Checked := False;
9003 if NewItemAction.Checked then
9004 NewItemaction.Checked := False;
9009 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
9014 if Length( SelectComboBox.Text ) = 0 then
9016 SelectComboBox.Text := SELECTCOMBOBOX_NAME;
9017 SelectComboBox.Color := SELECTCOMBOBOX_COLOR;
9022 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
9023 procedure TGikoForm.ModifySelectList;
9030 if not SelectComboBoxPanel.Visible then
9033 if Length( SelectComboBox.Text ) > 0 then
9035 oldText := SelectComboBox.Text;
9036 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
9038 GikoSys.Setting.SelectTextList.Delete( idx );
9039 idx := SelectComboBox.Items.IndexOf( oldText );
9041 SelectComboBox.Items.Delete( idx );
9042 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
9043 SelectComboBox.Items.Insert( 0, oldText );
9044 SelectComboBox.Text := oldText;
9052 //NG
\83\8f\81[
\83h
\83t
\83@
\83C
\83\8b\82ð
\8dÄ
\93Ç
\82Ý
\8d\9e\82Ý
\82·
\82é
9053 procedure TGikoForm.SelectResActionExecute(Sender: TObject);
9055 Dlg: TListSelectDialog;
9056 FilterList : TStringList;
9059 Dlg := TListSelectDialog.Create(Self);
9061 Dlg.SelectComboBox.Items.Assign(GikoSys.Setting.SelectTextList);
9062 Dlg.SelectComboBox.Text := FSelectResWord;
9064 if Dlg.ModalResult = mrOK then begin
9065 SelectResAction.Checked := True;
9066 if Length( Dlg.SelectComboBox.Text ) = 0 then begin
9067 //
\8bó
\93ü
\97Í
\82Å OK
\82Í
\8di
\82è
\8d\9e\82Ý
\89ð
\8f\9c\82Æ
\93¯
\88Ó
\8b`
9068 ResRangeAction.Execute;
9070 GikoSys.ResRange := Ord( grrSelect );
9072 //
\8dÅ
\8cã
\82É
\90Ý
\92è
\82µ
\82½
\82à
\82Ì
\82ð
\8ao
\82¦
\82Ä
\82¨
\82
9073 FSelectResWord := Dlg.SelectComboBox.Text;
9075 //
\8c\9f\8dõ
\97\9a\97ð
\82Ì
\8dX
\90V
9076 idx := GikoSys.Setting.SelectTextList.IndexOf(Dlg.SelectComboBox.Text);
9078 GikoSys.Setting.SelectTextList.Delete(idx);
9079 GikoSys.Setting.SelectTextList.Insert(0, Dlg.SelectComboBox.Text);
9080 while Dlg.SelectComboBox.Items.Count > 100 do begin
9081 Dlg.SelectComboBox.Items.Delete(Dlg.SelectComboBox.Items.Count - 1);
9085 //if SelectComboBox.Parent <> nil then
9086 if SelectComboBoxPanel.Visible then
9087 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
9091 //
\83t
\83B
\83\8b\83^
\82Ì
\90Ý
\92è
9092 FilterList := TStringList.Create;
9094 GikoSys.FSelectResFilter.Reverse := True;
9095 FilterList.Delimiter := ' '; //
\8bæ
\90Ø
\82è
\8eq
\82ð
\94¼
\8ap
\83X
\83y
\81[
\83X
\82É
\90Ý
\92è
9096 FilterList.DelimitedText := Dlg.SelectComboBox.Text;
9098 GikoSys.FSelectResFilter.LoadFromStringList( FilterList );
9102 RepaintAllTabsBrowser();
9105 //
\83L
\83\83\83\93\83Z
\83\8b
9106 if GikoSys.ResRange <> Ord( grrSelect ) then
9107 ResRangeAction.Execute;
9115 //
\91S
\82Ä
\82Ì
\83\8c\83X
\82ð
\95\
\8e¦
9116 procedure TGikoForm.AllResActionExecute(Sender: TObject);
9118 FilterList : TStringList;
9120 if(FActiveContent <> nil) and (FActiveContent.FBrowser <> nil )
9121 and (FActiveContent.FBrowser.Busy) then Exit;
9123 FResRangeMenuSelect := Ord( grrAll );
9124 AllResAction.Checked := True;
9126 if GikoSys.ResRange <> Ord( grrAll ) then begin
9127 GikoSys.ResRange := Ord( grrAll );
9129 //
\83t
\83B
\83\8b\83^
\95¶
\8e\9a\97ñ
\82ð
\8bó
\82É
\82·
\82é
9130 FilterList := TStringList.Create;
9132 GikoSys.FSelectResFilter.LoadFromStringList( FilterList );
9133 GikoSys.FSelectResFilter.Reverse := False;
9138 FSelectResWord := '';
9140 RepaintAllTabsBrowser();
9144 procedure TGikoForm.ReloadClick(Sender: TObject);
9146 if GikoSys.FAbon.ReLoadFromNGwordFile =false then begin
9147 MsgBox(Handle, 'NG
\83\8f\81[
\83h
\83t
\83@
\83C
\83\8b\82Ì
\8dÄ
\93Ç
\82Ý
\8d\9e\82Ý
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½', '
\83G
\83\89\81[', MB_OK or MB_ICONEXCLAMATION);
9149 RepaintAllTabsBrowser();
9154 procedure TGikoForm.GoBackClick(Sender: TObject);
9158 if GikoSys.FAbon.GoForward =false then begin
9159 MsgBox(Handle, '
\88ê
\82Â
\91O
\82ÌNG
\83\8f\81[
\83h
\83t
\83@
\83C
\83\8b\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½', '
\83G
\83\89\81[', MB_OK or MB_ICONEXCLAMATION);
9161 s := GikoSys.FAbon.NGwordname;
9162 StatusBar.Panels.Items[2].Text := s;
9163 StatusBar.Panels[2].Width := Max(StatusBar.Canvas.TextWidth(s), 100);
9164 StatusBarResize(Sender);
9165 RepaintAllTabsBrowser();
9170 procedure TGikoForm.GoFowardClick(Sender: TObject);
9174 if GikoSys.FAbon.GoBack =false then begin
9175 MsgBox(Handle, '
\88ê
\82Â
\8cã
\82ë
\82ÌNG
\83\8f\81[
\83h
\83t
\83@
\83C
\83\8b\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½', '
\83G
\83\89\81[', MB_OK or MB_ICONEXCLAMATION);
9177 s := GikoSys.FAbon.NGwordname;
9178 StatusBar.Panels.Items[2].Text := s;
9179 StatusBar.Panels[2].Width := Max(StatusBar.Canvas.TextWidth(s), 100);
9180 StatusBarResize(Sender);
9181 RepaintAllTabsBrowser();
9186 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
9187 Shift: TShiftState; X, Y: Integer);
9192 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
9195 pos := SelectComboBoxSplitter.ClientToScreen( pos );
9196 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
9197 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
9199 If w <= 50 Then Begin
9200 //
\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
9201 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
9202 pos.X := pos.X + (50 - w);
9204 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
9208 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
9209 //If SelectComboBox.Width <> w Then Begin
9210 If SelectComboBoxPanel.Width <> w Then Begin
9211 SelectComboBoxPanel.Width := w;
9212 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
9213 GikoSys.Setting.SelectComboBoxWidth := w;
9214 DraggingSelectComboBoxPosition := pos;
9216 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
9217 ResetBandInfo( ListCoolBar, ListToolBar );
9223 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
9224 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
9228 IsDraggingSelectComboBox := True;
9231 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
9235 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
9236 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
9238 IsDraggingSelectComboBox := False;
9242 procedure TGikoForm.StatusBarResize(Sender: TObject);
9244 StatusBar.Panels[1].Width := StatusBar.Width -
9245 StatusBar.Panels[0].Width -
9246 StatusBar.Panels[2].Width;
9248 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
9251 if (Length( SelectComboBox.Text ) = 0) or
9252 (SelectComboBox.Text = SELECTCOMBOBOX_NAME) then
9254 SelectComboBox.Text := '';
9255 SelectComboBox.Color := clWindow;
9260 //
\94Â
\96¼
\8c\9f\8dõ
9261 procedure TGikoForm.TreeSelectSearchBoardNameExecute(Sender: TObject);
9265 CurItem : TTreeNode;
9268 if InputQuery('
\94Â
\96¼
\8c\9f\8dõ','
\94Â
\96¼
\82Ì
\93ü
\97Í',s) then begin
9271 if TreeView.Selected = nil then
9272 CurItem := TreeView.Items.GetFirstNode
9274 CurItem := TreeView.Selected.GetNext;
9275 if CurItem = nil then
9276 CurItem := TreeView.Items.GetFirstNode;
9278 while CurItem <> nil do begin
9279 if (CurItem.ImageIndex <> 2) and (VaguePos(s,CurItem.Text) <> 0) then begin
9282 CurItem := CurItem.GetNext;
9285 if CurItem = nil then begin
9286 msg := '
\90æ
\93ª
\82É
\96ß
\82è
\82Ü
\82·
\82©
\81H';
9287 if MsgBox(Handle, msg, '', MB_YESNO or MB_ICONEXCLAMATION) = mrYes then begin
9288 CurItem := TreeView.Items.GetFirstNode;
9292 TreeView.Select(CurItem);
9295 TreeView.Select(CurItem);
9297 msg := '
\8e\9f\82É
\8ds
\82«
\82Ü
\82·
\82©
\81H';
9298 if MsgBox(Handle, msg, '', MB_YESNO or MB_ICONEXCLAMATION) = mrYes then begin
9312 procedure TGikoForm.CabinetFavoriteActionExecute(Sender: TObject);
9318 if CabinetPanel.Visible then begin
9319 if FTreeType = gttFavorite then begin
9320 CabinetVisible( False );
9321 CabinetFavoriteAction.Checked := False;
9323 CabinetFavoriteAction.Checked := True;
9326 CabinetVisible( True );
9327 CabinetFavoriteAction.Checked := True;
9330 // BBS...BBS, History, Favorite
9331 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 1;
9333 b := CabinetSelectPopupMenu.Items.Count - 1;
9334 for i := 0 to b do begin
9335 item := CabinetSelectPopupMenu.Items[ i ];
9336 if item is TBBSMenuItem then begin
9337 item.Checked := False;
9338 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
9339 CabinetMenu.Items[ i ].Checked := False;
9343 //
\83L
\83\83\83r
\83l
\83b
\83g
\83c
\81[
\83\8b\83o
\81[
\8by
\82Ñ
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\
\8e¦
\90Ø
\91Ö
9344 HistoryToolBar.Hide;
9345 FavoriteToolBar.Show;
9346 TreeView.Visible := False;
9347 FavoriteTreeView.Visible := True;
9349 CabinetSelectToolButton.Caption := '
\82¨
\8bC
\82É
\93ü
\82è';
9350 FTreeType := gttFavorite;
9352 //
\83\81\83j
\83\85\81[
\8by
\82Ñ
\83{
\83^
\83\93\82Ì
\83`
\83F
\83b
\83N
\82ð
\90Ý
\92è
9353 CabinetBBSAction.Checked := False;
9354 CabinetHistoryAction.Checked := False;
9356 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\83c
\83\8a\81[
\82ð
\93W
\8aJ
9357 FavoriteTreeView.Items.GetFirstNode.Expanded := True;
9361 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
9364 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
9367 if TObject(SenderNode.Data) is TFavoriteFolder then
9368 SourceNode.MoveTo(SenderNode, naAddChild)
9370 SourceNode.MoveTo(SenderNode, naInsert);
9374 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
9378 FavoBoardItem: TFavoriteBoardItem;
9379 FavoThreadItem: TFavoriteThreadItem;
9381 ThreadItem: TThreadItem;
9384 if (SenderNode = nil) or (Source = nil) then
9387 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
9388 FavNode := SenderNode.Parent
9390 FavNode := SenderNode;
9394 if Source is TBoard then begin
9395 Board := TBoard( Source );
9396 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
9397 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
9398 Node.ImageIndex := 15;
9399 Node.SelectedIndex := 15;
9400 end else if Source is TFavoriteBoardItem then begin
9401 FavoBoardItem := TFavoriteBoardItem( Source );
9402 Board := FavoBoardItem.Item;
9403 if Board <> nil then
9404 if not Board.IsThreadDatRead then
9405 GikoSys.ReadSubjectFile(Board);
9406 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
9407 Node.ImageIndex := 15;
9408 Node.SelectedIndex := 15;
9409 end else if Source is TThreadItem then begin
9410 ThreadItem := TThreadItem( Source );
9411 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
9412 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
9413 Node.ImageIndex := 16;
9414 Node.SelectedIndex := 16;
9415 end else if Source is TBrowserRecord then begin
9416 ThreadItem := TBrowserRecord( Source ).FThread;
9417 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
9418 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
9419 Node.ImageIndex := 16;
9420 Node.SelectedIndex := 16;
9421 end else if Source is TFavoriteThreadItem then begin
9422 FavoThreadItem := TFavoriteThreadItem( Source );
9423 ThreadItem := FavoThreadItem.Item;
9424 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
9425 Node.ImageIndex := 16;
9426 Node.SelectedIndex := 16;
9429 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
9431 FavoriteMoveTo( SenderNode, Node );
9435 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
9438 SourceNode: TTreeNode;
9439 LinkToolButton: TLinkToolButton;
9442 if SenderNode = nil then
9445 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
9446 if FDropSpaceNode <> nil then
9447 SenderNode := FDropSpaceNode;
9449 if Source = FavoriteTreeView then begin
9451 SourceNode := FavoriteTreeView.Selected;
9452 FavoriteMoveTo( SenderNode, SourceNode );
9454 end else if Source is TLinkToolButton then begin
9456 LinkToolButton := TLinkToolButton( Source );
9457 //ShowMessage(LinkToolButton.Text);
9458 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
9459 FavoriteMoveTo( SenderNode, SourceNode );
9461 end else if Source = BrowserTab then begin
9463 idx := BrowserTab.TabIndex;
9464 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
9465 end else if Source = ListView then begin
9467 FavoriteAddTo( SenderNode, ListView.Selected.Data );
9469 end else if Source = TreeView then begin
9471 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
9479 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
9482 SenderNode: TTreeNode;
9485 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
9486 if SenderNode <> nil then begin
9487 FavoriteDragDrop( SenderNode, Source );
9490 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
9491 if FDropSpaceNode <> nil then begin
9493 FDropSpaceNode.Delete;
9495 FDropSpaceNode := nil;
9504 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
9505 Node: TTreeNode; var S: String);
9508 FavoriteTreeView.ReadOnly := True;
9513 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
9514 Shift: TShiftState);
9516 if not TTreeView(Sender).IsEditing then begin
9520 FClickNode := FavoriteTreeView.Selected;
9521 FavoriteTreeViewRenameActionExecute( Sender );
9525 FClickNode := FavoriteTreeView.Selected;
9526 FavoriteTreeViewDeleteActionExecute( Sender );
9530 FavoriteClick( FavoriteTreeView.Selected );
9531 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
9534 FavoriteTreeViewDblClick( Sender );
9537 //
\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·
9538 if Key = VK_ESCAPE then begin
9539 if (TTreeView(Sender).Selected <> nil) then begin
9540 TTreeView(Sender).Selected.Text := FOrigenCaption;
9542 TTreeView(Sender).Selected.Focused := False;
9548 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
9551 LinkToolButton: TLinkToolButton;
9554 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
9556 FClickNode := FavoriteTreeView.Selected;
9558 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
9560 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
9561 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
9562 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
9563 FClickNode := FavoriteTreeView.Items[i];
9567 for i := 0 to FClickNode.Count - 1 do begin
9568 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
9569 FClickNode := FClickNode.Item[i];
9576 if FClickNode = nil then begin
9577 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
9578 FavoriteTreeDeletePopupMenu.Visible := False;
9579 FavoriteTreeRenamePopupMenu.Visible := False;
9580 FavoriteTreeNewFolderPopupMenu.Visible := False;
9581 //FavoriteTreeBrowseBoardPopupMenu.Visible := False;
9582 //FavoriteTreeBrowseThreadPopupMenu.Visible := False;
9583 FavoriteTreeURLCopyPopupMenu.Visible := False;
9584 FavoriteTreeNameCopyPopupMenu.Visible := False;
9585 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
9586 FavoriteTreeReloadPopupMenu.Visible := False;
9587 FavoriteTreeLogDeletePopupMenu.Visible := False;
9588 end else if FClickNode.IsFirstNode then begin
9589 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
9590 FavoriteTreeDeletePopupMenu.Visible := False;
9591 FavoriteTreeRenamePopupMenu.Visible := False;
9592 FavoriteTreeNewFolderPopupMenu.Visible := True;
9593 //FavoriteTreeBrowseBoardPopupMenu.Visible := False;
9594 //FavoriteTreeBrowseThreadPopupMenu.Visible := False;
9595 FavoriteTreeURLCopyPopupMenu.Visible := False;
9596 FavoriteTreeNameCopyPopupMenu.Visible := True;
9597 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
9598 FavoriteTreeReloadPopupMenu.Visible := False;
9599 FavoriteTreeLogDeletePopupMenu.Visible := False;
9600 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
9601 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
9602 FavoriteTreeDeletePopupMenu.Visible := True;
9603 FavoriteTreeRenamePopupMenu.Visible := False;
9604 FavoriteTreeNewFolderPopupMenu.Visible := True;
9605 //FavoriteTreeBrowseBoardPopupMenu.Visible := False;
9606 //FavoriteTreeBrowseThreadPopupMenu.Visible := False;
9607 FavoriteTreeURLCopyPopupMenu.Visible := False;
9608 FavoriteTreeNameCopyPopupMenu.Visible := True;
9609 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
9610 FavoriteTreeReloadPopupMenu.Visible := False;
9611 FavoriteTreeLogDeletePopupMenu.Visible := False;
9612 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
9613 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
9614 FavoriteTreeDeletePopupMenu.Visible := True;
9615 FavoriteTreeRenamePopupMenu.Visible := True;
9616 FavoriteTreeNewFolderPopupMenu.Visible := True;
9617 //FavoriteTreeBrowseBoardPopupMenu.Visible := False;
9618 //FavoriteTreeBrowseThreadPopupMenu.Visible := False;
9619 FavoriteTreeURLCopyPopupMenu.Visible := False;
9620 FavoriteTreeNameCopyPopupMenu.Visible := True;
9621 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
9622 FavoriteTreeReloadPopupMenu.Visible := False;
9623 FavoriteTreeLogDeletePopupMenu.Visible := False;
9624 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
9625 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
9626 FavoriteTreeDeletePopupMenu.Visible := True;
9627 FavoriteTreeRenamePopupMenu.Visible := True;
9628 FavoriteTreeNewFolderPopupMenu.Visible := True;
9629 //FavoriteTreeBrowseBoardPopupMenu.Visible := True;
9630 //FavoriteTreeBrowseThreadPopupMenu.Visible := True;
9631 FavoriteTreeURLCopyPopupMenu.Visible := True;
9632 FavoriteTreeNameCopyPopupMenu.Visible := True;
9633 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
9634 FavoriteTreeReloadPopupMenu.Visible := True;
9635 FavoriteTreeLogDeletePopupMenu.Visible := True;
9636 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
9637 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
9638 FavoriteTreeDeletePopupMenu.Visible := True;
9639 FavoriteTreeRenamePopupMenu.Visible := True;
9640 FavoriteTreeNewFolderPopupMenu.Visible := True;
9641 //FavoriteTreeBrowseBoardPopupMenu.Visible := True;
9642 //FavoriteTreeBrowseThreadPopupMenu.Visible := False;
9643 FavoriteTreeURLCopyPopupMenu.Visible := True;
9644 FavoriteTreeNameCopyPopupMenu.Visible := True;
9645 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
9646 FavoriteTreeReloadPopupMenu.Visible := True;
9647 FavoriteTreeLogDeletePopupMenu.Visible := False;
9649 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
9650 FavoriteTreeDeletePopupMenu.Visible := False;
9651 FavoriteTreeRenamePopupMenu.Visible := False;
9652 FavoriteTreeNewFolderPopupMenu.Visible := False;
9653 //FavoriteTreeBrowseBoardPopupMenu.Visible := False;
9654 //FavoriteTreeBrowseThreadPopupMenu.Visible := False;
9655 FavoriteTreeURLCopyPopupMenu.Visible := False;
9656 FavoriteTreeNameCopyPopupMenu.Visible := False;
9657 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
9658 FavoriteTreeReloadPopupMenu.Visible := False;
9659 FavoriteTreeLogDeletePopupMenu.Visible := False;
9664 procedure TGikoForm.FavoriteTreeViewDeleteActionExecute(Sender: TObject);
9666 DEL_LINK_MSG = '
\81g
\83\8a\83\93\83N
\81h
\82Í
\83\8a\83\93\83N
\83o
\81[
\97p
\83t
\83H
\83\8b\83_
\82Å
\82·
\81B
\8dí
\8f\9c\82µ
\82Ä
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
9667 DEL_MSG = '
\81g^0
\81h
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
9668 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
9671 if FClickNode = nil then
9673 if FClickNode.IsFirstNode then
9675 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then begin
9676 if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
9677 if MsgBox(Handle, DEL_LINK_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
9680 if MsgBox(Handle, StringReplace( DEL_MSG, '^0', FClickNode.Text, [rfReplaceAll] ) , DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
9685 //FDeleteList.Add(FClickNode.Data);
9686 //SetDeleteItemList(FClickNode);
9694 procedure TGikoForm.FavoriteTreeViewRenameActionExecute(Sender: TObject);
9699 if FClickNode = nil then
9701 if FClickNode.IsFirstNode then
9703 if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then
9705 FavoriteTreeView.ReadOnly := False;
9706 if (FTreeType = gttFavorite) and (CabinetPanel.Visible) then begin
9707 node := FClickNode.Parent;
9708 while node <> nil do begin
9709 node.Expanded := True;
9710 node := node.Parent;
9712 FClickNode.EditText;
9714 FClickNode.Text := InputBox( '
\96¼
\91O
\82Ì
\95Ï
\8dX', '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90V
\82µ
\82¢
\96¼
\91O
\82ð
\93ü
\97Í
\82µ
\82Ä
\82
\82¾
\82³
\82¢', FClickNode.Text );
9721 procedure TGikoForm.FavoriteTreeViewNewFolderActionExecute(
9724 NewFavFolder: TFavoriteFolder;
9728 if FClickNode = nil then
9732 if not (TObject(FClickNode.Data) is TFavoriteFolder) then begin
9733 FavoriteTreeView.Selected := FClickNode.Parent;
9734 FClickNode := FClickNode.Parent;
9737 NewFavFolder := TFavoriteFolder.Create;
9738 Node := FavoriteTreeView.Items.AddChildObject(FClickNode, '
\90V
\82µ
\82¢
\83t
\83H
\83\8b\83_', NewFavFolder);
9739 Node.ImageIndex := 14;
9740 Node.SelectedIndex := 14;
9741 // FClickNode.Selected.Expanded := True;
9742 FavoriteTreeView.Selected := Node;
9744 FavoriteTreeViewRenameAction.Execute;
9750 procedure TGikoForm.ToolButton19Click(Sender: TObject);
9753 FavoriteArrangeActionExecute( nil );
9757 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
9762 if not (TObject(node.Data) is TFavoriteFolder) then
9765 for i := 0 to node.Count - 1 do
9767 if TObject(node.Item[i].Data) is TFavoriteFolder then
9768 FavoriteBrowseFolder( node.Item[i] )
9769 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
9770 FavoriteClick( node.Item[i], False );
9775 procedure TGikoForm.FavoriteTreeViewBrowseFolderActionExecute(
9779 FavoriteBrowseFolder( FClickNode );
9780 //BrowserTab.OnChange(nil);
9784 procedure TGikoForm.FavoriteTreeViewDblClick(Sender: TObject);
9787 FClickNode := FavoriteTreeView.Selected;
9788 FavoriteTreeViewReloadActionExecute( Sender );
9792 procedure TGikoForm.FavoriteTreeViewLogDeleteActionExecute(
9795 DEL_MSG = '
\81g^0
\81h
\82Ì
\83\8d\83O
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
9796 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
9798 ThreadItem: TThreadItem;
9799 FavThread: TFavoriteThreadItem;
9802 if FClickNode = nil then Exit;
9803 if not (TObject(FClickNode.Data) is TFavoriteThreadItem) then Exit;
9805 FavThread := TFavoriteThreadItem( FClickNode.Data );
9806 ThreadItem := FavThread.Item;
9809 if GikoSys.Setting.DeleteMsg then begin
9810 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
9811 if MsgBox(Handle, StringReplace( DEL_MSG, '^0', FClickNode.Text, [rfReplaceAll] ) , DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
9815 DeleteHistory(ThreadItem);
9816 DeleteTab(ThreadItem);
9817 ThreadItem.DeleteLogFile;
9825 procedure TGikoForm.FavoriteTreeViewReloadActionExecute(Sender: TObject);
9827 ThreadItem: TThreadItem;
9828 FavThread: TFavoriteThreadItem;
9830 FavBoard: TFavoriteBoardItem;
9834 if FClickNode = nil then Exit;
9836 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
9838 if TObject( FClickNode.Data ) is TFavoriteThreadItem then begin
9839 FavThread := TFavoriteThreadItem( FClickNode.Data );
9840 ThreadItem := FavThread.Item;
9841 if ThreadItem <> nil then
9842 DownloadContent(ThreadItem, shiftDown);
9843 end else if TObject( FClickNode.Data ) is TFavoriteBoardItem then begin
9844 FavBoard := TFavoriteBoardItem( FClickNode.Data );
9845 Board := FavBoard.Item;
9846 DownloadList(Board, shiftDown);
9851 procedure TGikoForm.FavoriteTreeViewURLCopyActionExecute(Sender: TObject);
9853 FavThread : TFavoriteThreadItem;
9854 FavBoard : TFavoriteBoardItem;
9858 if FClickNode = nil then Exit;
9860 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
9862 FavThread := TFavoriteThreadItem( FClickNode.Data );
9863 s := FavThread.URL + #13#10;
9865 Clipboard.AsText := s;
9867 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
9869 FavBoard := TFavoriteBoardItem( FClickNode.Data );
9870 s := FavBoard.URL + #13#10;
9872 Clipboard.AsText := s;
9878 procedure TGikoForm.FavoriteTreeViewNameCopyActionExecute(Sender: TObject);
9880 ThreadItem: TThreadItem;
9881 FavThread: TFavoriteThreadItem;
9883 FavBoard: TFavoriteBoardItem;
9887 if FClickNode = nil then Exit;
9889 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
9891 FavThread := TFavoriteThreadItem( FClickNode.Data );
9892 ThreadItem := FavThread.Item;
9895 s := ThreadItem.Title + #13#10;
9897 Clipboard.AsText := s;
9901 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
9903 FavBoard := TFavoriteBoardItem( FClickNode.Data );
9904 Board := FavBoard.Item;
9905 if Board <> nil then
9906 if not Board.IsThreadDatRead then
9907 GikoSys.ReadSubjectFile(Board);
9910 s := Board.Title + #13#10;
9912 Clipboard.AsText := s;
9920 procedure TGikoForm.FavoriteTreeViewNameURLCopyActionExecute(
9923 ThreadItem: TThreadItem;
9924 FavThread: TFavoriteThreadItem;
9926 FavBoard: TFavoriteBoardItem;
9930 if FClickNode = nil then Exit;
9932 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
9934 FavThread := TFavoriteThreadItem( FClickNode.Data );
9935 ThreadItem := FavThread.Item;
9938 s := ThreadItem.Title + #13#10 + ThreadItem.URL + #13#10;
9940 Clipboard.AsText := s;
9944 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
9946 FavBoard := TFavoriteBoardItem( FClickNode.Data );
9947 Board := FavBoard.Item;
9948 if Board <> nil then
9949 if not Board.IsThreadDatRead then
9950 GikoSys.ReadSubjectFile(Board);
9953 s := Board.Title + #13#10 + Board.URL + #13#10;
9955 Clipboard.AsText := s;
9963 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
9969 for i := 0 to Node.Count - 1 do begin
9970 if Node.Item[i].Data = FindPointer then begin
9971 Result := Node.Item[i];
9973 end else if Node.Item[i].Count > 0 then begin
9974 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
9975 if Found <> nil then begin
9986 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
9990 SenderNode: TTreeNode;
9994 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
9995 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
9996 SenderNode := FavoriteTreeView.Items[i];
10000 SenderNode.Selected := False;
10002 FavoriteDragDrop( SenderNode, Source );
10007 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
10008 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
10010 if FDragWFirst <> true then begin
10011 FDragWFirst := false;
10013 end else if (abs( X - FMouseDownPos.X ) < Mouse.DragThreshold)
10014 and (abs( Y - FMouseDownPos.Y ) < Mouse.DragThreshold) then begin
10018 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
10019 if GikoSys.Setting.ListWidthState = glsMin then begin
10020 BrowserMaxAndFocusAction.Execute;
10023 if GikoSys.Setting.ListHeightState = glsMin then begin
10024 BrowserMaxAndFocusAction.Execute;
10030 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
10031 Y: Integer; State: TDragState; var Accept: Boolean);
10034 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
10038 procedure TGikoForm.ResRangeActionExecute(Sender: TObject);
10040 case FResRangeMenuSelect of
10041 Ord( grrAll ): AllResAction.Execute;
10042 Ord( grrKoko ): OnlyKokoResAction.Execute;
10043 Ord( grrNew ): OnlyNewResAction.Execute;
10044 100: OnlyAHundredResAction.Execute;
10048 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
10052 if FDropSpaceNode <> nil then begin
10054 FDropSpaceNode.Delete;
10056 FDropSpaceNode := nil;
10063 procedure TGikoForm.ListCoolBarContextPopup(Sender: TObject;
10064 MousePos: TPoint; var Handled: Boolean);
10067 FToolBarSettingSender := tssList;
10068 MousePos := ListCoolBar.ClientToScreen( MousePos );
10069 MainCoolBarPopupMenu.Popup( MousePos.X, MousePos.Y );
10073 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
10074 MousePos: TPoint; var Handled: Boolean);
10077 FToolBarSettingSender := tssMain;
10078 MousePos := MainCoolBar.ClientToScreen( MousePos );
10079 MainCoolBarPopupMenu.Popup( MousePos.X, MousePos.Y );
10083 procedure TGikoForm.BrowserCoolBarContextPopup(Sender: TObject;
10084 MousePos: TPoint; var Handled: Boolean);
10087 FToolBarSettingSender := tssBrowser;
10088 MousePos := BrowserCoolBar.ClientToScreen( MousePos );
10089 MainCoolBarPopupMenu.Popup( MousePos.X, MousePos.Y );
10092 procedure TGikoForm.ExportFavoriteFileAccept(Sender: TObject);
10095 if FavoriteDM.SaveFavoriteFile( ExportFavoriteFile.Dialog.FileName ) Then begin
10096 ShowMessage('
\83t
\83@
\83C
\83\8b\82ð
\8fo
\97Í
\82µ
\82Ü
\82µ
\82½');
10098 ShowMessage('
\83t
\83@
\83C
\83\8b\82Ì
\8fo
\97Í
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½');
10101 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
10103 if FListViewBackGroundColor <> value then begin
10104 FListViewBackGroundColor := value;
10105 ListView.Color := FListViewBackGroundColor;
10108 procedure TGikoForm.ExportFavoriteFileBeforeExecute(Sender: TObject);
10110 ExportFavoriteFile.Dialog.FileName := FavoriteDM.GetFavoriteFilePath;
10113 procedure TGikoForm.CabinetBBSActionExecute(Sender: TObject);
10116 if CabinetPanel.Visible then begin
10117 if FTreeType = gtt2ch then begin
10118 CabinetVisible( False );
10120 CabinetBBSAction.Checked := False;
10122 CabinetBBSAction.Checked := True;
10125 CabinetVisible( True );
10126 CabinetBBSAction.Checked := True;
10129 if FActiveBBS = nil then
10130 ShowBBSTree( BBSs[ 0 ] )
10132 ShowBBSTree( FActiveBBS );
10136 procedure TGikoForm.FavoriteTreeViewBrowseThreadActionExecute(
10139 threadItem : TThreadItem;
10142 if FClickNode = nil then Exit;
10144 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
10146 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
10147 if threadItem = nil then
10149 GikoSys.OpenBrowser( threadItem.URL, gbtAuto );
10155 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
10157 threadItem : TThreadItem;
10158 boardItem : TBoard;
10161 if FClickNode = nil then Exit;
10163 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
10165 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
10166 if threadItem = nil then
10168 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
10170 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
10172 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
10173 if boardItem = nil then
10175 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
10181 procedure TGikoForm.UpBoardActionExecute(Sender: TObject);
10184 SelectTreeNode( GetActiveContent.ParentBoard, True );
10188 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
10189 MousePos: TPoint; var Handled: Boolean);
10193 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
10194 if BrowserTab.TabIndex <> idx then begin
10195 BrowserTab.TabIndex := idx;
10196 BrowserTab.OnChange(nil);
10201 procedure TGikoForm.KoreCopyExecute(Sender: TObject);
10203 KonoresCopy(KokoPopupMenu.Tag, true);
10205 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
10207 ThreadItem: TThreadItem;
10213 boardPlugIn : TBoardPlugIn;
10215 if Number = 0 then Exit;
10216 ThreadItem := GetActiveContent;
10218 if ThreadItem <> nil then begin
10219 //if ThreadItem.IsBoardPlugInAvailable then begin
10220 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
10221 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
10222 //boardPlugIn := ThreadItem.BoardPlugIn;
10223 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
10225 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
10226 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
10227 //
\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
10228 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
10230 FileName := ThreadItem.FilePath;
10231 tmp := GikoSys.ReadThreadFile(FileName, Number);
10233 if tmp <> '' then begin
10234 Res := DivideStrLine(tmp);
10236 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
10237 if ReplaceTag then begin
10238 Header := CustomStringReplace(Header, '</b>', '',true);
10239 Header := CustomStringReplace(Header, '<b>', '',true);
10240 Header := CustomStringReplace(Header, '<br>', '',true);
10241 Header := DeleteFontTag(Header);
10243 //if ThreadItem.IsBoardPlugInAvailable then begin
10244 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
10245 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
10246 Body := CustomStringReplace(Body, '<br>', #13#10,true);
10248 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
10249 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
10250 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
10251 Body := CustomStringReplace(Body, '<br>', #13#10,true);
10254 Body := CustomStringReplace(Body, '</a>', '',true);
10256 Body := GikoSys.DeleteLink(Body);
10257 if ReplaceTag then begin
10258 Body := CustomStringReplace(Body, '<', '<');
10259 Body := CustomStringReplace(Body, '>', '>');
10260 Body := CustomStringReplace(Body, '"', '"');
10261 Body := CustomStringReplace(Body, '&', '&');
10262 //Body := CustomStringReplace(Body, ' ', ' ');
10265 Header := Header + Body;
10267 Clipboard.SetTextBuf( PChar(Header) );
10273 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
10275 AddRoundNameMenu(dummy1);
10278 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
10280 FavoriteDM.URLReplace(oldURLs, newURLs);
10283 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
10285 RoundList.URLReplace(oldURLs, newURLs);
10288 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
10290 Filename = 'tab.sav';
10291 bFilename = '~tab.sav';
10294 tempString: string;
10297 oldBoardName: string;
10299 newBoardName: string;
10300 TabList: TStringList;
10303 if oldURLs.Count <> newURLs.Count then begin
10306 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
10307 TabList := TStringList.Create;
10309 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
10311 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
10312 //
\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
10313 for i := 0 to oldURLs.Count - 1 do begin
10314 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
10315 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
10316 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
10317 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
10318 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
10319 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
10321 for j := 0 to TabList.Count - 1 do begin
10322 tempString := TabList[j];
10323 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
10324 tempString := StringReplace(tempString, oldHost, newHost,[]);
10325 TabList[j] := tempString;
10329 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
10331 if FileExists( GikoSys.GetAppDir + Filename) then begin
10332 if FileExists( GikoSys.GetAppDir + bFilename) then
10333 DeleteFile(GikoSys.GetAppDir + bFilename);
10335 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
10336 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
10339 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
10347 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
10348 procedure TGikoForm.OnMinimize;
10350 if FActiveContent <> nil then begin
10351 FIsMinimize := mtMinimizing;
10352 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
10356 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
10357 procedure TGikoForm.OnMinimized;
10359 FIsMinimize := mtMinimized;
10363 procedure TGikoForm.BrowserTabResize(Sender: TObject);
10365 CoolBarResized( Sender, BrowserCoolBar );
10368 // *************************************************************************
10369 // ExternalBoardPlugInMain
10370 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
10371 // *************************************************************************
10372 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
10375 boardPlugIn : TBoardPlugIn;
10378 if not (Sender is TMenuItem) then
10381 item := TMenuItem( Sender );
10382 if not Assigned( Pointer( item.Tag ) ) then
10385 //
\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·
10386 boardPlugIn := TBoardPlugIn( item.Tag );
10387 boardPlugIn.PlugInMenu( item.Handle );
10390 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
10391 procedure TGikoForm.TreeClick( Node : TTreeNode );
10397 if FTreeType = gttHistory then begin
10398 if Node <> nil then
10399 if TObject( Node.Data ) is TFavoriteThreadItem then
10400 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
10401 FavoriteClick( Node );
10405 ActiveListColumnSave;
10407 if TObject(Node.Data) is TBBS then begin
10408 SetActiveList(Node.data);
10409 end else if TObject(Node.Data) is TCategory then begin
10410 SetActiveList(Node.data);
10411 end else if TObject(Node.Data) is TBoard then begin
10412 if not TBoard(Node.Data).IsThreadDatRead then begin
10413 Screen.Cursor := crHourGlass;
10415 if not TBoard(Node.Data).IsThreadDatRead then
10416 GikoSys.ReadSubjectFile(Node.Data);
10418 Screen.Cursor := crDefault;
10421 SetActiveList(Node.data);
10424 if TObject( Node.Data ) is TBoard then begin // not TCategory
10425 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
10426 if GikoSys.Setting.ListWidthState = glsMax then begin
10427 BrowserMinAction.Execute;
10428 if GikoForm.Visible then
10432 if GikoSys.Setting.ListHeightState = glsMax then begin
10433 BrowserMinAction.Execute;
10434 if GikoForm.Visible then
10442 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
10443 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
10446 ThreadItem : TThreadItem;
10447 shiftDown : Boolean;
10450 if Node = nil then Exit;
10452 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
10454 if FTreeType = gtt2ch then begin
10455 if not (TObject(Node.Data) is TBoard) then Exit;
10456 Board := TBoard(Node.Data);
10457 DownloadList(Board, shiftDown);
10458 end else if FTreeType = gttHistory then begin
10459 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
10460 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
10461 DownloadContent(ThreadItem, shiftDown);
10466 procedure TGikoForm.TreeViewClick(Sender: TObject);
10468 TreeClick( TreeView.Selected );
10471 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
10472 Shift: TShiftState);
10474 if Key = VK_BACK then begin
10475 // UpFolderButtonClick(Sender);
10476 end else if Key = VK_SPACE then begin
10477 TreeDoubleClick( TreeView.Selected );
10478 end else if Key = VK_RETURN then begin
10479 TreeClick( TreeView.Selected );
10480 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
10485 //
\83M
\83R
\83i
\83r
\82Ì
\83\81\83b
\83Z
\81[
\83W
\83\8b\81[
\83v
\82ð
\89¡
\8eæ
\82è
\82µ
\82Ü
\82·
10486 procedure TGikoForm.HandleAppMessage(var Msg: TMsg; var Handled: Boolean);
10490 case Msg.message of
10492 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
10493 if IsDialogMessage( FActiveContent.Browser.Handle, Msg ) then begin
10495 Handled := BrowserKeyDown( Msg, key, KeyDataToShiftState( Msg.lParam ) );
10500 case Msg.wParam shr 16 of
10503 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
10504 if IsDialogMessage( FActiveContent.Browser.Handle, Msg ) then begin
10505 UpBoardAction.Execute;
10509 if not Handled then begin
10510 if IsDialogMessage( ListView.Handle, Msg ) then begin
10511 UpFolderAction.Execute;
10521 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
10522 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
10524 favItem : TTreeNode;
10525 favThreadItem : TFavoriteThreadItem;
10531 FMouseDownPos.X := X;
10532 FMouseDownPos.Y := Y;
10536 favItem := FavoriteTreeView.GetNodeAt( X, Y );
10537 if favItem = nil then Exit;
10539 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
10540 favThreadItem := TFavoriteThreadItem( favItem.Data );
10541 if favThreadItem.Item <> nil then
10542 InsertBrowserTab( favThreadItem.Item, False );
10549 procedure TGikoForm.MessagePanelResize(Sender: TObject);
10552 if FIsIgnoreResize <> rtNone then
10555 if GikoSys.Setting.ListOrientation = gloVertical then begin
10556 if GikoSys.Setting.ListHeightState = glsMin then begin
10557 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
10558 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
10564 procedure TGikoForm.OnResized;
10569 FOldFormWidth := Width;
10570 FIsIgnoreResize := rtNone;
10572 case FIsMinimize of
10575 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
10576 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
10581 //
\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)
10582 if FActiveContent <> nil then begin
10583 doc := Idispatch( olevariant(FActiveContent.Browser.ControlInterface).Document) as IHTMLDocument2;
10584 doc.Body.ScrollTop := FActiveContent.Thread.ScrollTop;
10586 FIsMinimize := mtNone;
10592 procedure TGikoForm.TreeSelectNameCopyExecute(Sender: TObject);
10596 TreeView.Selected := FClickNode;
10597 s := FClickNode.Text;
10598 Clipboard.AsText := s;
10601 procedure TGikoForm.FavoriteTreeViewMouseUp(Sender: TObject;
10602 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
10605 if (abs( X - FMouseDownPos.X ) < Mouse.DragThreshold) and
10606 (abs( Y - FMouseDownPos.Y ) < Mouse.DragThreshold) then begin
10607 FavoriteClick( TObject( FavoriteTreeView.Selected ) );
10612 destructor TBrowserRecord.Destroy;
10616 if Self.FEvent <> nil then
10618 if Self.FBrowser <> nil then begin
10619 if Self.Thread <> nil then begin
10620 //
\83^
\83u
\82Ì
\95\9c\8c³
\82Å
\95\9c\8c³
\82³
\82ê
\82½
\83X
\83\8c\82Í
\81A
\95`
\89æ
\82³
\82ê
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\82ª
\82 \82é
\82Ì
\82Å
10621 //
\82»
\82Ì
\82Æ
\82«
\82Ì
\83X
\83N
\83\8d\81[
\83\8b\97Ê
\82ð
\95Û
\91¶
\82µ
\82Ä
\82µ
\82Ü
\82¤
\82Æ
\83g
\83b
\83v
\82É
\96ß
\82Á
\82Ä
\82µ
\82Ü
\82¤
\81B
10622 if Self.FBrowser.OleObject.Document.documentElement.innerText <> '' then begin
10623 doc := Idispatch( olevariant(Self.FBrowser.ControlInterface).Document) as IHTMLDocument2;
10624 Self.Thread.ScrollTop := doc.Body.ScrollTop;
10627 //TOleControl(Self.FBrowser).Visible := false;
10628 ShowWindow(Self.FBrowser.Handle, SW_HIDE);
10633 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
10638 stlist : TStringList;
10639 i, count, rc : Integer;
10645 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then
10646 FActiveContent.Browser.SetFocus;
10649 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
10650 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
10651 e := IHTMLDocument2(FActiveContent.Browser.Document).elementFromPoint(p.x, p.y);
10652 if (Assigned(e)) then begin
10653 if (e.className = 'date') or (e.id = 'date') then begin
10654 AID := e.innerText;
10655 if AnsiPos('id', AnsiLowerCase(AID)) > 0 then begin
10656 AID := Copy(AID, AnsiPos('id', AnsiLowerCase(AID)) - 1, 11);
10657 if AnsiPos(' be:', AnsiLowerCase(AID)) > 0 then begin
10658 AID := Copy(AID, 1, AnsiPos(' BE:', AnsiLowerCase(AID)) - 1)
10661 stlist := TStringList.Create;
10663 stList.DelimitedText := AID;
10665 for i := 0 to stList.Count - 1 do
10666 if Length(WideString(stList[i])) = 8 then begin
10667 if GikoSys.NotDateorTimeString(stList[i]) then begin
10676 count := GikoSys.GetSameIDResCount(AID, FActiveContent.Thread);
10678 if count > 20 then begin
10679 rc := GikoUtil.MsgBox(Handle,
10680 '20
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
10681 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
10682 MB_YESNO or MB_ICONQUESTION);
10683 limited := rc <> ID_YES;
10685 body := GikoSys.GetSameIDResAnchor(AID, FActiveContent.Thread, limited);
10686 IDAnchorPopup(body);
10696 procedure TGikoForm.SetFocusForBrowserActionExecute(Sender: TObject);
10698 FActiveContent.FBrowser.SetFocus;
10700 //
\83u
\83\89\83E
\83U
\82ª
\82 \82Á
\82Ä
\81ANULL
\83^
\83u
\97p
\82Ì
\82È
\82¯
\82ê
\82Î
\97L
\8cø
\82É
\82È
\82éAction
\82Å
\8b¤
\92Ê
10701 procedure TGikoForm.SetFocusForBrowserActionUpdate(Sender: TObject);
10704 //
\96³
\82
\82Ä
\82à
\82¢
\82¢IF
\95¶
\81@
\83R
\81[
\83h
\82©
\82ç
\96³
\97\9d\82â
\82è
\8cÄ
\82Î
\82È
\82¢
\82È
\82ç
\83`
\83F
\83b
\83N
\82µ
\82È
\82
\82Ä
\82à
\81c
10705 if (Sender <> nil) and (Sender is TAction) then begin
10707 if( FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
10708 (FActiveContent.Browser <> BrowserNullTab.Browser) then
10709 TAction(Sender).Enabled := true
10711 TAction(Sender).Enabled := false;
10717 procedure TGikoForm.SetFocusForThreadListActionExecute(Sender: TObject);
10719 if FActiveContent <> nil then
10720 WebBrowserClick(FActiveContent.Browser); //
\88ê
\89ñBrowser
\82É
\93\96\82Ä
\82È
\82¢
\82Æ
\93®
\82©
\82È
\82¢
\82Æ
\82«
\82ª
\82 \82é
10723 if( ListView.Items.Count > 0 ) and (ListView.ItemFocused = nil) then
10724 ListView.Items.Item[0].Selected := true; //
\91I
\91ð
\83A
\83C
\83e
\83\80\82ª
\96³
\82¢
\82Æ
\82«
\82Í
\90æ
\93ª
\82Ì
\82ð
\91I
\91ð
\82·
\82é
10726 //
\83X
\83N
\83\8d\81[
\83\8b\82³
\82¹
\82é
10727 if (ListView.ItemFocused <> nil) then begin
10728 ListView.ItemFocused.MakeVisible(False);
10732 procedure TGikoForm.SetFocusForCabinetActionExecute(Sender: TObject);
10734 if FActiveContent <> nil then
10735 WebBrowserClick(FActiveContent.Browser); //
\88ê
\89ñBrowser
\82É
\93\96\82Ä
\82È
\82¢
\82Æ
\93®
\82©
\82È
\82¢
\82Æ
\82«
\82ª
\82 \82é
10736 if TreeView.Visible then begin
10738 if(TreeView.Items.Count > 0) and ( TreeView.Selected = nil ) then
10739 TreeView.Items.Item[0].Selected := true;
10740 end else if FavoriteTreeView.Visible then begin
10741 FavoriteTreeView.SetFocus;
10742 if(FavoriteTreeView.Items.Count > 0) and (FavoriteTreeView.Selected = nil) then
10743 FavoriteTreeView.Items.Item[0].Selected := true;
10746 procedure TGikoForm.SetFocusForCabinetActionUpdate(Sender: TObject);
10748 SetFocusForCabinetAction.Enabled := CabinetPanel.Visible;
10751 //
\83u
\83\89\83E
\83U
\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
\81B
10752 procedure TGikoForm.BrowserMaxAndFocusActionExecute(Sender: TObject);
10754 BrowserMaxAction.Execute;
10755 SetFocusForBrowserAction.Execute;
10758 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
10759 procedure TGikoForm.ThreadlistMaxAndFocusActionExecute(Sender: TObject);
10761 BrowserMinAction.Execute;
10762 SetFocusForThreadListAction.Execute;
10765 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
10767 SelectTimer.Interval := 0;
10768 if not (ListView.Selected = nil) then
10769 if( FActiveContent = nil) or
10770 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
10775 procedure TGikoForm.SelectItemSaveForDatExecute(Sender: TObject);
10780 List := TList.Create;
10782 Screen.Cursor := crHourGlass;
10783 SelectListItem(List);
10784 if ((GikoSys.Setting.ListOrientation = gloVertical) and
10785 (GikoSys.Setting.ListHeightState = glsMax)) or
10786 ((GikoSys.Setting.ListOrientation = gloHorizontal) and
10787 (GikoSys.Setting.ListWidthState = glsMax)) then
10788 ShowMessage('
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\95\
\8e¦
\82µ
\82Ä
\82
\82¾
\82³
\82¢')
10789 else if(List.Count = 0) then
10790 ShowMessage('
\83X
\83\8c\83b
\83h
\82ð
\91I
\91ð
\82µ
\82Ä
\82
\82¾
\82³
\82¢')
10792 FileSaveAs1.Dialog.Title := '
\91I
\91ð
\83X
\83\8c\83b
\83h
\82ðdat
\82Ì
\82Ü
\82Ü
\95Û
\91¶';
10793 FileSaveAs1.Dialog.Filter := 'DAT
\83t
\83@
\83C
\83\8b(*.dat)|*.dat';
10794 for i := 0 to List.Count - 1 do begin
10795 if (TObject(List[i]) is TThreadItem) and (TThreadItem(List[i]).IsLogFile) then begin
10796 FileSaveAs1.Dialog.FileName := TThreadItem(List[i]).FileName;
10797 if FileSaveAs1.Dialog.Execute then begin
10798 CopyFile(PChar(TThreadItem(List[i]).FilePath),
10799 PChar(FileSaveAs1.Dialog.FileName), true);
10805 Screen.Cursor := crDefault;
10811 procedure TGikoForm.SelectItemSaveForHTMLExecute(Sender: TObject);
10818 List := TList.Create;
10820 Screen.Cursor := crHourGlass;
10821 SelectListItem(List);
10822 if ((GikoSys.Setting.ListOrientation = gloVertical) and
10823 (GikoSys.Setting.ListHeightState = glsMax)) or
10824 ((GikoSys.Setting.ListOrientation = gloHorizontal) and
10825 (GikoSys.Setting.ListWidthState = glsMax)) then
10826 ShowMessage('
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\95\
\8e¦
\82µ
\82Ä
\82
\82¾
\82³
\82¢')
10827 else if(List.Count = 0) then
10828 ShowMessage('
\83X
\83\8c\83b
\83h
\82ð
\91I
\91ð
\82µ
\82Ä
\82
\82¾
\82³
\82¢')
10830 FileSaveAs1.Dialog.Title := '
\91I
\91ð
\83X
\83\8c\83b
\83h
\82ðHTML
\89»
\82µ
\82Ä
\95Û
\91¶';
10831 FileSaveAs1.Dialog.Filter := 'HTML
\83t
\83@
\83C
\83\8b(*.html)|*.html';
10832 for i := 0 to List.Count - 1 do begin
10833 if (TObject(List[i]) is TThreadItem) and (TThreadItem(List[i]).IsLogFile) then begin
10834 FileSaveAs1.Dialog.FileName := ReplaseNoValidateChar(TThreadItem(List[i]).Title) + '.html';
10835 if FileSaveAs1.Dialog.Execute then begin
10836 html := TStringList.Create;
10837 title := TThreadItem(List[i]).Title;
10839 HTMLCreater.CreateHTML3(html, TThreadItem(List[i]), title);
10840 html.SaveToFile(FileSaveAs1.Dialog.FileName);
10841 SkinorCSSFilesCopy(ExtractFilePath(FileSaveAs1.Dialog.FileName));
10850 Screen.Cursor := crDefault;
10854 procedure TGikoForm.SkinorCSSFilesCopy(path: string);
10856 tmp, tmpD, tmpF: string;
10859 files: TStringList;
10862 if GikoSys.Setting.UseSkin then begin
10863 current := ExtractFilePath(GikoSys.GetSkinDir);
10864 tmp := GikoSys.Setting.CSSFileName;
10865 end else if GikoSys.Setting.UseCSS then begin
10866 current := ExtractFilePath(GikoSys.GetStyleSheetDir);
10867 tmp := ExtractFilePath(GikoSys.GetStyleSheetDir + GikoSys.Setting.CSSFileName);
10869 dirs := TStringList.Create;
10872 if tmp <> current then begin
10873 GikoSys.GetDirectoryList(current, '*.*', dirs, true);
10874 for i := 0 to dirs.Count - 1 do begin
10875 files := TStringList.Create;
10878 gikoSys.GetFileList(dirs[i], '*.*', files, true);
10880 tmpD := CustomStringReplace(dirs[i], GikoSys.GetConfigDir, path);
10881 if (AnsiPos(dirs[i], tmp) <> 0) and not (DirectoryExists(tmpD)) then
10882 ForceDirectories(tmpD);
10884 if(dirs[i] = tmp) and (dirs[i] <> current) then begin
10885 for j := 0 to files.Count - 1 do begin
10886 tmpF := CustomStringReplace(files[j], GikoSys.GetConfigDir, path);
10887 if not FileExists(tmpF) then begin
10888 CopyFile(PChar(files[j]), PChar(tmpF),True);
10897 tmpD := CustomStringReplace(dirs[0], GikoSys.GetConfigDir, path);
10898 if not DirectoryExists(tmpD) then
10899 ForceDirectories(tmpD);
10900 tmpF := CustomStringReplace(GikoSys.GetStyleSheetDir + GikoSys.Setting.CSSFileName
10901 , GikoSys.GetConfigDir, path);
10902 if not FileExists(tmpF) then begin
10903 CopyFile(PChar(GikoSys.GetStyleSheetDir + GikoSys.Setting.CSSFileName)
10904 , PChar(tmpF), True);
10913 procedure TGikoForm.KidokuActionExecute(Sender: TObject);
10918 List := TList.Create;
10920 SelectListItem(List);
10921 for i := 0 to List.Count - 1 do begin
10922 if TObject(List[i]) is TThreadItem then begin
10923 if (TThreadItem(List[i]).UnRead) then begin
10924 TThreadItem(List[i]).UnRead := false;
10925 TThreadItem(List[i]).ParentBoard.UnRead := TThreadItem(List[i]).ParentBoard.UnRead - 1;
10929 if TreeView.Visible then
10931 if ListView.Visible then
10938 procedure TGikoForm.MidokuActionExecute(Sender: TObject);
10943 List := TList.Create;
10945 SelectListItem(List);
10946 for i := 0 to List.Count - 1 do begin
10947 if TObject(List[i]) is TThreadItem then begin
10948 if (TThreadItem(List[i]).IsLogFile) and (not TThreadItem(List[i]).UnRead) then begin
10949 TThreadItem(List[i]).UnRead := true;
10950 TThreadItem(List[i]).ParentBoard.UnRead := TThreadItem(List[i]).ParentBoard.UnRead + 1;
10954 if TreeView.Visible then
10956 if ListView.Visible then
10963 procedure TGikoForm.LogFolderOpenActionExecute(Sender: TObject);
10967 if ((GikoSys.Setting.ListOrientation = gloVertical) and
10968 (GikoSys.Setting.ListHeightState = glsMax)) or
10969 ((GikoSys.Setting.ListOrientation = gloHorizontal) and
10970 (GikoSys.Setting.ListWidthState = glsMax)) then begin
10971 if(GetActiveContent <> nil) then begin
10972 GikoSys.CreateProcess('explorer.exe', '/e,"' + ExtractFilePath(GetActiveContent.FilePath) + '"');
10974 end else if GetActiveList is TCategory then begin
10975 List := TList.Create;
10977 SelectListItem(List);
10978 GikoSys.CreateProcess('explorer.exe', '/e,"' + ExtractFilePath(TBoard(List[0]).FilePath) + '"');
10982 end else if GetActiveList is TBoard then begin
10983 GikoSys.CreateProcess('explorer.exe', '/e,"' + ExtractFilePath(TBoard(GetActiveList).FilePath) + '"');
10988 function TGikoForm.GetTabURLs(AStringList: TStringList) : Boolean;
10990 rec : TBrowserRecord;
10991 i, bound : Integer;
10993 bound := BrowserTab.Tabs.Count -1;
10994 if bound = -1 then begin
10996 Exit; //for
\82É
\94ò
\82Î
\82È
\82¢
\82Å
\91\80\8dì
\82ð
\94²
\82¯
\82é
10999 for i := 0 to bound do begin
11000 rec := TBrowserRecord( BrowserTab.Tabs.Objects[ i ] );
11001 if( rec <> nil) and (rec.Thread <> nil) then
11002 AStringList.Add( rec.Thread.URL );
11007 procedure TGikoForm.TabsSaveActionExecute(Sender: TObject);
11010 if not SaveTabURLs then begin
11011 if TabsSaveAction.Tag = 0 then
11012 ShowMessage('
\95Û
\91¶
\82·
\82é
\83^
\83u
\82ª
\82 \82è
\82Ü
\82¹
\82ñ')
11013 else if TabsSaveAction.Tag = 1 then
11014 GikoForm.TabsOpenAction.Tag := -1;
11018 function TGikoForm.SaveTabURLs : Boolean;
11020 Filename = 'tab.sav';
11021 bFilename = '~tab.sav';
11023 SaveStringList: TStringList;
11027 SaveStringList := TStringList.Create;
11029 if GetTabURLs(SaveStringList) then begin
11030 if FileExists( GikoSys.GetAppDir + Filename) then begin
11031 if FileExists( GikoSys.GetAppDir + bFilename) then
11032 DeleteFile(GikoSys.GetAppDir + bFilename);
11034 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
11035 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
11037 SaveStringList.SaveToFile(GikoSys.GetAppDir + Filename);
11041 SaveStringList.Free;
11045 procedure TGikoForm.TabsOpenActionExecute(Sender: TObject);
11047 if TabsOpenAction.Tag <> -1 then begin
11048 if not LoadTabURLs then begin
11049 if TabsOpenAction.Tag = 0 then
11050 ShowMessage('
\95\
\8e¦
\82·
\82é
\83^
\83u
\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B');
11055 function TGikoForm.LoadTabURLs : Boolean;
11057 i, bound : Integer;
11058 item : TThreadItem;
11059 URLs : TStringList;
11060 GikoTab : TGikoTabAppend;
11063 if FStartUp then begin
11064 //
\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Ì
11065 //
\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Å
11066 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
11067 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
11068 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
11069 Application.ProcessMessages;
11073 fileName := ExtractFilePath(Application.ExeName) + 'tab.sav';
11074 URLs := TStringList.Create();
11075 GikoTab := GikoSys.Setting.BrowserTabAppend;
11079 if FileExists(fileName) then begin
11080 URLs.LoadFromFile(fileName);
11081 bound := URLs.Count - 1;
11082 if bound > -1 then begin
11083 GikoSys.Setting.BrowserTabAppend := gtpLast;//TGikoTabAppend(1);
11084 for i := 0 to bound do begin
11085 item := BBSsFindThreadFromURL( URLs[ i ] );
11086 if item <> nil then
11087 InsertBrowserTab( item, false );
11094 on EFOpenError do begin
11095 ShowMessage('
\83^
\83u
\83t
\83@
\83C
\83\8b\82ª
\8aJ
\82¯
\82Ü
\82¹
\82ñ');
11099 GikoSys.Setting.BrowserTabAppend := GikoTab;
11105 procedure TGikoForm.OnlyAHundredResActionExecute(Sender: TObject);
11107 FilterList : TStringList;
11109 if (FActiveContent <> nil) and (FActiveContent.FBrowser <> nil)
11110 and (FActiveContent.FBrowser.Busy) then Exit;
11112 FResRangeMenuSelect := 100;
11113 OnlyAHundredResAction.Checked := True;
11115 if GikoSys.ResRange <> 100 then begin
11116 GikoSys.ResRange := 100;
11118 //
\83t
\83B
\83\8b\83^
\95¶
\8e\9a\97ñ
\82ð
\8bó
\82É
\82·
\82é
11119 FilterList := TStringList.Create;
11121 GikoSys.FSelectResFilter.LoadFromStringList( FilterList );
11122 GikoSys.FSelectResFilter.Reverse := False;
11127 FSelectResWord := '';
11128 RepaintAllTabsBrowser();
11132 procedure TGikoForm.OnlyKokoResActionExecute(Sender: TObject);
11134 FilterList : TStringList;
11136 if (FActiveContent <> nil) and (FActiveContent.FBrowser <> nil)
11137 and (FActiveContent.FBrowser.Busy) then Exit;
11139 FResRangeMenuSelect := Ord( grrKoko );
11140 OnlyKokoResAction.Checked := True;
11142 if GikoSys.ResRange <> Ord( grrKoko ) then begin
11143 GikoSys.ResRange := Ord( grrKoko );
11145 //
\83t
\83B
\83\8b\83^
\95¶
\8e\9a\97ñ
\82ð
\8bó
\82É
\82·
\82é
11146 FilterList := TStringList.Create;
11148 GikoSys.FSelectResFilter.LoadFromStringList( FilterList );
11149 GikoSys.FSelectResFilter.Reverse := False;
11154 FSelectResWord := '';
11155 RepaintAllTabsBrowser();
11159 procedure TGikoForm.OnlyNewResActionExecute(Sender: TObject);
11161 FilterList : TStringList;
11163 if (FActiveContent <> nil) and (FActiveContent.FBrowser <> nil)
11164 and (FActiveContent.FBrowser.Busy) then Exit;
11166 FResRangeMenuSelect := Ord( grrNew );
11167 OnlyNewResAction.Checked := True;
11169 if GikoSys.ResRange <> Ord( grrNew ) then begin
11170 GikoSys.ResRange := Ord( grrNew );
11172 //
\83t
\83B
\83\8b\83^
\95¶
\8e\9a\97ñ
\82ð
\8bó
\82É
\82·
\82é
11173 FilterList := TStringList.Create;
11175 GikoSys.FSelectResFilter.LoadFromStringList( FilterList );
11176 GikoSys.FSelectResFilter.Reverse := False;
11181 FSelectResWord := '';
11182 RepaintAllTabsBrowser();
11186 procedure TGikoForm.BrowsBoradHeadActionExecute(Sender: TObject);
11188 RefURL, URL : string;
11192 if GetActiveList is TCategory then begin
11193 List := TList.Create;
11195 SelectListItem(List);
11196 RefURL := TBoard(List[0]).URL;
11200 end else if GetActiveList is TBoard then begin
11201 RefURL := TBoard(GetActiveList).URL
11203 if RefURL <> '' then begin
11204 if RefURL[Length(RefURL)] <> '/' then
11205 URL := RefURL + '/' + 'head.txt'
11207 URL := RefURL + 'head.txt';
11211 ShowMessage('
\94Â
\82ð
\93Á
\92è
\82Å
\82«
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B');
11216 //NG
\83\8f\81[
\83h
\83t
\83@
\83C
\83\8b\82ð
\95Ò
\8fW
\82·
\82é
\82½
\82ß
\82É
\8aJ
\82
11217 procedure TGikoForm.EditNGActionExecute(Sender: TObject);
11219 GikoSys.FAbon.EditNGwords;
11222 procedure TGikoForm.ThreadRangeActionExecute(Sender: TObject);
11224 case GikoSys.Setting.ThreadRange of
11225 gtrAll: AllItemAction.Execute;
11226 gtrLog: LogItemAction.Execute;
11227 gtrNew: NewItemAction.Execute;
11231 procedure TGikoForm.TabAutoSaveActionExecute(Sender: TObject);
11236 procedure TGikoForm.TabAutoLoadActionExecute(Sender: TObject);
11241 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
11242 procedure TGikoForm.ActiveListColumnSave;
11244 ActivListObj : TObject;
11245 i, id, idx : Integer;
11246 BBSOrder : TGikoBBSColumnList;
11247 CategoryOrder : TGikoCategoryColumnList;
11248 BoardOrder : TGikoBoardColumnList;
11251 ActivListObj := ActiveList;
11252 if ActivListObj is TBBS then begin
11253 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
11254 BBSOrder := TGikoBBSColumnList.Create;
11256 for i := 0 to ListView.Columns.Count - 1 do begin
11257 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
11258 idx := ListView.Column[ i ].Tag;
11259 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
11260 BBSOrder.Add( TGikoBBSColumnID( id ) );
11261 //
\95\9d\82Ì
\95Û
\91¶
11262 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
11264 for i := 0 to ListView.Columns.Count - 1 do
11265 //
\8f\87\8f\98\82Ì
\95Û
\91¶
11266 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
11270 end else if ActivListObj is TCategory then begin
11271 //=====
\94Â
\83\8a\83X
\83g =====
11272 CategoryOrder := TGikoCategoryColumnList.Create;
11274 for i := 0 to ListView.Columns.Count - 1 do begin
11275 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
11276 idx := ListView.Column[ i ].Tag;
11277 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
11278 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
11279 //
\95\9d\82Ì
\95Û
\91¶
11280 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
11282 for i := 0 to ListView.Columns.Count - 1 do
11283 //
\8f\87\8f\98\82Ì
\95Û
\91¶
11284 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
11286 CategoryOrder.Free;
11288 end else if ActivListObj is TBoard then begin
11289 //=====
\83X
\83\8c\83\8a\83X
\83g =====
11290 BoardOrder := TGikoBoardColumnList.Create;
11292 for i := 0 to ListView.Columns.Count - 1 do begin
11293 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
11294 idx := ListView.Column[ i ].Tag;
11295 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
11296 BoardOrder.Add( TGikoBoardColumnID( id ) );
11297 //
\95\9d\82Ì
\95Û
\91¶
11298 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
11300 for i := 0 to ListView.Columns.Count - 1 do
11301 //
\8f\87\8f\98\82Ì
\95Û
\91¶
11302 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
11310 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
11311 Column: TListColumn; Point: TPoint);
11317 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
11318 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
11319 ListColumnPopupMenu.Items.Items[ i ].Free;
11321 //
\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¢)
11322 if TObject( FActiveList ) is TBBS then begin
11324 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
11325 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
11326 item := TMenuItem.Create( ListColumnPopupMenu );
11327 item.Caption := GikoBBSColumnCaption[ i ];
11329 item.OnClick := ListColumnPopupMenuOnClick;
11330 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
11331 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
11332 item.Checked := True;
11336 ListColumnPopupMenu.Items.Add( item );
11339 end else if TObject( FActiveList ) is TCategory then begin
11341 //=====
\94Â
\83\8a\83X
\83g =====
11342 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
11343 item := TMenuItem.Create( ListColumnPopupMenu );
11344 item.Caption := GikoCategoryColumnCaption[ i ];
11346 item.OnClick := ListColumnPopupMenuOnClick;
11347 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
11348 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
11349 item.Checked := True;
11353 ListColumnPopupMenu.Items.Add( item );
11356 end else if TObject( FActiveList ) is TBoard then begin
11358 //=====
\83X
\83\8c\83\8a\83X
\83g =====
11359 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
11360 item := TMenuItem.Create( ListColumnPopupMenu );
11361 item.Caption := GikoBoardColumnCaption[ i ];
11363 item.OnClick := ListColumnPopupMenuOnClick;
11364 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
11365 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
11366 item.Checked := True;
11370 ListColumnPopupMenu.Items.Add( item );
11375 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
11376 Point := ListView.ClientToScreen( Point );
11377 if ListColumnPopupMenu.Items.Count > 0 then
11378 ListColumnPopupMenu.Popup( Point.X, Point.Y );
11382 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
11383 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
11390 if not (Sender is TMenuItem) then
11393 ActiveListColumnSave;
11394 item := TMenuItem( Sender );
11396 if TObject( FActiveList ) is TBBS then
11397 orderList := GikoSys.Setting.BBSColumnOrder
11398 else if TObject( FActiveList ) is TCategory then
11399 orderList := GikoSys.Setting.CategoryColumnOrder
11400 else if TObject( FActiveList ) is TBoard then
11401 orderList := GikoSys.Setting.BoardColumnOrder
11405 if item.Checked then begin
11406 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
11407 for i := orderList.Count - 1 downto 0 do begin
11408 if Integer( orderList[ i ] ) = item.Tag then begin
11409 orderList.Delete( i );
11414 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
11415 orderList.Add( Pointer( item.Tag ) );
11418 SetActiveList( FActiveList );
11421 //
\8ew
\92è
\82µ
\82½
\94Ô
\8d\86\82Ì
\83\8c\83X
\82Éjump
\82·
\82éAction
11422 procedure TGikoForm.JumpToNumOfResActionExecute(Sender: TObject);
11428 if( InputQuery('
\8ew
\92è
\82µ
\82½
\94Ô
\8d\86\82Ì
\83\8c\83X
\82É
\94ò
\82Ô', '
\94Ô
\8d\86\82ð
\93ü
\97Í
\82µ
\82Ä
\82
\82¾
\82³
\82¢', str) ) then begin
11429 str := ZenToHan(str);
11430 res := StrToIntDef(str, -1);
11431 if (res > 0) and (res <= GetActiveContent.Count) then begin
11432 BrowserMovement(IntToStr(res), FActiveContent);
11433 SetFocusForBrowserAction.Execute;
11434 end else if res > GetActiveContent.Count then begin
11435 BrowserMovement(IntToStr(GetActiveContent.Count), FActiveContent);
11436 SetFocusForBrowserAction.Execute;
11441 procedure TGikoForm.FavoriteTreeViewCollapseActionExecute(Sender: TObject);
11446 node := FavoriteTreeView.Items.GetFirstNode;
11447 while node <> nil do begin
11448 if node.HasChildren then
11449 node.Expanded := False;
11450 node := node.GetNext;
11454 procedure TGikoForm.ReleaseBrowser( BRecord: TBrowserRecord);
11456 if BRecord <> nil then begin
11457 BRecord.Browser := nil;
11458 if BRecord.FEvent <> nil then begin
11459 BRecord.FEvent.Free;
11460 BRecord.FEvent := nil;
11462 BRecord.Repaint := true;
11466 procedure TGikoForm.OnGestureStart(Sender: TObject);
11471 procedure TGikoForm.OnGestureMove(Sender: TObject);
11478 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
11480 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
11481 s := MouseGesture.GetGestureStr;
11483 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
11484 if Action <> nil then
11485 ActStr := '
\81i' + Action.Caption + '
\81j';
11486 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
11487 StatusBar.Panels[1].Text := s;
11490 procedure TGikoForm.OnGestureEnd(Sender: TObject);
11495 s := MouseGesture.GetGestureStr;
11496 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
11497 if Action <> nil then
11499 StatusBar.Panels[1].Text := '';
11502 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
11503 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
11505 ThreadItem: TThreadItem;
11507 DefaultDraw := true;
11508 if TObject(Item.Data) is TThreadItem then begin
11509 ThreadItem := TThreadItem(Item.Data);
11510 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
11511 ListView.Canvas.Brush.Color := FOddColor;
11512 //
\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
11513 if (GikoSys.Setting.UnFocusedBold) and
11514 (Item.Selected) and (not ListView.Focused) then begin
11515 ListView.Canvas.Font.Style := [fsBold];
11518 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
11521 if ThreadItem.UnRead then
11522 ListView.Canvas.Font.Style := [fsBold];
11527 procedure TGikoForm.FormActivate(Sender: TObject);
11529 if GikoSys.Setting.GestureEnabled then begin
11530 GikoSys.Setting.Gestures.ClearGesture;
11531 GikoSys.Setting.Gestures.LoadGesture(
11532 GikoSys.Setting.GetGestureFileName, ActionList );
11533 MouseGesture.UnHook;
11534 MouseGesture.OnGestureStart := OnGestureStart;
11535 MouseGesture.OnGestureMove := OnGestureMove;
11536 MouseGesture.OnGestureEnd := OnGestureEnd;
11537 MouseGesture.SetHook(Handle);
11539 //MouseGesture.UnHook;
11540 MouseGesture.OnGestureStart := nil;
11541 MouseGesture.OnGestureMove := nil;
11542 MouseGesture.OnGestureEnd := nil;
11546 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
11548 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
11549 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
11553 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
11555 coolSet : TCoolSet;
11556 toolbar : TToolBar;
11558 affectedBand : TCoolBand;
11561 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
11562 FIsIgnoreResize := rtResizing;
11563 PostMessage( Handle, USER_RESIZED, 0, 0 );
11565 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
11566 if CoolBar = MainCoolBar then begin
11567 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
11568 CoolSet.FCoolID := CoolBar.Bands[i].ID;
11569 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
11570 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
11571 GikoSys.Setting.MainCoolSet[i] := CoolSet;
11573 end else if CoolBar = ListCoolBar then begin
11574 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
11575 CoolSet.FCoolID := CoolBar.Bands[i].ID;
11576 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
11577 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
11578 GikoSys.Setting.ListCoolSet[i] := CoolSet;
11580 end else if CoolBar = BrowserCoolBar then begin
11581 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
11582 CoolSet.FCoolID := CoolBar.Bands[i].ID;
11583 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
11584 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
11585 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
11588 if not (Sender is TToolBar) or (CoolBar = nil) then
11590 toolbar := TToolBar( Sender );
11591 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
11592 affectedBand := nil;
11593 for i := CoolBar.Bands.Count - 1 downto 0 do begin
11594 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
11595 band := CoolBar.Bands[ i ];
11596 if band.Break or (i = 0) then begin
11597 if i + 1 < CoolBar.Bands.Count then
11598 if not CoolBar.Bands[ i + 1 ].Break then
11599 affectedBand := CoolBar.Bands[ i + 1 ];
11602 affectedBand := CoolBar.Bands[ i - 1 ];
11607 //
\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·
11608 if CoolBar = MainCoolBar then begin
11609 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
11610 coolSet.FCoolWidth := toolbar.Width + 25;
11611 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
11612 if affectedBand <> nil then begin
11613 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
11614 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
11615 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
11617 end else if CoolBar = ListCoolBar then begin
11618 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
11619 coolSet.FCoolWidth := toolbar.Width + 25;
11620 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
11621 if affectedBand <> nil then begin
11622 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
11623 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
11624 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
11626 end else if CoolBar = BrowserCoolBar then begin
11627 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
11628 coolSet.FCoolWidth := toolbar.Width + 25;
11629 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
11630 if affectedBand <> nil then begin
11631 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
11632 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
11633 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
11640 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
11642 CoolBarResized( Sender, MainCoolBar );
11645 procedure TGikoForm.ListToolBarResize(Sender: TObject);
11647 CoolBarResized( Sender, ListCoolBar );
11650 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
11652 CoolBarResized( Sender, BrowserCoolBar );
11655 procedure TGikoForm.RightTabCloseActionExecute(Sender: TObject);
11660 idx := BrowserTab.TabIndex;
11661 if idx = -1 then Exit;
11662 BrowserTab.Tabs.BeginUpdate;
11663 for i := BrowserTab.Tabs.Count - 1 downto idx + 1 do begin
11664 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
11665 BrowserTab.Tabs.Delete(i);
11667 BrowserTab.Tabs.EndUpdate;
11669 //
\83u
\83\89\83E
\83U
\83^
\83u
\82ª
\82Q
\82Â
\88È
\8fã
\82 \82ê
\82Î
\97L
\8cø
\82É
\82È
\82é
\83A
\83N
\83V
\83\87\83\93\82Å
\8b¤
\92Ê
\89»
11670 procedure TGikoForm.RightTabCloseActionUpdate(Sender: TObject);
11673 //
\96³
\82
\82Ä
\82à
\82¢
\82¢IF
\95¶
\81@
\83R
\81[
\83h
\82©
\82ç
\96³
\97\9d\82â
\82è
\8cÄ
\82Î
\82È
\82¢
\82È
\82ç
\83`
\83F
\83b
\83N
\82µ
\82È
\82
\82Ä
\82à
\81c
11674 if (Sender <> nil) and (Sender is TAction) then begin
11676 TAction(Sender).Enabled := (BrowserTab.Tabs.Count > 1);
11682 procedure TGikoForm.LeftTabCloseActionExecute(Sender: TObject);
11687 idx := BrowserTab.TabIndex;
11688 if idx = -1 then Exit;
11689 BrowserTab.Tabs.BeginUpdate;
11690 if idx > 0 then begin
11691 for i := idx - 1 downto 0 do begin
11692 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
11693 BrowserTab.Tabs.Delete(i);
11696 BrowserTab.Tabs.EndUpdate;
11699 procedure TGikoForm.SameIDResAnchorActionExecute(Sender: TObject);
11701 ThreadItem : TThreadItem;
11702 No, count, rc : Integer;
11706 No := KokoPopupMenu.Tag;
11707 if No = 0 then Exit;
11708 ThreadItem := GetActiveContent;
11709 if ThreadItem = nil then Exit;
11710 count := GikoSys.GetSameIDResCount(No, FActiveContent.Thread);
11712 if count > 20 then begin
11713 rc := GikoUtil.MsgBox(Handle,
11714 '20
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
11715 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
11716 MB_YESNO or MB_ICONQUESTION);
11717 limited := rc <> ID_YES;
11719 body := GikoSys.GetSameIDResAnchor(No, ThreadItem, limited);
11720 IDAnchorPopup(body);
11722 //ID
\83A
\83\93\83J
\81[
\92Ç
\89Á
11723 procedure TGikoForm.IDAnchorPopup(Abody :string);
11725 firstElement: IHTMLElement;
11726 document: IHTMLDocument2;
11727 docAll: IHTMLElementCollection;
11732 document := FActiveContent.Browser.Document as IHTMLDocument2;
11734 if Assigned(document) then begin
11735 docAll := document.all;
11736 firstElement := docAll.item('idSearch', 0) as IHTMLElement;
11737 if (Assigned(firstElement)) then begin
11738 if Length(Abody) > 0 then begin
11739 doc := Idispatch( olevariant(FActiveContent.Browser.ControlInterface).Document) as IHTMLDocument2;
11740 nCSS := '<p id="idSearch" style="position:absolute;top:' + IntToStr(doc.Body.ScrollTop + 10) + 'px;right:5px;' //
11741 + 'background-color:window; border:outset 1px infobackground; z-index:10; overflow-y:auto; border-top:none">'
11743 firstElement.outerHTML := nCSS;
11744 firstElement.style.visibility := 'visible';
11746 firstElement.outerHTML := '<p id="idSearch"></p>';
11747 firstElement.style.visibility := 'hidden';
11749 end else if (Assigned(firstElement)) then begin
11750 firstElement.outerHTML := '<p id="idSearch"></p>';
11751 firstElement.style.visibility := 'hidden';
11757 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
11758 procedure TGikoForm.IndividualAbon1ActionExecute(Sender: TObject);
11760 IndividualAbon(KokoPopupMenu.Tag, 1);
11762 //
\82±
\82Ì
\83\8c\83X
\93§
\96¾
\82 \82Ú
\81`
\82ñ
11763 procedure TGikoForm.IndividualAbon0ActionExecute(Sender: TObject);
11765 IndividualAbon(KokoPopupMenu.Tag, 0);
11768 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
11769 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
11771 ThreadItem : TThreadItem;
11772 ReadList : TStringList;
11773 wordCount : TWordCount;
11775 ThreadItem := GetActiveContent;
11776 ReadList := TStringList.Create;
11777 wordCount := TWordCount.Create;
11779 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
11780 {$IFDEF SPAM_FILTER_ENABLED}
11781 //
\83X
\83p
\83\80\82É
\90Ý
\92è
11782 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
11783 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
11784 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
11785 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
11787 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
11788 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
11793 FActiveContent.Repaint := true;
11794 if ThreadItem <> nil then
11795 InsertBrowserTab( ThreadItem, True );
11798 procedure TGikoForm.AntiIndividualAbonActionExecute(Sender: TObject);
11800 IndividualForm :TIndividualAbonForm;
11801 ThreadItem : TThreadItem;
11803 ReadList : TStringList;
11804 wordCount : TWordCount;
11806 IndividualForm := TIndividualAbonForm.Create(Self);
11808 ThreadItem := GetActiveContent;
11809 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
11810 if (ThreadItem <> nil) and (ThreadItem.IsLogFile) then begin
11811 if IndividualForm.SetThreadLogFileName(ThreadItem.GetThreadFileName) then begin
11812 ReadList := TStringList.Create;
11813 wordCount := TWordCount.Create;
11815 {$IFDEF SPAM_FILTER_ENABLED}
11816 //
\83X
\83p
\83\80\82ð
\89ð
\8f\9c
11817 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
11818 GikoSys.SpamCountWord( ReadList[ KokoPopupMenu.Tag - 1 ], wordCount );
11819 GikoSys.SpamForget( wordCount, True ); //
\83X
\83p
\83\80\82ð
\89ð
\8f\9c
11820 GikoSys.SpamLearn( wordCount, False ); //
\83n
\83\80\82É
\90Ý
\92è
11822 if IndividualForm.DeleteNG(KokoPopupMenu.Tag) then begin
11823 FActiveContent.Repaint := true;
11824 InsertBrowserTab( ThreadItem, True );
11831 msg := '
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Å
\82Í
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\82ð
\8ds
\82Á
\82Ä
\82Ü
\82¹
\82ñ';
11832 MsgBox(Handle, msg, '
\83\81\83b
\83Z
\81[
\83W', MB_OK);
11836 IndividualForm.Release;
11840 procedure TGikoForm.AntiIndividualAbonDlgActionExecute(Sender: TObject);
11842 IndividualForm :TIndividualAbonForm;
11843 ThreadItem : TThreadItem;
11845 ReadList : TStringList;
11846 wordCount : TWordCount;
11847 {$IFDEF SPAM_FILTER_ENABLED}
11851 IndividualForm := TIndividualAbonForm.Create(Self);
11853 ThreadItem := GetActiveContent;
11854 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
11855 if (ThreadItem <> nil) and (ThreadItem.IsLogFile) then begin
11856 if IndividualForm.SetThreadLogFileName(ThreadItem.GetThreadFileName) then begin
11857 if (IndividualForm.ShowModal = mrOK) then begin
11858 ReadList := TStringList.Create;
11859 wordCount := TWordCount.Create;
11861 {$IFDEF SPAM_FILTER_ENABLED}
11862 //
\83X
\83p
\83\80\82ð
\89ð
\8f\9c
11863 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
11864 for i := 0 to IndividualForm.DeleteList.Count - 1 do begin
11865 GikoSys.SpamCountWord( ReadList[ StrToInt(IndividualForm.DeleteList[i]) - 1 ], wordCount );
11866 GikoSys.SpamForget( wordCount, True ); //
\83X
\83p
\83\80\82ð
\89ð
\8f\9c
11867 GikoSys.SpamLearn( wordCount, False ); //
\83n
\83\80\82É
\90Ý
\92è
11870 if IndividualForm.FRepaint then begin
11871 FActiveContent.Repaint := true;
11872 InsertBrowserTab( ThreadItem, True );
11880 msg := '
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Å
\82Í
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\82ð
\8ds
\82Á
\82Ä
\82Ü
\82¹
\82ñ';
11881 MsgBox(Handle, msg, '
\83\81\83b
\83Z
\81[
\83W', MB_OK);
11885 IndividualForm.Release;
11889 procedure TGikoForm.IndividualAbonID1ActionExecute(Sender: TObject);
11891 IndividualAbonID(1);
11894 procedure TGikoForm.IndividualAbonID0ActionExecute(Sender: TObject);
11896 IndividualAbonID(0);
11898 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
11899 procedure TGikoForm.IndividualAbonID(Atype : Integer);
11901 ThreadItem : TThreadItem;
11903 body : TStringList;
11904 ReadList : TStringList;
11905 wordCount : TWordCount;
11907 No := KokoPopupMenu.Tag;
11908 if No = 0 then Exit;
11909 ThreadItem := GetActiveContent;
11910 if ThreadItem = nil then Exit;
11911 body := TStringList.Create;
11913 GikoSys.GetSameIDRes(No, ThreadItem, body);
11915 ReadList := TStringList.Create;
11916 wordCount := TWordCount.Create;
11918 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
11919 {$IFDEF SPAM_FILTER_ENABLED}
11920 //
\83X
\83p
\83\80\82É
\90Ý
\92è
11921 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
11923 for i := 0 to body.Count - 1 do begin
11924 {$IFDEF SPAM_FILTER_ENABLED}
11925 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
11926 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
11927 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
11929 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
11930 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
11936 FActiveContent.Repaint := true;
11937 if ThreadItem <> nil then
11938 InsertBrowserTab( ThreadItem, True );
11945 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
11947 firstElement: IHTMLElement;
11948 document: IHTMLDocument2;
11950 document := FActiveContent.Browser.Document as IHTMLDocument2;
11951 if Assigned(document) then
11952 firstElement := document.all.item('idSearch', 0) as IHTMLElement;
11953 if Assigned(firstElement) then
11954 if firstElement.style.visibility <> 'hidden' then
11955 firstElement.style.visibility := 'hidden';
11959 procedure TGikoForm.MuteActionExecute(Sender: TObject);
11961 GikoSys.Setting.Mute := not GikoSys.Setting.Mute;
11964 procedure TGikoForm.SortActiveColumnActionExecute(Sender: TObject);
11968 for i := 0 to ListView.Columns.Count - 1 do begin
11969 if (ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT1) or
11970 (ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT2) then begin
11971 FSortOrder := not FSortOrder;
11972 ListViewSort( nil, ListView.Column[ i ] );
11978 procedure TGikoForm.SortNextColumnActionExecute(Sender: TObject);
11982 for i := 0 to ListView.Columns.Count - 1 do begin
11983 if (ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT1) or
11984 (ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT2) then begin
11986 if id > ListView.Columns.Count - 1 then
11988 FSortOrder := id = 0;
11989 ListViewSort( nil, ListView.Column[ id ] );
11995 procedure TGikoForm.SortPrevColumnActionExecute(Sender: TObject);
11999 for i := 0 to ListView.Columns.Count - 1 do begin
12000 if (ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT1) or
12001 (ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT2) then begin
12004 id := ListView.Columns.Count - 1;
12005 FSortOrder := id = 0;
12006 ListViewSort( nil, ListView.Column[ id ] );
12013 procedure TGikoForm.RepaintAllTabsBrowser();
12016 ThreadItem: TThreadItem;
12018 for i := BrowserTab.Tabs.Count - 1 downto 0 do
12019 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
12021 ThreadItem := GetActiveContent;
12022 if ThreadItem <> nil then
12023 InsertBrowserTab( ThreadItem, True );
12027 procedure TGikoForm.MessageListViewAdvancedCustomDrawItem(
12028 Sender: TCustomListView; Item: TListItem; State: TCustomDrawState;
12029 Stage: TCustomDrawStage; var DefaultDraw: Boolean);
12031 //if DiffComp then begin
12032 //if Odd(Item.Index) then Sender.Canvas.Brush.Color := clBlue;
12033 //DiffComp := False;
12037 procedure TGikoForm.BeLogInOutActionExecute(Sender: TObject);
12039 GikoSys.Setting.BeLogin := not GikoSys.Setting.BeLogin;
12042 procedure TGikoForm.BeLogInOutActionUpdate(Sender: TObject);
12044 if (GikoSys.Setting.BeUserID <> '') and (GikoSys.Setting.BeCode <> '') then begin
12045 if (GikoSys.Setting.BeLogin) then BeLogInOutAction.Checked := true
12046 else BeLogInOutAction.Checked := false;
12047 BeLogInOutAction.Enabled := true
12049 BeLogInOutAction.Enabled := false;
12052 //
\83\8a\83\93\83N
\82Ì
\95¶
\8e\9a\97ñ
\82©
\82ç
\83\8c\83X
\83|
\83b
\83v
\83A
\83b
\83v
\97p
\82ÌURL
\82É
\95Ï
\8a·
\82·
\82é
12053 function TGikoForm.GetRespopupURL(AText, AThreadURL : string): string;
12058 if Pos('about:blank..', AText) = 1 then begin
12059 wkInt := LastDelimiter( '/', AThreadURL );
12060 if Pos( '?', Copy( AThreadURL, wkInt, MaxInt ) ) = 0 then begin
12061 // Thread.URL
\82Í PATH_INFO
\93n
\82µ
12062 Result := Copy( AThreadURL, 1, LastDelimiter( '/', AThreadURL ) );
12063 wkInt := LastDelimiter( '/', AText );
12064 if Pos( '?', Copy( AText, wkInt, MaxInt ) ) = 0 then
12065 // Text
\82à PATH_INFO
\93n
\82µ
12066 Result := Result + Copy( AText, LastDelimiter( '/', AText ) + 1, MaxInt )
12068 // Text
\82Í QUERY_STRING
\93n
\82µ
12069 Result := Result + Copy( AText, LastDelimiter( '?', AText ) + 1, MaxInt );
12071 // Thread.URL
\82Í QUERY_STRING
\93n
\82µ
12072 Result := Copy( AThreadURL, 1, LastDelimiter( '?', AThreadURL ) );
12073 wkInt := LastDelimiter( '/', AText );
12074 if Pos( '?', Copy( Text, wkInt, MaxInt ) ) = 0 then begin
12075 // Text
\82Í PATH_INFO
\93n
\82µ
12076 // URL
\82É
\94Â
\82Æ
\83L
\81[
\82ª
\91«
\82ç
\82È
\82¢
\82Ì
\82Å Text
\82©
\82ç
\92¸
\91Õ
\82·
\82é
12077 wkInt := LastDelimiter( '/', Copy( AText, 1, wkInt - 1 ) );
12078 wkInt := LastDelimiter( '/', Copy( AText, 1, wkInt - 1 ) );
12079 Result := Copy( Result, 1, Length( Result ) - 1 ) + Copy( AText, wkInt, MaxInt );
12081 // Text
\82à QUERY_STRING
\93n
\82µ
12082 Result := Result + Copy( Text, LastDelimiter( '?', AText ) + 1, MaxInt )
12085 end else if Pos('about:blank/bbs/', AText) = 1 then begin
12086 //
\82µ
\82½
\82ç
\82ÎJBBS
\82Ì
\8ed
\95Ï
\82Ì
\8bz
\8eû
12087 AText := CustomStringReplace(AText, 'about:blank/bbs/', 'about:blank../../bbs/');
12088 Result := GetRespopupURL(AText, AThreadURL);
12094 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
12095 procedure TGikoForm.UnSelectedListViewActionExecute(Sender: TObject);
12097 if ListView.Selected <> nil then begin
12098 ListView.Selected.Focused := True;
12099 ListView.Selected := nil;
12103 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
12104 Shift: TShiftState);
12106 //
\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Ì
12107 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
12108 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
12109 SelectTimer.Interval := 0;
12110 if not (GikoSys.Setting.BrowserTabVisible) then begin
12111 if (GetActiveList is TBoard) then begin
12112 //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
12113 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
12114 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
12115 (Key = VK_UP) or (Key = VK_DOWN)) then
12116 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
12120 //TAction
\82ÅGetActiveContent
\82ªnil
\88È
\8aO
\82Å
\97L
\8cø
\82É
\82È
\82é
12121 procedure TGikoForm.DependActiveCntentActionUpdate(Sender: TObject);
12124 //
\96³
\82
\82Ä
\82à
\82¢
\82¢IF
\95¶
\81@
\83R
\81[
\83h
\82©
\82ç
\96³
\97\9d\82â
\82è
\8cÄ
\82Î
\82È
\82¢
\82È
\82ç
\83`
\83F
\83b
\83N
\82µ
\82È
\82
\82Ä
\82à
\81c
12125 if (Sender <> nil) and (Sender is TAction) then begin
12127 TAction(Sender).Enabled := (GetActiveContent <> nil);
12132 //TAction
\82ÅGetActiveContent
\82ªnil
\88È
\8aO
\82©
\82Â
\83\8d\83O
\82ð
\8e\9d\82Á
\82Ä
\82¢
\82é
12133 procedure TGikoForm.DependActiveCntentLogActionUpdate(Sender: TObject);
12136 //
\96³
\82
\82Ä
\82à
\82¢
\82¢IF
\95¶
\81@
\83R
\81[
\83h
\82©
\82ç
\96³
\97\9d\82â
\82è
\8cÄ
\82Î
\82È
\82¢
\82È
\82ç
\83`
\83F
\83b
\83N
\82µ
\82È
\82
\82Ä
\82à
\81c
12137 if (Sender <> nil) and (Sender is TAction) then begin
12139 TAction(Sender).Enabled := (GetActiveContent <> nil) and (GetActiveContent.IsLogFile);
12144 //TAction
\82ÅActiveList
\82ªTBoard
\82Å
\97L
\8cø
\82É
\82È
\82é
12145 procedure TGikoForm.DependActiveListTBoardActionUpdate(Sender: TObject);
12148 //
\96³
\82
\82Ä
\82à
\82¢
\82¢IF
\95¶
\81@
\83R
\81[
\83h
\82©
\82ç
\96³
\97\9d\82â
\82è
\8cÄ
\82Î
\82È
\82¢
\82È
\82ç
\83`
\83F
\83b
\83N
\82µ
\82È
\82
\82Ä
\82à
\81c
12149 if (Sender <> nil) and (Sender is TAction) then begin
12151 TAction(Sender).Enabled := (GetActiveList is TBoard);
12157 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
12158 Node: TTreeNode; var AllowEdit: Boolean);
12160 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
12161 FOrigenCaption := Node.Text;
12163 //
\97á
\8aO
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO
\82ð
\8f\88\97\9d\82·
\82é
12164 procedure TGikoForm.AppException(Sender: TObject; E: Exception);
12168 if (Sender <> nil) then begin
12169 s := ' [' + Sender.ClassName + ']' + #13#10;
12171 s := ' [ Sender is nil ] ' + #13#10;
12173 s := s + E.Message;
12174 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
12179 OleInitialize(nil);