6 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
7 OleCtrls, ComCtrls, ExtCtrls, Menus, StdCtrls, MMSystem, DateUtils,
15 IdHTTP, ActiveX, Clipbrd, Buttons, ToolWin, {HTTPApp,} YofUtils, IdComponent,
16 ShellAPI, ImgList, ActnList, UrlMon, Tabs, IdGlobal, StrUtils,
18 GikoSystem, GikoUtil, Setting, BoardGroup, ThreadControl, ItemDownload,
19 Editor, RoundData, RoundName, KeySetting, GikoPanel, Favorite, FavoriteAdd,
20 FavoriteArrange, AddressHistory, Preview, HTMLDocumentEvent, Kotehan,
21 HintWindow, GikoCoolBar, GikoListView, ToolBarSetting, ToolBarUtil,
22 IndividualAbon, Dialogs, Search;
25 TGikoTreeType = (gttNone, gtt2ch, gttHistory);
27 TGikoForm = class(TForm)
28 StatusBar: TStatusBar;
31 TreeSplitter: TSplitter;
34 ThreadMainPanel: TPanel;
35 ListSplitter: TSplitter;
37 ListView: TGikoListView;
42 MessageHideButton: TSpeedButton;
43 MessageListView: TListView;
44 MessageSplitter: TSplitter;
46 SpeedButton1: TSpeedButton;
48 CabinetSelectToolButton: TToolButton;
49 HistoryToolBar: TToolBar;
50 ToolButton15: TToolButton;
51 ToolButton18: TToolButton;
52 ItemIcon16: TImageList;
53 ItemIcon32: TImageList;
54 HotToobarImageList: TImageList;
55 ToobarImageList: TImageList;
56 ItemImageList: TImageList;
57 ActionList: TActionList;
58 LogDeleteAction: TAction;
59 KidokuAction: TAction;
60 StdToolBarVisibleAction: TAction;
61 SearchAction: TAction;
62 GikoNaviWebPageAction: TAction;
65 MsgBarVisibleAction: TAction;
66 StatusBarVisibleAction: TAction;
67 LargeIconAction: TAction;
68 SmallIconAction: TAction;
69 ListIconAction: TAction;
70 DetailIconAction: TAction;
71 Cabinet2chAction: TAction;
72 CabinetHistoryAction: TAction;
73 CabinetVisibleAction: TAction;
74 MidokuAction: TAction;
75 AllSelectAction: TAction;
76 UpFolderAction: TAction;
77 ListNumberVisibleAction: TAction;
78 AllItemAction: TAction;
79 LogItemAction: TAction;
80 NewItemAction: TAction;
81 SelectItemAction: TAction;
82 ShowThreadAction: TAction;
86 DeleteMenu: TMenuItem;
88 KidokuMenu: TMenuItem;
89 MidokuMenu: TMenuItem;
90 AllSelectMenu: TMenuItem;
92 StdToolBarMenu: TMenuItem;
93 CabinetMenu: TMenuItem;
97 CabinetVisibleMenu: TMenuItem;
98 MessageMenu: TMenuItem;
99 StatusBarMenu: TMenuItem;
101 LargeIconMenu: TMenuItem;
102 SmallIconMenu: TMenuItem;
104 DetailMenu: TMenuItem;
107 RoundMenu: TMenuItem;
109 OptionMenu: TMenuItem;
113 AboutMenu: TMenuItem;
115 BrowserPopupMenu: TPopupMenu;
116 ShowThreadMenu: TMenuItem;
117 ShowBoardMenu: TMenuItem;
118 ShowBoardAction: TAction;
119 ListIconPopupMenu: TPopupMenu;
120 LargeIconPMenu: TMenuItem;
121 SmallIconPMenu: TMenuItem;
122 ListPMenu: TMenuItem;
123 DetailPMenu: TMenuItem;
124 CabinetCloseAction: TAction;
125 ClosePopupMenu: TPopupMenu;
126 CloseMenu: TMenuItem;
127 OptionAction: TAction;
137 RoundAction: TAction;
138 ListPopupMenu: TPopupMenu;
139 ListRoundPMenu: TMenuItem;
140 ListReservPMenu: TMenuItem;
142 ItemRoundPMenu: TMenuItem;
144 KidokuPMenu: TMenuItem;
145 MidokuPMenu: TMenuItem;
146 AllSelectPMenu: TMenuItem;
147 UrlCopyPMenu: TMenuItem;
149 DeletePMenu: TMenuItem;
151 ViewPMenu: TMenuItem;
152 LargeIconLPMenu: TMenuItem;
153 SmallIconLPMenu: TMenuItem;
154 ListLPMenu: TMenuItem;
155 DetailLPMenu: TMenuItem;
159 URLCopyAction: TAction;
163 MsgBarCloseAction: TAction;
164 ScrollTopAction: TAction;
165 ScrollLastAction: TAction;
166 ScrollNewAction: TAction;
167 ScrollKokoAction: TAction;
168 EditorAction: TAction;
170 ItemReloadAction: TAction;
171 BrowserMaxAction: TAction;
183 SelectListReloadAction: TAction;
184 SelectThreadReloadAction: TAction;
186 KokoPopupMenu: TPopupMenu;
187 KokomadePMenu: TMenuItem;
189 MenuItem1: TMenuItem;
190 MenuItem2: TMenuItem;
191 BrowserTabCloseAction: TAction;
192 BrowserTabPopupMenu: TPopupMenu;
194 KokomadeAction: TAction;
195 ZenbuAction: TAction;
196 KokoResAction: TAction;
197 SelectItemURLCopyAction: TAction;
198 SelectReservAction: TAction;
199 NotSelectTabCloseAction: TAction;
203 TreePopupMenu: TPopupMenu;
204 TreeSelectThreadPupupMenu: TMenuItem;
205 TreeSelectBoardPupupMenu: TMenuItem;
207 TreeSelectURLPupupMenu: TMenuItem;
208 TreeSelectBoradReload: TAction;
209 TreeSelectThreadReload: TAction;
210 TreeSelectURLCopy: TAction;
211 ListToolBarVisibleAction: TAction;
212 BrowserToolBarVisibleAction: TAction;
216 BrowserBottomPanel: TGikoPanel;
217 CabinetSelectPopupMenu: TPopupMenu;
220 ItemReservPMenu: TMenuItem;
221 RoundNamePopupMenu: TPopupMenu;
222 SelectNewRoundName: TAction;
223 SelectDeleteRound: TAction;
224 NewBoardAction: TAction;
227 LoginAction: TAction;
229 KeySettingAction: TAction;
231 AllTabCloseAction: TAction;
241 MessageImageList: TImageList;
242 ProgressBar: TProgressBar;
243 ArrangeAction: TAction;
245 NameURLCopyAction: TAction;
246 SelectItemNameURLCopyAction: TAction;
247 NameUrlCopyPMenu: TMenuItem;
255 ListCoolBar: TGikoCoolBar;
256 ListToolBar: TToolBar;
257 ViewNoButton: TToolButton;
258 IconToolButton: TToolButton;
259 UpFolderButton: TToolButton;
260 Sepa01ToolButton: TToolButton;
261 AllItemToolButton: TToolButton;
262 LogItemToolButton: TToolButton;
263 NewItemToolButton: TToolButton;
264 ListDownloadToolButton: TToolButton;
265 ListThreadDownloadToolButton: TToolButton;
266 ToolButton2: TToolButton;
267 ToolButton1: TToolButton;
268 BrowserCoolBar: TGikoCoolBar;
269 BrowserToolBar: TToolBar;
270 BrowserSizeButton: TToolButton;
271 ToolButton3: TToolButton;
272 TopButton: TToolButton;
273 LastBotton: TToolButton;
274 NewButton: TToolButton;
275 KokoButton: TToolButton;
276 ToolButton9: TToolButton;
277 EditorButton: TToolButton;
278 ToolButton11: TToolButton;
279 IEButton: TToolButton;
280 ToolButton5: TToolButton;
281 ItemReloadButton: TToolButton;
282 ListNameToolBar: TToolBar;
283 ListNameLabel: TLabel;
285 BrowserNameToolBar: TToolBar;
286 ItemBoardImage: TImage;
287 BrowserBoardNameLabel: TLabel;
289 BrowserNameLabel: TLabel;
290 ActiveLogDeleteAction: TAction;
295 ListNameBarVisibleAction: TAction;
297 BrowserNameBarVisibleAction: TAction;
300 TreeSelectNameURLCopy: TAction;
301 TreeSelectNameURLPupupMenu: TMenuItem;
304 PaneInitAction: TAction;
306 BrowserTabToolBar: TToolBar;
307 BrowserTab: TTabControl;
308 ToolButton7: TToolButton;
309 BrowserMinAction: TAction;
312 SelectTextClearAction: TAction;
313 MailTextClearAction: TAction;
314 NameTextClearAction: TAction;
318 LeftmostTabSelectAction: TAction;
319 LeftTabSelectAction: TAction;
320 RightTabSelectAction: TAction;
321 RightmostTabSelectAction: TAction;
327 FavoriteMenu: TMenuItem;
328 FavoriteAddAction: TAction;
330 BoardFavoriteAddMenu: TMenuItem;
331 BoardFavoriteAddAction: TAction;
332 ThreadFavoriteAddAction: TAction;
333 ThreadFavoriteAddMenu: TMenuItem;
334 TreeSelectFavoriteAddAction: TAction;
336 TreeSelectFavoriteAddPupupMenu: TMenuItem;
337 FavoriteArrangeAction: TAction;
338 FavoriteTreeView: TTreeView;
339 StateIconImageList: TImageList;
341 TopRightPanel: TPanel;
344 TopCoolPanel: TPanel;
345 MainCoolBar: TGikoCoolBar;
346 MenuToolBar: TToolBar;
347 StdToolBar: TToolBar;
348 RoundToolButton: TToolButton;
349 ToolButton6: TToolButton;
350 CabinetToolButton: TToolButton;
351 ToolButton4: TToolButton;
352 ToolButton13: TToolButton;
353 AbortToolButton: TToolButton;
354 LoginToolButton: TToolButton;
355 AddressToolBar: TToolBar;
356 AddressComboBox: TComboBox;
357 MoveToToolButton: TToolButton;
358 MoveToAction: TAction;
359 AddressImageList: TImageList;
360 AddressBarVisibleAction: TAction;
361 AddressToolBarMenu: TMenuItem;
363 BrowserTabVisibleAction: TAction;
366 BrowserTabTopAction: TAction;
367 BrowserTabBottomAction: TAction;
371 BrowserTabTabStyleAction: TAction;
372 BrowserTabButtonStyleAction: TAction;
373 BrowserTabFlatStyleAction: TAction;
377 PreviewTimer: TTimer;
378 MonazillaWebPageAction: TAction;
379 MonazillaWebPageAction1: TMenuItem;
380 GikoHelpAction: TAction;
383 KotehanAction: TAction;
385 LinkBarVisibleAction: TAction;
389 ChevronPopupMenu: TPopupMenu;
390 BBS2chWebPageAction: TAction;
393 GikoFolderOpenAction: TAction;
395 LinkToolBar: TToolBar;
397 ToolButton8: TToolButton;
398 ToolButton10: TToolButton;
399 ThreadEditorAction: TAction;
403 LinkBarPopupMenu: TPopupMenu;
404 ToolBarSettingAction: TAction;
406 ToolButton12: TToolButton;
407 ToolButton14: TToolButton;
408 ThreadPopupMenu: TPopupMenu;
409 MenuItem4: TMenuItem;
410 MenuItem5: TMenuItem;
411 MenuItem6: TMenuItem;
413 NameCopyAction: TAction;
414 BoardIEAction: TAction;
416 SelectItemNameCopyAction: TAction;
417 SelectItemNameCopyAction1: TMenuItem;
421 SelectComboBox: TComboBox;
422 MainCoolBarPopupMenu: TPopupMenu;
423 StdToolBarVisiblePMenu: TMenuItem;
424 AddressToolBarVisiblePMenu: TMenuItem;
425 LinkToolBarVisiblePMenu: TMenuItem;
446 SelectItemToolButton: TToolButton;
447 SelectResToolButton: TToolButton;
448 SelectResAction: TAction;
449 ToolButton16: TToolButton;
450 AllResAction: TAction;
451 AllResToolButton: TToolButton;
459 ReloadAction: TAction;
460 GoFowardAction: TAction;
461 GoBackAction: TAction;
462 SelectComboBoxSplitter: TImage;
463 IndividualAbon1: TMenuItem;
465 IndividualAbon2: TMenuItem;
467 CancellIndividualAbon: TAction;
468 AntiIndividualAbon: TMenuItem;
473 SearchBoardName: TMenuItem;
475 TreeSelectSearchBoardName: TAction;
476 CabinetFavoriteAction: TAction;
479 FavoriteTreePopupMenu: TPopupMenu;
480 FavoriteTreeViewRenameAction: TAction;
481 FavoriteTreeRenamePopupMenu: TMenuItem;
482 FavoriteTreeViewNewFolderAction: TAction;
483 FavoriteTreeNewFolderPopupMenu: TMenuItem;
485 FavoriteTreeViewDeleteAction: TAction;
486 FavoriteTreeDeletePopupMenu: TMenuItem;
487 FavoriteToolBar: TToolBar;
488 ToolButton17: TToolButton;
489 ToolButton19: TToolButton;
490 FavoriteTreeViewBrowseFolderAction: TAction;
491 FavoriteTreeBrowseFolderPopupMenu: TMenuItem;
493 FavoriteTreeReloadPopupMenu: TMenuItem;
495 FavoriteTreeURLCopyPopupMenu: TMenuItem;
496 FavoriteTreeNameCopyPopupMenu: TMenuItem;
497 FavoriteTreeLogDeletePopupMenu: TMenuItem;
499 FavoriteTreeNameURLCopyPopupMenu: TMenuItem;
500 FavoriteTreeViewReloadAction: TAction;
501 FavoriteTreeViewURLCopyAction: TAction;
502 FavoriteTreeViewNameCopyAction: TAction;
503 FavoriteTreeViewNameURLCopyAction: TAction;
504 FavoriteTreeViewLogDeleteAction: TAction;
505 OnlyAHundredRes: TAction;
506 ToolButton20: TToolButton;
507 AHundredResButton: TToolButton;
508 procedure FormCreate(Sender: TObject);
509 procedure FormDestroy(Sender: TObject);
510 procedure CabinetPanelHide(Sender: TObject);
511 procedure FormClose(Sender: TObject; var Action: TCloseAction);
512 procedure TreeViewChange(Sender: TObject; Node: TTreeNode);
513 procedure ListViewData(Sender: TObject; Item: TListItem);
514 procedure ListViewDataFind(Sender: TObject; Find: TItemFind;
515 const FindString: String; const FindPosition: TPoint;
516 FindData: Pointer; StartIndex: Integer; Direction: TSearchDirection;
517 Wrap: Boolean; var Index: Integer);
518 procedure ListViewDataHint(Sender: TObject; StartIndex,
520 procedure ListViewDataStateChange(Sender: TObject; StartIndex,
521 EndIndex: Integer; OldState, NewState: TItemStates);
522 procedure BrowserStatusTextChange(Sender: TObject;
523 const Text: WideString);
524 procedure BrowserTitleChange(Sender: TObject; const Text: WideString);
525 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
526 procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
527 var AllowChange: Boolean);
528 procedure ListViewKeyDown(Sender: TObject; var Key: Word;
530 procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
531 procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
532 Button: TToolButton; State: TCustomDrawState;
533 var DefaultDraw: Boolean);
534 procedure BrowserBeforeNavigate2(Sender: TObject;
535 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
536 Headers: OleVariant; var Cancel: WordBool);
537 procedure ListViewAdvancedCustomDrawItem(Sender: TCustomListView;
538 Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage;
539 var DefaultDraw: Boolean);
540 procedure TreeViewCustomDraw(Sender: TCustomTreeView;
541 const ARect: TRect; var DefaultDraw: Boolean);
542 procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
543 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
544 procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
545 procedure TreeViewDblClick(Sender: TObject);
546 procedure FavoriteTreeViewClick(Sender: TObject);
547 procedure ListViewCustomDraw(Sender: TCustomListView;
548 const ARect: TRect; var DefaultDraw: Boolean);
549 procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
550 Shift: TShiftState; X, Y: Integer);
551 procedure TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
552 procedure MessageListViewResize(Sender: TObject);
553 procedure ExitActionExecute(Sender: TObject);
554 procedure AllSelectActionExecute(Sender: TObject);
555 procedure StdToolBarVisibleActionExecute(Sender: TObject);
556 procedure MsgBarVisibleActionExecute(Sender: TObject);
557 procedure StatusBarVisibleActionExecute(Sender: TObject);
558 procedure LargeIconActionExecute(Sender: TObject);
559 procedure SmallIconActionExecute(Sender: TObject);
560 procedure ListIconActionExecute(Sender: TObject);
561 procedure DetailIconActionExecute(Sender: TObject);
562 procedure SearchActionExecute(Sender: TObject);
563 procedure OptionActionExecute(Sender: TObject);
564 procedure GikoNaviWebPageActionExecute(Sender: TObject);
565 procedure AboutActionExecute(Sender: TObject);
566 procedure Cabinet2chActionExecute(Sender: TObject);
567 procedure CabinetHistoryActionExecute(Sender: TObject);
568 procedure CabinetVisibleActionExecute(Sender: TObject);
569 procedure AllItemActionExecute(Sender: TObject);
570 procedure LogItemActionExecute(Sender: TObject);
571 procedure NewItemActionExecute(Sender: TObject);
572 procedure SelectItemActionExecute(Sender: TObject);
573 procedure ListNumberVisibleActionExecute(Sender: TObject);
574 procedure UpFolderActionExecute(Sender: TObject);
575 procedure IconStyleExecute(Sender: TObject);
576 procedure RoundActionExecute(Sender: TObject);
577 procedure StopActionExecute(Sender: TObject);
578 procedure MsgBarCloseActionExecute(Sender: TObject);
579 procedure BrowserMaxActionExecute(Sender: TObject);
580 procedure ScrollTopActionExecute(Sender: TObject);
581 procedure ScrollLastActionExecute(Sender: TObject);
582 procedure ScrollNewActionExecute(Sender: TObject);
583 procedure ScrollKokoActionExecute(Sender: TObject);
584 procedure EditorActionExecute(Sender: TObject);
585 procedure IEActionExecute(Sender: TObject);
586 procedure ShowThreadActionExecute(Sender: TObject);
587 procedure ShowBoardActionExecute(Sender: TObject);
588 procedure URLCopyActionExecute(Sender: TObject);
589 procedure ItemReloadActionExecute(Sender: TObject);
590 procedure SelectListReloadActionExecute(Sender: TObject);
591 procedure SelectThreadReloadActionExecute(Sender: TObject);
592 procedure SelectListReloadActionUpdate(Sender: TObject);
593 procedure AllItemActionUpdate(Sender: TObject);
594 procedure LogItemActionUpdate(Sender: TObject);
595 procedure NewItemActionUpdate(Sender: TObject);
596 procedure SelectItemActionUpdate(Sender: TObject);
597 procedure UpFolderActionUpdate(Sender: TObject);
598 procedure FormResize(Sender: TObject);
599 procedure ScrollTopActionUpdate(Sender: TObject);
600 procedure ScrollLastActionUpdate(Sender: TObject);
601 procedure ScrollNewActionUpdate(Sender: TObject);
602 procedure ScrollKokoActionUpdate(Sender: TObject);
603 procedure EditorActionUpdate(Sender: TObject);
604 procedure IEActionUpdate(Sender: TObject);
605 procedure ShowThreadActionUpdate(Sender: TObject);
606 procedure ShowBoardActionUpdate(Sender: TObject);
607 procedure SelectThreadReloadActionUpdate(Sender: TObject);
608 procedure ListViewSelectItem(Sender: TObject; Item: TListItem;
610 procedure SelectTimerTimer(Sender: TObject);
611 procedure ItemReloadActionUpdate(Sender: TObject);
612 procedure ListViewDblClick(Sender: TObject);
613 procedure LogDeleteActionExecute(Sender: TObject);
614 procedure KokomadeActionExecute(Sender: TObject);
615 procedure ZenbuActionExecute(Sender: TObject);
616 procedure KokoResActionExecute(Sender: TObject);
617 procedure ListPopupMenuPopup(Sender: TObject);
618 procedure SelectItemURLCopyActionExecute(Sender: TObject);
619 procedure SelectItemURLCopyActionUpdate(Sender: TObject);
620 procedure AllSelectActionUpdate(Sender: TObject);
621 procedure LogDeleteActionUpdate(Sender: TObject);
622 procedure BrowserTabCloseActionExecute(Sender: TObject);
623 procedure NotSelectTabCloseActionExecute(Sender: TObject);
624 procedure TreeSelectBoradReloadExecute(Sender: TObject);
625 procedure TreeSelectThreadReloadExecute(Sender: TObject);
626 procedure TreeSelectURLCopyExecute(Sender: TObject);
627 procedure TreePopupMenuPopup(Sender: TObject);
628 procedure ListToolBarVisibleActionExecute(Sender: TObject);
629 procedure BrowserToolBarVisibleActionExecute(Sender: TObject);
630 procedure BrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
631 var Cancel: WordBool);
632 procedure ListSplitterCanResize(Sender: TObject; var NewSize: Integer;
633 var Accept: Boolean);
634 procedure ListSplitterMoved(Sender: TObject);
635 procedure BrowserTabChange(Sender: TObject);
636 procedure BrowserTabMouseDown(Sender: TObject; Button: TMouseButton;
637 Shift: TShiftState; X, Y: Integer);
638 procedure BrowserTabDragOver(Sender, Source: TObject; X, Y: Integer;
639 State: TDragState; var Accept: Boolean);
640 procedure BrowserTabDragDrop(Sender, Source: TObject; X, Y: Integer);
641 procedure BrowserTabMouseMove(Sender: TObject; Shift: TShiftState; X,
643 procedure BrowserDocumentComplete(Sender: TObject;
644 const pDisp: IDispatch; var URL: OleVariant);
645 procedure SelectReservActionUpdate(Sender: TObject);
646 procedure RoundNamePopupMenuPopup(Sender: TObject);
647 procedure SelectNewRoundNameExecute(Sender: TObject);
648 procedure SelectDeleteRoundExecute(Sender: TObject);
649 procedure SelectReservActionExecute(Sender: TObject);
650 procedure NewBoardActionExecute(Sender: TObject);
651 procedure LoginActionExecute(Sender: TObject);
652 procedure KeySettingActionExecute(Sender: TObject);
653 procedure AllTabCloseActionExecute(Sender: TObject);
654 procedure ArrangeActionExecute(Sender: TObject);
655 procedure NameURLCopyActionExecute(Sender: TObject);
656 procedure SelectItemNameURLCopyActionExecute(Sender: TObject);
657 procedure URLCopyActionUpdate(Sender: TObject);
658 procedure NameURLCopyActionUpdate(Sender: TObject);
659 procedure BrowserTabCloseActionUpdate(Sender: TObject);
660 procedure NotSelectTabCloseActionUpdate(Sender: TObject);
661 procedure AllTabCloseActionUpdate(Sender: TObject);
662 procedure SelectItemNameURLCopyActionUpdate(Sender: TObject);
663 procedure ActiveLogDeleteActionExecute(Sender: TObject);
664 procedure ActiveLogDeleteActionUpdate(Sender: TObject);
665 procedure ListNameBarVisibleActionExecute(Sender: TObject);
666 procedure BrowserNameBarVisibleActionExecute(Sender: TObject);
667 procedure TreeSelectNameURLCopyExecute(Sender: TObject);
668 procedure PaneInitActionExecute(Sender: TObject);
669 procedure FormShow(Sender: TObject);
670 procedure BrowserTabToolBarResize(Sender: TObject);
671 procedure BrowserMinActionExecute(Sender: TObject);
672 procedure SelectTextClearActionExecute(Sender: TObject);
673 procedure NameTextClearActionExecute(Sender: TObject);
674 procedure MailTextClearActionExecute(Sender: TObject);
675 procedure LeftmostTabSelectActionExecute(Sender: TObject);
676 procedure LeftTabSelectActionExecute(Sender: TObject);
677 procedure RightTabSelectActionExecute(Sender: TObject);
678 procedure RightmostTabSelectActionExecute(Sender: TObject);
679 procedure LeftmostTabSelectActionUpdate(Sender: TObject);
680 procedure LeftTabSelectActionUpdate(Sender: TObject);
681 procedure RightTabSelectActionUpdate(Sender: TObject);
682 procedure RightmostTabSelectActionUpdate(Sender: TObject);
683 procedure FavoriteMenuClick(Sender: TObject);
684 procedure FavoriteAddActionExecute(Sender: TObject);
685 procedure FavoriteAddActionUpdate(Sender: TObject);
686 procedure BoardFavoriteAddActionExecute(Sender: TObject);
687 procedure BoardFavoriteAddActionUpdate(Sender: TObject);
688 procedure ThreadFavoriteAddActionExecute(Sender: TObject);
689 procedure ThreadFavoriteAddActionUpdate(Sender: TObject);
690 procedure TreeSelectFavoriteAddActionExecute(Sender: TObject);
691 procedure FavoriteArrangeActionExecute(Sender: TObject);
692 procedure MainCoolBarResize(Sender: TObject);
693 procedure MoveToActionExecute(Sender: TObject);
694 procedure AddressToolBarResize(Sender: TObject);
695 procedure AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
697 procedure AddressBarVisibleActionExecute(Sender: TObject);
698 procedure BrowserEnter(Sender: TObject);
699 procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
700 procedure BrowserTabVisibleActionExecute(Sender: TObject);
701 procedure BrowserTabTopActionExecute(Sender: TObject);
702 procedure BrowserTabBottomActionExecute(Sender: TObject);
703 procedure BrowserTabTabStyleActionExecute(Sender: TObject);
704 procedure BrowserTabButtonStyleActionExecute(Sender: TObject);
705 procedure BrowserTabFlatStyleActionExecute(Sender: TObject);
706 procedure PreviewTimerTimer(Sender: TObject);
707 procedure MessageHideButtonClick(Sender: TObject);
708 procedure MonazillaWebPageActionExecute(Sender: TObject);
709 procedure GikoHelpActionExecute(Sender: TObject);
710 procedure ToolButton18Click(Sender: TObject);
711 procedure KotehanActionExecute(Sender: TObject);
712 procedure LinkBarVisibleActionExecute(Sender: TObject);
713 procedure BBS2chWebPageActionExecute(Sender: TObject);
714 procedure GikoFolderOpenActionExecute(Sender: TObject);
715 procedure MainCoolBarBandInfo(Sender: TObject;
716 var BandInfo: PReBarBandInfoA);
717 procedure MainCoolBarChevronClick(Sender: TObject;
718 RebarChevron: PNMRebarChevron);
719 procedure ListCoolBarBandInfo(Sender: TObject;
720 var BandInfo: PReBarBandInfoA);
721 procedure ListCoolBarChevronClick(Sender: TObject;
722 RebarChevron: PNMRebarChevron);
723 procedure BrowserCoolBarBandInfo(Sender: TObject;
724 var BandInfo: PReBarBandInfoA);
725 procedure BrowserCoolBarChevronClick(Sender: TObject;
726 RebarChevron: PNMRebarChevron);
727 procedure ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
728 procedure ThreadEditorActionExecute(Sender: TObject);
729 procedure ThreadEditorActionUpdate(Sender: TObject);
730 procedure ToolBarSettingActionExecute(Sender: TObject);
731 procedure NameCopyActionExecute(Sender: TObject);
732 procedure BoardIEActionExecute(Sender: TObject);
733 procedure SelectItemNameCopyActionExecute(Sender: TObject);
734 procedure SelectItemNameCopyActionUpdate(Sender: TObject);
735 procedure BoardIEActionUpdate(Sender: TObject);
736 procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
737 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
738 procedure NameCopyActionUpdate(Sender: TObject);
739 procedure SelectComboBoxChange(Sender: TObject);
740 procedure SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
742 procedure SelectComboBoxExit(Sender: TObject);
743 procedure NG1Click(Sender: TObject);
744 procedure SelectResActionExecute(Sender: TObject);
745 procedure SelectResActionUpdate(Sender: TObject);
746 procedure FormKeyDown(Sender: TObject; var Key: Word;
748 procedure FormKeyUp(Sender: TObject; var Key: Word;
750 procedure AllResActionExecute(Sender: TObject);
751 procedure AllResActionUpdate(Sender: TObject);
752 procedure ReloadClick(Sender: TObject);
753 procedure GoBackClick(Sender: TObject);
754 procedure GoFowardClick(Sender: TObject);
755 procedure ListCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
756 var Handled: Boolean);
757 procedure BrowserCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
758 var Handled: Boolean);
759 procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
760 var Handled: Boolean);
761 procedure SelectComboBoxSplitterMouseMove(Sender: TObject;
762 Shift: TShiftState; X, Y: Integer);
763 procedure SelectComboBoxSplitterMouseDown(Sender: TObject;
764 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
765 procedure SelectComboBoxSplitterMouseUp(Sender: TObject;
766 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
767 procedure StatusBarResize(Sender: TObject);
768 procedure IndividualAbon1Click(Sender: TObject);
769 procedure IndividualAbon2Click(Sender: TObject);
770 procedure N42Click(Sender: TObject);
771 procedure SelectComboBoxEnter(Sender: TObject);
772 procedure AntiIndividualAbonClick(Sender: TObject);
773 procedure N51Click(Sender: TObject);
774 procedure TreeSelectSearchBoardNameExecute(Sender: TObject);
775 procedure CabinetFavoriteActionExecute(Sender: TObject);
776 procedure FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
778 procedure FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
779 procedure FavoriteTreeViewEdited(Sender: TObject; Node: TTreeNode;
781 procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
783 procedure FavoriteTreePopupMenuPopup(Sender: TObject);
784 procedure FavoriteTreeViewDeleteActionExecute(Sender: TObject);
785 procedure FavoriteTreeViewRenameActionExecute(Sender: TObject);
786 procedure FavoriteTreeViewNewFolderActionExecute(Sender: TObject);
787 procedure ToolButton19Click(Sender: TObject);
788 procedure FavoriteTreeViewBrowseFolderActionExecute(Sender: TObject);
789 procedure FavoriteTreeViewChange(Sender: TObject; Node: TTreeNode);
790 procedure FavoriteTreeViewDblClick(Sender: TObject);
791 procedure FavoriteTreeViewLogDeleteActionExecute(Sender: TObject);
792 procedure FavoriteTreeViewReloadActionExecute(Sender: TObject);
793 procedure FavoriteTreeViewURLCopyActionExecute(Sender: TObject);
794 procedure FavoriteTreeViewNameCopyActionExecute(Sender: TObject);
795 procedure FavoriteTreeViewNameURLCopyActionExecute(Sender: TObject);
796 procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
797 procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
798 Shift: TShiftState; X, Y: Integer);
799 procedure LinkToolBarDragOver(Sender, Source: TObject; X, Y: Integer;
800 State: TDragState; var Accept: Boolean);
801 procedure OnlyAHundredResExecute(Sender: TObject);
808 FEnabledCloseButton: Boolean;
809 // ThreadCreate: TThreadCreate;
811 FClickNode: TTreeNode;
814 FPreviewBrowser: TPreviewBrowser;
817 FBrowserSizeHeight: Integer;
818 FBrowserSizeWidth: Integer;
820 // FFavorite: TFavorite;
821 FBrowserComplete: Boolean;
822 FTabHintIndex: Integer;
823 FListStyle: TViewStyle; //
\83\8a\83X
\83g
\83A
\83C
\83R
\83\93\83X
\83^
\83C
\83\8b
824 FItemNoVisible: Boolean; //
\83\8a\83X
\83g
\94Ô
\8d\86\95\
\8e¦
\83t
\83\89\83O
825 FViewType: TGikoViewType; //
\83\8a\83X
\83g
\83A
\83C
\83e
\83\80\95\
\8e¦
\83^
\83C
\83v
826 FActiveList: TObject;
827 FActiveContent: TThreadItem; //
828 FHistoryList: TList; //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
829 FTreeType: TGikoTreeType;
833 // FLastRoundTime: TDateTime;
834 BrowserNullTab: TThreadItem;
835 // DoubleClickOccurred: array [TMouseButton] of Boolean;
836 FDownloadTitle: string; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\83^
\83C
\83g
\83\8b\96¼
837 FDownloadMax: Integer; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\8dÅ
\91å
\83T
\83C
\83Y
838 FEvent: THTMLDocumentEventSink;//
\83u
\83\89\83E
\83U
\83h
\83L
\83\85\83\81\83\93\83g
\83C
\83x
\83\93\83g
840 Fkeynum : Integer; //
\83L
\81[
\83{
\81[
\83h
\83\8c\83X
\83|
\83b
\83v
\83A
\83b
\83v
\97p
842 IsDraggingSelectComboBox : Boolean;
843 DraggingSelectComboBoxPosition : TPoint;
845 FSearchDialog: TSearchDialog;
847 FTabIsDragging: Integer;
848 FTabMouseDownX, FTabMouseDownY: Integer;
849 FTabMouseUpTime: TDateTime;
850 FLinkToolButtonIsDragging: Integer;
851 FLinkToolButtonMouseDownX, FLinkToolButtonMouseDownY: Integer;
852 FLinkToolButtonMouseUpTime: TDateTime;
854 DropSpaceNode: TTreeNode;
856 procedure SetBoardTreeNode;
857 function SetCategoryListItem(ABBS2ch: TBBS2ch): Integer;
858 function SetBoardListItem(Category: TCategory): Integer;
859 function SetThreadListItem(Board: TBoard): Integer;
860 // function GetRoundName(index: integer): string;
862 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
863 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
864 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer);
865 procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
866 procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
868 procedure SetActiveList(Obj: TObject);
870 procedure ListDoubleClick;
871 procedure BrowserMovement(AName: string);
872 procedure SelectListItem(List: TList);
873 // procedure SetProgressValue(Number: Integer; Value: Integer; Max: Integer = -1);
874 procedure DeleteTab(ThreadItem: TThreadItem);
875 function Hook(var Message: TMessage): Boolean;
876 procedure AddRoundNameMenu(MenuItem: TMenuItem);
877 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
878 procedure SetSelectRoundName(Sender: TObject);
879 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
881 procedure SetMenuFont;
882 // procedure CreateFavMenu(Folder: TFavoriteFolder);
883 procedure CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
884 procedure FavoriteClick(Sender: TObject; ActiveTab: Boolean); overload;
885 procedure FavoriteClick(Sender: TObject); overload;
886 procedure FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
887 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
888 function OnDocumentContextMenu(Sender: TObject): WordBool;
889 // function GetThreadText(sBoard: string; sThread: string; StNum, ToNum: Integer; Title, First: Boolean): string;
890 procedure SetResPopupText(sBoard: string; sThread: string; StNum, ToNum: Integer; Title, First: Boolean);
891 procedure ShowTextPopup;
892 //procedure ShowTextPopup(HintData: THintData);
893 // procedure SetStdToolBar;
894 // function GetAction(ActionName: string): TContainedAction;
895 procedure SetLinkBar;
896 function GetWidthAllToolButton(ToolBar: TToolBar): Integer;
897 procedure MenuBarChevronMenu;
898 procedure LinkBarChevronMenu;
899 procedure ToolBarChevronMenu(ToolBar: TToolBar);
900 procedure ModifySelectList;
901 procedure FavoriteBrowseFolder( node: TTreeNode );
902 procedure LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
903 procedure LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
904 procedure LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
905 procedure LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
906 procedure LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
907 function TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
908 procedure FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
909 procedure FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
910 procedure FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
912 procedure BrowserTabClick(Sender: TObject);
914 procedure CreateParams(var Params: TCreateParams); override;
915 procedure WndProc(var Message: TMessage); override;
916 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
917 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
918 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
921 // FDownload: TDownload;
922 FControlThread: TThreadControl;
923 procedure MoveToURL(URL: string);
924 procedure InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True);
926 function GetHttpState: Boolean;
927 procedure SetEnabledCloseButton(Enabled: Boolean);
928 function GetTreeNode(Data: TObject): TTreeNode;
929 procedure AppFormDeactivate(Sender: TObject);
930 // procedure CabinetPanelVisible(PanelVisible: Boolean);
931 procedure ListViewAllSelect;
933 property ListStyle: TViewStyle read FListStyle write FListStyle;
934 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
935 property ViewType: TGikoViewType read FViewType write FViewType;
937 property NameCookie: string read FNameCookie write FNameCookie;
938 property MailCookie: string read FMailCookie write FMailCookie;
940 procedure SetContent(ThreadItem: TThreadItem);
941 function GetActiveContent: TThreadItem;
942 function GetActiveList: TObject;
944 property ActiveList: TObject read GetActiveList write SetActiveList;
945 // property LastRoundTime: TDateTime read FLastRoundTime write FLastRoundTime;
947 procedure SetListViewType(AViewType: TGikoViewType); overload;
948 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
949 procedure DownloadContent(ThreadItem: TThreadItem);
950 procedure DownloadList(Board: TBoard);
951 procedure PlaySound(SoundEventName: string);
953 function AddHistory(ThreadItem: TThreadItem): Boolean;
954 procedure DeleteHistory(ThreadItem: TThreadItem);
955 procedure ClearHistory;
956 procedure Show2chTree;
957 procedure ShowHistoryTree;
958 procedure SetHistoryTreeNode;
959 // procedure SelectTreeNode(Item: TObject);
960 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
961 procedure SetBrowserTabState;
962 // property Favorite: TFavorite read FFavorite write FFavorite;
963 procedure SetToolBarPopup;
965 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
968 TFavoriteMenuItem = class(TMenuItem)
972 property Data: Pointer read FData write FData;
975 TLinkToolButton = class(TToolButton)
979 property Data: Pointer read FData write FData;
988 About, Option, Round, Splash, Sort, ListSelect,
992 CAPTION_NAME: string = '
\83M
\83R
\83i
\83r';
993 BLANK_HTML: string = 'about:blank';
994 SELECTCOMBOBOX_NAME: string = ''; // '
\83X
\83\8c\83b
\83h
\8di
\8d\9e\8c\9f\8dõ';
995 SELECTCOMBOBOX_COLOR: TColor = clWindow;
997 DandD_THRESHOLD = 5; //D&D
\82Ìè
\87\92l
\81ipixcel)
998 //
\83c
\83\8a\81[
\81E
\83\8a\83X
\83g
\83A
\83C
\83R
\83\93
999 ITEM_ICON_2CH1 = 0; //2ch
\83A
\83C
\83R
\83\93
1000 ITEM_ICON_2CH2 = 1; //2ch
\83A
\83C
\83R
\83\93
1001 ITEM_ICON_CATEGORY1 = 2; //
\83J
\83e
\83S
\83\8a\83A
\83C
\83R
\83\93
1002 ITEM_ICON_CATEGORY2 = 3; //
\83J
\83e
\83S
\83\8a\83A
\83C
\83R
\83\93
1003 ITEM_ICON_BOARD1 = 4; //
\94Â
\83A
\83C
\83R
\83\93
1004 ITEM_ICON_BOARD2 = 5; //
\94Â
\83A
\83C
\83R
\83\93
1005 ITEM_ICON_THREADLOG1 = 6; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
1006 ITEM_ICON_THREADLOG2 = 7; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
1007 ITEM_ICON_THREAD1 = 8; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82È
\82µ
\81j
1008 ITEM_ICON_THREAD2 = 9; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82È
\82µ
\81j
1009 ITEM_ICON_THREADNEW1 = 10; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\90V
\92\85\81j
1010 ITEM_ICON_THREADNEW2 = 11; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\90V
\92\85\81j
1011 ITEM_ICON_SORT1 = 12; //
\83\
\81[
\83g
\83A
\83C
\83R
\83\93
1012 ITEM_ICON_SORT2 = 13; //
\83\
\81[
\83g
\83A
\83C
\83R
\83\93
1014 //
\83c
\81[
\83\8b\83o
\81[
\83A
\83C
\83R
\83\93
1015 TOOL_ICON_HEIGHT_MAX = 16; //
\8d\82\82³
\8dÅ
\91å
\83A
\83C
\83R
\83\93
1016 TOOL_ICON_HEIGHT_MIN = 17; //
\8d\82\82³
\8dÅ
\8f¬
\83A
\83C
\83R
\83\93
1017 TOOL_ICON_HEIGHT_NORMAL = 18; //
\8d\82\82³
\95W
\8f\80\83A
\83C
\83R
\83\93
1018 TOOL_ICON_WIDTH_MAX = 19; //
\95\9d\8dÅ
\91å
\83A
\83C
\83R
\83\93
1019 TOOL_ICON_WIDTH_MIN = 20; //
\95\9d\8dÅ
\8f¬
\83A
\83C
\83R
\83\93
1020 TOOL_ICON_WIDTH_NORMAL = 21; //
\95\9d\95W
\8f\80\83A
\83C
\83R
\83\93
1022 TOOL_ICON_FAV_FOLDER = 30; //
\82¨
\8bC
\82É
\93ü
\82è
\83t
\83H
\83\8b\83_
\83A
\83C
\83R
\83\93
1023 TOOL_ICON_FAV_BOARD = 31; //
\82¨
\8bC
\82É
\93ü
\82è
\94Â
\83A
\83C
\83R
\83\93
1024 TOOL_ICON_FAV_THREAD = 32; //
\82¨
\8bC
\82É
\93ü
\82è
\83X
\83\8c\83A
\83C
\83R
\83\93
1026 HTML_FILE_NAME = 'temp_preview.html';
1030 procedure TGikoForm.CreateParams(var Params: TCreateParams);
1033 if FormStyle in [fsNormal, fsStayOnTop] then begin
1034 if BorderStyle in [bsSingle, bsSizeable] then begin
1035 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
1036 Params.WndParent := 0;
1041 procedure TGikoForm.FormCreate(Sender: TObject);
1043 TVS_NOTOOLTIPS = $0080;
1049 wp: TWindowPlacement;
1054 Writeln('============================================================');
1055 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
1057 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
1058 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¢');
1059 Writeln('============================================================');
1061 Application.OnDeactivate := AppFormDeactivate;
1062 Self.OnDeactivate := AppFormDeactivate;
1063 Application.HookMainWindow(Hook);
1065 FTreeType := gttNone;
1067 FSearchDialog := nil;
1069 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
1070 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
1072 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1073 RoundList := TRoundList.Create;
1074 RoundList.LoadRoundFile;
1077 BBS2ch := TBBS2ch.Create(GikoSys.Setting.LogFolder);
1079 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1080 // FFavorite := TFavorite.Create(FavoriteTreeView);
1081 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1082 FavoriteDM.ReadFavorite;
1084 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1085 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.AddressHistoryCount);
1087 EnabledCloseButton := True;
1088 BoardGroup.BBS2ch.ReadBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1089 // SetBoardTreeNode; //
\83c
\83\8a\81[
\82É
\83{
\81[
\83h
\92Ç
\89Á
1091 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
1092 ListView.ViewStyle := GikoSys.Setting.ListStyle;
1094 //
\83\81\83C
\83\93\83N
\81[
\83\8b\83o
\81[
\88Ê
\92u
1095 // MainCoolBar.Top := 0;
1096 // MainCoolBar.Left := 0;
1098 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
1099 AnimePanel.Top := 0;
1100 AnimePanel.Left := 0;
1102 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
1104 //
\83L
\83\83\83r
\83l
\83b
\83g
1105 CabinetVisibleAction.Checked := not GikoSys.Setting.CabinetVisible;
1106 CabinetVisibleAction.Execute;
1107 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
1109 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
1110 MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
1111 MsgBarVisibleActionExecute(nil);
1112 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
1114 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
1115 StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
1116 StatusBarVisibleActionExecute(nil);
1118 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
1119 TreeView.Items.BeginUpdate;
1120 FavoriteTreeView.Items.BeginUpdate;
1121 ListView.Items.BeginUpdate;
1123 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
1124 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
1125 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
1126 TreeView.Color := GikoSys.Setting.CabinetBackColor;
1128 FavoriteTreeView.Font.Name := GikoSys.Setting.CabinetFontName;
1129 FavoriteTreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
1130 FavoriteTreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
1131 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
1133 ListView.Font.Name := GikoSys.Setting.ListFontName;
1134 ListView.Font.Size := GikoSys.Setting.ListFontSize;
1135 ListView.Font.Color := GikoSys.Setting.ListFontColor;
1136 ListView.Color := GikoSys.Setting.ListBackColor;
1138 TreeView.Items.EndUpdate;
1139 FavoriteTreeView.Items.EndUpdate;
1140 ListView.Items.EndUpdate;
1142 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
1143 ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
1145 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
1146 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1147 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1150 // TreeView.TopItem.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
1151 // TreeView.Selected := TreeView.Items[0]; //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
1152 SetContent(nil); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1154 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1155 wp.length := sizeof(wp);
1156 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1157 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1158 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1159 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1160 wp.showCmd := SW_HIDE;
1161 SetWindowPlacement(Handle, @wp);
1163 // SetBounds(GikoSys.Setting.WindowLeft, GikoSys.Setting.WindowTop,
1164 // GikoSys.Setting.WindowWidth, GikoSys.Setting.WindowHeight);
1165 if GikoSys.Setting.WindowMax then
1166 WindowState := wsMaximized;
1168 //
\83M
\83R
\83A
\83j
\83\81
1170 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1171 if FileExists(FileName) then
1172 Animate.FileName := FileName;
1175 // AnimePanel.Height := 26;
1176 // AnimePanel.Width := 39;
1177 // AnimePanel.Top := 2;
1178 // AnimePanel.Left := Width - 48;
1184 //
\83X
\83\8c\91S
\95\94\95\
\8e¦
\83{
\83^
\83\93\82ð
\89\9f\82³
\82ê
\82½
\8fó
\91Ô
\82É
\82·
\82é
1185 AllItemAction.Checked := True;
1186 AllResAction.Checked := True;
1188 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1189 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1190 Style := Style or TVS_NOTOOLTIPS;
1191 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1193 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1194 TreeView.Align := alClient;
1195 FavoriteTreeView.Align := alClient;
1196 FavoriteTreeView.Visible := False;
1198 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1199 // FBrowserSizeFlag := False;
1200 // FBrowserSizeHeight := ViewPanel.Height;
1202 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1203 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1205 ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1206 ArrangeAction.Execute;
1208 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1209 case GikoSys.Setting.ListWidthState of
1211 ViewPanel.Width := 1;
1212 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
1213 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
1216 ViewPanel.Width := GikoSys.Setting.ListWidth;
1217 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
1218 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
1221 ViewPanel.Width := GikoSys.Setting.ListWidth;
1222 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
1223 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
1226 // if GikoSys.Setting.ListWidthMax then begin
1227 // ViewPanel.Width := 1;
1228 // BrowserSizeAction.ImageIndex := ICON_WIDTH_MIN;
1230 // ViewPanel.Width := GikoSys.Setting.ListWidth;
1231 // BrowserSizeAction.ImageIndex := ICON_WIDTH_MAX;
1234 case GikoSys.Setting.ListHeightState of
1236 ViewPanel.Height := 1;
1237 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_NORMAL;
1238 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
1241 ViewPanel.Height := GikoSys.Setting.ListHeight;
1242 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
1243 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_NORMAL;
1246 ViewPanel.Height := GikoSys.Setting.ListHeight;
1247 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
1248 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
1251 // if GikoSys.Setting.ListHeightState = glsMax then begin
1253 // ViewPanel.Height := GikoSys.Setting.ListHeight;
1254 // BrowserSizeAction.ImageIndex := ICON_HEIGHT_MAX;
1258 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1259 // ProgressBar.Visible := False;
1260 ProgressBar.Parent := StatusBar;
1261 ProgressBar.Top := 2;
1262 ProgressBar.Left := 0;
1263 ProgressBar.Width := StatusBar.Panels[0].Width;
1264 ProgressBar.Height := StatusBar.Height - 2;
1265 ProgressBar.Position := 0;
1267 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1268 //formshow()
\82É
\88Ú
\93®
1270 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1271 // FDownload := TDownload.Create;
1272 // FDownload.OnDownloadEnd := OnDonloadEnd;
1273 // FDownload.OnWork := Work;
1274 // FDownload.OnWorkBegin := WorkBegin;
1275 // FDownload.OnWorkEnd := WorkEnd;
1277 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1278 FControlThread := TThreadControl.Create(True);
1279 FControlThread.MaxThreadCount := 1;
1280 FControlThread.Resume;
1281 FControlThread.OnDownloadEnd := DownloadEnd;
1282 FControlThread.OnDownloadMsg := DownloadMsg;
1283 FControlThread.OnWork := Work;
1284 FControlThread.OnWorkBegin := WorkBegin;
1285 FControlThread.OnWorkEnd := WorkEnd;
1286 // ProgressPanel.Width := FControlThread.MaxThreadCount * 12;
1288 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
1289 FHistoryList := TList.Create;
1291 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1292 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1294 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1297 BrowserBoardNameLabel.Caption := '';
1298 BrowserNameLabel.Caption := '';
1301 // DetailIconAction.Execute;
1303 // FBrowserSizeHeight := ViewPanel.Height;
1304 FTabHintIndex := -1;
1306 //
\83\8d\83O
\83t
\83H
\83\8b\83_
\82ª
\91¶
\8dÝ
\82µ
\82È
\82¢
\8fê
\8d\87\82Í
\8dì
\90¬
\82·
\82é
1307 // if not GikoSys.DirectoryExistsEx(BBS2ch.GetLogFolder) then begin
1308 // GikoSys.ForceDirectoriesEx(BBS2ch.GetLogFolder);
1310 // FormResize(Sender);
1311 // MainCoolBarResize(Sender);
1312 // Application.ProcessMessages;
1314 //
\83\8a\83\93\83N
\83o
\81[
1317 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
1320 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1321 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1322 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1324 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1325 ReadToolBarSetting(ActionList, StdToolBar);
1326 ReadToolBarSetting(ActionList, ListToolBar);
1328 for i := ListToolBar.ControlCount - 1 downto 0 do
1330 if ListToolBar.Controls[ i ].Action = SelectItemAction then
1332 //
\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·
1333 if (i + 1) < ListToolBar.ControlCount then
1334 if ListToolBar.Controls[ i + 1 ] is TToolButton then
1335 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
1336 ListToolBar.Controls[ i + 1 ].Visible := False;
1338 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
1339 ListToolBar.Controls[ i ].Visible := False;
1340 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83t
\83B
\81[
\83\8b\83h
\82ð
\91}
\93ü
1341 SelectComboBox.Left := ListToolBar.Controls[ i ].Left;
1342 SelectComboBox.Width := GikoSys.Setting.SelectComboBoxWidth;
1343 SelectComboBox.Parent := ListToolBar;
1344 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\97p
\93Æ
\8e©
\83Z
\83p
\83\8c\81[
\83^
\82ð
\91}
\93ü
1345 SelectComboBoxSplitter.Left := SelectComboBox.Left + SelectComboBox.Width;
1346 SelectComboBoxSplitter.Parent := ListToolBar;
1353 ReadToolBarSetting(ActionList, BrowserToolBar);
1355 OnlyAHundredRes.Checked := GikoSys.Setting.OnlyAHundredRes;
1356 //
\83A
\83h
\83\8c\83X
\83o
\81[
1357 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1359 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1361 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1362 if not FileExists(GikoSys.GetBoardFileName) then begin
1363 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
1364 + '
\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
1365 + '
\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';
1366 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1367 NewBoardAction.Execute;
1370 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1371 GikoSys.LoadKeySetting(ActionList);
1373 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1374 // FLastRoundTime := 0;
1377 FHint := TResPopup.Create(Self);
1379 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1380 Case GikoSys.Setting.CabinetIndex of
1381 0: Cabinet2chAction.Execute;
1382 1: CabinetHistoryAction.Execute;
1383 2: CabinetFavoriteAction.Execute;
1386 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1387 if GikoSys.Setting.AutoLogin then
1388 LoginAction.Execute;
1390 //
\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
1391 for i := 1 to ParamCount do begin
1392 MoveToURL(ParamStr(i));
1397 s := GikoSys.FAbon.NGwordname;
1398 StatusBar.Panels[2].Text := s;
1399 StatusBar.Panels[2].Width := Max(StatusBar.Canvas.TextWidth(s), 100);
1400 StatusBarResize(Sender);
1406 procedure TGikoForm.FormShow(Sender: TObject);
1411 ShowWindow(Application.Handle, SW_HIDE);
1413 //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½
1414 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1415 StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1416 StdToolBarVisibleActionExecute( nil );
1417 AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1418 AddressBarVisibleActionExecute( nil );
1419 LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1420 LinkBarVisibleActionExecute( nil );
1421 ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1422 ListToolBarVisibleActionExecute( nil );
1423 ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1424 ListNameBarVisibleActionExecute( nil );
1425 BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1426 BrowserToolBarVisibleActionExecute( nil );
1427 BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1428 BrowserNameBarVisibleActionExecute( nil );
1430 //
\83u
\83\89\83E
\83U
\83^
\83u
1431 BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1432 BrowserTabVisibleActionExecute(nil);
1434 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1435 BrowserTabTopAction.Checked := True;
1436 BrowserTabTopActionExecute(nil);
1438 BrowserTabBottomAction.Checked := True;
1439 BrowserTabBottomActionExecute(nil);
1442 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1443 BrowserTabTabStyleAction.Checked := True;
1444 BrowserTabTabStyleActionExecute(nil);
1445 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1446 BrowserTabButtonStyleAction.Checked := True;
1447 BrowserTabButtonStyleActionExecute(nil);
1449 BrowserTabFlatStyleAction.Checked := True;
1450 BrowserTabFlatStyleActionExecute(nil);
1454 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1455 MainCoolBar.Bands.BeginUpdate;
1457 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1458 CoolSet := GikoSys.Setting.MainCoolSet[i];
1459 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then
1461 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1462 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1463 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1466 MainCoolBar.Bands.EndUpdate;
1469 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1470 ListCoolBar.Bands.BeginUpdate;
1472 for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1473 CoolSet := GikoSys.Setting.ListCoolSet[i];
1474 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then
1476 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1477 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1478 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1481 ListCoolBar.Bands.EndUpdate;
1484 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1485 BrowserCoolBar.Bands.BeginUpdate;
1487 for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1488 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1489 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then
1491 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1492 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1493 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1496 BrowserCoolBar.Bands.EndUpdate;
1501 procedure TGikoForm.SetStdToolBar;
1507 Action: TContainedAction;
1508 ToolButton: TToolButton;
1511 for i := StdToolBar.ButtonCount - 1 downto 0 do begin
1512 StdToolBar.RemoveControl(StdToolBar.Buttons[i]);
1513 //StdToolBar.Buttons[i].Free;
1515 FileName := GikoSys.GetConfigDir + 'ToolBar.ini';
1516 ini := TMemIniFile.Create(FileName);
1519 s := ini.ReadString('StdToolBar', IntToStr(i), '');
1522 if s = '-' then begin
1523 ToolButton := TToolButton.Create(StdToolBar);
1524 ToolButton.Style := tbsSeparator;
1525 ToolButton.Width := 8;
1526 ToolButton.Left := 10000;
1527 StdToolBar.InsertControl(ToolButton);
1529 Action := GetAction(s);
1530 if Action <> nil then begin
1531 ToolButton := TToolButton.Create(StdToolBar);
1532 ToolButton.Action := Action;
1533 ToolButton.Left := 10000;
1534 StdToolBar.InsertControl(ToolButton);
1541 {function TGikoForm.GetAction(ActionName: string): TContainedAction;
1545 for i := 0 to ActionList.ActionCount - 1 do begin
1546 if ActionList.Actions[i].Name = ActionName then begin
1547 Result := ActionList.Actions[i];
1554 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1558 wp: TWindowPlacement;
1560 // if not EnabledCloseButton then begin
1561 // CanClose := False;
1566 Application.OnDeactivate := nil;
1567 Self.OnDeactivate := nil;
1570 if GetActiveList is TBBS2ch then begin
1571 for i := 0 to ListView.Columns.Count - 1 do
1572 GikoSys.Setting.BBSColumnWidth[i] := ListView.Column[i].Width;
1573 end else if GetActiveList is TCategory then begin
1574 for i := 0 to ListView.Columns.Count - 1 do
1575 GikoSys.Setting.CategoryColumnWidth[i] := ListView.Column[i].Width;
1576 end else if GetActiveList is TBoard then begin
1577 for i := 0 to ListView.Columns.Count - 1 do
1578 GikoSys.Setting.BoardColumnWidth[i] := ListView.Column[i].Width;
1581 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1582 wp.length := sizeof(wp);
1583 GetWindowPlacement(Handle, @wp);
1584 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1585 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1586 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1587 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1588 GikoSys.Setting.WindowMax := WindowState = wsMaximized;
1590 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1591 GikoSys.Setting.CabinetVisible := CabinetVisibleAction.Checked;
1592 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1593 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1594 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1595 if ArrangeAction.Checked then
1596 GikoSys.Setting.ListOrientation := gloVertical
1598 GikoSys.Setting.ListOrientation := gloHorizontal;
1599 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1601 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1602 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1603 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1604 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1605 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1606 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1608 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1609 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1610 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1611 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1612 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1613 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1615 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1616 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1617 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1618 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1619 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1620 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1623 GikoSys.Setting.WriteWindowSettingFile;
1624 GikoSys.Setting.WriteNameMailSettingFile;
1626 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1628 FavoriteDM.WriteFavorite;
1634 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1635 NotSelectTabCloseAction.Execute;
1636 if BrowserTab.Tabs.Count >= 1 then begin
1637 DeleteTab(TThreadItem(BrowserTab.Tabs.Objects[0]));
1642 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶&
\94j
\8aü
1644 RoundList.SaveRoundFile;
1656 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
1662 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1664 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.AddressHistoryCount);
1669 FControlThread.Terminate;
1678 //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
1681 TreeView.Items.Clear;
1686 if FavoriteDM <> nil then
1689 if AddressHistoryDM <> nil then
1690 AddressHistoryDM.Free;
1691 AddressHistoryDM := nil;
1695 if BBS2ch <> nil then
1703 if FHint <> nil then begin
1704 FHint.ReleaseHandle;
1709 if TPreviewBrowser <> nil then begin
1710 FPreviewBrowser.Free;
1711 FPreviewBrowser := nil;
1717 procedure TGikoForm.FormDestroy(Sender: TObject);
1719 // wp: TWindowPlacement;
1721 { //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
1724 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1725 wp.length := sizeof(wp);
1726 GetWindowPlacement(Handle, @wp);
1728 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1729 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1730 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1731 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1732 GikoSys.Setting.WindowMax := WindowState = wsMaximized;
1734 GikoSys.Setting.CabinetVisible := CabinetPanel.Visible;
1735 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1737 GikoSys.Setting.WriteWindowSettingFile;
1738 GikoSys.Setting.WriteNameMailSettingFile;
1743 //
\83t
\83H
\81[
\83\80\83N
\83\8d\81[
\83Y
1744 procedure TGikoForm.FormClose(Sender: TObject; var Action: TCloseAction);
1746 Application.Terminate;
1750 //
\83L
\83\83\83r
\83l
\83b
\83g
\81~
\83{
\83^
\83\93\83N
\83\8a\83b
\83N
1751 procedure TGikoForm.CabinetPanelHide(Sender: TObject);
1753 CabinetVisibleAction.Execute;
1754 // CabinetPanelVisible(false);
1757 procedure TGikoForm.ReloadBBS;
1759 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1760 NotSelectTabCloseAction.Execute;
1761 if BrowserTab.Tabs.Count >= 1 then
1762 DeleteTab(TThreadItem(BrowserTab.Tabs.Objects[0]));
1763 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
1765 //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
1766 TreeView.Items.Clear;
1773 FTreeType := gttNone;
1776 BBS2ch := TBBS2ch.Create(GikoSys.Setting.LogFolder);
1778 BBS2ch.ReadBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1782 //
\83{
\81[
\83h
\83c
\83\8a\81[
\90Ý
\92è
1783 procedure TGikoForm.SetBoardTreeNode;
1787 CategoryNode: TTreeNode;
1788 BoardNode: TTreeNode;
1789 Category: TCategory;
1792 TreeView.Items.BeginUpdate;
1793 TreeView.Items.Clear;
1795 Root := TreeView.Items.Add(nil, BBS2ch.Title);
1796 Root.ImageIndex := ITEM_ICON_2CH1;
1797 Root.SelectedIndex := ITEM_ICON_2CH2;
1798 Root.Data := BBS2ch;
1799 if SplashWindow <> nil then
1800 SplashWindow.ProgressBar.Max := BoardGroup.BBS2ch.Count;
1802 for i := 0 to BoardGroup.BBS2ch.Count - 1 do begin
1803 Category := TCategory(BoardGroup.BBS2ch.Items[i]);
1804 CategoryNode := TreeView.Items.AddChild(Root, Category.Title);
1805 CategoryNode.Data := Category;
1806 CategoryNode.ImageIndex := ITEM_ICON_CATEGORY1;
1807 CategoryNode.SelectedIndex := ITEM_ICON_CATEGORY2;
1809 for j := 0 to Category.Count - 1 do begin
1810 Board := TBoard(Category.Items[j]);
1812 BoardNode := TreeView.Items.AddChild(CategoryNode, Board.Title);
1813 BoardNode.Data := Board;
1814 BoardNode.ImageIndex := ITEM_ICON_BOARD1;
1815 BoardNode.SelectedIndex := ITEM_ICON_BOARD2;
1820 CategoryNode.Expanded := Category.NodeExpand;
1822 if SplashWindow <> nil then begin
1823 SplashWindow.ProgressBar.StepIt;
1824 Application.ProcessMessages;
1829 TreeView.Items.EndUpdate;
1833 function TGikoForm.SetCategoryListItem(ABBS2ch: TBBS2ch): Integer;
1835 COLUMN: array[0..0] of string = ('
\83J
\83e
\83S
\83\8a\96¼');
1837 ListColumn: TListColumn;
1840 ListView.Items.BeginUpdate;
1842 Screen.Cursor := crHourGlass;
1844 ListView.Columns.Clear;
1845 for i := 0 to Length(COLUMN) - 1 do begin
1846 ListColumn := ListView.Columns.Add;
1847 ListColumn.Caption := COLUMN[i];
1848 ListColumn.Width := GikoSys.Setting.BBSColumnWidth[i];
1851 ListView.Items.Count := 0;
1852 ListView.Items.Clear;
1853 ListView.Items.Count := ABBS2ch.Count;
1855 // UpFolderAction.Enabled := False;
1856 // AllItemAction.Enabled := False;
1857 // LogItemAction.Enabled := False;
1858 // NewItemAction.Enabled := False;
1859 // SelectItemAction.Enabled := False;
1860 // ListDownloadToolButton.Enabled := False;
1861 // BoardReservToolButton.Enabled := False;
1862 // ListThreadDownloadToolButton.Enabled := False;
1864 ListNameLabel.Caption := ABBS2ch.Title;
1865 FolderImage.Picture := nil;
1866 ItemIcon16.GetBitmap(1, FolderImage.Picture.Bitmap);
1869 FSortOrder := False;
1870 ListViewColumnClick(nil, ListView.Column[0]);
1872 Result := ABBS2ch.Count;
1874 Screen.Cursor := crDefault;
1875 ListView.Items.EndUpdate;
1879 function TGikoForm.SetBoardListItem(Category: TCategory): Integer;
1881 COLUMN: array[0..2] of string = ('
\94Â
\96¼', '
\8f\84\89ñ
\97\
\96ñ', '
\8eæ
\93¾
\93ú
\8e\9e');
1883 ListColumn: TListColumn;
1886 ListView.Items.BeginUpdate;
1888 Screen.Cursor := crHourGlass;
1890 ListView.Columns.Clear;
1891 for i := 0 to Length(COLUMN) - 1 do begin
1892 ListColumn := ListView.Columns.Add;
1893 ListColumn.Caption := COLUMN[i];
1894 ListColumn.Width := GikoSys.Setting.CategoryColumnWidth[i];
1897 ListView.Items.Count := 0;
1898 ListView.Items.Clear;
1899 ListView.Items.Count := Category.Count;
1901 // UpFolderAction.Enabled := True;
1902 // AllItemAction.Enabled := False;
1903 // LogItemAction.Enabled := False;
1904 // NewItemAction.Enabled := False;
1905 // SelectItemAction.Enabled := False;
1906 // ListDownloadToolButton.Enabled := False;
1907 // BoardReservToolButton.Enabled := False;
1908 // ListThreadDownloadToolButton.Enabled := False;
1910 ListNameLabel.Caption := Category.Title;
1911 FolderImage.Picture := nil;
1912 ItemIcon16.GetBitmap(3, FolderImage.Picture.Bitmap);
1915 FSortOrder := False;
1916 ListViewColumnClick(nil, ListView.Column[0]);
1918 Result := Category.Count;
1920 Screen.Cursor := crDefault;
1921 ListView.Items.EndUpdate;
1925 function TGikoForm.SetThreadListItem(Board: TBoard): Integer;
1927 COLUMN: array[0..6] of string = ('
\83X
\83\8c\83b
\83h
\96¼', '
\83J
\83E
\83\93\83g', '
\8eæ
\93¾', '
\90V
\92\85',
1928 '
\96¢
\93Ç', '
\8f\84\89ñ
\97\
\96ñ', '
\8eæ
\93¾
\93ú
\8e\9e');
1929 COLUMN_ALIGNMENT: array[0..6] of TAlignment = (taLeftJustify, taRightJustify,
1930 taRightJustify, taRightJustify,
1931 taRightJustify, taLeftJustify,
1933 //No,
\83X
\83\8c\83b
\83h
\96¼,
\83J
\83E
\83\93\83g,
\8f\84\89ñ
\97\
\96ñ,
\8eæ
\93¾
\93ú
\8e\9e
1935 ListColumn: TListColumn;
1938 ListView.Items.BeginUpdate;
1940 Screen.Cursor := crHourGlass;
1942 //
\83`
\83\89\82Â
\82«
\96h
\8e~
\82Ì
\82½
\82ß
\81A
\95Ï
\8dX
\82³
\82ê
\82Ä
\82¢
\82é
\8fê
\8d\87\82Ì
\82Ý
1943 //
\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Ó
1944 if ListView.Columns.Count <> (High( COLUMN ) - Low( COLUMN ) + 1) then
1946 ListView.Columns.Clear;
1947 for i := 0 to Length(COLUMN) - 1 do begin
1948 ListColumn := ListView.Columns.Add;
1949 ListColumn.Caption := COLUMN[i];
1950 ListColumn.Width := GikoSys.Setting.BoardColumnWidth[i];
1951 ListColumn.Alignment := COLUMN_ALIGNMENT[i];
1955 ListView.Items.Count := 0;
1956 ListView.Items.Clear;
1958 case GikoForm.ViewType of
1959 gvtAll: ListView.Items.Count := Board.Count;
1960 gvtLog: ListView.Items.Count := Board.GetLogThreadCount;
1961 gvtNew: ListView.Items.Count := Board.GetNewThreadCount;
1962 gvtUser: ListView.Items.Count := Board.GetUserThreadCount;
1965 ListNameLabel.Caption := Board.Title;
1966 FolderImage.Picture := nil;
1967 ItemIcon16.GetBitmap(5, FolderImage.Picture.Bitmap);
1970 FSortOrder := False;
1971 ListViewColumnClick(nil, ListView.Column[0]);
1973 Result := Board.Count;
1975 Screen.Cursor := crDefault;
1976 ListView.Items.EndUpdate;
1980 procedure TGikoForm.TreeViewChange(Sender: TObject; Node: TTreeNode);
1984 if FTreeType = gttHistory then begin
1985 // SetContent(TThreadItem(Node.Data));
1986 InsertBrowserTab(TThreadItem(Node.Data));
1990 ListView.Selected := nil;
1991 ListView.Items.Count := 0;
1992 ListView.Items.Clear;
1993 // ListView.Columns.Clear;
1995 Caption := CAPTION_NAME;
1996 //Application.Title := CAPTION_NAME;
1999 if GetActiveList is TBBS2ch then begin
2000 for i := 0 to ListView.Columns.Count - 1 do
2001 GikoSys.Setting.BBSColumnWidth[i] := ListView.Column[i].Width;
2002 end else if GetActiveList is TCategory then begin
2003 for i := 0 to ListView.Columns.Count - 1 do
2004 GikoSys.Setting.CategoryColumnWidth[i] := ListView.Column[i].Width;
2005 end else if GetActiveList is TBoard then begin
2006 for i := 0 to ListView.Columns.Count - 1 do
2007 GikoSys.Setting.BoardColumnWidth[i] := ListView.Column[i].Width;
2010 if TObject(Node.Data) is TBBS2ch then begin
2011 SetActiveList(Node.data);
2012 end else if TObject(Node.Data) is TCategory then begin
2013 SetActiveList(Node.data);
2014 end else if TObject(Node.Data) is TBoard then begin
2015 if not TBoard(Node.Data).IsThreadDatRead then begin
2016 Screen.Cursor := crHourGlass;
2018 GikoSys.ReadSubjectFile(TBoard(Node.Data));
2020 Screen.Cursor := crDefault;
2023 SetActiveList(Node.data);
2027 procedure TGikoForm.ListViewData(Sender: TObject; Item: TListItem);
2029 // FileName: string;
2030 // DateTime: TDateTime;
2033 Category: TCategory;
2035 ThreadItem: TThreadItem;
2038 if ActiveList is TBBS2ch then begin
2039 BBS := TBBS2ch(ActiveList);
2041 ListView.StateImages := nil;
2043 if BBS = nil then Exit;
2044 if BBS.Count <= 0 then Exit;
2045 if Item = nil then Exit;
2046 if Item.Index > BBS.Count then Exit;
2047 if ListView.Items.Count = 0 then Exit;
2049 if not (BBS.Items[Item.Index] is TCategory) then Exit;
2050 Category := TCategory(BBS.Items[Item.Index]);
2052 if Category = nil then Exit;
2054 if ListNumberVisibleAction.Checked then
2055 Item.Caption := IntToStr(Category.No) + ': ' + Category.Title
2057 Item.Caption := Category.Title;
2059 Item.ImageIndex := ITEM_ICON_CATEGORY1;
2060 Item.Data := Category;
2061 end else if ActiveList is TCategory then begin
2062 Category := TCategory(ActiveList);
2064 ListView.StateImages := nil;
2066 if Category = nil then Exit;
2067 if Category.Count <= 0 then Exit;
2068 if Item = nil then Exit;
2069 if Item.Index >= Category.Count then Exit;
2070 if ListView.Items.Count = 0 then Exit;
2072 if not (Category.Items[Item.Index] is TBoard) then Exit;
2073 Board := TBoard(Category.Items[Item.Index]);
2075 if Board = nil then Exit;
2077 if ListNumberVisibleAction.Checked then
2078 Item.Caption := IntToStr(Board.No) + ': ' + Board.Title
2080 Item.Caption := Board.Title;
2082 if Item.SubItems.Count <> 2 then begin
2083 Item.SubItems.Clear;
2084 Item.SubItems.Add('');
2085 Item.SubItems.Add('');
2088 Item.ImageIndex := ITEM_ICON_BOARD1;
2091 Item.SubItems[0] := Board.RoundName // '
\97\
\96ñ'
2093 Item.SubItems[0] := '';
2095 if Board.RoundDate = ZERO_DATE then begin
2096 Item.SubItems[1] := '';
2098 Item.SubItems[1] := FormatDateTime('yyyy/mm/dd hh:mm:ss', Board.RoundDate);
2100 end else if ActiveList is TBoard then begin
2101 Board := TBoard(ActiveList);
2103 if GikoSys.Setting.ListIconVisible then
2104 ListView.StateImages := StateIconImageList
2106 ListView.StateImages := nil;
2108 case GikoForm.ViewType of
2109 gvtAll: BoardCnt := Board.Count;
2110 gvtLog: BoardCnt := Board.GetLogThreadCount;
2111 gvtNew: BoardCnt := Board.GetNewThreadCount;
2112 gvtUser: BoardCnt := Board.GetUserThreadCount;
2117 // if Board = nil then Exit;
2118 if BoardCnt <= 0 then Exit;
2119 if Item = nil then Exit;
2120 if Item.Index > BoardCnt then Exit;
2121 if ListView.Items.Count = 0 then Exit;
2123 // if not (Board.Items[Item.Index] is TThreadItem) then Exit;
2126 case GikoForm.ViewType of
2127 gvtAll: ThreadItem := TThreadItem(Board.Items[Item.Index]);
2128 gvtLog: ThreadItem := Board.GetLogThread(Item.Index);
2129 gvtNew: ThreadItem := Board.GetNewThread(Item.Index);
2130 gvtUser: ThreadItem := Board.GetUserThread(Item.Index);
2133 if ThreadItem = nil then Exit;
2135 // if ListNumberVisibleAction.Checked then
2136 // RepStr := IntToStr(ThreadItem.No) + ': ' + ThreadItem.Title
2138 RepStr := ThreadItem.Title;
2139 //RepStr := StringReplace(RepStr, '&', '&', [rfReplaceAll]);
2140 RepStr := StringReplace(RepStr, '<', '<', [rfReplaceAll]);
2141 RepStr := StringReplace(RepStr, '>', '>', [rfReplaceAll]);
2142 RepStr := StringReplace(RepStr, '"', '"', [rfReplaceAll]);
2143 RepStr := StringReplace(RepStr, '&', '&', [rfReplaceAll]);
2144 //RepStr := StringReplace(RepStr, '
\81\97\81M', ',', [rfReplaceAll]);
2146 if Item.SubItems.Count <> 6 then begin
2147 Item.SubItems.Clear;
2148 Item.SubItems.Add('');
2149 Item.SubItems.Add('');
2150 Item.SubItems.Add('');
2151 Item.SubItems.Add('');
2152 Item.SubItems.Add('');
2153 Item.SubItems.Add('');
2156 if ListNumberVisibleAction.Checked then
2157 Item.Caption := IntToStr(ThreadItem.No) + ': ' + RepStr
2159 Item.Caption := RepStr;
2161 case ThreadItem.AgeSage of
2162 gasNone: Item.StateIndex := -1;
2163 gasNew: Item.StateIndex := 0;
2164 gasAge: Item.StateIndex := 1;
2165 gasSage: Item.StateIndex := 2;
2168 if ThreadItem.IsLogFile then begin
2169 Item.ImageIndex := ITEM_ICON_THREADLOG1;
2170 Item.SubItems[0] := IntToStr(ThreadItem.AllResCount);
2171 Item.SubItems[1] := IntToStr(ThreadItem.Count);
2172 if ThreadItem.NewResCount = 0 then
2173 Item.SubItems[2] := ''
2175 Item.SubItems[2] := IntToStr(ThreadItem.NewResCount);
2176 Item.SubItems[3] := '';
2177 if ThreadItem.Round then
2178 Item.SubItems[4] := ThreadItem.RoundName
2180 Item.SubItems[4] := '';
2181 if ThreadItem.RoundDate = ZERO_DATE then begin
2182 Item.SubItems[5] := '';
2184 Item.SubItems[5] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.RoundDate);
2185 if ThreadItem.NewArrival then
2186 Item.ImageIndex := ITEM_ICON_THREADNEW1;
2188 Item.ImageIndex := ITEM_ICON_THREAD1;
2189 Item.SubItems[0] := IntToStr(ThreadItem.AllResCount);
2190 Item.SubItems[1] := '';
2191 Item.SubItems[2] := '';
2192 Item.SubItems[3] := '';
2193 Item.SubItems[4] := '';
2194 Item.SubItems[5] := '';
2196 Item.Data := ThreadItem;
2200 procedure TGikoForm.ListViewDataFind(Sender: TObject; Find: TItemFind;
2201 const FindString: String; const FindPosition: TPoint; FindData: Pointer;
2202 StartIndex: Integer; Direction: TSearchDirection; Wrap: Boolean;
2203 var Index: Integer);
2208 procedure TGikoForm.ListViewDataHint(Sender: TObject; StartIndex,
2214 procedure TGikoForm.ListViewDataStateChange(Sender: TObject; StartIndex,
2215 EndIndex: Integer; OldState, NewState: TItemStates);
2220 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
2235 ActiveFileName: string;
2242 if (FActiveContent <> nil) and (Assigned(Browser.Document)) then begin
2243 if LowerCase(OleVariant(IHTMLDocument2(Browser.Document)).charset) <> 'shift_jis' then
2244 OleVariant(IHTMLDocument2(Browser.Document)).charset := 'shift_jis';
2250 if PreviewTimer.Enabled then
2251 PreviewTimer.Enabled := False;
2252 Application.CancelHint;
2253 if GetActiveContent <> nil then
2254 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
2256 ActiveFileName := '';
2258 StatusBar.Panels[1].Text := Text;
2260 if FHint <> nil then begin
2261 FHint.ReleaseHandle;
2264 if FPreviewBrowser <> nil then
2265 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2267 if not GikoSys.Setting.UnActivePopup then
2268 if not GikoForm.Active then
2271 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
2272 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
2275 Ext := AnsiLowerCase(ExtractFileExt(Text));
2276 if (Pos('http://', Text) = 1) and (GikoSys.Setting.PreviewVisible) and
2277 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) then begin
2278 if FPreviewBrowser = nil then begin
2279 FPreviewBrowser := TPreviewBrowser.Create(Self);
2280 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2281 TOleControl(FPreviewBrowser).Parent := nil;
2283 FPreviewBrowser.Navigate('about:blank');//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
2284 FPreviewURL := Text;
2285 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
2286 PreviewTimer.Enabled := True;
2287 end else if (Pos('about:blank', Text) = 1) or (Pos('http://', Text) = 1) or (Pos('mailto:', Text) = 1) then begin
2288 if Pos('mailto:', Text) = 1 then begin
2289 s := StringReplace(Text, 'mailto:', '', [rfIgnoreCase]);
2290 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
2292 p.x := p.x - TWebBrowser(Sender).ClientOrigin.x;
2293 p.y := p.y - TWebBrowser(Sender).ClientOrigin.y;
2294 e := IHTMLDocument2(TWebBrowser(Sender).Document).elementFromPoint(p.x, p.y);
2295 if (Assigned(e)) then begin
2296 tmp2 := GikoSys.ZenToHan(e.Get_outerText);
2297 if (GikoSys.IsNumeric(tmp2)) then begin
2298 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
2299 wkBBS := GetActiveContent.ParentBoard.BBSID;
2300 wkKey := ChangeFileExt(GetActiveContent.FileName, '');
2301 wkIntSt := StrToInt(tmp2);
2302 wkIntTo := StrToInt(tmp2);
2303 //s := GetThreadText(wkBBS, wkKey, wkIntSt, wkIntTo, False, False);
2304 FHint.PopupType := gptThread;
2305 SetResPopupText(wkBBS, wkKey, wkIntSt, wkIntTo, False, False);
2307 FHint.PopupType := gptRaw;
2314 if Pos('about:blank..', URL) = 1 then
2315 URL := StringReplace(URL, 'about:blank..', 'http://www.2ch.net', []);
2317 PathRec := Gikosys.Parse2chURL2(URL);
2319 if PathRec.FDone then begin
2321 wkIntSt := PathRec.FSt;
2322 wkIntTo := PathRec.FTo;
2324 if (wkIntSt = 0) and (wkIntTo = 0) then begin
2327 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
2329 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
2331 end else if wkIntSt > wkIntTo then begin
2336 //if wkIntSt = 0 then
2338 //if wkINtTo = 0 then
2340 //if PathRec.FFirst then
2342 if PathRec.FStBegin then
2344 if PathRec.FToEnd then
2347 ATitle := ActiveFileName <> PathRec.FKey;
2349 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
2350 FHint.PopupType := gptThread;
2351 SetResPopupText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
2356 // ShowTextPopup(s);
2357 if FHint.PopupType = gptRaw then begin
2358 if FHint.Caption <> '' then
2361 if (FHint.ResCount <> 0) or (FHint.Title <> '') then
2367 procedure TGikoForm.BrowserTitleChange(Sender: TObject;
2368 const Text: WideString);
2372 if (Text = BLANK_HTML) or (Text = GikoSys.GetHtmlTempFileName) then
2373 Title := CAPTION_NAME
2375 Title := CAPTION_NAME + ' - [' + Text + ']';
2377 //Application.Title := Title;
2380 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2383 //SysMenuApp: HMenu;
2385 FEnabledCloseButton := Enabled;
2386 SysMenu := GetSystemMenu(Handle, False);
2387 //SysMenuApp := GetSystemMenu(Application.Handle, False);
2389 if Enabled then begin
2390 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2391 //EnableMenuItem(SysMenuApp, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2393 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2394 //EnableMenuItem(SysMenuApp, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2397 DrawMenuBar(Handle);
2398 //DrawMenuBar(Application.Handle);
2401 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2402 var AllowChange: Boolean);
2404 if FTreeType = gtt2ch then
2408 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2409 Shift: TShiftState);
2411 if Key = VK_BACK then begin
2412 // UpFolderButtonClick(Sender);
2413 end else if Key = VK_SPACE then begin
2415 end else if Key = VK_RETURN then begin
2420 function TGikoForm.GetHttpState: Boolean;
2422 Result := FHttpState;
2425 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2426 Column: TListColumn);
2430 wkCategory: TCategory;
2433 if FSortIndex = Column.Index then
2434 FSortOrder := not FSortOrder
2436 FSortOrder := False;
2438 for i := 0 to ListView.Columns.Count - 1 do
2439 ListView.Column[i].ImageIndex := -1;
2441 ListView.Column[Column.Index].ImageIndex := ITEM_ICON_SORT1
2443 ListView.Column[Column.Index].ImageIndex := ITEM_ICON_SORT2;
2445 Sort.SortNoFlag := ListNumberVisibleAction.Checked;
2447 if TObject(TreeView.Selected.Data) is TBBS2ch then begin
2448 wkBBS := TBBS2ch(TreeView.Selected.Data);
2449 Sort.SortOrder := FSortOrder;
2450 Sort.SortIndex := Column.Index;
2451 wkBBS.Sort(CategorySortProc);
2453 end else if TObject(TreeView.Selected.Data) is TCategory then begin
2454 wkCategory := TCategory(TreeView.Selected.Data);
2455 Sort.SortOrder := FSortOrder;
2456 Sort.SortIndex := Column.Index;
2457 wkCategory.Sort(BoardSortProc);
2459 end else if TObject(TreeView.Selected.Data) is TBoard then begin
2460 wkBoard := TBoard(TreeView.Selected.Data);
2461 Sort.SortOrder := FSortOrder;
2462 Sort.SortIndex := Column.Index;
2463 wkBoard.Sort(ThreadItemSortProc);
2466 FSortIndex := Column.Index;
2469 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2470 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2474 DefaultDraw := True;
2476 DefaultDraw := False;
2477 if (cdsSelected in State) or (cdsHot in State) then begin
2478 Sender.Canvas.Brush.Color := clHighlight;
2479 Sender.Canvas.Font.Color := clHighlightText;
2481 Sender.Canvas.Brush.Color := clBtnFace;
2482 Sender.Canvas.Font.Color := clBtnText;
2484 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2485 Sender.Canvas.FillRect(ARect);
2486 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2489 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2494 Nodes := TreeView.Items;
2496 for i := 0 to Nodes.Count - 1 do begin
2497 if Nodes.Item[i].Data = Data then begin
2498 Result := Nodes.Item[i];
2505 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2506 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2507 Headers: OleVariant; var Cancel: WordBool);
2512 kMenuName: string = 'menu:';
2515 if Pos(kMenuName, URL) <> 0 then begin
2516 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2518 if not GikoSys.IsNumeric(sNo) then Exit;
2522 KokoPopupMenu.Tag := StrToInt(sNo);
2523 KokoPopupMenu.Popup(p.x, p.y);
2524 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2525 Cancel := not GikoSys.Setting.OpenMailer;
2530 procedure TGikoForm.ListViewAdvancedCustomDrawItem(Sender: TCustomListView;
2531 Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage;
2532 var DefaultDraw: Boolean);
2534 ThreadItem: TThreadItem;
2536 DefaultDraw := True;
2537 // TListView(Sender).Canvas.Font.Style := [];
2538 if TObject(Item.Data) is TThreadItem then begin
2539 ThreadItem := TThreadItem(Item.Data);
2540 // if (ThreadItem.Kokomade <> ThreadItem.Count) and (ThreadItem.IsLogFile) then
2541 if ThreadItem.UnRead then
2542 TListView(Sender).Canvas.Font.Style := [fsBold];
2546 procedure TGikoForm.AppFormDeactivate(Sender: TObject);
2548 if Application.Terminated then
2550 if PreviewTimer.Enabled then
2551 PreviewTimer.Enabled := False;
2552 //
\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
2553 if FHint <> nil then begin
2554 FHint.ReleaseHandle;
2559 if FPreviewBrowser <> nil then
2560 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2564 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2565 const ARect: TRect; var DefaultDraw: Boolean);
2569 IsBoardNode: Boolean;
2575 Category: TCategory;
2579 DefaultDraw := True;
2581 if FTreeType = gttHistory then Exit;
2583 TreeView.Canvas.Font.Color := clBlue;
2584 IsBoardNode := False;
2586 for i := 0 to TreeView.Items.Count - 1 do begin
2588 if not TreeView.Items[i].IsVisible then
2591 if TObject(TreeView.Items[i].Data) is TCategory then begin
2592 if TreeView.Items[i].Expanded then
2595 IsBoardNode := False;
2596 Category := TCategory(TreeView.Items[i].Data);
2597 for j := 0 to Category.Count - 1 do begin
2598 Board := Category.Items[j];
2599 if Board <> nil then begin
2600 if Board.UnRead > 0 then begin
2608 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2609 IsBoardNode := True;
2610 Board := TBoard(TreeView.Items[i].Data);
2611 Cnt := Board.UnRead;
2617 Bitmap := TBitmap.Create;
2619 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2620 Bitmap.Canvas.Font.Style := [fsBold];
2621 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2626 NodeRect := TreeView.Items[i].DisplayRect(True);
2629 CntText := '(' + IntToStr(Cnt) + ')'
2633 TextWidth := TreeView.Canvas.TextWidth(CntText);
2635 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2637 NodeRect.Left + NodeWidth + TextWidth + 8,
2639 DrawText(TreeView.Canvas.Handle,
2643 DT_SINGLELINE or DT_VCENTER);
2645 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2648 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2649 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2652 Category: TCategory;
2655 DefaultDraw := True;
2657 if FTreeType = gttHistory then Exit;
2659 TreeView.Canvas.Font.Style := [];
2660 if Node <> nil then begin
2661 if TObject(Node.Data) is TCategory then begin
2662 Category := TCategory(Node.Data);
2663 for i := 0 to Category.Count - 1 do begin
2664 Board := Category.Items[i];
2665 if Board <> nil then begin
2666 if Board.UnRead > 0 then begin
2667 TreeView.Canvas.Font.Style := [fsBold];
2672 end else if TObject(Node.Data) is TBoard then begin
2673 Board := TBoard(Node.Data);
2674 if Board.UnRead > 0 then
2675 TreeView.Canvas.Font.Style := [fsBold];
2680 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2682 TreeView.Invalidate;
2684 if TObject(Node.Data) is TBBS2ch then begin
2685 TBBS2ch(Node.Data).NodeExpand := True;
2686 end else if TObject(Node.Data) is TCategory then begin
2687 TCategory(Node.Data).NodeExpand := True;
2688 end else if TObject(Node.Data) is TBoard then begin
2689 TBoard(Node.Data).NodeExpand := True;
2693 {procedure TGikoForm.CabinetPanelVisible(PanelVisible: Boolean);
2695 TreeSplitter.Visible := PanelVisible;
2696 CabinetPanel.Visible := PanelVisible;
2697 CabinetToolButton.Down := PanelVisible;
2700 procedure TGikoForm.ListViewAllSelect;
2706 procedure TGikoForm.TreeViewDblClick(Sender: TObject);
2709 ThreadItem: TThreadItem;
2713 GetCursorPos(APoint);
2714 APoint := TreeView.ScreenToClient(APoint);
2715 HitTest := TreeView.GetHitTestInfoAt(APoint.x, APoint.y);
2716 if not (htOnLabel in HitTest) then Exit;
2717 if TreeView.Selected = nil then Exit;
2719 if FTreeType = gtt2ch then begin
2720 if not (TObject(TreeView.Selected.Data) is TBoard) then Exit;
2721 Board := TBoard(TreeView.Selected.Data);
2722 DownloadList(Board);
2723 end else if FTreeType = gttHistory then begin
2724 if not (TObject(TreeView.Selected.Data) is TThreadItem) then Exit;
2725 ThreadItem := TThreadItem(TreeView.Selected.Data);
2726 DownloadContent(ThreadItem);
2730 procedure TGikoForm.FavoriteTreeViewClick(Sender: TObject);
2733 FavoriteClick( TObject( FavoriteTreeView.Selected ) );
2737 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2739 AddMessageList(Msg, nil, Icon);
2742 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2748 if Item.DownType = gdtBoard then
2749 ATitle := Item.Board.Title
2751 ATitle := Item.ThreadItem.Title;
2753 ATitle := '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j';
2755 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2757 if Item.DownType = gdtBoard then begin
2760 AddMessageList(ATitle + ' [
\83X
\83\8c\88ê
\97\97\8eæ
\93¾
\8a®
\97¹]', nil, gmiOK);
2761 if GetActiveList = Item.Board then
2762 SetActiveList(Item.Board);
2763 Item.Board.Modified := True;
2764 Item.Board.IsThreadDatRead := True;
2766 end else if Item.DownType = gdtThread then begin
2769 Item.ThreadItem.NewArrival := True;
2770 if AddHistory(Item.ThreadItem) then begin
2771 if GetActiveContent = Item.ThreadItem then
2772 InsertBrowserTab(Item.ThreadItem)
2774 InsertBrowserTab(Item.ThreadItem, False);
2777 if Item.State = gdsComplete then begin
2779 AddMessageList(ATitle + ' [
\83X
\83\8c\8eæ
\93¾
\8a®
\97¹]', nil, gmiOK);
2781 PlaySound('NewDiff');
2782 AddMessageList(ATitle + ' [
\83X
\83\8c\8d·
\95ª
\8eæ
\93¾
\8a®
\97¹]', nil, gmiOK);
2785 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2786 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2787 Item.ThreadItem.Round := False;
2788 Item.ThreadItem.RoundName := '';
2789 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);
2795 end else if Item.State = gdsNotModify then begin
2797 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2798 //SetContent(Item.ThreadItem);
2799 InsertBrowserTab(Item.ThreadItem);
2801 AddMessageList(ATitle + ' [
\96¢
\8dX
\90V]', nil, gmiSAD);
2802 PlaySound('NoChange');
2803 Screen.Cursor := crDefault;
2804 end else if Item.State = gdsAbort then begin
2806 AddMessageList(ATitle + ' [
\92\86\92f]', nil, gmiSAD);
2807 end else if Item.State = gdsError then begin
2812 AddMessageList(ATitle + ' [
\83G
\83\89\81[(' + IntToStr(Item.ResponseCode) + s + ')]', nil, gmiNG);
2813 // if Item.ResponseCode = 302 then
2814 // 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);
2820 if FWorkCount < 0 then FWorkCount := 0;
2821 if FWorkCount = 0 then begin
2823 Animate.Active := False;
2825 Screen.Cursor := crDefault;
2832 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer);
2834 // SetProgressValue(Number, 0, AWorkCountMax);
2835 // ProgressBar.Visible := True;
2836 ProgressBar.Position := 0;
2837 ProgressBar.Max := AWorkCountMax;
2838 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2839 FDownloadMax := AWorkCountMax;
2842 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2844 // ProgressBar.Visible := False;
2845 ProgressBar.Position := 0;
2846 // SetProgressValue(Number, 0);
2847 if FDownloadMax <> 0 then
2848 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2851 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2853 ProgressBar.Position := AWorkCount;
2854 // SetProgressValue(Number, AWorkCount);
2855 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2859 procedure TGikoForm.SetProgressValue(Number: Integer; Value: Integer; Max: Integer = -1);
2861 Component: TComponent;
2863 Component := FindComponent('ProgressBar' + IntToStr(Number + 1));
2864 if Component <> nil then begin
2865 if not (Component is TProgressBar) then Exit;
2867 TProgressBar(Component).Max := Max;
2868 TProgressBar(Component).Position := Value;
2873 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2875 ListItem: TListItem;
2877 MessageListView.Items.BeginUpdate;
2879 ListItem := MessageListView.Items.Add;
2880 ListItem.Caption := ACaption;
2881 ListItem.Data := AObject;
2882 ListItem.MakeVisible(False);
2884 gmiOK: ListItem.ImageIndex := 0;
2885 gmiSAD: ListItem.ImageIndex := 1;
2886 gmiNG: ListItem.ImageIndex := 2;
2887 gmiWhat: ListItem.ImageIndex := 3;
2890 MessageListView.Items.EndUpdate;
2894 {procedure TGikoForm.BrowserTabChange(Sender: TObject);
2897 ThreadItem: TThreadItem;
2899 ThreadItem := GetActiveContent;
2900 if ThreadItem <> nil then begin
2901 SetContent(ThreadItem);
2905 procedure TGikoForm.InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True);
2908 // OldIndex: Integer;
2910 if ThreadItem.IsLogFile then begin
2911 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2912 if TObject(BrowserTab.Tabs.Objects[i]) is TThreadItem then begin
2913 if TThreadItem(BrowserTab.Tabs.Objects[i]) = ThreadItem then begin
2914 if ActiveTab then begin
2915 //OldIndex := BrowserTab.TabIndex;
2916 BrowserTab.TabIndex := i;
2917 // if OldIndex <> i then
2918 BrowserTab.OnChange(nil);
2925 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2926 BrowserTab.Tabs.Insert(0, GikoSys.GetShortName(ThreadItem.Title, 20));
2927 BrowserTab.Tabs.Objects[0] := ThreadItem;
2929 BrowserTab.TabIndex := 0;
2931 i := BrowserTab.Tabs.Add(GikoSys.GetShortName(ThreadItem.Title, 20));
2932 BrowserTab.Tabs.Objects[i] := ThreadItem;
2934 BrowserTab.TabIndex := i;
2936 if ActiveTab then begin
2937 BrowserTab.OnChange(nil);
2938 BrowserNullTab := nil;
2941 //OldIndex := BrowserTab.TabIndex;
2942 BrowserNullTab := ThreadItem;
2943 BrowserTab.TabIndex := -1;
2944 // if OldIndex = -1 then
2945 BrowserTab.OnChange(nil);
2948 if GikoSys.Setting.URLDisplay then
2949 AddressComboBox.Text := GikoSys.GetURL(ThreadItem.ParentBoard.BBSID, ThreadItem.FileName);
2952 procedure TGikoForm.SetContent(ThreadItem: TThreadItem);
2957 // HtmlName: string;
2963 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
2964 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2965 Application.ProcessMessages;
2968 if (FActiveContent <> nil) and (Assigned(Browser.Document)) then begin
2972 Application.ProcessMessages;
2973 FActiveContent.ScrollTop := OleVariant(IHTMLDocument2(Browser.Document)).Body.ScrollTop;
2976 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2982 FActiveContent := ThreadItem;
2984 if ThreadItem = nil then begin
2985 Browser.Navigate(BLANK_HTML);
2986 BrowserBoardNameLabel.Caption := '';
2987 ItemBoardImage.Picture := nil;
2988 BrowserNameLabel.Caption := '';
2989 ItemImage.Picture := nil;
2990 FActiveContent := nil;
2994 BBSID := ThreadItem.ParentBoard.BBSID;
2995 FileName := ThreadItem.FileName;
2997 if GetCapture = ListView.Handle then
3000 //OldCursor := Screen.Cursor;
3001 Screen.Cursor := crHourGlass;
3003 if ThreadItem.UnRead then begin
3004 ThreadItem.ParentBoard.UnRead := ThreadItem.ParentBoard.UnRead - 1;
3005 if ThreadItem.ParentBoard.UnRead < 0 then ThreadItem.ParentBoard.UnRead := 0;
3009 if not ThreadItem.IsLogFile then begin
3011 if (not Assigned(Browser.Document)) then begin
3012 Browser.Navigate('about:blank');
3013 while (not Assigned(Browser.Document)) do begin
3014 Application.ProcessMessages;
3018 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
3019 doc := Browser.Document;
3021 doc.charset := 'Shift_JIS';
3027 GikoSys.CreateHTML2(Browser.Document, ThreadItem, sTitle);
3028 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
3029 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
3030 Application.ProcessMessages;
3033 Application.ProcessMessages;
3035 if ThreadItem.UnRead then
3036 BrowserMovement('new');
3039 if (ThreadItem.ScrollTop <> 0) and (not ThreadItem.UnRead) then begin
3043 doc := Browser.Document;
3044 doc.Body.ScrollTop := ThreadItem.ScrollTop;
3047 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
3052 ThreadItem.UnRead := False;
3056 BrowserBoardNameLabel.Caption := ThreadItem.ParentBoard.Title;
3057 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
3058 BrowserNameLabel.Caption := ThreadItem.Title;
3059 ItemImage.Picture := nil;
3060 if ThreadItem.IsLogFile then
3061 if ThreadItem.NewArrival then
3062 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
3064 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
3066 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
3068 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
3069 BrowserNameLabel.Left := ItemImage.Left + 20;
3071 //if Screen.Cursor <> crDefault then
3072 // Screen.Cursor := OldCursor
3074 Screen.Cursor := crDefault;
3078 function TGikoForm.GetActiveContent: TThreadItem;
3083 if BrowserTab.TabIndex = -1 then begin
3084 Result := BrowserNullTab;
3087 Index := BrowserTab.TabIndex;
3088 if BrowserTab.Tabs.Objects[Index] is TThreadItem then
3089 Result := TThreadItem(BrowserTab.Tabs.Objects[Index]);
3091 // Result := FActiveContent;
3094 procedure TGikoForm.SetActiveList(Obj: TObject);
3100 if Obj is TBBS2ch then begin
3101 for i := 0 to ListView.Columns.Count - 1 do
3102 ListView.Column[i].Width := GikoSys.Setting.BBSColumnWidth[i];
3103 SetCategoryListItem(TBBS2ch(Obj));
3104 end else if Obj is TCategory then begin
3105 for i := 0 to ListView.Columns.Count - 1 do
3106 ListView.Column[i].Width := GikoSys.Setting.CategoryColumnWidth[i];
3107 SetBoardListItem(TCategory(Obj));
3108 end else if Obj is TBoard then begin
3109 // SetThreadListItem
\8cÄ
\82Ô
\82È
\82ç
\82¢
\82ç
\82È
\82¢
\82ñ
\82¶
\82á
\82Ë
\82¥
\81H
3111 for i := 0 to ListView.Columns.Count - 1 do
3112 ListView.Column[i].Width := GikoSys.Setting.BoardColumnWidth[i];
3114 SetThreadListItem(TBoard(Obj));
3119 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
3120 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
3121 function TGikoForm.GetActiveList: TObject;
3123 Result := FActiveList;
3126 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
3128 SetListViewType(AViewType, '', False);
3131 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
3135 if ActiveList is TBoard then begin
3136 Board := TBoard(ActiveList);
3138 Board.ParentCategory.ParentBBS2ch.SelectText := SelectText;
3139 Board.ParentCategory.ParentBBS2ch.KubetsuChk := KubetsuChk;
3140 // Board.SelectText := SelectText;
3141 // Board.KubetsuChk := KubetsuChk;
3142 ViewType := AViewType;
3143 SetActiveList(Board);
3144 SetThreadListItem(Board);
3148 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
3149 const ARect: TRect; var DefaultDraw: Boolean);
3155 if ListView.Items.Count = 0 then begin
3156 DefaultDraw := True;
3158 ListView.Canvas.Brush.Color := ListView.Color;
3159 ListView.Canvas.FillRect(ARect);
3163 ListView.Canvas.Font.Color := clWindowText;
3164 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3167 ListView.Canvas.Font.Color := clBlue;
3168 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';
3171 ListView.Canvas.Font.Color := clGreen;
3172 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3175 ListView.Canvas.Font.Color := clNavy;
3176 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';
3177 if GetActiveList is TBoard then
3178 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParentBBS2ch.SelectText]);
3186 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
3187 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
3188 ListView.Canvas.TextOut(p.X, p.Y, s);
3190 DefaultDraw := True;
3194 procedure TGikoForm.DownloadList(Board: TBoard);
3196 Item: TDownloadItem;
3198 if Board.Title = '' then
3199 FDownloadTitle := '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j'
3201 FDownloadTitle := Board.Title;
3203 if not Board.IsThreadDatRead then
3204 GikoSys.ReadSubjectFile(Board);
3205 Item := TDownloadItem.Create;
3207 Item.Board := Board;
3208 Item.DownType := gdtBoard;
3209 // AbortToolButton.Enabled := True;
3210 // Animate.Active := True;
3211 // FDownload.Add(Item);
3212 FControlThread.AddItem(Item);
3213 // Animate.Active := False;
3214 // AbortToolButton.Enabled := False;
3215 if FWorkCount = 0 then begin
3217 Animate.Active := True;
3220 Screen.Cursor := crAppStart;
3228 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem);
3230 Item: TDownloadItem;
3232 if ThreadItem.Title = '' then
3233 FDownloadTitle := '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j'
3235 FDownloadTitle := ThreadItem.Title;
3236 Item := TDownloadItem.Create;
3238 Item.ThreadItem := ThreadItem;
3239 Item.DownType := gdtThread;
3240 // AbortToolButton.Enabled := True;
3241 // Animate.Active := True;
3242 // FDownload.Add(Item);
3243 FControlThread.AddItem(Item);
3244 // Animate.Active := False;
3245 // AbortToolButton.Enabled := False;
3246 if FWorkCount = 0 then begin
3248 Animate.Active := True;
3251 Screen.Cursor := crAppStart;
3259 procedure TGikoForm.PlaySound(SoundEventName: string);
3263 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
3264 if FileExists(FileName) then begin
3265 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
3266 sndPlaySound(nil, SND_SYNC);
3267 Application.ProcessMessages;
3269 sndPlaySound(PChar(FileName), SND_ASYNC);
3274 function TGikoForm.AddHistory(ThreadItem: TThreadItem): Boolean;
3281 // if (GetActiveContent = ThreadItem) and
3282 // (ThreadItem.Count <= ThreadItem.Kokomade) then
3284 // if GetActiveContent = ThreadItem then
3289 for i := 0 to FHistoryList.Count - 1 do begin
3290 if TObject(FHistoryList[i]) is TThreadItem then begin
3291 Item := TThreadItem(FHistoryList[i]);
3292 if Item = ThreadItem then begin
3293 // SetContent(ThreadItem);
3294 FHistoryList.Move(i, 0);
3299 FHistoryList.Add(ThreadItem);
3300 // SetContent(ThreadItem);
3302 if FTreeType = gttHistory then begin
3303 Node := TreeView.Items.Add(nil, ThreadItem.Title);
3304 if Item.NewArrival then begin
3305 Node.ImageIndex := ITEM_ICON_THREADNEW1;
3306 Node.SelectedIndex := ITEM_ICON_THREADNEW2;
3308 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3309 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3311 Node.Data := ThreadItem;
3315 procedure TGikoForm.DeleteHistory(ThreadItem: TThreadItem);
3319 for i := 0 to FHistoryList.Count - 1 do begin
3320 if ThreadItem = FHistoryList.Items[i] then begin
3321 FHistoryList.Delete(i);
3327 procedure TGikoForm.ClearHistory;
3332 procedure TGikoForm.Show2chTree;
3336 GikoSys.Setting.CabinetIndex := 0;
3338 FavoriteTreeView.Visible := False;
3339 FavoriteToolBar.Hide;
3340 TreeView.Visible := True;
3342 CabinetSelectToolButton.Caption := '
\82Q
\82¿
\82á
\82ñ
\82Ë
\82é';
3344 Cabinet2chAction.Checked := True;
3345 CabinetHistoryAction.Checked := False;
3346 CabinetFavoriteAction.Checked := False;
3348 if FTreeType <> gtt2ch then begin
3349 FTreeType := gtt2ch;
3350 HistoryToolBar.Hide;
3352 TreeView.TopItem.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3353 //TreeView.Selected := TreeView.Items[0]; //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3354 if GetActiveList = nil then
3355 TreeView.Selected := TreeView.Items[0]
3357 for i := 0 to TreeView.Items.Count - 1 do begin
3358 if TreeView.Items[i].Data = GetActiveList then
3359 TreeView.Selected := TreeView.Items[i];
3365 procedure TGikoForm.ShowHistoryTree;
3367 GikoSys.Setting.CabinetIndex := 1;
3369 FavoriteTreeView.Visible := False;
3370 TreeView.Visible := True;
3372 Cabinet2chAction.Checked := False;
3373 CabinetHistoryAction.Checked := True;
3374 CabinetFavoriteAction.Checked := False;
3376 if FTreeType <> gttHistory then begin
3377 FTreeType := gttHistory;
3378 HistoryToolBar.Show;
3379 FavoriteToolBar.Hide;
3381 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3385 procedure TGikoForm.SetHistoryTreeNode;
3391 TreeView.Items.BeginUpdate;
3393 TreeView.Items.Clear;
3394 for i := 0 to FHistoryList.Count - 1 do begin
3395 Item := TThreadItem(FHistoryList[i]);
3396 Node := TreeView.Items.Add(nil, Item.Title);
3398 if Item.NewArrival then begin
3399 Node.ImageIndex := ITEM_ICON_THREADNEW1;
3400 Node.SelectedIndex := ITEM_ICON_THREADNEW2;
3402 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3403 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3408 TreeView.Items.EndUpdate;
3412 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3414 ChangeEvent: TTVChangedEvent;
3415 ChangingEvent: TTVChangingEvent;
3419 ChangingEvent := nil;
3421 if not CallEvent then begin
3422 ChangeEvent := TreeView.OnChange;
3423 ChangingEvent := TreeView.OnChanging;
3426 if not CallEvent then begin
3427 TreeView.OnChange := nil;
3428 TreeView.OnChanging := nil;
3430 Application.ProcessMessages;
3431 for i := 0 to TreeView.Items.Count - 1 do begin
3432 if TreeView.Items[i].Data = Item then begin
3433 TreeView.Items[i].Selected := True;
3435 TreeViewChange(TreeView, TreeView.Items[i]);
3439 Application.ProcessMessages;
3441 if not CallEvent then begin
3442 TreeView.OnChange := ChangeEvent;
3443 TreeView.OnChanging := ChangingEvent;
3448 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3449 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3453 { if ssDouble in Shift then begin
3454 DoubleClickOccurred[Button] := True;
3456 DoubleClickOccurred[Button] := False;
3457 t := GetTickCount+GetDoubleClickTime;
3458 while GetTickCount < t do begin
3459 Application.ProcessMessages;
3460 if DoubleClickOccurred[Button] then
3465 if ssDouble in Shift then begin
3467 mbLeft: ListDoubleClick;
3480 procedure TGikoForm.ListClick;
3482 ListItem: TListItem;
3483 ThreadItem: TThreadItem;
3485 if ListView.SelCount <> 1 then Exit;
3486 ListItem := ListView.Selected;
3487 if ListItem = nil then Exit;
3488 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3490 ThreadItem := TThreadItem(ListItem.Data);
3491 if ThreadItem.IsLogFile then begin
3492 // if AddHistory(ThreadItem) then
3493 // SetContent(ThreadItem);
3494 InsertBrowserTab(ThreadItem);
3495 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3497 // SetContent(ThreadItem);
3498 InsertBrowserTab(ThreadItem);
3502 procedure TGikoForm.ListDoubleClick;
3504 ThreadItem: TThreadItem;
3506 // PostMessage(ListView.Handle, WM_CANCELMODE, 0, 0);
3508 if ListView.Selected = nil then Exit;
3509 // if TreeView.Selected = nil then Exit;
3511 if TObject(ListView.Selected.Data) is TCategory then begin
3512 SelectTreeNode(ListView.Selected.Data, True);
3513 // TreeView.Selected.Expanded := True;
3514 // TreeView.Selected.Item[ListView.Selected.Index].Selected := True;
3515 //TreeViewChange(nil, TreeView.Selected);
3516 end else if TObject(ListView.Selected.Data) is TBoard then begin
3517 SelectTreeNode(ListView.Selected.Data, True);
3518 // TreeView.Selected.Expanded := True;
3519 // TreeView.Selected.Item[ListView.Selected.Index].Selected := True;
3520 //TreeViewChange(nil, TreeView.Selected);
3521 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3522 //if TObject(ListView.Selected.Data) is TThreadItem then begin
3523 ThreadItem := TThreadItem(ListView.Selected.Data);
3524 DownloadContent(ThreadItem);
3529 procedure TGikoForm.BrowserMovement(AName: string);
3533 // OleVariant(Browser.Document).parentWindow.location.hash := AName;
3536 OleVariant(Browser.Document as IHTMLDocument2).body.scrollTop :=
3537 OleVariant(Browser.Document as IHTMLDocument2).anchors.item(nm).offsetTop;
3542 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3544 if TObject(Node.Data) is TBBS2ch then begin
3545 TBBS2ch(Node.Data).NodeExpand := False;
3546 end else if TObject(Node.Data) is TCategory then begin
3547 TCategory(Node.Data).NodeExpand := False;
3548 end else if TObject(Node.Data) is TBoard then begin
3549 TBoard(Node.Data).NodeExpand := False;
3553 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3555 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3558 procedure TGikoForm.SelectListItem(List: TList);
3560 // TmpTreeNode: TTreeNode;
3561 TmpListItem: TListItem;
3564 TmpListItem := ListView.Selected;
3565 while TmpListItem <> nil do begin
3566 List.Add(TmpListItem.Data);
3567 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3571 procedure TGikoForm.ExitActionExecute(Sender: TObject);
3576 procedure TGikoForm.AllSelectActionExecute(Sender: TObject);
3581 procedure TGikoForm.StdToolBarVisibleActionExecute(Sender: TObject);
3583 CoolBand: TCoolBand;
3585 CoolBand := GetCoolBand(MainCoolBar, StdToolBar);
3586 if CoolBand = nil then
3588 GikoSys.Setting.StdToolBarVisible := StdToolBarVisibleAction.Checked;
3589 CoolBand.Visible := GikoSys.Setting.StdToolBarVisible;
3590 // StdToolBar.Visible := StdToolBarVisibleAction.Checked;
3591 // AnimePanel.Visible := StdToolBar.Visible or ListToolBar.Visible;
3593 //StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
3594 StdToolBarVisiblePMenu.Checked := GikoSys.Setting.StdToolBarVisible;
3597 procedure TGikoForm.AddressBarVisibleActionExecute(Sender: TObject);
3599 CoolBand: TCoolBand;
3601 CoolBand := GetCoolBand(MainCoolBar, AddressToolBar);
3602 if CoolBand = nil then
3604 GikoSys.Setting.AddressBarVisible := AddressBarVisibleAction.Checked;
3605 CoolBand.Visible := GikoSys.Setting.AddressBarVisible;
3606 //AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
3607 AddressToolBarVisiblePMenu.Checked := GikoSys.Setting.AddressBarVisible;
3610 procedure TGikoForm.LinkBarVisibleActionExecute(Sender: TObject);
3612 CoolBand: TCoolBand;
3614 CoolBand := GetCoolBand(MainCoolBar, LinkToolBar);
3615 if CoolBand = nil then
3617 GikoSys.Setting.LinkBarVisible := LinkBarVisibleAction.Checked;
3618 CoolBand.Visible := GikoSys.Setting.LinkBarVisible;
3619 //LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
3620 LinkToolBarVisiblePMenu.Checked := GikoSys.Setting.LinkBarVisible;
3623 procedure TGikoForm.ListToolBarVisibleActionExecute(Sender: TObject);
3625 CoolBand: TCoolBand;
3627 CoolBand := GetCoolBand(ListCoolBar, ListToolBar);
3628 if CoolBand = nil then
3630 CoolBand.Visible := ListToolBarVisibleAction.Checked;
3631 // ListToolBar.Visible := ListToolBarVisibleAction.Checked;
3632 // AnimePanel.Visible := StdToolBar.Visible or ListToolBar.Visible;
3633 GikoSys.Setting.ListToolBarVisible := ListToolBarVisibleAction.Checked;
3636 procedure TGikoForm.ListNameBarVisibleActionExecute(Sender: TObject);
3638 CoolBand: TCoolBand;
3640 CoolBand := GetCoolBand(ListCoolBar, ListNameToolBar);
3641 if CoolBand = nil then
3643 CoolBand.Visible := ListNameBarVisibleAction.Checked;
3644 GikoSys.Setting.ListNameBarVisible := ListNameBarVisibleAction.Checked;
3647 procedure TGikoForm.BrowserToolBarVisibleActionExecute(Sender: TObject);
3649 CoolBand: TCoolBand;
3651 CoolBand := GetCoolBand(BrowserCoolBar, BrowserToolBar);
3652 if CoolBand = nil then
3654 CoolBand.Visible := BrowserToolBarVisibleAction.Checked;
3655 // BrowserToolBar.Visible := BrowserToolBarVisibleAction.Checked;
3656 GikoSys.Setting.BrowserToolBarVisible := BrowserToolBarVisibleAction.Checked;
3659 procedure TGikoForm.BrowserNameBarVisibleActionExecute(Sender: TObject);
3661 CoolBand: TCoolBand;
3663 CoolBand := GetCoolBand(BrowserCoolBar, BrowserNameToolBar);
3664 if CoolBand = nil then
3666 CoolBand.Visible := BrowserNameBarVisibleAction.Checked;
3667 GikoSys.Setting.BrowserNameBarVisible := BrowserNameBarVisibleAction.Checked;
3670 procedure TGikoForm.MsgBarVisibleActionExecute(Sender: TObject);
3672 MessageSplitter.Visible := MsgBarVisibleAction.Checked;
3673 MessagePanel.Top := MessageSplitter.Top + MessageSplitter.Height;
3674 MessageSplitter.Top := MessagePanel.Top + 1;
3675 MessagePanel.Visible := MsgBarVisibleAction.Checked;
3676 GikoSys.Setting.MessageBarVisible := MsgBarVisibleAction.Checked;
3679 procedure TGikoForm.StatusBarVisibleActionExecute(Sender: TObject);
3681 StatusBar.Visible := StatusBarVisibleAction.Checked;
3682 GikoSys.Setting.StatusBarVisible := StatusBarVisibleAction.Checked;
3685 procedure TGikoForm.IconStyleExecute(Sender: TObject);
3687 case ListView.ViewStyle of
3688 vsIcon: SmallIconAction.Execute;
3689 vsSmallIcon: ListIconAction.Execute;
3690 vsList: DetailIconAction.Execute;
3691 vsReport: LargeIconAction.Execute;
3695 procedure TGikoForm.LargeIconActionExecute(Sender: TObject);
3697 ListView.ViewStyle := vsIcon;
3698 LargeIconAction.Checked := True;
3701 procedure TGikoForm.SmallIconActionExecute(Sender: TObject);
3703 ListView.ViewStyle := vsSmallIcon;
3704 SmallIconAction.Checked := True;
3707 procedure TGikoForm.ListIconActionExecute(Sender: TObject);
3709 ListView.ViewStyle := vsList;
3710 ListIconAction.Checked := True;
3713 procedure TGikoForm.DetailIconActionExecute(Sender: TObject);
3715 ListView.ViewStyle := vsReport;
3716 DetailIconAction.Checked := True;
3719 procedure TGikoForm.SearchActionExecute(Sender: TObject);
3724 if FSearchDialog = nil then begin
3725 if (GikoForm.GetActiveList is TCategory) or (GikoForm.GetActiveList is TBoard) then
3726 chk := GikoForm.GetActiveList
3730 FSearchDialog := TSearchDialog.Create(Self, chk);
3731 FSearchDialog.SearchComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
3741 procedure TGikoForm.OptionActionExecute(Sender: TObject);
3745 Dlg := TOptionDialog.Create(Self);
3753 procedure TGikoForm.GikoNaviWebPageActionExecute(Sender: TObject);
3755 URL_GIKONAVI: string = 'http://gikonavi.sourceforge.jp/';
3757 GikoSys.OpenBrowser(URL_GIKONAVI, gbtAuto);
3760 procedure TGikoForm.MonazillaWebPageActionExecute(Sender: TObject);
3762 URL_MONAZILLA: string = 'http://www.monazilla.org/';
3764 GikoSys.OpenBrowser(URL_MONAZILLA, gbtAuto);
3767 procedure TGikoForm.BBS2chWebPageActionExecute(Sender: TObject);
3769 URL_2ch: string = 'http://www.2ch.net/';
3771 GikoSys.OpenBrowser(URL_2ch, gbtAuto);
3774 procedure TGikoForm.GikoFolderOpenActionExecute(Sender: TObject);
3776 // GikoSys.OpenBrowser(GikoSys.GetAppDir, gbtIE);
3777 GikoSys.CreateProcess('explorer.exe', '/e,"' + GikoSys.GetAppDir + '"');
3780 procedure TGikoForm.AboutActionExecute(Sender: TObject);
3784 Dlg := TAboutDialog.Create(Self);
3792 procedure TGikoForm.Cabinet2chActionExecute(Sender: TObject);
3797 procedure TGikoForm.CabinetHistoryActionExecute(Sender: TObject);
3802 procedure TGikoForm.CabinetVisibleActionExecute(Sender: TObject);
3804 TreeSplitter.Visible := CabinetVisibleAction.Checked;
3805 CabinetPanel.Visible := CabinetVisibleAction.Checked;
3808 procedure TGikoForm.AllItemActionExecute(Sender: TObject);
3811 if ViewType <> gvtAll then
3812 SetListViewType(gvtAll);
3813 AllItemAction.Checked := True;
3814 LogItemAction.Checked := False;
3815 NewItemAction.Checked := False;
3816 //SelectItemAction.Checked := False;
3817 // SelectComboBox
\82Ì
\97\9a\97ð
\82ð
\8dX
\90V
\82µ
\82Ä
\82¨
\82
3819 // SelectComboBox
\82Ì
\92l
\82ð
\83N
\83\8a\83A
3820 if SelectComboBox.Parent <> nil then begin
3821 SelectComboBox.Text := SELECTCOMBOBOX_NAME;
3822 SelectComboBox.Color := SELECTCOMBOBOX_COLOR;
3829 procedure TGikoForm.LogItemActionExecute(Sender: TObject);
3832 if ViewType <> gvtLog then
3833 SetListViewType(gvtLog);
3834 AllItemAction.Checked := False;
3835 LogItemAction.Checked := True;
3836 NewItemAction.Checked := False;
3837 //SelectItemAction.Checked := False;
3838 // SelectComboBox
\82Ì
\97\9a\97ð
\82ð
\8dX
\90V
\82µ
\82Ä
\82¨
\82
3840 // SelectComboBox
\82Ì
\92l
\82ð
\83N
\83\8a\83A
3841 if SelectComboBox.Parent <> nil then begin
3842 SelectComboBox.Text := SELECTCOMBOBOX_NAME;
3843 SelectComboBox.Color := SELECTCOMBOBOX_COLOR;
3850 procedure TGikoForm.NewItemActionExecute(Sender: TObject);
3854 if ViewType <> gvtNew then
3855 SetListViewType(gvtNew);
3856 AllItemAction.Checked := False;
3857 LogItemAction.Checked := False;
3858 NewItemAction.Checked := True;
3859 //SelectItemAction.Checked := False;
3860 // SelectComboBox
\82Ì
\97\9a\97ð
\82ð
\8dX
\90V
\82µ
\82Ä
\82¨
\82
3862 // SelectComboBox
\82Ì
\92l
\82ð
\83N
\83\8a\83A
3863 if SelectComboBox.Parent <> nil then begin
3864 SelectComboBox.Text := SELECTCOMBOBOX_NAME;
3865 SelectComboBox.Color := SELECTCOMBOBOX_COLOR;
3872 procedure TGikoForm.SelectItemActionExecute(Sender: TObject);
3875 Dlg: TListSelectDialog;
3878 if SelectComboBox.Parent <> nil then begin
3879 if SelectComboBox.Left + SelectComboBox.Width < ListToolBar.Width then begin
3880 // SelectComboBox
\82ª
\82 \82é
\8fê
\8d\87\82Í
\83t
\83H
\81[
\83J
\83X
\82ð
\88Ú
\82·
3881 SelectComboBox.SetFocus;
3888 if SelectComboBox.Text = SELECTCOMBOBOX_NAME then begin
3889 SelectComboBox.Text := '';
3890 SelectComboBox.Color := clWindow;
3893 AllItemAction.Checked := False;
3894 LogItemAction.Checked := False;
3895 NewItemAction.Checked := False;
3896 //SelectItemAction.Checked := True;
3898 Dlg := TListSelectDialog.Create(Self);
3900 Dlg.SelectComboBox.Items.Assign(GikoSys.Setting.SelectTextList);
3901 Dlg.SelectComboBox.Text := SelectComboBox.Text;
3903 if Dlg.ModalResult = mrCancel then begin
3904 if Length( SelectComboBox.Text ) = 0 then begin
3905 AllItemAction.Checked := True;
3906 SelectComboBox.Text := SELECTCOMBOBOX_NAME;
3907 SelectComboBox.Color := SELECTCOMBOBOX_COLOR;
3910 if GetActiveList is TBoard then
3911 SetListViewType(gvtUser, TBoard(GetActiveList).ParentCategory.ParentBBS2ch.SelectText , Dlg.KubetsuCheckBox.Checked);
3913 idx := GikoSys.Setting.SelectTextList.IndexOf(Dlg.SelectComboBox.Text);
3915 GikoSys.Setting.SelectTextList.Delete(idx);
3916 GikoSys.Setting.SelectTextList.Insert(0, Dlg.SelectComboBox.Text);
3917 while Dlg.SelectComboBox.Items.Count > 100 do begin
3918 Dlg.SelectComboBox.Items.Delete(Dlg.SelectComboBox.Items.Count - 1);
3921 if Length( Dlg.SelectComboBox.Text ) = 0 then begin
3922 SelectComboBox.Text := SELECTCOMBOBOX_NAME;
3923 SelectComboBox.Color := SELECTCOMBOBOX_COLOR;
3925 SelectComboBox.Text := Dlg.SelectComboBox.Text;
3926 SelectComboBox.Color := clWindow;
3928 SetListViewType(gvtUser, Dlg.SelectComboBox.Text, Dlg.KubetsuCheckBox.Checked);
3935 procedure TGikoForm.ListNumberVisibleActionExecute(Sender: TObject);
3937 GikoSys.Setting.ListViewNo := ListNumberVisibleAction.Checked;
3941 procedure TGikoForm.UpFolderActionExecute(Sender: TObject);
3943 if GetActiveList is TBoard then begin
3944 if FTreeType = gtt2ch then
3945 SelectTreeNode(TBoard(GetActiveList).ParentCategory, True);
3946 //SetActiveList(TBoard(GetActiveList).ParentCategory);
3947 end else if GetActiveList is TCategory then begin
3948 if FTreeType = gtt2ch then
3949 SelectTreeNode(TCategory(GetActiveList).ParentBBS2ch, True);
3950 //SetActiveList(TCategory(GetActiveList).ParentBBS2ch);
3952 // if TreeView.Selected = nil then Exit;
3953 // if TreeView.Selected.Level = 0 then Exit;
3954 // TreeView.Selected.Parent.Selected := True;
3957 procedure TGikoForm.RoundActionExecute(Sender: TObject);
3961 Dlg := TRoundDialog.Create(Self);
3969 procedure TGikoForm.StopActionExecute(Sender: TObject);
3971 FControlThread.DownloadAbort;
3972 if FWorkCount <> 0 then FWorkCount := 0;
3974 Animate.Active := False;
3977 Screen.Cursor := crDefault;
3980 procedure TGikoForm.MsgBarCloseActionExecute(Sender: TObject);
3982 // MessagePanel.Visible := False;
3983 // MessageSplitter.Visible := False;
3984 // MsgBarVisibleAction.Checked := False;
3985 MsgBarVisibleAction.Execute;
3988 procedure TGikoForm.BrowserMaxActionExecute(Sender: TObject);
3990 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3991 case GikoSys.Setting.ListWidthState of
3993 //
\92Ê
\8fí
\95\
\8e¦
\82É
\82·
\82é
3994 ViewPanel.Width := FBrowserSizeWidth;
3995 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
3996 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
3997 GikoSys.Setting.ListWidthState := glsNormal;
3999 glsMin, glsNormal: begin
4000 //
\8dÅ
\91å
\95\
\8e¦
\82É
\82·
\82é
4001 if GikoSys.Setting.ListWidthState = glsNormal then
4002 FBrowserSizeWidth := ViewPanel.Width;
4003 ViewPanel.Width := 1;
4004 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
4005 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
4006 GikoSys.Setting.ListWidthState := glsMax;
4010 case GikoSys.Setting.ListHeightState of
4012 //
\92Ê
\8fí
\95\
\8e¦
\82É
\82·
\82é
4013 ViewPanel.Height := FBrowserSizeHeight;
4014 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
4015 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
4016 GikoSys.Setting.ListHeightState := glsNormal;
4018 glsMin, glsNormal: begin
4019 //
\8dÅ
\91å
\95\
\8e¦
\82É
\82·
\82é
4020 if GikoSys.Setting.ListHeightState = glsNormal then
4021 FBrowserSizeHeight := ViewPanel.Height;
4022 ViewPanel.Height := 1;
4023 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_NORMAL;
4024 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
4025 GikoSys.Setting.ListHeightState := glsMax;
4029 // Mouse.CursorPos := BrowserSizeButton.ClientToScreen(Point(
4030 // System.Round(BrowserToolBar.ButtonWidth div 2),
4031 // System.Round(BrowserToolBar.ButtonHeight div 2)));
4034 procedure TGikoForm.BrowserMinActionExecute(Sender: TObject);
4036 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4037 case GikoSys.Setting.ListWidthState of
4038 glsMax, glsNormal: begin
4039 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
4040 if GikoSys.Setting.ListWidthState = glsNormal then
4041 FBrowserSizeWidth := ViewPanel.Width;
4042 ViewPanel.Width := ThreadMainPanel.Width - 80;
4043 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
4044 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
4045 GikoSys.Setting.ListWidthState := glsMin;
4048 //
\92Ê
\8fí
\95\
\8e¦
\82É
\82·
\82é
4049 ViewPanel.Width := FBrowserSizeWidth;
4050 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
4051 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
4052 GikoSys.Setting.ListWidthState := glsNormal;
4056 case GikoSys.Setting.ListHeightState of
4057 glsMax, glsNormal: begin
4058 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
4059 if GikoSys.Setting.ListHeightState = glsNormal then
4060 FBrowserSizeHeight := ViewPanel.Height;
4061 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
4062 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
4063 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_NORMAL;
4064 GikoSys.Setting.ListHeightState := glsMin;
4067 //
\92Ê
\8fí
\95\
\8e¦
\82É
\82·
\82é
4068 ViewPanel.Height := FBrowserSizeHeight;
4069 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
4070 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
4071 GikoSys.Setting.ListHeightState := glsNormal;
4077 procedure TGikoForm.ScrollTopActionExecute(Sender: TObject);
4079 BrowserMovement('top');
4082 procedure TGikoForm.ScrollLastActionExecute(Sender: TObject);
4084 BrowserMovement('bottom');
4087 procedure TGikoForm.ScrollNewActionExecute(Sender: TObject);
4089 BrowserMovement('new');
4092 procedure TGikoForm.ScrollKokoActionExecute(Sender: TObject);
4094 BrowserMovement('koko');
4097 procedure TGikoForm.EditorActionExecute(Sender: TObject);
4099 Editor: TEditorForm;
4103 Item := GetActiveContent;
4104 if Item = nil then Exit;
4106 if Item.Count >= 1000 then begin
4107 msg := '
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\83\8c\83X
\90\94\82ª
\82P
\82O
\82O
\82O
\82ð
\92´
\82¦
\82Ä
\82¢
\82é
\82Ì
\82Å
\8f\91\8d\9e\82Ý
\8fo
\97\88\82Ü
\82¹
\82ñ
\81B' + #13#10
4108 + '
\90V
\83X
\83\8c\83b
\83h
\82ð
\92T
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B';
4109 if MsgBox(Handle, msg, '
\8cx
\8d\90', MB_YESNO or MB_ICONEXCLAMATION) <> 7 then begin
4113 Editor := TEditorForm.Create(Self);
4114 Editor.SetThreadItem(Item);
4116 Editor.BodyEdit.SetFocus;
4119 procedure TGikoForm.IEActionExecute(Sender: TObject);
4121 ShowThreadAction.Execute;
4124 procedure TGikoForm.ShowThreadActionExecute(Sender: TObject);
4126 ThreadItem: TThreadItem;
4129 ThreadItem := GetActiveContent;
4130 if ThreadItem = nil then Exit;
4131 URL := GikoSys.GetURL(ThreadItem.ParentBoard.BBSID, ThreadItem.FileName);
4132 GikoSys.OpenBrowser(URL, gbtAuto);
4135 procedure TGikoForm.ShowBoardActionExecute(Sender: TObject);
4137 ThreadItem: TThreadItem;
4140 ThreadItem := GetActiveContent;
4141 if ThreadItem = nil then Exit;
4142 URL := ThreadItem.ParentBoard.URL;
4143 GikoSys.OpenBrowser(URL, gbtAuto);
4146 //(Thread)URL
\82ð
\83R
\83s
\81[
4147 procedure TGikoForm.URLCopyActionExecute(Sender: TObject);
4152 if TObject(GetActiveContent) is TBoard then
4153 s := s + TBoard(GetActiveContent).URL + #13#10
4154 else if TObject(GetActiveContent) is TThreadItem then
4155 s := s + GikoSys.GetURL(TThreadItem(GetActiveContent).ParentBoard.BBSID, TThreadItem(GetActiveContent).FileName) + #13#10;
4157 Clipboard.AsText := s;
4160 //(Thread)
\83X
\83\8c\83b
\83h
\96¼
\82ð
\83R
\83s
\81[
4161 procedure TGikoForm.NameCopyActionExecute(Sender: TObject);
4166 if TObject(GetActiveContent) is TBoard then
4167 s := s + TBoard(GetActiveContent).Title + #13#10
4168 else if TObject(GetActiveContent) is TThreadItem then
4169 s := s + TThreadItem(GetActiveContent).Title + #13#10;
4171 Clipboard.AsText := s;
4174 //(Thread)
\83X
\83\8c\83b
\83h
\96¼
\82ÆURL
\82ð
\83R
\83s
\81[
4175 procedure TGikoForm.NameURLCopyActionExecute(Sender: TObject);
4180 if TObject(GetActiveContent) is TBoard then
4181 s := s + TBoard(GetActiveContent).Title + #13#10 + TBoard(GetActiveContent).URL + #13#10
4182 else if TObject(GetActiveContent) is TThreadItem then
4183 s := s + TThreadItem(GetActiveContent).Title + #13#10 + GikoSys.GetURL(TThreadItem(GetActiveContent).ParentBoard.BBSID, TThreadItem(GetActiveContent).FileName) + #13#10;
4185 Clipboard.AsText := s;
4188 procedure TGikoForm.ItemReloadActionExecute(Sender: TObject);
4190 ThreadItem: TThreadItem;
4192 ThreadItem := GetActiveContent;
4193 if ThreadItem <> nil then
4194 DownloadContent(ThreadItem);
4197 procedure TGikoForm.SelectListReloadActionExecute(Sender: TObject);
4203 if GetActiveList is TCategory then begin
4204 List := TList.Create;
4206 SelectListItem(List);
4207 if List.Count > 5 then begin
4208 msg := '5
\8cÂ
\88È
\8fã
\82Í
\8ew
\92è
\82Å
\82«
\82Ü
\82¹
\82ñ' + #13#10
4209 + '
\82Q
\82¿
\82á
\82ñ
\82Ë
\82é
\95\89\89×
\8cy
\8c¸
\82É
\82²
\8b¦
\97Í
\82
\82¾
\82³
\82¢';
4210 MsgBox(Handle, msg, '
\8cx
\8d\90', MB_ICONEXCLAMATION);
4213 for i := 0 to List.Count - 1 do begin
4214 if TObject(List[i]) is TBoard then
4215 DownloadList(TBoard(List[i]));
4220 end else if GetActiveList is TBoard then begin
4221 DownloadList(TBoard(GetActiveList));
4225 procedure TGikoForm.SelectThreadReloadActionExecute(Sender: TObject);
4231 List := TList.Create;
4233 SelectListItem(List);
4234 if List.Count > 10 then begin
4235 msg := '10
\8cÂ
\88È
\8fã
\82Í
\8ew
\92è
\82Å
\82«
\82Ü
\82¹
\82ñ' + #13#10
4236 + '
\82Q
\82¿
\82á
\82ñ
\82Ë
\82é
\95\89\89×
\8cy
\8c¸
\82É
\82²
\8b¦
\97Í
\82
\82¾
\82³
\82¢';
4237 MsgBox(Handle, msg, '
\8cx
\8d\90', MB_ICONEXCLAMATION);
4240 for i := 0 to List.Count - 1 do begin
4241 if TObject(List[i]) is TThreadItem then
4242 DownloadContent(TThreadItem(List[i]));
4249 procedure TGikoForm.SelectListReloadActionUpdate(Sender: TObject);
4251 if (GetActiveList is TCategory) and (ListView.SelCount > 0) then
4252 SelectListReloadAction.Enabled := True
4253 else if GetActiveList is TBoard then
4254 SelectListReloadAction.Enabled := True
4256 SelectListReloadAction.Enabled := False;
4259 procedure TGikoForm.SelectThreadReloadActionUpdate(Sender: TObject);
4261 if (GetActiveList is TBoard) and (ListView.SelCount > 0) then
4262 SelectThreadReloadAction.Enabled := True
4264 SelectThreadReloadAction.Enabled := False;
4267 procedure TGikoForm.AllItemActionUpdate(Sender: TObject);
4269 AllItemAction.Enabled := (GetActiveList is TBoard);
4272 procedure TGikoForm.LogItemActionUpdate(Sender: TObject);
4274 LogItemAction.Enabled := (GetActiveList is TBoard);
4277 procedure TGikoForm.NewItemActionUpdate(Sender: TObject);
4279 NewItemAction.Enabled := (GetActiveList is TBoard);
4282 procedure TGikoForm.SelectItemActionUpdate(Sender: TObject);
4284 SelectItemAction.Enabled := (GetActiveList is TBoard);
4287 procedure TGikoForm.UpFolderActionUpdate(Sender: TObject);
4289 UpFolderAction.Enabled := not (GetActiveList is TBBS2ch);
4292 procedure TGikoForm.ThreadEditorActionUpdate(Sender: TObject);
4294 ThreadEditorAction.Enabled := (GetActiveList is TBoard);
4297 procedure TGikoForm.FormResize(Sender: TObject);
4299 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
4300 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
4303 procedure TGikoForm.ScrollTopActionUpdate(Sender: TObject);
4305 ScrollTopAction.Enabled := (GetActiveContent <> nil) and (GetActiveContent.IsLogFile);
4308 procedure TGikoForm.ScrollLastActionUpdate(Sender: TObject);
4310 ScrollLastAction.Enabled := (GetActiveContent <> nil) and (GetActiveContent.IsLogFile);
4313 procedure TGikoForm.ScrollNewActionUpdate(Sender: TObject);
4315 ScrollNewAction.Enabled := (GetActiveContent <> nil) and (GetActiveContent.IsLogFile);
4318 procedure TGikoForm.ScrollKokoActionUpdate(Sender: TObject);
4320 ScrollKokoAction.Enabled := (GetActiveContent <> nil)
4321 and (GetActiveContent.IsLogFile)
4322 and (GetActiveContent.Kokomade <> -1);
4326 procedure TGikoForm.EditorActionUpdate(Sender: TObject);
4328 EditorAction.Enabled := GetActiveContent <> nil;
4331 procedure TGikoForm.IEActionUpdate(Sender: TObject);
4333 IEAction.Enabled := GetActiveContent <> nil;
4336 procedure TGikoForm.ShowThreadActionUpdate(Sender: TObject);
4338 ShowThreadAction.Enabled := GetActiveContent <> nil;
4341 procedure TGikoForm.ShowBoardActionUpdate(Sender: TObject);
4343 ShowBoardAction.Enabled := GetActiveContent <> nil;
4346 procedure TGikoForm.ItemReloadActionUpdate(Sender: TObject);
4348 ItemReloadAction.Enabled := GetActiveContent <> nil;
4351 procedure TGikoForm.URLCopyActionUpdate(Sender: TObject);
4353 URLCopyAction.Enabled := GetActiveContent <> nil;
4356 procedure TGikoForm.NameCopyActionUpdate(Sender: TObject);
4358 NameCopyAction.Enabled := GetActiveContent <> nil;
4361 procedure TGikoForm.NameURLCopyActionUpdate(Sender: TObject);
4363 NameURLCopyAction.Enabled := GetActiveContent <> nil;
4366 procedure TGikoForm.BrowserTabCloseActionUpdate(Sender: TObject);
4368 BrowserTabCloseAction.Enabled := GetActiveContent <> nil;
4371 procedure TGikoForm.NotSelectTabCloseActionUpdate(Sender: TObject);
4373 NotSelectTabCloseAction.Enabled := GetActiveContent <> nil;
4376 procedure TGikoForm.AllTabCloseActionUpdate(Sender: TObject);
4378 AllTabCloseAction.Enabled := GetActiveContent <> nil;
4381 procedure TGikoForm.ActiveLogDeleteActionUpdate(Sender: TObject);
4383 ActiveLogDeleteAction.Enabled := GetActiveContent <> nil;
4386 procedure TGikoForm.ListViewSelectItem(Sender: TObject; Item: TListItem;
4389 SelectTimer.Enabled := False;
4391 SelectTimer.Enabled := True;
4394 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
4396 SelectTimer.Enabled := False;
4400 procedure TGikoForm.ListViewDblClick(Sender: TObject);
4405 procedure TGikoForm.LogDeleteActionExecute(Sender: TObject);
4407 DEL_MSG = '
\83\8d\83O
\83t
\83@
\83C
\83\8b\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
4408 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
4410 ThreadItem: TThreadItem;
4411 TmpListItem: TListItem;
4415 List := TList.Create;
4417 TmpListItem := ListView.Selected;
4418 while TmpListItem <> nil do begin
4419 if TObject(TmpListItem.Data) is TThreadItem then begin
4420 ThreadItem := TThreadItem(TmpListItem.Data);
4421 if ThreadItem.IsLogFile then
4422 List.Add(ThreadItem);
4424 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
4427 if GikoSys.Setting.DeleteMsg and (List.Count > 0) then begin
4428 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONQUESTION or MB_DEFBUTTON2) <> IDYES then
4432 for i := 0 to List.Count - 1 do begin
4433 ThreadItem := TThreadItem(List[i]);
4434 DeleteHistory(ThreadItem);
4435 DeleteTab(ThreadItem);
4436 ThreadItem.DeleteLogFile;
4444 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
4448 FTabHintIndex := -1;
4449 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
4450 if TThreadItem(BrowserTab.Tabs.Objects[i]) = ThreadItem then begin
4451 BrowserTab.Tabs.Delete(i);
4452 if i > (BrowserTab.Tabs.Count - 1) then
4453 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1
4455 BrowserTab.TabIndex := i;
4456 if BrowserTab.Tabs.Count = 0 then
4458 else if BrowserTab.TabIndex <> -1 then
4459 SetContent(TThreadItem(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]));
4465 procedure TGikoForm.KokomadeActionExecute(Sender: TObject);
4468 ThreadItem: TThreadItem;
4473 No := KokoPopupMenu.Tag;
4474 if No = 0 then Exit;
4475 ThreadItem := GetActiveContent;
4476 if ThreadItem = nil then Exit;
4477 ThreadItem.Kokomade := No;
4478 doc := Browser.Document;
4479 ScrollTop := doc.Body.ScrollTop;
4481 GikoSys.CreateHTML2(doc, ThreadItem, sTitle);
4482 // HtmlName := GikoSys.CreateHTML(ThreadItem, sTitle) + '#koko';
4484 // Browser.Navigate(HtmlName, Flags);
4486 Application.ProcessMessages;
4487 doc.Body.ScrollTop := ScrollTop;
4490 procedure TGikoForm.ZenbuActionExecute(Sender: TObject);
4492 ThreadItem: TThreadItem;
4497 ThreadItem := GetActiveContent;
4498 if ThreadItem = nil then Exit;
4499 ThreadItem.Kokomade := -1;
4500 doc := Browser.Document;
4501 ScrollTop := doc.Body.ScrollTop;
4502 GikoSys.CreateHTML2(doc, ThreadItem, sTitle);
4503 // HtmlName := GikoSys.CreateHTML(ThreadItem, sTitle) + '#koko';
4505 // Browser.Navigate(HtmlName, Flags);
4507 Application.ProcessMessages;
4508 doc.Body.ScrollTop := ScrollTop;
4511 function TGikoForm.Hook(var Message: TMessage): Boolean;
4514 if Message.Msg = CM_APPKEYDOWN then Result := True;
4517 procedure TGikoForm.KokoResActionExecute(Sender: TObject);
4519 Editor: TEditorForm;
4524 Number := KokoPopupMenu.Tag;
4525 if Number = 0 then Exit;
4526 Item := GetActiveContent;
4527 if Item = nil then Exit;
4529 if Item.Count >= 1000 then begin
4530 msg := '
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\83\8c\83X
\90\94\82ª
\82P
\82O
\82O
\82O
\82ð
\92´
\82¦
\82Ä
\82¢
\82é
\82Ì
\82Å
\8f\91\8d\9e\82Ý
\8fo
\97\88\82Ü
\82¹
\82ñ
\81B' + #13#10
4531 + '
\90V
\83X
\83\8c\83b
\83h
\82ð
\92T
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B';
4532 if MsgBox(Handle, msg, '
\8cx
\8d\90', MB_YESNO or MB_ICONEXCLAMATION) <> 7 then begin
4536 Editor := TEditorForm.Create(Self);
4537 Editor.SetThreadItem(Item);
4538 Editor.BodyEdit.Text := '>>' + IntToStr(Number) + #13#10;
4540 Editor.BodyEdit.SetFocus;
4543 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
4545 ItemRoundPMenu.Visible := (GetActiveList is TBoard);
4546 ItemReservPMenu.Visible := (GetActiveList is TBoard);
4547 LPMSep01.Visible := (GetActiveList is TBoard);
4548 ListRoundPMenu.Visible := (GetActiveList is TCategory);// or (GetActiveList is TBoard);
4549 ListReservPMenu.Visible := (GetActiveList is TCategory);// or (GetActiveList is TBoard);
4550 LPMSep02.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
4551 KidokuPMenu.Visible := (GetActiveList is TBoard);
4552 MidokuPMenu.Visible := (GetActiveList is TBoard);
4553 UrlCopyPMenu.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
4554 NameUrlCopyPMenu.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
4555 AllSelectPMenu.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
4556 LPMSep05.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
4557 DeletePMenu.Visible := (GetActiveList is TBoard);
4558 LPMSep06.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
4560 BoardFavoriteAddMenu.Visible := (GetActiveList is TCategory);
4561 ThreadFavoriteAddMenu.Visible := (GetActiveList is TBoard);
4563 AddRoundNameMenu(ItemReservPMenu);
4564 AddRoundNameMenu(ListReservPMenu);
4567 procedure TGikoForm.BoardIEActionExecute(Sender: TObject);
4571 if GetActiveList is TBoard then begin
4572 URL := TBoard(GetActiveList).URL;
4573 GikoSys.OpenBrowser(URL, gbtAuto);
4577 procedure TGikoForm.SelectItemURLCopyActionExecute(Sender: TObject);
4584 List := TList.Create;
4586 SelectListItem(List);
4587 for i := 0 to List.Count - 1 do begin
4588 if TObject(List[i]) is TBoard then
4589 s := s + TBoard(List[i]).URL + #13#10
4590 else if TObject(List[i]) is TThreadItem then
4591 s := s + GikoSys.GetURL(TThreadItem(List[i]).ParentBoard.BBSID, TThreadItem(List[i]).FileName) + #13#10;
4594 Clipboard.AsText := s;
4600 procedure TGikoForm.SelectItemNameCopyActionExecute(Sender: TObject);
4607 List := TList.Create;
4609 SelectListItem(List);
4610 for i := 0 to List.Count - 1 do begin
4611 if TObject(List[i]) is TBoard then
4612 s := s + TBoard(List[i]).Title + #13#10
4613 else if TObject(List[i]) is TThreadItem then
4614 s := s + TThreadItem(List[i]).Title + #13#10;
4617 Clipboard.AsText := s;
4623 procedure TGikoForm.SelectItemNameURLCopyActionExecute(Sender: TObject);
4630 List := TList.Create;
4632 SelectListItem(List);
4633 for i := 0 to List.Count - 1 do begin
4634 if TObject(List[i]) is TBoard then
4635 s := s + TBoard(List[i]).Title + #13#10 + TBoard(List[i]).URL + #13#10
4636 else if TObject(List[i]) is TThreadItem then
4637 s := s + TThreadItem(List[i]).Title + #13#10 + GikoSys.GetURL(TThreadItem(List[i]).ParentBoard.BBSID, TThreadItem(List[i]).FileName) + #13#10;
4640 Clipboard.AsText := s;
4646 procedure TGikoForm.BoardIEActionUpdate(Sender: TObject);
4648 if GetActiveList is TBoard then
4649 BoardIEAction.Enabled := True
4651 BoardIEAction.Enabled := False;
4654 procedure TGikoForm.SelectItemURLCopyActionUpdate(Sender: TObject);
4656 if ((GetActiveList is TBoard) or (GetActiveList is TCategory))and (ListView.SelCount > 0) then
4657 SelectItemURLCopyAction.Enabled := True
4659 SelectItemURLCopyAction.Enabled := False;
4662 procedure TGikoForm.SelectItemNameCopyActionUpdate(Sender: TObject);
4664 if ((GetActiveList is TBoard) or (GetActiveList is TCategory))and (ListView.SelCount > 0) then
4665 SelectItemNameCopyAction.Enabled := True
4667 SelectItemNameCopyAction.Enabled := False;
4670 procedure TGikoForm.SelectItemNameURLCopyActionUpdate(Sender: TObject);
4672 if ((GetActiveList is TBoard) or (GetActiveList is TCategory))and (ListView.SelCount > 0) then
4673 SelectItemNameURLCopyAction.Enabled := True
4675 SelectItemNameURLCopyAction.Enabled := False;
4678 procedure TGikoForm.AllSelectActionUpdate(Sender: TObject);
4680 if ListView.SelCount > 0 then
4681 AllSelectAction.Enabled := True
4683 AllSelectAction.Enabled := False;
4686 procedure TGikoForm.LogDeleteActionUpdate(Sender: TObject);
4688 if (GetActiveList is TBoard) and (ListView.SelCount > 0) then
4689 LogDeleteAction.Enabled := True
4691 LogDeleteAction.Enabled := False;
4694 procedure TGikoForm.BrowserTabCloseActionExecute(Sender: TObject);
4697 ThreadItem: TThreadItem;
4699 idx := BrowserTab.TabIndex;
4700 if idx <> -1 then begin
4701 ThreadItem := TThreadItem(BrowserTab.Tabs.Objects[idx]);
4702 DeleteTab(ThreadItem);
4706 procedure TGikoForm.NotSelectTabCloseActionExecute(Sender: TObject);
4710 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4711 if BrowserTab.TabIndex <> i then begin
4712 BrowserTab.Tabs.Delete(i);
4717 procedure TGikoForm.AllTabCloseActionExecute(Sender: TObject);
4721 for i := BrowserTab.Tabs.Count - 1 downto 0 do
4722 BrowserTab.Tabs.Delete(i);
4726 procedure TGikoForm.TreeSelectBoradReloadExecute(Sender: TObject);
4729 TmpTreeNode: TTreeNode;
4731 TmpTreeNode := FClickNode;
4732 TreeView.Selected := FClickNode;
4733 if TObject(TmpTreeNode.Data) is TBoard then begin
4734 Board := TBoard(TmpTreeNode.Data);
4735 DownloadList(Board);
4739 procedure TGikoForm.TreeSelectThreadReloadExecute(Sender: TObject);
4741 ThreadItem: TThreadItem;
4742 TmpTreeNode: TTreeNode;
4744 TmpTreeNode := FClickNode;
4745 TreeView.Selected := FClickNode;
4746 if TObject(TmpTreeNode.Data) is TThreadItem then begin
4747 ThreadItem := TThreadItem(TmpTreeNode.Data);
4748 DownloadContent(ThreadItem);
4752 procedure TGikoForm.TreeSelectURLCopyExecute(Sender: TObject);
4754 TmpTreeNode: TTreeNode;
4757 TmpTreeNode := FClickNode;
4758 TreeView.Selected := FClickNode;
4759 if TObject(TmpTreeNode.Data) is TBoard then begin
4760 s := TBoard(TmpTreeNode.Data).URL + #13#10;
4761 end else if (TObject(TmpTreeNode.Data) is TThreadItem) then begin
4762 s := GikoSys.GetURL(TThreadItem(TmpTreeNode.Data).ParentBoard.BBSID, TThreadItem(TmpTreeNode.Data).FileName) + #13#10;
4764 Clipboard.AsText := s;
4767 procedure TGikoForm.TreeSelectNameURLCopyExecute(Sender: TObject);
4769 TmpTreeNode: TTreeNode;
4772 TmpTreeNode := FClickNode;
4773 TreeView.Selected := FClickNode;
4774 if TObject(TmpTreeNode.Data) is TBoard then begin
4775 s := TBoard(TmpTreeNode.Data).Title + #13#10 + TBoard(TmpTreeNode.Data).URL + #13#10;
4776 end else if (TObject(TmpTreeNode.Data) is TThreadItem) then begin
4777 s := TThreadItem(TmpTreeNode.Data).Title + #13#10 + GikoSys.GetURL(TThreadItem(TmpTreeNode.Data).ParentBoard.BBSID, TThreadItem(TmpTreeNode.Data).FileName) + #13#10;
4779 Clipboard.AsText := s;
4783 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
4785 FClickNode := TreeView.Selected;
4786 if FClickNode = nil then begin
4787 TreeSelectThreadPupupMenu.Visible := False;
4788 TreeSelectBoardPupupMenu.Visible := False;
4789 TPMSep01.Visible := False;
4790 TreeSelectURLPupupMenu.Visible := False;
4791 TreeSelectNameURLPupupMenu.Visible := False;
4792 TreeSelectFavoriteAddPupupMenu.Visible := False;
4793 end else if TObject(FClickNode.Data) is TBoard then begin
4794 TreeSelectThreadPupupMenu.Visible := False;
4795 TreeSelectBoardPupupMenu.Visible := True;
4796 TPMSep01.Visible := True;
4797 TreeSelectURLPupupMenu.Visible := True;
4798 TreeSelectNameURLPupupMenu.Visible := True;
4799 TreeSelectFavoriteAddPupupMenu.Visible := True;
4800 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
4801 TreeSelectThreadPupupMenu.Visible := True;
4802 TreeSelectBoardPupupMenu.Visible := False;
4803 TPMSep01.Visible := True;
4804 TreeSelectURLPupupMenu.Visible := True;
4805 TreeSelectNameURLPupupMenu.Visible := True;
4806 TreeSelectFavoriteAddPupupMenu.Visible := True;
4808 TreeSelectThreadPupupMenu.Visible := False;
4809 TreeSelectBoardPupupMenu.Visible := False;
4810 TPMSep01.Visible := False;
4811 TreeSelectURLPupupMenu.Visible := False;
4812 TreeSelectNameURLPupupMenu.Visible := False;
4813 TreeSelectFavoriteAddPupupMenu.Visible := False;
4817 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
4818 var ppDisp: IDispatch; var Cancel: WordBool);
4824 Protocol, Host, Path, Document, Port, Bookmark: string;
4828 ThreadItem: TThreadItem;
4832 //shift ->
\90Ý
\92è
\83u
\83\89\83E
\83U
\81i
\96³
\82¯
\82ê
\82ÎIE
\81j
4834 ShiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4835 CtrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4838 if (IHTMLDocument2(TWebBrowser(Sender).Document).activeElement <> nil) then begin
4839 Text := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.Get_outerText;
4840 Html := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.Get_outerHTML;
4842 URL := GikoSys.GetHRefText(Html);
4843 URL := GikoSys.HTMLDecode(URL);
4845 GikoSys.ParseURI(URL, Protocol, Host, Path, Document, Port, Bookmark);
4848 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
4849 if GikoSys.Setting.LinkAddAddressBar then begin
4850 idx := AddressComboBox.Items.IndexOf(URL);
4851 if idx = -1 then begin
4852 AddressComboBox.Items.Insert(0, URL);
4853 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
4854 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
4856 AddressComboBox.Items.Delete(idx);
4857 AddressComboBox.Items.Insert(0, URL);
4861 if GikoSys.Is2chHost(Host) and GikoSys.Parse2chURL(URL, Path, Document, BBSID, BBSKey) then begin
4862 Board := BBS2ch.FindBBSID(BBSID);
4863 if Board = nil then begin
4864 GikoSys.OpenBrowser(URL, gbtAuto);
4867 if not Board.IsThreadDatRead then
4868 GikoSys.ReadSubjectFile(Board);
4869 ThreadItem := Board.Find(ChangeFileExt(BBSKey, '.dat'));
4870 if ThreadItem = nil then begin
4872 GikoSys.OpenBrowser(URL, gbtUserApp)
4873 else if CtrlDown then
4874 GikoSys.OpenBrowser(URL, gbtIE)
4876 ThreadItem := TThreadItem.Create;
4877 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4878 if AnsiPos(Host, Board.URL) = 0 then
4879 ThreadItem.DownloadHost := Host
4881 ThreadItem.DownloadHost := '';
4882 Board.Insert(0, ThreadItem);
4883 if ActiveList is TBoard then begin
4884 if TBoard(ActiveList) = Board then
4885 ListView.Items.Count := ListView.Items.Count + 1;
4886 InsertBrowserTab(ThreadItem);
4887 DownloadContent(ThreadItem);
4892 GikoSys.OpenBrowser(URL, gbtUserApp)
4893 else if CtrlDown then
4894 GikoSys.OpenBrowser(URL, gbtIE)
4896 if ThreadItem.IsLogFile then
4897 InsertBrowserTab(ThreadItem)
4899 if AnsiPos(Host, Board.URL) = 0 then
4900 ThreadItem.DownloadHost := Host
4902 ThreadItem.DownloadHost := '';
4903 InsertBrowserTab(ThreadItem);
4904 DownloadContent(ThreadItem);
4909 GikoSys.OpenBrowser(URL, gbtAuto);
4913 { ShiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4914 CtrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4917 Memo1.Lines.Add('ShiftDown');
4919 Memo1.Lines.Add('CtrlDown');
4921 if (IHTMLDocument2(TWebBrowser(Sender).Document).activeElement <> nil) then begin
4922 Text := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.Get_outerText;
4923 Url := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.Get_outerHTML;
4927 URL := GetHRefText(URL);
4929 ParseURI(URL, Protocol, Host, path, Document, Port, Bookmark);
4931 b := Parse2chURL(path, document, bbs, num);
4932 memo1.Lines.Add('bbs: ' + bbs);
4933 memo1.Lines.Add('key: ' + num);
4935 Memo1.Lines.Add('Parse2chURL: True')
4937 Memo1.Lines.Add('Parse2chURL: False');
4939 // AppPath := 'C:\Borland\Projects\Test\TestBrowser\TestBrowser.exe';
4944 procedure TGikoForm.ListSplitterCanResize(Sender: TObject;
4945 var NewSize: Integer; var Accept: Boolean);
4947 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4948 if ViewPanel.Width < 2 then begin
4949 ViewPanel.Width := 1;
4950 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
4951 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
4952 GikoSys.Setting.ListWidthState := glsMax;
4953 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
4954 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
4955 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
4956 GikoSys.Setting.ListWidthState := glsMin;
4958 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
4959 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
4960 GikoSys.Setting.ListWidthState := glsNormal;
4963 if ViewPanel.Height < 2 then begin
4964 ViewPanel.Height := 1;
4965 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_NORMAL;
4966 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
4967 GikoSys.Setting.ListHeightState := glsMax;
4968 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
4969 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
4970 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_NORMAL;
4971 GikoSys.Setting.ListHeightState := glsMin;
4973 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
4974 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
4975 GikoSys.Setting.ListHeightState := glsNormal;
4980 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
4982 if Mouse.Capture <> 0 then
4984 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4985 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
4986 FBrowserSizeWidth := ViewPanel.Width;
4988 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
4989 FBrowserSizeHeight := ViewPanel.Height;
4991 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
4992 FBrowserSizeHeight := ViewPanel.Height
4993 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
4994 FBrowserSizeWidth := ViewPanel.Width;}
4997 procedure TGikoForm.BrowserTabChange(Sender: TObject);
5000 ThreadItem: TThreadItem;
5003 // if NewTab = -1 then
5004 FTabHintIndex := -1;
5005 BrowserTab.Hint := '';
5006 idx := BrowserTab.TabIndex;
5008 SetContent(BrowserNullTab)
5009 else if BrowserTab.Tabs.Objects[idx] is TThreadItem then begin
5010 ThreadItem := TThreadItem(BrowserTab.Tabs.Objects[idx]);
5011 SetContent(ThreadItem);
5012 if GikoSys.Setting.URLDisplay then
5013 AddressComboBox.Text := GikoSys.GetURL(ThreadItem.ParentBoard.BBSID, ThreadItem.FileName);
5016 procedure TGikoForm.BrowserTabClick(Sender: TObject);
5019 ThreadItem: TThreadItem;
5021 // if NewTab = -1 then
5022 FTabHintIndex := -1;
5023 BrowserTab.Hint := '';
5024 idx := BrowserTab.TabIndex;
5026 SetContent(BrowserNullTab)
5027 else if BrowserTab.Tabs.Objects[idx] is TThreadItem then begin
5028 ThreadItem := TThreadItem(BrowserTab.Tabs.Objects[idx]);
5029 SetContent(ThreadItem);
5030 if GikoSys.Setting.URLDisplay then
5031 AddressComboBox.Text := GikoSys.GetURL(ThreadItem.ParentBoard.BBSID, ThreadItem.FileName);
5035 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
5036 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5043 if Button = mbMiddle then begin
5044 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
5047 p := BrowserTab.ScreenToClient(p);
5048 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
5049 if idx <> -1 then begin
5050 OldIndex := BrowserTab.TabIndex;
5051 BrowserTab.Tabs.Delete(idx);
5052 if idx = OldIndex then begin
5053 if BrowserTab.Tabs.Count > idx then
5054 BrowserTab.TabIndex := idx
5055 else if BrowserTab.Tabs.Count = idx then
5056 BrowserTab.TabIndex := idx - 1
5057 else if BrowserTab.Tabs.Count > 0 then
5058 BrowserTab.TabIndex := 0;
5059 BrowserTab.OnChange(nil);
5062 { end else if Button = mbRight then begin
5063 //
\83}
\83E
\83X
\89E
\83{
\83^
\83\93
5066 // GetCursorPos(p2);
5067 p := BrowserTab.ScreenToClient(p);
5068 // idx := BrowserTab.ItemAtPos(p);
5069 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
5070 if idx <> -1 then begin
5071 OldIndex := BrowserTab.TabIndex;
5072 BrowserTab.TabIndex := idx;
5073 if OldIndex <> idx then
5074 BrowserTab.OnChange(nil);
5075 BrowserTabPopupMenu.Tag := idx;
5076 BrowserTabPopupMenu.Popup(p2.X, p2.Y);
5082 procedure TGikoForm.SetBrowserTabState;
5085 CoolBand: TCoolBand;
5087 BrowserBottomPanel.AutoSize := False;
5088 if GikoSys.Setting.BrowserTabVisible then begin
5089 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
5090 BrowserTab.Style := tsTabs;
5091 if GikoSys.Setting.BrowserTabPosition = gtpTop then
5092 BrowserTab.TabPosition := tpTop
5094 BrowserTab.TabPosition := tpBottom;
5095 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
5096 BrowserTab.TabPosition := tpTop;
5097 BrowserTab.Style := tsButtons;
5099 BrowserTab.TabPosition := tpTop;
5100 BrowserTab.Style := tsFlatButtons
5103 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
5104 BrowserTab.Parent := BrowserTabToolBar;
5105 BrowserBottomPanel.Hide;
5106 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
5107 if CoolBand <> nil then
5108 CoolBand.Visible := True;
5109 // BrowserTab.Parent := BrowserTopPanel;
5110 // BrowserTab.Parent := BrowserCoolBar;
5111 // BrowserTab.Top := 26;
5112 // BrowserTopPanel.Height := 44;
5115 BrowserTab.Parent := BrowserBottomPanel;
5116 BrowserTab.Top := 0;
5117 BrowserTab.Left := 0;
5118 BrowserBottomPanel.Show;
5119 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
5120 if CoolBand <> nil then
5121 CoolBand.Visible := False;
5122 // BrowserTopPanel.Height := 26;
5126 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
5127 if CoolBand <> nil then
5128 CoolBand.Visible := False;
5129 BrowserBottomPanel.Visible := False;
5130 // BrowserTab.Visible := False;
5131 // BrowserTopPanel.Height := 26;
5135 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
5136 Y: Integer; State: TDragState; var Accept: Boolean);
5140 idx := BrowserTab.IndexOfTabAt(X, Y);
5141 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
5144 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
5149 idx := BrowserTab.IndexOfTabAt(X, Y);
5151 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
5154 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
5155 Shift: TShiftState; X, Y: Integer);
5158 ThreadItem: TThreadItem;
5160 if ( ssLeft in Shift )then begin
5161 BrowserTab.EndDrag(false);
5162 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
5164 TabIdx := BrowserTab.IndexOfTabAt(x, y);
5165 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
5166 Application.CancelHint;
5167 ThreadItem := TThreadItem(BrowserTab.Tabs.Objects[TabIdx]);
5168 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
5169 BrowserTab.Hint := ThreadItem.Title;
5170 Application.ShowHint := True;
5172 BrowserTab.Hint := '';
5173 Application.ShowHint := True;
5175 FTabHintIndex := TabIdx;
5180 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
5181 const pDisp: IDispatch; var URL: OleVariant);
5183 FDispHtmlDocument: DispHTMLDocument;
5185 // AddMessageList('DocumentComplete', nil);
5186 FBrowserComplete := True;
5187 if FEvent <> nil then
5189 FDispHtmlDocument := Browser.Document as DispHTMLDocument;
5190 FEvent := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
5191 FEvent.OnContextMenu := OnDocumentContextMenu;
5195 procedure TGikoForm.SelectReservActionUpdate(Sender: TObject);
5200 if (GetActiveList is TBoard) and (ListView.SelCount > 0) then begin
5201 List := TList.Create;
5203 SelectListItem(List);
5204 for i := 0 to List.Count - 1 do begin
5205 if TObject(List[i]) is TThreadItem then begin
5206 if TThreadItem(List[i]).IsLogFile then begin
5207 SelectReservAction.Enabled := True;
5212 SelectReservAction.Enabled := False;
5216 end else if (GetActiveList is TCategory) and (ListView.SelCount > 0) then
5217 SelectReservAction.Enabled := True
5219 SelectReservAction.Enabled := False;
5222 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
5224 AddRoundNameMenu(RoundNamePopupMenu.Items);
5227 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
5233 Item := TMenuItem.Create(Self);
5234 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
5235 Item.OnClick := SelectNewRoundNameExecute;
5237 Item := TMenuItem.Create(Self);
5238 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
5239 Item.OnClick := SelectDeleteRoundExecute;
5241 Item := TMenuItem.Create(Self);
5242 Item.Caption := '-';
5244 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
5245 Item := TMenuItem.Create(Self);
5246 Item.Caption := RoundList.RoundNameList[i];
5247 Item.OnClick := SetSelectRoundName;
5252 procedure TGikoForm.SelectNewRoundNameExecute(Sender: TObject);
5255 Dlg: TRoundNameDialog;
5257 Dlg := TRoundNameDialog.Create(Self);
5260 if Dlg.ModalResult <> mrCancel then begin
5261 s := Trim(Dlg.RoundNameEdit.Text);
5262 RoundList.RoundNameList.Add(s);
5263 SetSelectItemRound(True, s);
5271 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
5276 List := TList.Create;
5278 SelectListItem(List);
5279 for i := 0 to List.Count - 1 do begin
5280 if TObject(List[i]) is TBoard then begin
5281 TBoard(List[i]).RoundName := RoundName;
5282 TBoard(List[i]).Round := RoundFlag;
5283 end else if TObject(List[i]) is TThreadItem then begin
5284 if TThreadItem(List[i]).IsLogFile then begin
5285 TThreadItem(List[i]).RoundName := RoundName;
5286 TThreadItem(List[i]).Round := RoundFlag;
5295 procedure TGikoForm.SelectDeleteRoundExecute(Sender: TObject);
5297 SetSelectItemRound(False, '');
5301 procedure TGikoForm.SelectReservActionExecute(Sender: TObject);
5303 //
\82±
\82Ì
\83R
\83\81\83\93\83g
\8dí
\8f\9c\82µ
\82Ä
\82Í
\91Ê
\96Ú
5306 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
5308 MenuItem: TMenuItem;
5310 if Sender is TMenuItem then begin
5311 MenuItem := TMenuItem(Sender);
5312 SetSelectItemRound(True, StripHotKey(MenuItem.Caption));
5317 procedure TGikoForm.NewBoardActionExecute(Sender: TObject);
5319 Dlg: TNewBoardDialog;
5323 for i := 0 to Screen.CustomFormCount - 1 do begin
5324 if TObject(Screen.CustomForms[i]) is TEditorForm then begin
5325 Msg := '
\83\8c\83X
\83G
\83f
\83B
\83^
\82ð
\91S
\82Ä
\95Â
\82¶
\82Ä
\82
\82¾
\82³
\82¢';
5326 MsgBox(Handle, Msg, '
\83G
\83\89\81[', MB_OK or MB_ICONSTOP);
5330 Dlg := TNewBoardDialog.Create(Self);
5338 procedure TGikoForm.LoginActionExecute(Sender: TObject);
5342 if GikoSys.Dolib.Connected then begin
5343 //
\83\8d\83O
\83A
\83E
\83g
5344 GikoSys.Dolib.Disconnect;
5345 LoginAction.Checked := False;
5346 AddMessageList('
\83\8d\83O
\83A
\83E
\83g
\82µ
\82Ü
\82µ
\82½', nil, gmiOK);
5347 LoginAction.Caption := '
\83\8d\83O
\83C
\83\93(&L)';
5349 TmpCursor := Screen.Cursor;
5350 Screen.Cursor := crHourGlass;
5352 GikoSys.Dolib.ClientUA := 'gikoNavi/1.00';
5353 GikoSys.Dolib.UserName := GikoSys.Setting.UserID;
5354 GikoSys.Dolib.Password := GikoSys.Setting.Password;
5355 if GikoSys.Setting.ReadProxy then begin
5356 GikoSys.Dolib.ProxyAddress := GikoSys.Setting.ReadProxyAddress;
5357 GikoSys.Dolib.ProxyPort := GikoSys.Setting.ReadProxyPort;
5359 GikoSys.Dolib.ProxyAddress := '';
5360 GikoSys.Dolib.ProxyPort := 0;
5362 if GikoSys.Dolib.Connect then begin
5363 LoginAction.Checked := True;
5364 AddMessageList('
\83\8d\83O
\83C
\83\93\82µ
\82Ü
\82µ
\82½ - ' + GikoSys.Setting.UserID, nil, gmiOK);
5365 LoginAction.Caption := '
\83\8d\83O
\83A
\83E
\83g(&L)';
5367 // 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);
5368 AddMessageList(GikoSys.Dolib.ErrorMsg, nil, gmiNG);
5370 LoginAction.Checked := False;
5371 LoginToolButton.Down := False;
5374 Screen.Cursor := TmpCursor;
5379 procedure TGikoForm.KeySettingActionExecute(Sender: TObject);
5381 Dlg: TKeySettingForm;
5383 Dlg := TKeySettingForm.Create(Self);
5385 if Dlg.ShowModal = mrOk then
5386 GikoSys.SaveKeySetting(ActionList);
5392 procedure TGikoForm.ArrangeActionExecute(Sender: TObject);
5394 if ArrangeAction.Checked then begin
5396 ViewPanel.Align := alNone;
5397 ListSplitter.Align := alNone;
5398 ThreadPanel.Align := alNone;
5400 ViewPanel.Width := FBrowserSizeWidth;
5401 ViewPanel.Align := alLeft;
5403 ListSplitter.Width := 5;
5404 ListSplitter.Align := alLeft;
5406 ViewPanel.Left := -10;
5408 ThreadPanel.Align := alClient;
5410 GikoSys.Setting.ListOrientation := gloHorizontal;
5411 case GikoSys.Setting.ListWidthState of
5413 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
5414 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
5415 ViewPanel.Width := 1;
5418 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
5419 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
5422 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
5423 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
5424 ViewPanel.Width := ThreadMainPanel.Width - 80;
5429 ViewPanel.Align := alNone;
5430 ListSplitter.Align := alNone;
5431 ThreadPanel.Align := alNone;
5433 ViewPanel.Height := FBrowserSizeHeight;
5434 ViewPanel.Align := alTop;
5436 ListSplitter.Height := 5;
5437 ListSplitter.Align := alTop;
5439 ViewPanel.Top := -10;
5441 ThreadPanel.Align := alClient;
5442 GikoSys.Setting.ListOrientation := gloVertical;
5443 case GikoSys.Setting.ListHeightState of
5445 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_NORMAL;
5446 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
5447 ViewPanel.Height := 1;
5450 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
5451 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
5454 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
5455 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_NORMAL;
5456 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
5463 procedure TGikoForm.PaneInitActionExecute(Sender: TObject);
5465 CabinetPanel.Width := 150;
5466 MessagePanel.Height := 40;
5468 FBrowserSizeWidth := 200;
5469 FBrowserSizeHeight := 200;
5470 if ArrangeAction.Checked then begin
5471 ViewPanel.Width := FBrowserSizeWidth;
5473 ViewPanel.Height := FBrowserSizeHeight;
5475 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
5476 if GikoSys.Setting.ListHeightState = glsMax then begin
5477 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
5478 GikoSys.Setting.ListHeightState := glsNormal;
5481 if GikoSys.Setting.ListWidthState = glsMax then begin
5482 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
5483 GikoSys.Setting.ListWidthState := glsNormal;
5488 procedure TGikoForm.ActiveLogDeleteActionExecute(Sender: TObject);
5490 DEL_MSG = '
\83\8d\83O
\83t
\83@
\83C
\83\8b\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
5491 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
5494 ThreadItem: TThreadItem;
5496 idx := BrowserTab.TabIndex;
5497 if idx <> -1 then begin
5498 if GikoSys.Setting.DeleteMsg then
5499 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONQUESTION or MB_DEFBUTTON2) <> IDYES then
5501 ThreadItem := TThreadItem(BrowserTab.Tabs.Objects[idx]);
5502 DeleteTab(ThreadItem);
5503 ThreadItem.DeleteLogFile;
5504 if ThreadItem.ParentBoard = FActiveList then
5509 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
5514 if CoolBar = nil then
5516 for i := 0 to CoolBar.Bands.Count - 1 do begin
5517 if CoolBar.Bands[i].Control = Control then begin
5518 Result := CoolBar.Bands[i];
5524 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
5526 if BrowserTab.Parent = BrowserTabToolBar then
5527 BrowserTab.Width := BrowserTabToolBar.Width;
5530 procedure TGikoForm.SelectTextClearActionExecute(Sender: TObject);
5532 GikoSys.Setting.SelectTextList.Clear;
5533 SelectComboBox.Items.Clear;
5534 SelectComboBox.Text := '';
5535 SetListViewType( gvtAll );
5538 procedure TGikoForm.NameTextClearActionExecute(Sender: TObject);
5542 GikoSys.Setting.NameList.Clear;
5543 for i := 0 to Screen.CustomFormCount - 1 do begin
5544 if TObject(Screen.CustomForms[i]) is TEditorForm then
5545 TEditorForm(Screen.CustomForms[i]).NameComboBox.Items.Clear;
5549 procedure TGikoForm.MailTextClearActionExecute(Sender: TObject);
5553 GikoSys.Setting.MailList.Clear;
5554 for i := 0 to Screen.CustomFormCount - 1 do begin
5555 if TObject(Screen.CustomForms[i]) is TEditorForm then
5556 TEditorForm(Screen.CustomForms[i]).MailComboBox.Items.Clear;
5560 procedure TGikoForm.LeftmostTabSelectActionExecute(Sender: TObject);
5562 if BrowserTab.Tabs.Count > 0 then begin
5563 BrowserTab.TabIndex := 0;
5564 BrowserTab.OnChange(nil);
5568 procedure TGikoForm.LeftTabSelectActionExecute(Sender: TObject);
5570 if BrowserTab.Tabs.Count > 0 then begin
5571 if BrowserTab.TabIndex = -1 then begin
5572 BrowserTab.TabIndex := 0;
5573 BrowserTab.OnChange(nil);
5574 end else if BrowserTab.TabIndex > 0 then begin
5575 BrowserTab.TabIndex := BrowserTab.TabIndex - 1;
5576 BrowserTab.OnChange(nil);
5581 procedure TGikoForm.RightTabSelectActionExecute(Sender: TObject);
5583 if BrowserTab.Tabs.Count > 0 then begin
5584 if BrowserTab.TabIndex = -1 then begin
5585 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
5586 BrowserTab.OnChange(nil);
5587 end else if BrowserTab.TabIndex < (BrowserTab.Tabs.Count - 1) then begin
5588 BrowserTab.TabIndex := BrowserTab.TabIndex + 1;
5589 BrowserTab.OnChange(nil);
5594 procedure TGikoForm.RightmostTabSelectActionExecute(Sender: TObject);
5596 if BrowserTab.Tabs.Count > 0 then begin
5597 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
5598 BrowserTab.OnChange(nil);
5602 procedure TGikoForm.LeftmostTabSelectActionUpdate(Sender: TObject);
5604 LeftmostTabSelectAction.Enabled := (BrowserTab.TabIndex <> 0) and (BrowserTab.Tabs.Count > 0);
5607 procedure TGikoForm.LeftTabSelectActionUpdate(Sender: TObject);
5609 LeftTabSelectAction.Enabled := (BrowserTab.TabIndex <> 0) and (BrowserTab.Tabs.Count > 0);
5612 procedure TGikoForm.RightTabSelectActionUpdate(Sender: TObject);
5614 RightTabSelectAction.Enabled := (BrowserTab.TabIndex <> BrowserTab.Tabs.Count - 1) and (BrowserTab.Tabs.Count > 0);
5617 procedure TGikoForm.RightmostTabSelectActionUpdate(Sender: TObject);
5619 RightmostTabSelectAction.Enabled := (BrowserTab.TabIndex <> BrowserTab.Tabs.Count - 1) and (BrowserTab.Tabs.Count > 0);
5622 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
5627 procedure TGikoForm.SetMenuFont;
5629 // GikoSys.MenuFont(MenuToolBar.Font);
5630 // MenuToolBar.Buttons[0].AutoSize := False;
5631 // MenuToolBar.Buttons[0].AutoSize := True;
5632 // MenuToolBar.Font.Color := clMenuText;
5633 GikoSys.MenuFont(MainCoolBar.Font);
5634 MenuToolBar.Buttons[0].AutoSize := False;
5635 MenuToolBar.Buttons[0].AutoSize := True;
5636 MainCoolBar.AutoSize := False;
5637 MainCoolBar.AutoSize := True;
5639 GikoSys.MenuFont(ListCoolBar.Font);
5640 GikoSys.MenuFont(BrowserCoolBar.Font);
5641 // MenuToolBar.Font.Color := clMenuText;
5644 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
5650 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
5651 NewMenu := TMenuItem.Create(MainMenu);
5652 NewMenu.Action := FavoriteAddAction;
5653 FavoriteMenu.Add(NewMenu);
5654 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
5655 NewMenu := TMenuItem.Create(FavoriteMenu);
5656 NewMenu.Action := FavoriteArrangeAction;
5657 FavoriteMenu.Add(NewMenu);
5658 //
\83Z
\83p
\83\8c\81[
\83^
5659 NewMenu := TMenuItem.Create(FavoriteMenu);
5660 NewMenu.Caption := '-';
5661 FavoriteMenu.Add(NewMenu);
5663 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
5666 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
5671 for i := 0 to Node.Count - 1 do begin
5672 NewMenu := TFavoriteMenuItem.Create(Self);
5673 NewMenu.AutoHotkeys := maAutomatic;
5674 NewMenu.Caption := StringReplace(Node.Item[i].Text, '&', '&&', [rfReplaceAll]);
5675 TFavoriteMenuItem(NewMenu).Data := Node.Item[i].Data;
5676 MenuItem.Add(NewMenu);
5678 if TObject(Node.Item[i].Data) is TFavoriteFolder then begin
5679 NewMenu.ImageIndex := TOOL_ICON_FAV_FOLDER;
5680 CreateFavMenu(Node.Item[i], NewMenu);
5681 end else if TObject(Node.Item[i].Data) is TFavoriteBoardItem then begin
5682 NewMenu.ImageIndex := TOOL_ICON_FAV_BOARD;
5683 NewMenu.OnClick := FavoriteClick;
5684 end else if TObject(Node.Item[i].Data) is TFavoriteThreadItem then begin
5685 NewMenu.ImageIndex := TOOL_ICON_FAV_THREAD;
5686 NewMenu.OnClick := FavoriteClick;
5691 procedure TGikoForm.FavoriteAddActionExecute(Sender: TObject);
5693 Dlg: TFavoriteAddDialog;
5695 Dlg := TFavoriteAddDialog.Create(Self);
5697 Dlg.SetThreadItem(GetActiveContent);
5705 procedure TGikoForm.FavoriteClick(Sender: TObject);
5708 FavoriteClick( Sender, True );
5711 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
5714 ThreadItem: TThreadItem;
5715 FavBoard: TFavoriteBoardItem;
5716 FavThread: TFavoriteThreadItem;
5720 if Sender is TFavoriteMenuItem then
5721 Item := TFavoriteMenuItem(Sender).Data
5722 else if Sender is TLinkToolButton then
5723 Item := TLinkToolButton(Sender).Data
5724 else if Sender is TTreeNode then
5725 Item := TTreeNode( Sender ).Data
5729 if TObject(Item) is TFavoriteBoardItem then begin
5730 FavBoard := TFavoriteBoardItem(Item);
5731 Board := BBS2ch.FindBBSID(FavBoard.BBSID);
5732 if Board <> nil then begin
5733 if not Board.IsThreadDatRead then
5734 GikoSys.ReadSubjectFile(Board);
5735 SelectTreeNode(Board, True);
5737 end else if TObject(Item) is TFavoriteThreadItem then begin
5738 FavThread := TFavoriteThreadItem(Item);
5739 Board := BBS2ch.FindBBSID(FavThread.BBSID);
5740 if Board <> nil then
5741 if not Board.IsThreadDatRead then
5742 GikoSys.ReadSubjectFile(Board);
5743 ThreadItem := BBS2ch.FindThreadItem(FavThread.BBSID, FavThread.ThreadID);
5744 if ThreadItem <> nil then
5745 InsertBrowserTab(ThreadItem, ActiveTab);
5749 procedure TGikoForm.FavoriteAddActionUpdate(Sender: TObject);
5751 FavoriteAddAction.Enabled := (GetActiveContent <> nil);
5754 procedure TGikoForm.BoardFavoriteAddActionExecute(Sender: TObject);
5756 Dlg: TFavoriteAddDialog;
5758 if TObject(ListView.Selected.Data) is TBoard then begin
5759 Dlg := TFavoriteAddDialog.Create(Self);
5761 Dlg.SetBoard(TBoard(ListView.Selected.Data));
5770 procedure TGikoForm.BoardFavoriteAddActionUpdate(Sender: TObject);
5772 BoardFavoriteAddAction.Enabled := (GetActiveList is TCategory) and (ListView.SelCount > 0);
5775 procedure TGikoForm.ThreadFavoriteAddActionExecute(Sender: TObject);
5777 Dlg: TFavoriteAddDialog;
5779 if TObject(ListView.Selected.Data) is TThreadItem then begin
5780 Dlg := TFavoriteAddDialog.Create(Self);
5782 Dlg.SetThreadItem(TThreadItem(ListView.Selected.Data));
5791 procedure TGikoForm.ThreadFavoriteAddActionUpdate(Sender: TObject);
5793 ThreadFavoriteAddAction.Enabled := (GetActiveList is TBoard) and (ListView.SelCount > 0);
5796 procedure TGikoForm.TreeSelectFavoriteAddActionExecute(Sender: TObject);
5798 Dlg: TFavoriteAddDialog;
5800 if TObject(TreeView.Selected.Data) is TBoard then begin
5801 Dlg := TFavoriteAddDialog.Create(Self);
5803 Dlg.SetBoard(TBoard(TreeView.Selected.Data));
5808 end else if TObject(TreeView.Selected.Data) is TThreadItem then begin
5809 Dlg := TFavoriteAddDialog.Create(Self);
5811 Dlg.SetThreadItem(TThreadItem(TreeView.Selected.Data));
5820 procedure TGikoForm.FavoriteArrangeActionExecute(Sender: TObject);
5822 Dlg: TFavoriteArrangeDialog;
5824 Dlg := TFavoriteArrangeDialog.Create(Self);
5833 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
5835 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
5838 procedure TGikoForm.MoveToActionExecute(Sender: TObject);
5843 URL := Trim(AddressComboBox.Text);
5846 idx := AddressComboBox.Items.IndexOf(URL);
5847 if idx = -1 then begin
5848 AddressComboBox.Items.Insert(0, URL);
5849 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
5850 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
5852 AddressComboBox.Items.Delete(idx);
5853 AddressComboBox.Items.Insert(0, URL);
5857 procedure TGikoForm.MoveToURL(URL: string);
5859 Protocol, Host, Path, Document, Port, Bookmark: string;
5863 ThreadItem: TThreadItem;
5865 GikoSys.ParseURI(URL, Protocol, Host, Path, Document, Port, Bookmark);
5867 if GikoSys.Is2chHost(Host) and GikoSys.Parse2chURL(URL, Path, Document, BBSID, BBSKey) then begin
5868 Board := BBS2ch.FindBBSID(BBSID);
5869 if Board = nil then begin
5870 GikoSys.OpenBrowser(URL, gbtAuto);
5873 if Trim(BBSKey) = '' then begin
5874 GikoSys.OpenBrowser(URL, gbtAuto);
5877 if not Board.IsThreadDatRead then
5878 GikoSys.ReadSubjectFile(Board);
5879 ThreadItem := Board.Find(ChangeFileExt(BBSKey, '.dat'));
5880 if ThreadItem = nil then begin
5881 ThreadItem := TThreadItem.Create;
5882 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
5883 if AnsiPos(Host, Board.URL) = 0 then
5884 ThreadItem.DownloadHost := Host
5886 ThreadItem.DownloadHost := '';
5887 Board.Insert(0, ThreadItem);
5888 if ActiveList is TBoard then begin
5889 if TBoard(ActiveList) = Board then
5890 ListView.Items.Count := ListView.Items.Count + 1;
5891 InsertBrowserTab(ThreadItem);
5892 DownloadContent(ThreadItem);
5895 if ThreadItem.IsLogFile then
5896 InsertBrowserTab(ThreadItem)
5898 if AnsiPos(Host, Board.URL) = 0 then
5899 ThreadItem.DownloadHost := Host
5901 ThreadItem.DownloadHost := '';
5902 InsertBrowserTab(ThreadItem);
5903 DownloadContent(ThreadItem);
5907 GikoSys.OpenBrowser(URL, gbtAuto);
5911 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
5913 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
5916 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
5917 Shift: TShiftState);
5919 if Key = VK_RETURN then
5920 MoveToAction.Execute;
5923 procedure TGikoForm.BrowserEnter(Sender: TObject);
5925 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
5928 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
5930 CDS:PCopyDataStruct;
5934 CDS := Message.CopyDataStruct;
5935 GetMem(PC, CDS^.cbData);
5937 lstrcpy(PC,CDS^.lpData);
5938 SetString(sURL, PC,lstrlen(PC));
5943 Message.Result := 1;
5946 procedure TGikoForm.WndProc(var Message: TMessage);
5948 if (Message.Msg = CM_DIALOGCHAR) then
5949 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
5954 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
5956 hComboEdit: THandle;
5957 // KeyData: Integer;
5960 if AddressComboBox.Focused or SelectComboBox.Focused then begin
5961 if Msg.CharCode in [VK_BACK] then begin
5962 hComboEdit := GetFocus;
5963 if hComboEdit <> 0 then
5964 SendMessage(hComboEdit, WM_CHAR, Msg.CharCode, Msg.KeyData);
5965 // SendMessage(hComboEdit, WM_CHAR, Msg.CharCode, $000E0001);
5968 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
5969 hComboEdit := GetFocus;
5970 if hComboEdit <> 0 then
5971 SendMessage(hComboEdit, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
5975 //
\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ð
5976 KeyData := Msg.KeyData;
5977 if (KeyData and $20000000) = 0 then begin
5978 if Msg.CharCode in [Ord('F'), Ord('V'), Ord('B'), Ord('R'),
5979 Ord('A'), Ord('T'), Ord('H')] then begin
5980 if not ActionList.IsShortCut(Msg) then begin
5988 procedure TGikoForm.BrowserTabVisibleActionExecute(Sender: TObject);
5990 GikoSys.Setting.BrowserTabVisible := BrowserTabVisibleAction.Checked;
5994 procedure TGikoForm.BrowserTabTopActionExecute(Sender: TObject);
5996 BrowserTabBottomAction.Checked := False;
5997 BrowserTabTopAction.Checked := True;
5998 GikoSys.Setting.BrowserTabPosition := gtpTop;
6002 procedure TGikoForm.BrowserTabBottomActionExecute(Sender: TObject);
6004 BrowserTabTopAction.Checked := False;
6005 BrowserTabBottomAction.Checked := True;
6006 GikoSys.Setting.BrowserTabPosition := gtpBottom;
6010 procedure TGikoForm.BrowserTabTabStyleActionExecute(Sender: TObject);
6012 BrowserTabButtonStyleAction.Checked := False;
6013 BrowserTabFlatStyleAction.Checked := False;
6014 BrowserTabTabStyleAction.Checked := True;
6015 GikoSys.Setting.BrowserTabStyle := gtsTab;
6019 procedure TGikoForm.BrowserTabButtonStyleActionExecute(Sender: TObject);
6021 BrowserTabTabStyleAction.Checked := False;
6022 BrowserTabFlatStyleAction.Checked := False;
6023 BrowserTabButtonStyleAction.Checked := True;
6024 GikoSys.Setting.BrowserTabStyle := gtsButton;
6028 procedure TGikoForm.BrowserTabFlatStyleActionExecute(Sender: TObject);
6030 BrowserTabFlatStyleAction.Checked := True;
6031 BrowserTabTabStyleAction.Checked := False;
6032 BrowserTabButtonStyleAction.Checked := False;
6033 GikoSys.Setting.BrowserTabStyle := gtsFlat;
6037 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
6043 HtmlFileName: string;
6047 TargetFrameName: OleVariant;
6048 PostData: OleVariant;
6049 Headers: OleVariant;
6050 WindowHeight: Integer;
6051 WindowWidth: Integer;
6055 Protocol, Host, Path, Document, Port, Bookmark: string;
6057 PreviewTimer.Enabled := False;
6061 case GikoSys.Setting.PreviewSize of
6068 WindowHeight := 192;
6072 WindowHeight := 384;
6076 WindowHeight := 480;
6078 else begin //gpsMedium
6080 WindowHeight := 288;
6084 ARect := Rect(0, 0, WindowWidth, WindowHeight);
6086 case GikoSys.Setting.PopupPosition of
6087 gppRightTop: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - (ARect.Bottom - ARect.Top) - 15);
6088 gppRight: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
6089 gppRightBottom: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y + 15);
6090 gppTop: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - (ARect.Bottom - ARect.Top) - 15);
6091 gppCenter: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - ((ARect.Bottom - ARect.Top) div 2));
6092 gppBottom: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y + 15);
6093 gppLeftTop: OffsetRect(ARect, p.x + 15, p.y - (ARect.Bottom - ARect.Top) - 15);
6094 gppLeft: OffsetRect(ARect, p.x + 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
6095 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Ó
6098 html := '<html><head>'#13#10
6100 + 'function init() {'#13#10
6101 + ' if ((document.body.clientHeight >= Image1.height) && (document.body.clientWidth >= Image1.width)) {'#13#10
6103 + ' var dh, ih;'#13#10
6104 + ' dh = document.body.clientWidth / document.body.clientHeight;'#13#10
6105 + ' ih = Image1.width / Image1.height;'#13#10
6106 + ' if (document.body.clientWidth < document.body.clientHeight) {'#13#10
6107 + ' if (ih > dh)'#13#10
6108 + ' Image1.width = document.body.clientWidth;'#13#10
6110 + ' Image1.height = document.body.clientHeight;'#13#10
6112 + ' if (ih < dh)'#13#10
6113 + ' Image1.height = document.body.clientHeight;'#13#10
6115 + ' Image1.width = document.body.clientWidth;'#13#10
6118 + ' Message.style.display = "none";'#13#10
6122 + '<body topmargin="0" leftmargin="0" style="border-width: 1px; overflow:hidden; border-style: solid;" onLoad="init()">'#13#10
6123 + '<div align="center" id="Message">
\83v
\83\8c\83r
\83\85\81[
\8dì
\90¬
\92\86</div>'#13#10
6124 + '<div align="center"><img name="Image1" border="0" src="%ImageURL%"></div>'#13#10
6126 sl := TStringList.Create;
6129 HtmlFileName := GikoSys.GetAppDir + HTML_FILE_NAME;
6130 sl.Text := AnsiReplaceStr(html, '%ImageURL%', FPreviewURL);
6131 sl.SaveToFile(HtmlFileName);
6138 NavURL := HtmlFileName;
6140 TargetFrameName := '';
6143 GikoSys.ParseURI(FPreviewURL, Protocol, Host, Path, Document, Port, Bookmark);
6144 Referer := Protocol + '://' + Host;
6146 Referer := Referer + ':' + Port;
6147 Referer := Referer + Path;
6148 Headers := 'Referer: ' + Referer;
6150 FPreviewBrowser.Navigate(NavURL, Flags, TargetFrameName, PostData, Headers);
6152 if ARect.Top + WindowHeight > Screen.DesktopHeight then
6153 ARect.Top := Screen.DesktopHeight - WindowHeight;
6154 if ARect.Left + WindowWidth > Screen.DesktopWidth then
6155 ARect.Left := Screen.DesktopWidth - WindowWidth;
6156 if ARect.Left < Screen.DesktopLeft then ARect.Left := Screen.DesktopLeft;
6157 if ARect.Bottom < Screen.DesktopTop then ARect.Bottom := Screen.DesktopTop;
6159 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST, ARect.Left, ARect.Top, WindowWidth, WindowHeight, SWP_NOACTIVATE or SWP_HIDEWINDOW);
6160 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
6162 // Style := GetWindowLong(FPreviewBrowser.Handle, GWL_EXSTYLE);
6163 // SetWindowLong(FPreviewBrowser.Handle, GWL_EXSTYLE, Style xor WS_EX_APPWINDOW);
6167 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
6169 if PreviewTimer.Enabled then
6170 PreviewTimer.Enabled := False;
6171 if (FHint <> nil) and (IsWindowVisible(FHint.Handle)) then begin
6172 FHint.ReleaseHandle;
6175 if (FPreviewBrowser <> nil) and (IsWindowVisible(FPreviewBrowser.Handle)) then
6176 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
6177 Message.Result := 1;
6181 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
6183 MsgBarCloseAction.Execute;
6186 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
6188 Doc: IHtmlDocument2;
6189 Range: IHTMLTxtRange;
6192 ThreadItem: TThreadItem;
6194 Doc := Browser.Document as IHtmlDocument2;
6195 Range := Doc.selection.createRange as IHTMLTxtRange;
6196 s := StringReplace(Range.text, '
\81@', ' ', [rfReplaceAll]);
6197 s := GikoSys.ZenToHan(Trim(s));
6198 if GikoSys.IsNumeric(s) then begin
6200 ThreadItem := GetActiveContent;
6201 if ThreadItem <> nil then begin
6203 FHint.PopupType := gptThread;
6204 SetResPopupText(ThreadItem.ParentBoard.BBSID, ChangeFileExt(ThreadItem.FileName, ''), Num, Num, False, False);
6205 if FHint.ResCount <> 0 then
6215 procedure TGikoForm.SetResPopupText(sBoard: string; sThread: string; StNum, ToNum: Integer; Title, First: Boolean);
6226 ThreadItem: TThreadItem;
6233 if StNum > ToNum then begin
6239 if (sBoard <> '') and (sThread <> '') then begin
6240 //
\8dÅ
\91å10
\83\8c\83X
\82Ü
\82Å
\95\
\8e¦
6241 if StNum + 10 < ToNum then
6242 ToNum := StNum + 10;
6244 //
\83^
\83C
\83g
\83\8b\95\
\8e¦
6246 Board := BBS2ch.FindBBSID(sBoard);
6247 if Board <> nil then begin
6248 if not Board.IsThreadDatRead then
6249 GikoSys.ReadSubjectFile(Board);
6250 ThreadItem := Board.Find(sThread + '.dat');
6251 if ThreadItem <> nil then
6252 FHint.Title := ThreadItem.Title;
6256 for i := StNum to ToNum do begin
6258 FileName := IncludeTrailingPathDelimiter(BBS2ch.GetLogFolder + sBoard) + sThread + '.dat';
6259 tmp := GikoSys.ReadThreadFile(FileName, Line);
6261 if (tmp <> '') And ( not GikoSys.FAbon.CheckAbonPopupRes(tmp) And( not GikoSys.FAbon.CheckIndividualAbonList(line))) then begin
6262 Res := GikoSys.DivideStrLine(tmp);
6264 Header := IntToStr(Line) + '
\96¼
\91O
\81F ' + Res.FName + '
\93\8a\8de
\93ú
\81F ' + Res.FDateTime;
6266 Body := StringReplace(Res.FBody, '<br> ', #10, [rfIgnoreCase, rfReplaceAll]);
6267 Body := StringReplace(Body, '<br>', #10, [rfIgnoreCase, rfReplaceAll]);
6268 Body := StringReplace(Body, '</a>', '', [rfIgnoreCase, rfReplaceAll]);
6269 Body := GikoSys.DeleteLink(Body);
6270 Body := StringReplace(Body, '<', '<', [rfReplaceAll]);
6271 Body := StringReplace(Body, '>', '>', [rfReplaceAll]);
6272 Body := StringReplace(Body, '"', '"', [rfReplaceAll]);
6273 Body := StringReplace(Body, '&', '&', [rfReplaceAll]);
6274 FHint.Add(Header, Body);
6275 // s := StringReplace(s, '&', '&', [rfReplaceAll]);
6276 // s := StringReplace(s, '
\81\97\81M', ',', [rfReplaceAll]);
6284 {function TGikoForm.GetThreadText(sBoard: string; sThread: string; StNum, ToNum: Integer; Title, First: Boolean): string;
6296 ActiveFileName: string;
6298 ThreadItem: TThreadItem;
6303 HintData := THintData.Create;
6304 SList := TStringList.Create;
6307 if StNum > ToNum then begin
6313 if (sBoard <> '') and (sThread <> '') then begin
6315 //
\8dÅ
\91å10
\83\8c\83X
\82Ü
\82Å
\95\
\8e¦
6316 if StNum + 10 < ToNum then
6317 ToNum := StNum + 10;
6319 //
\83^
\83C
\83g
\83\8b\95\
\8e¦
6321 Board := BBS2ch.FindBBSID(sBoard);
6322 if Board <> nil then begin
6323 if not Board.IsThreadDatRead then
6324 GikoSys.ReadSubjectFile(Board);
6325 ThreadItem := Board.Find(sThread + '.dat');
6326 //ThreadItem := BBS2ch.FindThreadItem(sBoard, sThread + '.dat');
6327 if ThreadItem <> nil then
6328 HintData.Title := ThreadItem.Title;
6329 //s := s + ThreadItem.Title;
6333 for i := StNum to ToNum do begin
6335 FileName := IncludeTrailingPathDelimiter(BBS2ch.GetLogFolder + sBoard) + sThread + '.dat';
6336 tmp := GikoSys.ReadThreadFile(FileName, Line);
6337 if tmp <> '' then begin
6338 Res := GikoSys.DivideStrLine(tmp);
6342 //s := s + IntToStr(Line) + '
\96¼
\91O
\81F ' + Res.FName + '
\93\8a\8de
\93ú
\81F ' + Res.FDateTime + #10 + #10;
6343 //s := s + ' ' + StringReplace(Res.FBody, '<br>', #10, [rfIgnoreCase, rfReplaceAll]);
6344 Header := IntToStr(Line) + '
\96¼
\91O
\81F ' + Res.FName + '
\93\8a\8de
\93ú
\81F ' + Res.FDateTime;
6346 s := StringReplace(Res.FBody, '<br> ', #10, [rfIgnoreCase, rfReplaceAll]);
6347 s := StringReplace(s, '<br>', #10, [rfIgnoreCase, rfReplaceAll]);
6348 s := StringReplace(s, '</a>', '', [rfIgnoreCase, rfReplaceAll]);
6349 s := GikoSys.DeleteLink(s);
6350 s := StringReplace(s, '<', '<', [rfReplaceAll]);
6351 s := StringReplace(s, '>', '>', [rfReplaceAll]);
6352 s := StringReplace(s, '"', '"', [rfReplaceAll]);
6353 s := StringReplace(s, '&', '&', [rfReplaceAll]);
6355 HintData.Add(Header, Body);
6356 // s := StringReplace(s, '&', '&', [rfReplaceAll]);
6357 // s := StringReplace(s, '
\81\97\81M', ',', [rfReplaceAll]);
6368 procedure TGikoForm.ShowTextPopup;
6373 // if Trim(s) = '' then
6376 FHint.Font.Name := GikoSys.Setting.HintFontName;
6377 FHint.Font.Size := GikoSys.Setting.HintFontSize;
6378 FHint.Font.Color := GikoSys.Setting.HintFontColor;
6379 FHint.Color := GikoSys.Setting.HintBackColor;
6380 FHint.HeaderBold := GikoSys.Setting.ResPopupHeaderBold;
6382 if FHint.PopupType = gptRaw then
6383 ARect := FHint.CalcHintRect(Screen.Width, FHint.Caption, nil)
6385 ARect := FHint.CalcHintRect(Screen.Width, '', nil);
6386 case GikoSys.Setting.PopupPosition of
6387 gppRightTop: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - (ARect.Bottom - ARect.Top) - 15);
6388 gppRight: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
6389 gppRightBottom: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y + 15);
6390 gppTop: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - (ARect.Bottom - ARect.Top) - 15);
6391 gppCenter: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - ((ARect.Bottom - ARect.Top) div 2));
6392 gppBottom: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y + 15);
6393 gppLeftTop: OffsetRect(ARect, p.x + 15, p.y - (ARect.Bottom - ARect.Top) - 15);
6394 gppLeft: OffsetRect(ARect, p.x + 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
6395 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Ó
6397 //FHint.ActivateHint(ARect, s);
6398 if FHint.PopupType = gptRaw then
6399 FHint.ActivateHint(ARect, FHint.Caption)
6401 FHint.ActivateHint(ARect, '');
6403 FHint.ReleaseHandle;
6408 procedure TGikoForm.GikoHelpActionExecute(Sender: TObject);
6412 FileName := GikoSys.GetAppDir + 'batahlp.chm';
6413 if not FileExists(FileName) then begin
6416 '
\83w
\83\8b\83v
\82ª
\8c©
\82Â
\82©
\82è
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½' + #13#10 +
6417 '
\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 +
6418 '
\83w
\83\8b\83v
\82Í
\83M
\83R
\83i
\83r
\82Ì
\83T
\83C
\83g
\82É
\92u
\82¢
\82Ä
\82 \82è
\82Ü
\82·',
6423 ShellExecute(Handle, 'open', PChar(FileName), '', PChar(GikoSys.GetAppDir), SW_SHOW);
6426 procedure TGikoForm.ToolButton18Click(Sender: TObject);
6428 if FTreeType = gttHistory then begin
6430 TreeView.Items.Clear;
6434 procedure TGikoForm.KotehanActionExecute(Sender: TObject);
6436 Dlg: TKotehanDialog;
6438 Dlg := TKotehanDialog.Create(Self);
6446 procedure TGikoForm.SetLinkBar;
6450 ToolButton: TLinkToolButton;
6451 MenuItem: TMenuItem;
6453 MainCoolBar.Bands.BeginUpdate;
6455 LinkBarPopupMenu.Items.Clear;
6456 for i := LinkToolBar.ButtonCount - 1 downto 0 do
6457 LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
6458 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6459 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6460 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
6461 ToolButton := TLinkToolButton.Create(LinkToolBar);
6462 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
6463 MenuItem := TMenuItem.Create(Self);
6464 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
6465 LinkBarPopupMenu.Items.Add(MenuItem);
6466 ToolButton.MenuItem := MenuItem;
6467 ToolButton.ImageIndex := TOOL_ICON_FAV_FOLDER;
6468 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
6469 ToolButton.ImageIndex := TOOL_ICON_FAV_BOARD;
6470 ToolButton.OnClick := FavoriteClick;
6471 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
6472 ToolButton.ImageIndex := TOOL_ICON_FAV_THREAD;
6473 ToolButton.OnClick := FavoriteClick;
6475 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
6476 ToolButton.Left := 10000;
6477 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
6478 ToolButton.AutoSize := True;
6479 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
6480 ToolButton.OnDragOver := FavoriteDragOver;
6481 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
6482 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
6483 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
6484 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
6485 //ToolButton.DragMode := dmAutomatic;
6486 ToolButton.DragMode := dmManual;
6487 ToolButton.PopupMenu := FavoriteTreePopupMenu;
6489 LinkToolBar.InsertControl(ToolButton);
6494 { if LinkToolBar.ButtonCount = 0 then begin
6495 ToolButton := TLinkToolButton.Create(LinkToolBar);
6496 ToolButton.Style := tbsButton;
6497 ToolButton.ImageIndex := -1;
6498 ToolButton.Caption := '';
6499 LinkToolBar.InsertControl(ToolButton);
6502 MainCoolBar.Bands.EndUpdate;
6506 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
6515 if Sender = FavoriteTreeView then begin
6516 Node := FavoriteTreeView.GetNodeAt(X, Y);
6517 bound := Node.DisplayRect( False );
6518 height := bound.Bottom - bound.Top;
6519 if (bound.Top + height / 2) <= Y then
6520 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
6527 if DropSpaceNode <> nil then
6528 if DropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
6531 if Change then begin
6534 DropSpaceNode := FavoriteDM.TreeView.Items.AddChildObject(Node.Parent, '', nil );
6535 DropSpaceNode.MoveTo( Node, naInsert );
6536 DropSpaceNode.ImageIndex := -1;
6537 DropSpaceNode.SelectedIndex := -1;
6542 if Source = FavoriteTreeView then begin
6543 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
6548 end else if Source = BrowserTab then
6550 else if Source = ListView then
6552 else if Source is TLinkToolButton then
6554 else if Source = TreeView then
6560 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
6563 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6566 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
6570 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
6572 SenderNode: TTreeNode;
6573 LinkToolButton: TLinkToolButton;
6576 LinkToolButton := TLinkToolButton( Sender );
6577 SenderNode := TreeNodeDataFind( FavoriteTreeView.TopItem, LinkToolButton.Data );
6579 FavoriteDragDrop( SenderNode, Source );
6583 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6585 if ssLeft in Shift then begin
6586 TLinkToolButton( Sender ).EndDrag( False );
6587 TToolButton(Sender).BeginDrag(false ,5);
6591 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
6595 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6599 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
6604 for i := 0 to ToolBar.ButtonCount - 1 do
6605 Result := Result + ToolBar.Buttons[i].Width;
6608 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
6610 Control: TWinControl;
6612 Control := FindControl(BandInfo^.hwndChild);
6613 if (Control = MenuToolBar) or (Control = StdToolBar) or (Control = LinkToolBar) then begin
6614 BandInfo^.fMask := BandInfo.fMask or RBBIM_STYLE or RBBIM_IDEALSIZE;
6615 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
6616 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
6620 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
6626 ChevronPopupMenu.Items.Clear;
6628 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
6629 if MainCoolBar.Bands[ i ].Visible then begin
6630 if Idx = Int64(RebarChevron^.uBand) then begin
6637 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
6638 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
6640 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
6641 ToolBarChevronMenu(StdToolBar);
6642 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
6646 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
6647 ChevronPopupMenu.Popup(p.x, p.y);
6651 procedure TGikoForm.MenuBarChevronMenu;
6652 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
6658 for i := 0 to MenuItem.Count - 1 do begin
6660 if MenuItem[i] is TFavoriteMenuItem then begin
6661 Item := TFavoriteMenuItem.Create(Self);
6662 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
6664 Item := TMenuItem.Create(Self);
6665 Item.Caption := MenuItem[i].Caption;
6666 Item.Action := MenuItem[i].Action;
6667 Item.ImageIndex := MenuItem[i].ImageIndex;
6668 Item.OnClick := MenuItem[i].OnClick;
6669 PopupItem.Add(Item);
6670 if MenuItem[i].Count > 0 then
6671 SetSubMenu(MenuItem[i], Item);
6680 ChevronPopupMenu.Items.Clear;
6681 ChevronPopupMenu.Images := MainMenu.Images;
6682 bw := GetWidthAllToolButton(MenuToolBar);
6683 if MenuToolBar.Width < bw then begin
6685 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
6686 w := w + MenuToolBar.Buttons[i].Width;
6687 if MenuToolBar.Width <= w then begin
6688 Item := TMenuItem.Create(Self);
6689 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
6690 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
6691 ChevronPopupMenu.Items.Add(Item);
6692 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
6698 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
6699 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
6704 if Assigned(PopupMenu.OnPopup) then
6705 PopupMenu.OnPopup(nil);
6706 for i := 0 to PopupMenu.Items.Count - 1 do begin
6708 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
6709 Item := TFavoriteMenuItem.Create(Self);
6710 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
6712 Item := TMenuItem.Create(Self);
6713 Item.Caption := PopupMenu.Items[i].Caption;
6714 Item.Action := PopupMenu.Items[i].Action;
6715 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
6716 Item.OnClick := PopupMenu.Items[i].OnClick;
6717 PopupItem.Add(Item);
6726 ChevronPopupMenu.Items.Clear;
6727 ChevronPopupMenu.Images := ToolBar.HotImages;
6728 bw := GetWidthAllToolButton(ToolBar);
6729 if ToolBar.Width < bw then begin
6731 for i := 0 to ToolBar.ButtonCount - 1 do begin
6732 w := w + ToolBar.Buttons[i].Width;
6733 if ToolBar.Width <= w then begin
6734 Case ToolBar.Buttons[i].Tag of
6737 Item := TMenuItem.Create(Self);
6738 if ToolBar.Buttons[i].Style = tbsSeparator then
6741 Item.Caption := ToolBar.Buttons[i].Caption;
6742 Item.Action := ToolBar.Buttons[i].Action;
6743 //Item.Visible := True;
6745 ChevronPopupMenu.Items.Add(Item);
6746 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
6748 Item.OnClick := nil;
6749 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
6753 //
\8f«
\97\88\82Ì
\82½
\82ß
\82Ì
\97\
\96ñ
6760 procedure TGikoForm.LinkBarChevronMenu;
6765 Item: TFavoriteMenuItem;
6767 Button: TLinkToolButton;
6769 ChevronPopupMenu.Items.Clear;
6770 ChevronPopupMenu.Images := LinkToolBar.Images;
6771 bw := GetWidthAllToolButton(LinkToolBar);
6772 if LinkToolBar.Width < bw then begin
6774 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6775 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6776 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
6777 w := w + LinkToolBar.Buttons[j].Width;
6778 if LinkToolBar.Width <= w then begin
6779 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
6780 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
6781 Item := TFavoriteMenuItem.Create(Self);
6782 if TObject(Button.Data) is TFavoriteFolder then begin
6783 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
6784 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
6785 Item.OnClick := FavoriteClick;
6786 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
6787 Item.OnClick := FavoriteClick;
6789 Item.Data := Button.Data;
6790 Item.Caption := LinkToolBar.Buttons[j].Caption;
6791 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
6792 ChevronPopupMenu.Items.Add(Item);
6802 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
6804 Control: TWinControl;
6806 Control := FindControl(BandInfo^.hwndChild);
6807 if Control = ListToolBar then begin
6808 BandInfo^.fMask := BandInfo.fMask or RBBIM_STYLE or RBBIM_IDEALSIZE;
6809 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
6810 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
6814 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
6819 ChevronPopupMenu.Items.Clear;
6820 Idx := RebarChevron^.uBand;
6821 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
6822 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
6823 ToolBarChevronMenu(ListToolBar);
6826 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
6827 ChevronPopupMenu.Popup(p.x, p.y);
6831 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
6833 Control: TWinControl;
6835 Control := FindControl(BandInfo^.hwndChild);
6836 if Control = BrowserToolBar then begin
6837 BandInfo^.fMask := BandInfo.fMask or RBBIM_STYLE or RBBIM_IDEALSIZE;
6838 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
6839 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
6843 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
6848 ChevronPopupMenu.Items.Clear;
6849 Idx := RebarChevron^.uBand;
6850 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
6851 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
6852 ToolBarChevronMenu(BrowserToolBar)
6855 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
6856 ChevronPopupMenu.Popup(p.x, p.y);
6860 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
6862 if Column^.iImage = -1 then begin
6863 Column^.mask := Column^.mask or LVCF_FMT;
6865 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
6866 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
6870 procedure TGikoForm.ThreadEditorActionExecute(Sender: TObject);
6872 Editor: TEditorForm;
6874 if not (GetActiveList is TBoard) then
6876 Editor := TEditorForm.Create(Self);
6877 Editor.SetBoard(TBoard(GetActiveList));
6879 Editor.BodyEdit.SetFocus;
6882 procedure TGikoForm.ToolBarSettingActionExecute(Sender: TObject);
6884 Dlg: TToolBarSettingDialog;
6887 Dlg := TToolBarSettingDialog.Create(Self, ActionList);
6889 Dlg.AddToolBar(StdToolBar, gttStandard);
6890 Dlg.AddToolBar(ListToolBar, gttList);
6891 Dlg.AddToolBar(BrowserToolBar, gttBrowser);
6892 if Dlg.ShowModal = mrOK then begin
6895 //
\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é
6896 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
6897 MainCoolBar.Bands[i].MinWidth := MainCoolBar.Bands[i].MinWidth + 1;
6898 MainCoolBar.Bands[i].MinWidth := MainCoolBar.Bands[i].MinWidth - 1;
6900 for i := 0 to ListCoolBar.Bands.Count - 1 do begin
6901 ListCoolBar.Bands[i].MinWidth := ListCoolBar.Bands[i].MinWidth + 1;
6902 ListCoolBar.Bands[i].MinWidth := ListCoolBar.Bands[i].MinWidth - 1;
6904 for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
6905 BrowserCoolBar.Bands[i].MinWidth := BrowserCoolBar.Bands[i].MinWidth + 1;
6906 BrowserCoolBar.Bands[i].MinWidth := BrowserCoolBar.Bands[i].MinWidth - 1;
6908 SaveToolBarSetting(StdToolBar);
6909 SaveToolBarSetting(ListToolBar);
6910 for i := ListToolBar.ControlCount - 1 downto 0 do
6912 if ListToolBar.Controls[ i ].Action = SelectItemAction then
6914 //
\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·
6915 if (i + 1) < ListToolBar.ControlCount then
6916 if ListToolBar.Controls[ i + 1 ] is TToolButton then
6917 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
6918 ListToolBar.Controls[ i + 1 ].Visible := False;
6920 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
6921 ListToolBar.Controls[ i ].Visible := False;
6922 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83t
\83B
\81[
\83\8b\83h
\82ð
\91}
\93ü
6923 SelectComboBox.Left := ListToolBar.Controls[ i ].Left;
6924 SelectComboBox.Width := GikoSys.Setting.SelectComboBoxWidth;
6925 SelectComboBox.Parent := ListToolBar;
6926 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\97p
\93Æ
\8e©
\83Z
\83p
\83\8c\81[
\83^
\82ð
\91}
\93ü
6927 SelectComboBoxSplitter.Left := SelectComboBox.Left + SelectComboBox.Width;
6928 SelectComboBoxSplitter.Parent := ListToolBar;
6933 SaveToolBarSetting(BrowserToolBar);
6940 procedure TGikoForm.SetToolBarPopup;
6944 for i := 0 to StdToolBar.ButtonCount - 1 do begin
6946 for i := 0 to ListToolBar.ButtonCount - 1 do begin
6947 if ListToolBar.Buttons[i].Action = IconStyle then
6948 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
6949 if ListToolBar.Buttons[i].Action = SelectReservAction then
6950 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
6952 for i := 0 to BrowserToolBar.ButtonCount - 1 do begin
6953 if BrowserToolBar.Buttons[i].Action = IEAction then
6954 BrowserToolBar.Buttons[i].DropdownMenu := BrowserPopupMenu;
6958 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
6959 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
6966 Wnd := WindowFromPoint(MousePos);
6968 if WheelDelta > 0 then
6973 if (Wnd = BrowserTab.Handle) or
6974 (Wnd = BrowserTab.Parent.Handle) then begin
6975 BrowserTab.ScrollTabs(Delta);
6976 end else if Wnd = ListView.Handle then begin
6977 if ListView.ViewStyle = vsList then
6978 ListView.Scroll( Delta * 30, 0 )
6980 ListView.Scroll( 0, Delta * 30 );
6987 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
6989 if Length( SelectComboBox.Text ) = 0 then
6991 AllItemAction.Checked := True;
6992 LogItemAction.Checked := False;
6993 NewItemAction.Checked := False;
6995 //
\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é
6996 if AllItemAction.Checked then
6997 AllItemAction.Checked := False;
6998 if LogItemAction.Checked then
6999 LogItemAction.Checked := False;
7000 if NewItemAction.Checked then
7001 NewItemaction.Checked := False;
7004 if Length( SelectComboBox.Text ) = 0 then
7005 SetListViewType( gvtAll )
7007 SetListViewType( gvtUser, SelectComboBox.Text, false);
7010 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
7011 Shift: TShiftState);
7014 if Key = VK_Return then
7017 end else if Length( SelectComboBox.Text ) = 0 then
7019 AllItemAction.Checked := True;
7020 LogItemAction.Checked := False;
7021 NewItemAction.Checked := False;
7023 //
\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é
7024 if AllItemAction.Checked then
7025 AllItemAction.Checked := False;
7026 if LogItemAction.Checked then
7027 LogItemAction.Checked := False;
7028 if NewItemAction.Checked then
7029 NewItemaction.Checked := False;
7034 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
7039 if Length( SelectComboBox.Text ) = 0 then
7041 SelectComboBox.Text := SELECTCOMBOBOX_NAME;
7042 SelectComboBox.Color := SELECTCOMBOBOX_COLOR;
7047 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
7048 procedure TGikoForm.ModifySelectList;
7055 if SelectComboBox.Parent = nil then
7058 if Length( SelectComboBox.Text ) > 0 then
7060 oldText := SelectComboBox.Text;
7061 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
7063 GikoSys.Setting.SelectTextList.Delete( idx );
7064 idx := SelectComboBox.Items.IndexOf( oldText );
7066 SelectComboBox.Items.Delete( idx );
7067 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
7068 SelectComboBox.Items.Insert( 0, oldText );
7069 SelectComboBox.Text := oldText;
7076 //NG
\83\8f\81[
\83h
\83t
\83@
\83C
\83\8b\82ð
\95Ò
\8fW
\82·
\82é
\82½
\82ß
\82É
\8aJ
\82
7077 procedure TGikoForm.NG1Click(Sender: TObject);
7079 GikoSys.FAbon.EditNGwords;
7081 //NG
\83\8f\81[
\83h
\83t
\83@
\83C
\83\8b\82ð
\8dÄ
\93Ç
\82Ý
\8d\9e\82Ý
\82·
\82é
7082 procedure TGikoForm.SelectResActionExecute(Sender: TObject);
7084 Dlg: TListSelectDialog;
7085 ThreadItem : TThreadItem;
7086 FilterList : TStringList;
7089 Dlg := TListSelectDialog.Create(Self);
7091 Dlg.SelectComboBox.Items.Assign(GikoSys.Setting.SelectTextList);
7092 Dlg.SelectComboBox.Text := '';
7094 if (Dlg.ModalResult = mrCancel) or (Length( Dlg.SelectComboBox.Text ) = 0) then begin
7095 //
\83{
\83^
\83\93\82Ì
\8dX
\90V
7096 AllResAction.Checked := True;
7097 SelectResAction.Checked := False;
7099 //
\83t
\83B
\83\8b\83^
\95¶
\8e\9a\97ñ
\82ð
\8bó
\82É
\82·
\82é
7100 FilterList := TStringList.Create;
7102 GikoSys.FSelectResFilter.LoadFromStringList( FilterList );
7103 GikoSys.FSelectResFilter.Reverse := False;
7108 //
\83{
\83^
\83\93\82Ì
\8dX
\90V
7109 AllResAction.Checked := False;
7110 SelectResAction.Checked := True;
7112 //
\8c\9f\8dõ
\97\9a\97ð
\82Ì
\8dX
\90V
7113 idx := GikoSys.Setting.SelectTextList.IndexOf(Dlg.SelectComboBox.Text);
7115 GikoSys.Setting.SelectTextList.Delete(idx);
7116 GikoSys.Setting.SelectTextList.Insert(0, Dlg.SelectComboBox.Text);
7117 while Dlg.SelectComboBox.Items.Count > 100 do begin
7118 Dlg.SelectComboBox.Items.Delete(Dlg.SelectComboBox.Items.Count - 1);
7122 if SelectComboBox.Parent <> nil then
7123 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
7127 //
\83t
\83B
\83\8b\83^
\82Ì
\90Ý
\92è
7128 FilterList := TStringList.Create;
7130 GikoSys.FSelectResFilter.Reverse := True;
7131 FilterList.Delimiter := ' '; //
\8bæ
\90Ø
\82è
\8eq
\82ð
\94¼
\8ap
\83X
\83y
\81[
\83X
\82É
\90Ý
\92è
7132 FilterList.DelimitedText := Dlg.SelectComboBox.Text;
7134 GikoSys.FSelectResFilter.LoadFromStringList( FilterList );
7140 //
\83X
\83\8c\83b
\83h
\82Ì
\8dÄ
\95`
\89æ
7141 ThreadItem := GetActiveContent;
7142 if ThreadItem <> nil then
7143 SetContent( ThreadItem );
7150 procedure TGikoForm.SelectResActionUpdate(Sender: TObject);
7152 SelectResAction.Enabled := GetActiveContent <> nil;
7155 procedure TGikoForm.FormKeyDown(Sender: TObject; var Key: Word;
7156 Shift: TShiftState);
7160 Doc: IHtmlDocument2;
7161 // Range: IHTMLTxtRange;
7164 ThreadItem: TThreadItem;
7168 ThreadItem := GetActiveContent;
7169 if ThreadItem <> nil then begin
7170 if ssCtrl in Shift then begin
7171 if ssAlt in Shift then begin
7172 Doc := Browser.Document as IHtmlDocument2;
7173 s := IntToStr(Fkeynum);
7174 if GikoSys.IsNumeric(s) then begin
7175 ThreadItem := GetActiveContent;
7176 if ThreadItem <> nil then begin
7178 FHint.PopupType := gptThread;
7179 SetResPopupText(ThreadItem.ParentBoard.BBSID, ChangeFileExt(ThreadItem.FileName, ''), Num, Num, False, False);
7180 if FHint.ResCount <> 0 then begin
7187 if Fkeynum = 0 then begin
7188 if (Key >= $60) and (Key <= $69) then begin
7189 Fkeynum := Key - $60;
7192 if (Key >= $60) and (Key <= $69) then begin
7193 Fkeynum := Fkeynum * 10 + Key - $60;
7199 if FHint <> nil then begin
7200 FHint.ReleaseHandle;
7209 procedure TGikoForm.FormKeyUp(Sender: TObject; var Key: Word;
7210 Shift: TShiftState);
7213 if Key = $11 then begin
7215 if FHint <> nil then begin
7216 FHint.ReleaseHandle;
7224 //
\91S
\82Ä
\82Ì
\83\8c\83X
\82ð
\95\
\8e¦
7225 procedure TGikoForm.AllResActionExecute(Sender: TObject);
7227 ThreadItem : TThreadItem;
7228 FilterList : TStringList;
7230 //
\83{
\83^
\83\93\82Ì
\8dX
\90V
7231 AllResAction.Checked := True;
7232 SelectResAction.Checked := False;
7234 //
\83t
\83B
\83\8b\83^
\95¶
\8e\9a\97ñ
\82ð
\8bó
\82É
\82·
\82é
7235 FilterList := TStringList.Create;
7237 GikoSys.FSelectResFilter.LoadFromStringList( FilterList );
7238 GikoSys.FSelectResFilter.Reverse := False;
7243 //
\83X
\83\8c\83b
\83h
\82ð
\8dÄ
\95`
\89æ
7244 ThreadItem := GetActiveContent;
7245 if ThreadItem <> nil then
7246 SetContent( ThreadItem );
7249 procedure TGikoForm.AllResActionUpdate(Sender: TObject);
7251 AllResAction.Enabled := GetActiveContent <> nil;
7254 procedure TGikoForm.ReloadClick(Sender: TObject);
7256 ThreadItem : TThreadItem;
7258 if GikoSys.FAbon.ReLoadFromNGwordFile =false then begin
7259 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);
7261 ThreadItem := GetActiveContent;
7262 if ThreadItem <> nil then
7263 SetContent( ThreadItem );
7268 procedure TGikoForm.GoBackClick(Sender: TObject);
7270 ThreadItem : TThreadItem;
7273 if GikoSys.FAbon.GoForward =false then begin
7274 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);
7276 s := GikoSys.FAbon.NGwordname;
7277 StatusBar.Panels.Items[2].Text := s;
7278 StatusBar.Panels[2].Width := Max(StatusBar.Canvas.TextWidth(s), 100);
7279 StatusBarResize(Sender);
7280 ThreadItem := GetActiveContent;
7281 if ThreadItem <> nil then
7282 SetContent( ThreadItem );
7287 procedure TGikoForm.GoFowardClick(Sender: TObject);
7289 ThreadItem : TThreadItem;
7292 if GikoSys.FAbon.GoBack =false then begin
7293 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);
7295 s := GikoSys.FAbon.NGwordname;
7296 StatusBar.Panels.Items[2].Text := s;
7297 StatusBar.Panels[2].Width := Max(StatusBar.Canvas.TextWidth(s), 100);
7298 StatusBarResize(Sender);
7299 ThreadItem := GetActiveContent;
7300 if ThreadItem <> nil then
7301 SetContent( ThreadItem );
7306 procedure TGikoForm.ListCoolBarContextPopup(Sender: TObject;
7307 MousePos: TPoint; var Handled: Boolean);
7311 pos := ListCoolBar.ClientToScreen( MousePos );
7312 MainCoolBarPopupMenu.Popup( pos.X, pos.Y );
7315 procedure TGikoForm.BrowserCoolBarContextPopup(Sender: TObject;
7316 MousePos: TPoint; var Handled: Boolean);
7320 pos := BrowserCoolBar.ClientToScreen( MousePos );
7321 MainCoolBarPopupMenu.Popup( pos.X, pos.Y );
7324 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
7325 MousePos: TPoint; var Handled: Boolean);
7329 pos := MainCoolBar.ClientToScreen( MousePos );
7330 MainCoolBarPopupMenu.Popup( pos.X, pos.Y );
7333 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
7334 Shift: TShiftState; X, Y: Integer);
7339 If (SelectComboBox.Parent <> nil) and (IsDraggingSelectComboBox) Then begin
7342 pos := SelectComboBoxSplitter.ClientToScreen( pos );
7343 w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
7345 If w <= 50 Then Begin
7346 //
\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
7347 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
7348 pos.X := pos.X + (50 - w);
7350 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
7354 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
7355 If SelectComboBox.Width <> w Then Begin
7356 SelectComboBox.Width := w;
7357 GikoSys.Setting.SelectComboBoxWidth := w;
7358 DraggingSelectComboBoxPosition := pos;
7363 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
7364 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7368 IsDraggingSelectComboBox := True;
7371 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
7374 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
7375 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7377 IsDraggingSelectComboBox := False;
7380 procedure TGikoForm.StatusBarResize(Sender: TObject);
7382 StatusBar.Panels[1].Width := StatusBar.Width -
7383 StatusBar.Panels[0].Width -
7384 StatusBar.Panels[2].Width;
7386 //
\8cÂ
\95Ê
\82 \82Ú
\81[
\82ñ
\81u
\92Ê
\8fí
\81v
7387 procedure TGikoForm.IndividualAbon1Click(Sender: TObject);
7389 ThreadItem : TThreadItem;
7391 GikoSys.FAbon.AddIndividualAbon(KokoPopupMenu.Tag,1);
7392 ThreadItem := GetActiveContent;
7393 if ThreadItem <> nil then
7394 SetContent( ThreadItem );
7396 //
\8cÂ
\95Ê
\82 \82Ú
\81[
\82ñ
\81u
\93§
\96¾
\81v
7397 procedure TGikoForm.IndividualAbon2Click(Sender: TObject);
7399 ThreadItem : TThreadItem;
7401 GikoSys.FAbon.AddIndividualAbon(KokoPopupMenu.Tag,0);
7402 ThreadItem := GetActiveContent;
7403 if ThreadItem <> nil then
7404 SetContent( ThreadItem );
7406 //
\8cÂ
\95Ê
\82 \82Ú
\81[
\82ñ
\89ð
\8f\9c\81i
\81j
7407 procedure TGikoForm.AntiIndividualAbonClick(Sender: TObject);
7409 ThreadItem : TThreadItem;
7412 if GikoSys.FAbon.GetAbonResCount <> 0 then begin
7413 GikoSys.FAbon.DeleteIndividualAbon(KokoPopupMenu.Tag);
7414 ThreadItem := GetActiveContent;
7415 if ThreadItem <> nil then
7416 SetContent( ThreadItem );
7418 msg := '
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Å
\82Í
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\82ð
\8ds
\82Á
\82Ä
\82Ü
\82¹
\82ñ';
7419 MsgBox(Handle, msg, '
\83\81\83b
\83Z
\81[
\83W', MB_OK);
7422 //
\8cÂ
\95Ê
\82 \82Ú
\81[
\82ñ
\89ð
\8f\9c
7423 procedure TGikoForm.N42Click(Sender: TObject);
7425 IndividualForm :TIndividualAbonForm;
7426 ThreadItem : TThreadItem;
7430 IndividualForm := TIndividualAbonForm.Create(Self);
7432 if GikoSys.FAbon.GetAbonResCount <> 0 then begin
7433 for i :=0 to GikoSys.FAbon.GetAbonResCount-1 do begin
7434 IndividualForm.ComboBox1.Items.Add(GikoSys.FAbon.GetAbonResString(i));
7436 if IndividualForm.ShowModal = mrOK then begin
7437 GikoSys.FAbon.DeleteIndividualAbon(IndividualForm.ResNumber);
7439 ThreadItem := GetActiveContent;
7440 if ThreadItem <> nil then
7441 SetContent( ThreadItem );
7443 msg := '
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Å
\82Í
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\82ð
\8ds
\82Á
\82Ä
\82Ü
\82¹
\82ñ';
7444 MsgBox(Handle, msg, '
\83\81\83b
\83Z
\81[
\83W', MB_OK);
7447 IndividualForm.Free;
7451 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
7454 if (Length( SelectComboBox.Text ) = 0) or
7455 (SelectComboBox.Text = SELECTCOMBOBOX_NAME) then
7457 SelectComboBox.Text := '';
7458 SelectComboBox.Color := clWindow;
7463 procedure TGikoForm.N51Click(Sender: TObject);
7467 //
\94Â
\96¼
\8c\9f\8dõ
7468 procedure TGikoForm.TreeSelectSearchBoardNameExecute(Sender: TObject);
7472 CurItem : TTreeNode;
7476 if InputQuery('
\94Â
\96¼
\8c\9f\8dõ','
\94Â
\96¼
\82Ì
\93ü
\97Í',s) then begin
7479 if TreeView.Selected = nil then
7480 CurItem := TreeView.Items.GetFirstNode
7482 CurItem := TreeView.Selected.GetNext;
7483 if CurItem = nil then
7484 CurItem := TreeView.Items.GetFirstNode;
7486 while CurItem <> nil do begin
7487 if (CurItem.ImageIndex <> 2) and (AnsiPos(s,CurItem.Text) <> 0) then begin
7490 CurItem := CurItem.GetNext;
7493 if CurItem = nil then begin
7494 msg := '
\90æ
\93ª
\82É
\96ß
\82è
\82Ü
\82·
\82©
\81H';
7495 if MsgBox(Handle, msg, '', MB_YESNO or MB_ICONEXCLAMATION) = mrYes then begin
7496 CurItem := TreeView.Items.GetFirstNode;
7500 TreeView.Select(CurItem);
7503 TreeView.Select(CurItem);
7505 msg := '
\8e\9f\82É
\8ds
\82«
\82Ü
\82·
\82©
\81H';
7506 if MsgBox(Handle, msg, '', MB_YESNO or MB_ICONEXCLAMATION) = mrYes then begin
7520 procedure TGikoForm.CabinetFavoriteActionExecute(Sender: TObject);
7523 GikoSys.Setting.CabinetIndex := 2;
7525 //
\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Ö
7526 HistoryToolBar.Hide;
7527 FavoriteToolBar.Show;
7528 TreeView.Visible := False;
7529 FavoriteTreeView.Visible := True;
7531 CabinetSelectToolButton.Caption := '
\82¨
\8bC
\82É
\93ü
\82è';
7533 //
\83\81\83j
\83\85\81[
\8by
\82Ñ
\83{
\83^
\83\93\82Ì
\83`
\83F
\83b
\83N
\82ð
\90Ý
\92è
7534 Cabinet2chAction.Checked := False;
7535 CabinetHistoryAction.Checked := False;
7536 CabinetFavoriteAction.Checked := True;
7538 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\83c
\83\8a\81[
\82ð
\93W
\8aJ
7539 FavoriteTreeView.TopItem.Expanded := True;
7543 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
7546 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
7549 if TObject(SenderNode.Data) is TFavoriteFolder then
7550 SourceNode.MoveTo(SenderNode, naAddChild)
7551 else if TObject(SenderNode.Data) is TFavoriteBoardItem then
7552 SourceNode.MoveTo(SenderNode, naInsert)
7553 else if TObject(SenderNode.Data) is TFavoriteThreadItem then
7554 SourceNode.MoveTo(SenderNode, naInsert);
7558 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
7562 FavoBoardItem: TFavoriteBoardItem;
7563 FavoThreadItem: TFavoriteThreadItem;
7565 ThreadItem: TThreadItem;
7568 if (SenderNode = nil) or (Source = nil) then
7571 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
7572 FavNode := SenderNode.Parent
7574 FavNode := SenderNode;
7576 if Source is TBoard then begin
7577 Board := TBoard( Source );
7578 FavoBoardItem := TFavoriteBoardItem.Create;
7579 FavoBoardItem.BBSID := Board.BBSID;
7580 FavoBoardItem.BoardName := Board.Title;
7581 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
7582 Node.ImageIndex := 15;
7583 Node.SelectedIndex := 15;
7584 end else if Source is TFavoriteBoardItem then begin
7585 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
7586 Node.ImageIndex := 15;
7587 Node.SelectedIndex := 15;
7588 end else if Source is TThreadItem then begin
7589 ThreadItem := TThreadItem( Source );
7590 FavoThreadItem := TFavoriteThreadItem.Create;
7591 FavoThreadItem.BBSID := ThreadItem.ParentBoard.BBSID;
7592 FavoThreadItem.ThreadID := ThreadItem.FileName;
7593 FavoThreadItem.ThreadName := ThreadItem.Title;
7594 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
7595 Node.ImageIndex := 16;
7596 Node.SelectedIndex := 16;
7597 end else if Source is TFavoriteThreadItem then begin
7598 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
7599 Node.ImageIndex := 16;
7600 Node.SelectedIndex := 16;
7605 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
7608 SourceNode: TTreeNode;
7609 LinkToolButton: TLinkToolButton;
7612 if SenderNode = nil then
7615 if Source = FavoriteTreeView then begin
7617 SourceNode := FavoriteTreeView.Selected;
7618 FavoriteMoveTo( SenderNode, SourceNode );
7620 end else if Source is TLinkToolButton then begin
7622 LinkToolButton := TLinkToolButton( Source );
7623 //ShowMessage(LinkToolButton.Text);
7624 SourceNode := TreeNodeDataFind( FavoriteTreeView.TopItem, LinkToolButton.Data );
7625 FavoriteMoveTo( SenderNode, SourceNode );
7627 end else if Source = BrowserTab then begin
7629 idx := BrowserTab.TabIndex;
7630 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
7632 end else if Source = ListView then begin
7634 FavoriteAddTo( SenderNode, ListView.Selected.Data );
7636 end else if Source = TreeView then begin
7638 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
7646 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
7650 SenderNode: TTreeNode;
7654 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
7655 if SenderNode <> nil then begin
7656 bound := SenderNode.DisplayRect( False );
7657 height := bound.Bottom - bound.Top;
7658 if (bound.Top + height / 2) <= Y then
7659 if FavoriteTreeView.GetNodeAt(X, Y + height) <> nil then
7660 SenderNode := FavoriteTreeView.GetNodeAt(X, Y + height);
7662 FavoriteDragDrop( SenderNode, Source );
7667 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
7668 Node: TTreeNode; var S: String);
7671 FavoriteTreeView.ReadOnly := True;
7676 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
7677 Shift: TShiftState);
7683 FClickNode := FavoriteTreeView.Selected;
7684 FavoriteTreeViewRenameActionExecute( Sender );
7688 FClickNode := FavoriteTreeView.Selected;
7689 FavoriteTreeViewDeleteActionExecute( Sender );
7695 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
7698 LinkToolButton: TLinkToolButton;
7701 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
7703 FClickNode := FavoriteTreeView.Selected;
7705 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
7707 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
7708 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
7709 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
7710 FClickNode := FavoriteTreeView.Items[i];
7714 for i := 0 to FClickNode.Count - 1 do begin
7715 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
7716 FClickNode := FClickNode.Item[i];
7723 if FClickNode = nil then begin
7724 FavoriteTreeBrowseFolderPopupMenu.Enabled := False;
7725 FavoriteTreeDeletePopupMenu.Enabled := False;
7726 FavoriteTreeRenamePopupMenu.Enabled := False;
7727 FavoriteTreeNewFolderPopupMenu.Enabled := False;
7728 FavoriteTreeReloadPopupMenu.Enabled := False;
7729 FavoriteTreeURLCopyPopupMenu.Enabled := False;
7730 FavoriteTreeNameCopyPopupMenu.Enabled := False;
7731 FavoriteTreeNameURLCopyPopupMenu.Enabled := False;
7732 FavoriteTreeLogDeletePopupMenu.Enabled := False;
7733 end else if FClickNode.IsFirstNode then begin
7734 FavoriteTreeBrowseFolderPopupMenu.Enabled := True;
7735 FavoriteTreeDeletePopupMenu.Enabled := False;
7736 FavoriteTreeRenamePopupMenu.Enabled := False;
7737 FavoriteTreeNewFolderPopupMenu.Enabled := True;
7738 FavoriteTreeReloadPopupMenu.Enabled := False;
7739 FavoriteTreeURLCopyPopupMenu.Enabled := False;
7740 FavoriteTreeNameCopyPopupMenu.Enabled := False;
7741 FavoriteTreeNameURLCopyPopupMenu.Enabled := False;
7742 FavoriteTreeLogDeletePopupMenu.Enabled := False;
7743 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
7744 FavoriteTreeBrowseFolderPopupMenu.Enabled := True;
7745 FavoriteTreeDeletePopupMenu.Enabled := True;
7746 FavoriteTreeRenamePopupMenu.Enabled := False;
7747 FavoriteTreeNewFolderPopupMenu.Enabled := True;
7748 FavoriteTreeReloadPopupMenu.Enabled := False;
7749 FavoriteTreeURLCopyPopupMenu.Enabled := False;
7750 FavoriteTreeNameCopyPopupMenu.Enabled := False;
7751 FavoriteTreeNameURLCopyPopupMenu.Enabled := False;
7752 FavoriteTreeLogDeletePopupMenu.Enabled := False;
7753 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
7754 FavoriteTreeBrowseFolderPopupMenu.Enabled := True;
7755 FavoriteTreeDeletePopupMenu.Enabled := True;
7756 FavoriteTreeRenamePopupMenu.Enabled := True;
7757 FavoriteTreeNewFolderPopupMenu.Enabled := True;
7758 FavoriteTreeReloadPopupMenu.Enabled := False;
7759 FavoriteTreeURLCopyPopupMenu.Enabled := False;
7760 FavoriteTreeNameCopyPopupMenu.Enabled := False;
7761 FavoriteTreeNameURLCopyPopupMenu.Enabled := False;
7762 FavoriteTreeLogDeletePopupMenu.Enabled := False;
7763 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
7764 FavoriteTreeBrowseFolderPopupMenu.Enabled := False;
7765 FavoriteTreeDeletePopupMenu.Enabled := True;
7766 FavoriteTreeRenamePopupMenu.Enabled := True;
7767 FavoriteTreeNewFolderPopupMenu.Enabled := True;
7768 FavoriteTreeReloadPopupMenu.Enabled := True;
7769 FavoriteTreeURLCopyPopupMenu.Enabled := True;
7770 FavoriteTreeNameCopyPopupMenu.Enabled := True;
7771 FavoriteTreeNameURLCopyPopupMenu.Enabled := True;
7772 FavoriteTreeLogDeletePopupMenu.Enabled := True;
7773 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
7774 FavoriteTreeBrowseFolderPopupMenu.Enabled := False;
7775 FavoriteTreeDeletePopupMenu.Enabled := True;
7776 FavoriteTreeRenamePopupMenu.Enabled := True;
7777 FavoriteTreeNewFolderPopupMenu.Enabled := True;
7778 FavoriteTreeReloadPopupMenu.Enabled := True;
7779 FavoriteTreeURLCopyPopupMenu.Enabled := True;
7780 FavoriteTreeNameCopyPopupMenu.Enabled := True;
7781 FavoriteTreeNameURLCopyPopupMenu.Enabled := True;
7782 FavoriteTreeLogDeletePopupMenu.Enabled := False;
7784 FavoriteTreeBrowseFolderPopupMenu.Enabled := False;
7785 FavoriteTreeDeletePopupMenu.Enabled := False;
7786 FavoriteTreeRenamePopupMenu.Enabled := False;
7787 FavoriteTreeNewFolderPopupMenu.Enabled := False;
7788 FavoriteTreeReloadPopupMenu.Enabled := False;
7789 FavoriteTreeURLCopyPopupMenu.Enabled := False;
7790 FavoriteTreeNameCopyPopupMenu.Enabled := False;
7791 FavoriteTreeNameURLCopyPopupMenu.Enabled := False;
7792 FavoriteTreeLogDeletePopupMenu.Enabled := False;
7797 procedure TGikoForm.FavoriteTreeViewDeleteActionExecute(Sender: TObject);
7800 if FClickNode = nil then
7802 if FClickNode.IsFirstNode then
7804 if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
7805 if MsgBox(Handle, '
\81u
\83\8a\83\93\83N
\81v
\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', '
\8am
\94F', MB_YESNO or MB_ICONQUESTION) <> ID_YES then
7809 //FDeleteList.Add(FClickNode.Data);
7810 //SetDeleteItemList(FClickNode);
7818 procedure TGikoForm.FavoriteTreeViewRenameActionExecute(Sender: TObject);
7821 if FClickNode = nil then
7823 if FClickNode.IsFirstNode then
7825 if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then
7827 FavoriteTreeView.ReadOnly := False;
7828 FClickNode.EditText;
7834 procedure TGikoForm.FavoriteTreeViewNewFolderActionExecute(
7837 NewFavFolder: TFavoriteFolder;
7841 if FClickNode = nil then
7845 if not (TObject(FClickNode.Data) is TFavoriteFolder) then begin
7846 FavoriteTreeView.Selected := FClickNode.Parent;
7847 FClickNode := FClickNode.Parent;
7850 NewFavFolder := TFavoriteFolder.Create;
7851 Node := FavoriteTreeView.Items.AddChildObject(FClickNode, '
\90V
\82µ
\82¢
\83t
\83H
\83\8b\83_', NewFavFolder);
7852 Node.ImageIndex := 14;
7853 Node.SelectedIndex := 14;
7854 // FClickNode.Selected.Expanded := True;
7855 FavoriteTreeView.Selected := Node;
7857 FavoriteTreeViewRenameAction.Execute;
7863 procedure TGikoForm.ToolButton19Click(Sender: TObject);
7866 FavoriteArrangeActionExecute( nil );
7870 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
7875 if not (TObject(node.Data) is TFavoriteFolder) then
7878 for i := 0 to node.Count - 1 do
7880 if TObject(node.Item[i].Data) is TFavoriteFolder then
7881 FavoriteBrowseFolder( node.Item[i] )
7882 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
7883 FavoriteClick( node.Item[i], False );
7888 procedure TGikoForm.FavoriteTreeViewBrowseFolderActionExecute(
7892 FavoriteBrowseFolder( FClickNode );
7893 BrowserTab.OnChange(nil);
7897 procedure TGikoForm.FavoriteTreeViewChange(Sender: TObject;
7901 if not Mouse.IsDragging then
7902 FavoriteClick( Node );
7906 procedure TGikoForm.FavoriteTreeViewDblClick(Sender: TObject);
7908 ThreadItem: TThreadItem;
7909 FavThread: TFavoriteThreadItem;
7915 FClickNode := FavoriteTreeView.Selected;
7916 FavoriteTreeViewReloadActionExecute( Sender );
7920 procedure TGikoForm.FavoriteTreeViewLogDeleteActionExecute(
7923 DEL_MSG = '
\83\8d\83O
\83t
\83@
\83C
\83\8b\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
7924 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
7926 ThreadItem: TThreadItem;
7927 FavThread: TFavoriteThreadItem;
7931 if FClickNode = nil then Exit;
7932 if not (TObject(FClickNode.Data) is TFavoriteThreadItem) then Exit;
7934 FavThread := TFavoriteThreadItem( FClickNode.Data );
7935 Board := BBS2ch.FindBBSID(FavThread.BBSID);
7936 if Board <> nil then
7937 if not Board.IsThreadDatRead then
7938 GikoSys.ReadSubjectFile(Board);
7939 ThreadItem := BBS2ch.FindThreadItem(FavThread.BBSID, FavThread.ThreadID);
7942 if GikoSys.Setting.DeleteMsg then begin
7943 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONQUESTION or MB_DEFBUTTON2) <> IDYES then
7947 DeleteHistory(ThreadItem);
7948 DeleteTab(ThreadItem);
7949 ThreadItem.DeleteLogFile;
7957 procedure TGikoForm.FavoriteTreeViewReloadActionExecute(Sender: TObject);
7959 ThreadItem: TThreadItem;
7960 FavThread: TFavoriteThreadItem;
7962 FavBoard: TFavoriteBoardItem;
7965 if FClickNode = nil then Exit;
7967 if TObject( FClickNode.Data ) is TFavoriteThreadItem then begin
7968 FavThread := TFavoriteThreadItem( FClickNode.Data );
7969 Board := BBS2ch.FindBBSID(FavThread.BBSID);
7970 if Board <> nil then
7971 if not Board.IsThreadDatRead then
7972 GikoSys.ReadSubjectFile(Board);
7973 ThreadItem := BBS2ch.FindThreadItem(FavThread.BBSID, FavThread.ThreadID);
7974 if ThreadItem <> nil then
7975 DownloadContent(ThreadItem);
7976 end else if TObject( FClickNode.Data ) is TFavoriteBoardItem then begin
7977 FavBoard := TFavoriteBoardItem( FClickNode.Data );
7978 Board := BBS2ch.GetBoardFromBBSID( FavBoard.BBSID );
7979 DownloadList(Board);
7984 procedure TGikoForm.FavoriteTreeViewURLCopyActionExecute(Sender: TObject);
7986 ThreadItem: TThreadItem;
7987 FavThread: TFavoriteThreadItem;
7992 if FClickNode = nil then Exit;
7993 if not (TObject(FClickNode.Data) is TFavoriteThreadItem) then Exit;
7995 FavThread := TFavoriteThreadItem( FClickNode.Data );
7996 Board := BBS2ch.FindBBSID(FavThread.BBSID);
7997 if Board <> nil then
7998 if not Board.IsThreadDatRead then
7999 GikoSys.ReadSubjectFile(Board);
8000 ThreadItem := BBS2ch.FindThreadItem(FavThread.BBSID, FavThread.ThreadID);
8003 s := GikoSys.GetURL(ThreadItem.ParentBoard.BBSID, ThreadItem.FileName) + #13#10;
8005 Clipboard.AsText := s;
8011 procedure TGikoForm.FavoriteTreeViewNameCopyActionExecute(Sender: TObject);
8013 ThreadItem: TThreadItem;
8014 FavThread: TFavoriteThreadItem;
8019 if FClickNode = nil then Exit;
8020 if not (TObject(FClickNode.Data) is TFavoriteThreadItem) then Exit;
8022 FavThread := TFavoriteThreadItem( FClickNode.Data );
8023 Board := BBS2ch.FindBBSID(FavThread.BBSID);
8024 if Board <> nil then
8025 if not Board.IsThreadDatRead then
8026 GikoSys.ReadSubjectFile(Board);
8027 ThreadItem := BBS2ch.FindThreadItem(FavThread.BBSID, FavThread.ThreadID);
8030 s := ThreadItem.Title + #13#10;
8032 Clipboard.AsText := s;
8038 procedure TGikoForm.FavoriteTreeViewNameURLCopyActionExecute(
8041 ThreadItem: TThreadItem;
8042 FavThread: TFavoriteThreadItem;
8047 if FClickNode = nil then Exit;
8048 if not (TObject(FClickNode.Data) is TFavoriteThreadItem) then Exit;
8050 FavThread := TFavoriteThreadItem( FClickNode.Data );
8051 Board := BBS2ch.FindBBSID(FavThread.BBSID);
8052 if Board <> nil then
8053 if not Board.IsThreadDatRead then
8054 GikoSys.ReadSubjectFile(Board);
8055 ThreadItem := BBS2ch.FindThreadItem(FavThread.BBSID, FavThread.ThreadID);
8058 s := GikoSys.GetURL(ThreadItem.ParentBoard.BBSID, ThreadItem.FileName) + #13#10 + ThreadItem.Title + #13#10;
8060 Clipboard.AsText := s;
8066 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
8072 for i := 0 to Node.Count - 1 do begin
8073 if Node.Item[i].Data = FindPointer then begin
8074 Result := Node.Item[i];
8076 end else if Node.Item[i].Count > 0 then begin
8077 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
8078 if Found <> nil then begin
8089 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
8093 SenderNode: TTreeNode;
8096 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
8097 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
8098 SenderNode := FavoriteTreeView.Items[i];
8103 FavoriteDragDrop( SenderNode, Source );
8107 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
8108 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
8111 // Writeln( 'TabMouseUp: FTabIsDragging = ' + IntToStr( FTabIsDragging ) + ' -> 3' );
8113 { FTabIsDragging := 3;
8114 FTabMouseUpTime := Now;
8118 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
8119 Y: Integer; State: TDragState; var Accept: Boolean);
8122 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
8126 procedure TGikoForm.OnlyAHundredResExecute(Sender: TObject);
8128 ThreadItem : TThreadItem;
8130 GikoSys.OnlyAHundredRes := OnlyAHundredRes.Checked;
8131 ThreadItem := GetActiveContent;
8132 if ThreadItem <> nil then
8133 SetContent( ThreadItem );