6 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
7 OleCtrls, ComCtrls, ExtCtrls, Menus, StdCtrls, MMSystem, DateUtils,
15 IdHTTP, ActiveX, ActnList, ImgList,
16 ToolWin, Buttons, IdComponent, UrlMon, Tabs, IdGlobal, StrUtils,
17 CommCtrl, Dialogs, GikoSystem, Setting, BoardGroup, ThreadControl, ItemDownload,
18 Editor, RoundData, GikoPanel, Favorite, HTMLDocumentEvent,
19 {HintWindow,} GikoCoolBar, GikoListView, Search, ExternalBoardManager,
20 ExternalBoardPlugInMain, StdActns, Variants, ExtActns,IdTCPConnection,
21 IdBaseComponent, IdTCPClient, AppEvnts, BrowserRecord, MoveHistoryItem,
22 ShellAPI,Preview, HistoryList, ResPopupBrowser, ExtPreviewDatamodule;
27 USER_POPUPCLEAR = WM_USER + 2005; ///< wParam : TWebBrowser
30 TToolBarSettingSenderType = (tssNone, tssMain, tssList, tssBrowser);
31 TMinimizeType = (mtNone, mtMinimizing, mtMinimized);
32 TResizeType = (rtNone, rtResizing);
34 // TBrowserRecord = class;
36 TGikoForm = class(TForm)
37 StatusBar: TStatusBar;
40 TreeSplitter: TSplitter;
43 ThreadMainPanel: TPanel;
44 ListSplitter: TSplitter;
46 ListView: TGikoListView;
50 MessageHideButton: TSpeedButton;
51 MessageListView: TListView;
52 MessageSplitter: TSplitter;
54 CabinetCloseSpeedButton: TSpeedButton;
56 CabinetSelectToolButton: TToolButton;
57 HistoryToolBar: TToolBar;
58 HistoryShowToolButton: TToolButton;
59 HistoryAllClearToolButton: TToolButton;
60 ItemIcon16: TImageList;
61 ItemIcon32: TImageList;
62 HotToobarImageList: TImageList;
63 ItemImageList: TImageList;
66 DeleteMenu: TMenuItem;
68 KidokuMenu: TMenuItem;
69 MidokuMenu: TMenuItem;
70 AllSelectMenu: TMenuItem;
72 StdToolBarMenu: TMenuItem;
73 CabinetMenu: TMenuItem;
76 CabinetVisibleMenu: TMenuItem;
77 MessageMenu: TMenuItem;
78 StatusBarMenu: TMenuItem;
80 LargeIconMenu: TMenuItem;
81 SmallIconMenu: TMenuItem;
83 DetailMenu: TMenuItem;
88 OptionMenu: TMenuItem;
93 BrowserPopupMenu: TPopupMenu;
94 ShowThreadMenu: TMenuItem;
95 ShowBoardMenu: TMenuItem;
96 ListIconPopupMenu: TPopupMenu;
97 LargeIconPMenu: TMenuItem;
98 SmallIconPMenu: TMenuItem;
100 DetailPMenu: TMenuItem;
101 ClosePopupMenu: TPopupMenu;
102 CloseMenu: TMenuItem;
112 ListPopupMenu: TPopupMenu;
113 ListRoundPMenu: TMenuItem;
114 ListReservPMenu: TMenuItem;
116 ItemRoundPMenu: TMenuItem;
118 KidokuPMenu: TMenuItem;
119 MidokuPMenu: TMenuItem;
120 AllSelectPMenu: TMenuItem;
121 UrlCopyPMenu: TMenuItem;
123 DeletePMenu: TMenuItem;
125 ViewPMenu: TMenuItem;
126 LargeIconLPMenu: TMenuItem;
127 SmallIconLPMenu: TMenuItem;
128 ListLPMenu: TMenuItem;
129 DetailLPMenu: TMenuItem;
147 KokoPopupMenu: TPopupMenu;
148 KokomadePMenu: TMenuItem;
150 MenuItem1: TMenuItem;
151 MenuItem2: TMenuItem;
152 BrowserTabPopupMenu: TPopupMenu;
157 TreePopupMenu: TPopupMenu;
158 TreeSelectThreadPupupMenu: TMenuItem;
159 TreeSelectBoardPupupMenu: TMenuItem;
161 TreeSelectURLPupupMenu: TMenuItem;
165 BrowserBottomPanel: TGikoPanel;
166 CabinetSelectPopupMenu: TPopupMenu;
168 ItemReservPMenu: TMenuItem;
169 RoundNamePopupMenu: TPopupMenu;
181 MessageImageList: TImageList;
182 ProgressBar: TProgressBar;
184 NameUrlCopyPMenu: TMenuItem;
191 ListCoolBar: TGikoCoolBar;
192 ListToolBar: TToolBar;
193 BrowserCoolBar: TGikoCoolBar;
194 BrowserToolBar: TToolBar;
195 ListNameToolBar: TToolBar;
196 ListNameLabel: TLabel;
198 BrowserNameToolBar: TToolBar;
199 ItemBoardImage: TImage;
200 BrowserBoardNameLabel: TLabel;
202 BrowserNameLabel: TLabel;
209 TreeSelectNameURLPupupMenu: TMenuItem;
213 BrowserTabToolBar: TToolBar;
214 BrowserTab: TTabControl;
225 FavoriteMenu: TMenuItem;
227 BoardFavoriteAddMenu: TMenuItem;
228 ThreadFavoriteAddMenu: TMenuItem;
230 TreeSelectFavoriteAddPupupMenu: TMenuItem;
231 FavoriteTreeView: TTreeView;
232 StateIconImageList: TImageList;
234 TopRightPanel: TPanel;
237 TopCoolPanel: TPanel;
238 MainCoolBar: TGikoCoolBar;
239 MenuToolBar: TToolBar;
240 StdToolBar: TToolBar;
241 AddressToolBar: TToolBar;
242 AddressComboBox: TComboBox;
243 MoveToToolButton: TToolButton;
244 AddressImageList: TImageList;
245 AddressToolBarMenu: TMenuItem;
255 PreviewTimer: TTimer;
256 MonazillaWebPageAction1: TMenuItem;
263 ChevronPopupMenu: TPopupMenu;
267 LinkToolBar: TToolBar;
272 LinkBarPopupMenu: TPopupMenu;
274 ThreadPopupMenu: TPopupMenu;
275 MenuItem4: TMenuItem;
276 MenuItem5: TMenuItem;
277 MenuItem6: TMenuItem;
280 SelectItemNameCopyAction1: TMenuItem;
283 NameCopyPMenu: TMenuItem;
284 SelectComboBox: TComboBox;
285 MainCoolBarPopupMenu: TPopupMenu;
286 StdToolBarVisiblePMenu: TMenuItem;
287 AddressToolBarVisiblePMenu: TMenuItem;
288 LinkToolBarVisiblePMenu: TMenuItem;
315 IndividualAbon1: TMenuItem;
317 IndividualAbon2: TMenuItem;
318 AntiIndivAbonMenuItem: TMenuItem;
319 AntiIndividualAbon: TMenuItem;
323 SearchBoardName: TMenuItem;
324 TreeSelectLogDeleteSeparator: TMenuItem;
327 FavoriteTreePopupMenu: TPopupMenu;
328 FavoriteTreeRenamePopupMenu: TMenuItem;
329 FavoriteTreeNewFolderPopupMenu: TMenuItem;
331 FavoriteTreeDeletePopupMenu: TMenuItem;
332 FavoriteToolBar: TToolBar;
333 FavoriteAddToolButton: TToolButton;
334 FavoriteArrangeToolButton: TToolButton;
335 FavoriteTreeBrowseFolderPopupMenu: TMenuItem;
337 FavoriteTreeReloadPopupMenu: TMenuItem;
339 FavoriteTreeURLCopyPopupMenu: TMenuItem;
340 FavoriteTreeNameCopyPopupMenu: TMenuItem;
341 FavoriteTreeLogDeletePopupMenu: TMenuItem;
343 FavoriteTreeNameURLCopyPopupMenu: TMenuItem;
345 ExportFavoriteFileAction1: TMenuItem;
356 TreeSelectLogDeletePopupMenu: TMenuItem;
358 BBSSelectPopupMenu: TPopupMenu;
359 PlugInMenu: TMenuItem;
360 TreeSelectNamePupupMenu: TMenuItem;
361 BrowserPanel: TPanel;
363 SelectThreadSave: TMenuItem;
367 OpenLogFolder: TMenuItem;
368 Browser: TWebBrowser;
371 ResRangePopupMenu: TPopupMenu;
372 ResRangeHundPMenuItem: TMenuItem;
373 ResRangeKokoPMenuItem: TMenuItem;
374 ResRangeNewPMenuItem: TMenuItem;
375 ResRangeAllPMenuItem: TMenuItem;
376 BrowsBoradHeadAction1: TMenuItem;
377 ThreadRangePopupMenu: TPopupMenu;
384 ResRangeSelectPMenuItem: TMenuItem;
385 ListColumnPopupMenu: TPopupMenu;
394 SelectComboBoxPanel: TPanel;
395 SelectComboBoxSplitter: TImage;
398 GikoApplicationEvents: TApplicationEvents;
405 FavoriteTreeItemNameCopyPopupMenu: TMenuItem;
408 SaveThreadFile: TMenuItem;
413 SameBoardThreadItem: TMenuItem;
418 ResPopupClearTimer: TTimer;
419 TaskTrayPopupMenu: TPopupMenu;
422 UpdateGikonaviAction1: TMenuItem;
426 URLPATHINFO1: TMenuItem;
427 URLQUERYSTRING1: TMenuItem;
428 procedure FormCreate(Sender: TObject);
429 procedure FormDestroy(Sender: TObject);
430 procedure SaveSettingAll();
431 procedure BrowserStatusTextChange(Sender: TObject;
432 const Text: WideString);
433 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
434 procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
435 var AllowChange: Boolean);
436 procedure ListViewKeyDown(Sender: TObject; var Key: Word;
438 procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
439 procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
440 Button: TToolButton; State: TCustomDrawState;
441 var DefaultDraw: Boolean);
442 procedure BrowserBeforeNavigate2(Sender: TObject;
443 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
444 Headers: OleVariant; var Cancel: WordBool);
445 procedure TreeViewCustomDraw(Sender: TCustomTreeView;
446 const ARect: TRect; var DefaultDraw: Boolean);
447 procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
448 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
449 procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
450 procedure ListViewCustomDraw(Sender: TCustomListView;
451 const ARect: TRect; var DefaultDraw: Boolean);
452 procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
453 Shift: TShiftState; X, Y: Integer);
454 procedure TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
455 procedure MessageListViewResize(Sender: TObject);
456 procedure CabinetVisible( isVisible : Boolean );
457 procedure FormResize(Sender: TObject);
458 procedure ListPopupMenuPopup(Sender: TObject);
459 procedure TreePopupMenuPopup(Sender: TObject);
460 procedure BrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
461 var Cancel: WordBool);
462 procedure ListSplitterMoved(Sender: TObject);
463 procedure BrowserTabChange(Sender: TObject);
464 procedure BrowserTabMouseDown(Sender: TObject; Button: TMouseButton;
465 Shift: TShiftState; X, Y: Integer);
466 procedure BrowserTabDragOver(Sender, Source: TObject; X, Y: Integer;
467 State: TDragState; var Accept: Boolean);
468 procedure BrowserTabDragDrop(Sender, Source: TObject; X, Y: Integer);
469 procedure BrowserTabMouseMove(Sender: TObject; Shift: TShiftState; X,
471 procedure BrowserDocumentComplete(Sender: TObject;
472 const pDisp: IDispatch; var URL: OleVariant);
473 procedure RoundNamePopupMenuPopup(Sender: TObject);
474 procedure FormShow(Sender: TObject);
475 procedure BrowserTabToolBarResize(Sender: TObject);
476 procedure FavoriteMenuClick(Sender: TObject);
477 procedure MainCoolBarResize(Sender: TObject);
478 procedure AddressToolBarResize(Sender: TObject);
479 procedure AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
481 procedure BrowserEnter(Sender: TObject);
482 procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
483 procedure PreviewTimerTimer(Sender: TObject);
484 procedure MessageHideButtonClick(Sender: TObject);
485 procedure HistoryAllClearToolButtonClick(Sender: TObject);
486 procedure MainCoolBarBandInfo(Sender: TObject;
487 var BandInfo: PReBarBandInfoA);
488 procedure MainCoolBarChevronClick(Sender: TObject;
489 RebarChevron: PNMRebarChevron);
490 procedure ListCoolBarBandInfo(Sender: TObject;
491 var BandInfo: PReBarBandInfoA);
492 procedure ListCoolBarChevronClick(Sender: TObject;
493 RebarChevron: PNMRebarChevron);
494 procedure BrowserCoolBarBandInfo(Sender: TObject;
495 var BandInfo: PReBarBandInfoA);
496 procedure BrowserCoolBarChevronClick(Sender: TObject;
497 RebarChevron: PNMRebarChevron);
498 procedure ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
499 procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
500 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
501 procedure SelectComboBoxChange(Sender: TObject);
502 procedure SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
504 procedure SelectComboBoxExit(Sender: TObject);
505 procedure SelectComboBoxSplitterMouseMove(Sender: TObject;
506 Shift: TShiftState; X, Y: Integer);
507 procedure SelectComboBoxSplitterMouseDown(Sender: TObject;
508 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
509 procedure SelectComboBoxSplitterMouseUp(Sender: TObject;
510 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
511 procedure StatusBarResize(Sender: TObject);
512 procedure SelectComboBoxEnter(Sender: TObject);
513 procedure FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
515 procedure FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
516 procedure FavoriteTreeViewEdited(Sender: TObject; Node: TTreeNode;
518 procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
520 procedure FavoriteTreePopupMenuPopup(Sender: TObject);
521 procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
522 procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
523 Shift: TShiftState; X, Y: Integer);
524 procedure LinkToolBarDragOver(Sender, Source: TObject; X, Y: Integer;
525 State: TDragState; var Accept: Boolean);
526 procedure FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
528 procedure FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
529 procedure BrowserTabContextPopup(Sender: TObject; MousePos: TPoint;
530 var Handled: Boolean);
531 procedure BrowserTabPopupMenuPopup(Sender: TObject);
532 procedure BrowserTabResize(Sender: TObject);
533 procedure TreeViewKeyDown(Sender: TObject; var Key: Word;
535 procedure FavoriteTreeViewMouseDown(Sender: TObject;
536 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
537 procedure MessagePanelResize(Sender: TObject);
539 procedure SelectTimerTimer(Sender: TObject);
540 procedure ListViewColumnRightClick(Sender: TObject;
541 Column: TListColumn; Point: TPoint);
542 procedure ListViewCustomDrawItem(Sender: TCustomListView;
543 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
544 procedure FormActivate(Sender: TObject);
545 procedure BrowserPanelResize(Sender: TObject);
546 procedure MenuToolBarResize(Sender: TObject);
547 procedure ListToolBarResize(Sender: TObject);
548 procedure BrowserToolBarResize(Sender: TObject);
549 procedure KokoPopupMenuPopup(Sender: TObject);
550 procedure ListViewKeyUp(Sender: TObject; var Key: Word;
552 procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
553 var AllowEdit: Boolean);
554 procedure CabinetCloseSpeedButtonClick(Sender: TObject);
555 procedure FavoriteArrangeToolButtonClick(Sender: TObject);
556 procedure GikoApplicationEventsMessage(var Msg: tagMSG;
557 var Handled: Boolean);
558 procedure GikoApplicationEventsDeactivate(Sender: TObject);
559 procedure GikoApplicationEventsException(Sender: TObject; E: Exception);
560 procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
561 Shift: TShiftState; X, Y: Integer);
562 procedure GetResURLMenuClick(Sender: TObject);
563 procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
564 var Handled: Boolean);
565 procedure ResPopupClearTimerTimer(Sender: TObject);
568 FEnabledCloseButton: Boolean;
569 FClickNode: TTreeNode;
571 FPreviewBrowser: TPreviewBrowser;
573 FBrowserSizeHeight: Integer;
574 FBrowserSizeWidth: Integer;
575 FTabHintIndex: Integer;
576 FListStyle: TViewStyle; //
\83\8a\83X
\83g
\83A
\83C
\83R
\83\93\83X
\83^
\83C
\83\8b
577 FItemNoVisible: Boolean; //
\83\8a\83X
\83g
\94Ô
\8d\86\95\
\8e¦
\83t
\83\89\83O
578 FViewType: TGikoViewType; //
\83\8a\83X
\83g
\83A
\83C
\83e
\83\80\95\
\8e¦
\83^
\83C
\83v
579 FActiveList: TObject;
580 FActiveContent: TBrowserRecord; //
582 FHistoryList: THistoryList; //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
583 FTreeType: TGikoTreeType;
587 FDownloadTitle: string; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\83^
\83C
\83g
\83\8b\96¼
588 FDownloadMax: Integer; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\8dÅ
\91å
\83T
\83C
\83Y
589 FEvent: THTMLDocumentEventSink;//
\83u
\83\89\83E
\83U
\83h
\83L
\83\85\83\81\83\93\83g
\83C
\83x
\83\93\83g
590 IsDraggingSelectComboBox : Boolean;
591 DraggingSelectComboBoxPosition : TPoint;
592 FSearchDialog: TSearchDialog;
593 FDropSpaceNode: TTreeNode;
594 FDragTime : Cardinal; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
595 FDragButton : TToolButton; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
\82ÉDrag
\82µ
\82Ä
\82éButton
\95Û
\91¶
596 FDragWFirst : Boolean; ///< WebTab
\82ÌD&D
\97p
597 FListViewBackGroundColor : TColor; ///< ListView
\82ÌBackGroundColor
598 FUseOddResOddColor : Boolean; ///<
\8eæ
\93¾
\83\8c\83X
\90\94\82Æ
\83X
\83\8c\83b
\83h
\82Ì
\83\8c\83X
\90\94\82ª
\88á
\82Á
\82½
\82Æ
\82«
\82É
\91¼
\82Ì
\90F
\82Å
\95\
\8e¦
599 FOddColor : TColor; ///<
\82»
\82Ì
\90F
600 FSelectResWord : string; ///<
\83\8c\83X
\8di
\8d\9e\83\8f\81[
\83h
601 FIsIgnoreResize : TResizeType; ///<
\83\8a\83T
\83C
\83Y
\83C
\83x
\83\93\83g
\82ð
\96³
\8e\8b\82·
\82é
\82©
\82Ç
\82¤
\82©
602 FIsMinimize : TMinimizeType; ///<
\8dÅ
\8f¬
\89»
\82µ
\82Ä
\82¢
\82é
\8dÅ
\92\86\82©
603 FOldFormWidth : Integer; ///<
\92¼
\91O
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\95\9d
604 FToolBarSettingSender : TToolBarSettingSenderType; ///<
\83c
\81[
\83\8b\83o
\81[
\90Ý
\92è
\82ð
\83N
\83\8a\83b
\83N
\82µ
\82½
\83N
\81[
\83\8b\83o
\81[
605 FMouseDownPos : TPoint; ///<
\83u
\83\89\83E
\83U
\83^
\83u
\82Å
\83}
\83E
\83X
\82ð
\89\9f\82µ
\82½
\82Æ
\82«
\82Ì
\8dÀ
\95W
607 FResRangeMenuSelect : Longint; ///< ResRangeButton
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\8d\80\96Ú (
\83t
\83H
\81[
\83}
\83b
\83g
\82Í ResRange
\8cÝ
\8a·)
609 FIsHandledWheel : Boolean; ///<
\8aù
\82É
\8eó
\82¯
\8eæ
\82Á
\82½ WM_MOUSEWHEEL
\82©
\82Ç
\82¤
\82©
610 DiffComp: Boolean; //Add by Genyakun
\83X
\83\8c\82ª
\8dX
\90V
\82³
\82ê
\82½
\82Æ
\82«
\82ÉTrue
\82É
\82È
\82é
611 FOrigenCaption: String; //
\82¨
\8bC
\82É
\93ü
\82è
\83c
\83\8a\81[
\82Ì
\83A
\83C
\83e
\83\80\95Ò
\8fW
\8e\9e\82Ì
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
612 FPreviewBrowserRect: TRect; ///<
\83v
\83\8c\83r
\83\85\81[
\82Ì
\95\
\8e¦
\88Ê
\92u
\82ð
\8bL
\89¯
\82·
\82é
613 FActionListGroupIndexes: array of Integer; ///<GikoDM
\8fã
\82Ì
\83A
\83N
\83V
\83\87\83\93\83\8a\83X
\83g
\82Ì
\8ae
\83A
\83N
\83V
\83\87\83\93\82É
\90Ý
\92è
\82³
\82ê
\82½GroupIndex
\82ð
\95Û
\91¶
\82·
\82é
\94z
\97ñ
614 FResPopupBrowser: TResPopupBrowser;
615 FUpdateExePath: string; ///
\83M
\83R
\83i
\83r
\8dX
\90V
\83C
\83\93\83X
\83g
\81[
\83\89\83p
\83X
616 FUpdateExeArgs: string; ///
\83M
\83R
\83i
\83r
\8dX
\90V
\83C
\83\93\83X
\83g
\81[
\83\89\88ø
\90\94
617 FKokoPopupThreadItem: TThreadItem;
618 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
619 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
620 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
621 procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
622 procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
624 procedure ListDoubleClick(Shift: TShiftState);
625 function Hook(var Message: TMessage): Boolean;
626 procedure AddRoundNameMenu(MenuItem: TMenuItem);
627 procedure SetMenuFont;
628 procedure CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
629 procedure FavoriteClick(Sender: TObject; ActiveTab: Boolean); overload;
630 procedure FavoriteClick(Sender: TObject); overload;
631 procedure FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
632 function OnDocumentContextMenu(Sender: TObject): WordBool;
633 function GetWidthAllToolButton(ToolBar: TToolBar): Integer;
634 procedure MenuBarChevronMenu;
635 procedure LinkBarChevronMenu;
636 procedure ToolBarChevronMenu(ToolBar: TToolBar);
637 procedure LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
638 procedure LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
639 procedure LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
640 procedure LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
641 procedure LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
642 function TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
643 procedure FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
644 procedure FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
645 procedure FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
647 procedure SetListViewBackGroundColor(value: TColor);
648 procedure BBSMenuItemOnClick( Sender : TObject );
649 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
650 procedure SaveCoolBarSettings;
651 procedure SaveMainCoolBarSettings;
652 procedure SaveBoardCoolBarSettings;
653 procedure SaveBrowserCoolBarSettings;
654 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
655 procedure LoadCoolBarSettings;
656 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
657 procedure OnMinimize;
658 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½
659 procedure OnMinimized;
660 /// TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
661 procedure TreeClick( Node : TTreeNode );
662 /// TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
663 procedure TreeDoubleClick( Node : TTreeNode );
664 ///
\8ae
\8f\8a\82É
\82 \82é
\83L
\83\83\83r
\83l
\83b
\83g
\81E BBS
\83\81\83j
\83\85\81[
\82ð
\83Z
\83b
\83g
\81^
\8dX
\90V
665 procedure SetBBSMenu;
666 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
667 procedure ListColumnPopupMenuOnClick( Sender : TObject );
668 //!
\8di
\82è
\8d\9e\82Ý
\95¶
\8e\9a\97ñ
\90Ý
\92è
669 procedure SetSelectWord( const text : string );
670 //
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
671 function GetScreenCursor(): TCursor;
672 //
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
673 procedure SetScreenCursor(Cursor : TCursor);
674 //!
\83_
\83E
\83\93\83\8d\81[
\83h
\83R
\83\93\83g
\83\8d\81[
\83\8b\83X
\83\8c\83b
\83h
\82Ì
\90¶
\90¬
675 procedure CreateControlThread();
676 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
677 procedure CreateBrowsers(count: Integer);
678 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
679 procedure GetGroupIndex(ActionList: TActionList);
680 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
681 procedure SetGroupIndex(ActionList: TActionList);
682 //!
\8ew
\92è
\82³
\82ê
\82½
\83X
\83\8c\83b
\83h
\82ð
\8aJ
\82(
\83\8d\83O
\82ª
\96³
\82¢
\82Æ
\82« or
\8ew
\92èJUMP
\82Ü
\82Å
\91«
\82è
\82È
\82¢
\82Æ
\82«
\82ÍDL
\82·
\82é)
683 procedure OpenThreadItem(Thread: TThreadItem; URL: String);
684 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
685 procedure RefreshListView(Thread: TThreadItem);
686 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
687 procedure ClearThreadRengeAction;
688 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82Ì
\83A
\83C
\83R
\83\93\8dí
\8f\9c\81\95\83t
\83H
\81[
\83\80\95\
\8e¦
689 procedure UnStoredTaskTray;
690 //!
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
691 procedure ShowEditors(nCmdShow: Integer);
692 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
693 procedure ReleaseOldestBrowser;
694 //!
\83A
\83N
\83e
\83B
\83u
\82È
\83^
\83u
\82Æ
\93¯
\82¶
\94Â
\82Ì
\8aJ
\82¢
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83\81\83j
\83\85\81[
\83A
\83C
\83e
\83\80\82É
\92Ç
\89Á
695 procedure AddMenuSameBoardThread;
696 //!
\83A
\83N
\83e
\83B
\83u
\82È
\83^
\83u
\82Æ
\93¯
\82¶
\94Â
\82Ì
\8aJ
\82¢
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
697 procedure SameBoardThreadSubItemOnClick(Sender: TObject);
698 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83u
\83\89\83E
\83U
\8dì
\90¬
699 procedure CreateResPopupBrowser;
700 //!
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
701 function isValidFile(FileName: String) : boolean;
702 //! ListView
\82ÌD&D
\8eó
\82¯
\8eæ
\82è
703 procedure AcceptDropFiles(var Msg: TMsg);
704 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\8dX
\90V
\8f\88\97\9d
705 procedure UpdateListView();
706 //!
\83A
\83C
\83R
\83\93\93Ç
\82Ý
\8d\9e\82Ý
707 procedure LoadIcon();
708 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\93Ç
\82Ý
\8d\9e\82Ý
709 procedure LoadPopupMenu();
711 procedure CreateParams(var Params: TCreateParams); override;
712 procedure WndProc(var Message: TMessage); override;
713 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
714 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
715 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
718 LastRoundTime: TDateTime;
719 BrowserNullTab: TBrowserRecord;
720 FControlThread: TThreadControl;
721 FIconData : TNotifyIconData;
722 procedure MoveToURL(const inURL: string; KeyMask: Boolean = False);
723 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
725 function GetHttpState: Boolean;
726 procedure SetEnabledCloseButton(Enabled: Boolean);
727 function GetTreeNode(Data: TObject): TTreeNode;
728 procedure ListViewAllSelect;
729 property ListStyle: TViewStyle read FListStyle write FListStyle;
730 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
731 property ViewType: TGikoViewType read FViewType write FViewType;
732 property NameCookie: string read FNameCookie write FNameCookie;
733 property MailCookie: string read FMailCookie write FMailCookie;
734 property ClickNode: TTreeNode read FClickNode write FClickNode;
735 property TreeType: TGikoTreeType read FTreeType write FTreeType;
736 property ActiveContent: TBrowserRecord read FActiveContent write FActiveContent;
737 property ResRangeMenuSelect: Longint read FResRangeMenuSelect write FResRangeMenuSelect;
738 property SelectResWord : string read FSelectResWord write FSelectResWord;
739 property BrowserSizeWidth: Integer read FBrowserSizeWidth write FBrowserSizeWidth;
740 property BrowserSizeHeight: Integer read FBrowserSizeHeight write FBrowserSizeHeight;
741 property SearchDialog: TSearchDialog read FSearchDialog write FSearchDialog;
742 property ToolBarSettingSender : TToolBarSettingSenderType
743 read FToolBarSettingSender write FToolBarSettingSender;
744 property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
745 property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
746 property WorkCount: Integer read FWorkCount write FWorkCount;
747 property UpdateExePath: string read FUpdateExePath write FUpdateExePath;
748 property UpdateExeArgs: string read FUpdateExeArgs write FUpdateExeArgs;
750 procedure SetContent(inThread: TBrowserRecord);
751 function GetActiveContent(popup :Boolean = false): TThreadItem;
752 function GetActiveList: TObject;
754 procedure SetListViewType(AViewType: TGikoViewType); overload;
755 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
756 procedure PlaySound(SoundEventName: string);
757 procedure ShowBBSTree( inBBS : TBBS );
758 procedure ShowBBSTreeOld( inBBS : TBBS );
759 procedure ShowHistoryTree;
760 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
761 procedure SetBrowserTabState;
762 procedure SetToolBarPopup;
763 procedure ShowFavoriteAddDialog( Item : TObject );
764 procedure FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
765 procedure RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
766 property ListViewBackGroundColor: TColor read FListViewBackGroundColor write SetListViewBackGroundColor;
767 property UseOddResOddColor : Boolean read FUseOddResOddColor write FUseOddResOddColor;
768 property OddColor : TColor read FOddColor write FOddColor;
769 //!
\83\8c\83X
\83\81\83j
\83\85\81[
\83A
\83N
\83e
\83B
\83u
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80
770 property KokoPopupThreadItem : TThreadItem read FKokoPopupThreadItem;
772 function FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
773 procedure OnPlugInMenuItem( Sender : TObject );
774 procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
775 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶ KuroutSetting
\82©
\82ç
\82æ
\82Ñ
\82¾
\82µ
\82½
\82¢
\82Ì
\82Å
776 procedure ActiveListColumnSave;
777 procedure SetActiveList(Obj: TObject);
778 property ActiveList: TObject read GetActiveList write SetActiveList;
779 /// CoolBar
\82ª
\83T
\83C
\83Y
\95Ï
\8dX
\82³
\82ê
\82½
780 procedure CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
781 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
782 procedure IndividualAbonID(Atype : Integer);
783 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
784 procedure IndividualAbon(Atag, Atype : Integer);
785 //
\93¯
\88êID
\82ðNG
\83\8f\81[
\83h
\82É
\93o
\98^
786 procedure AddIDtoNGWord(invisible : boolean);
787 //
\83u
\83\89\83E
\83U
\82Ì
\8dÄ
\95`
\89æ true:
\91S
\82Ä
\82Ì
\83^
\83u false:
\83A
\83N
\83e
\83B
\83u
\82È
\83^
\83u
\82Ì
\82Ý
788 procedure RepaintAllTabsBrowser();
789 //
\83\8a\83\93\83N
\83o
\81[
\90Ý
\92è
790 procedure SetLinkBar;
791 procedure FavoriteBrowseFolder( node: TTreeNode );
792 //
\83X
\83\8c\83b
\83h
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
793 procedure DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
794 //
\94Â
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
795 procedure DownloadList(Board: TBoard; ForceDownload: Boolean = False);
796 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
797 procedure DeleteHistory( threadItem: TThreadItem );
798 //
\83^
\83u
\82ð
\8dí
\8f\9c \83X
\83\8c\83b
\83h
\8ew
\92è
799 procedure DeleteTab(ThreadItem: TThreadItem); overload;
800 //
\83^
\83u
\82ð
\8dí
\8f\9c \83u
\83\89\83E
\83U
\83\8c\83R
\81[
\83h
\81i
\83^
\83u
\81j
\8ew
\92è
801 procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
802 //
\83^
\83u
\8dí
\8f\9c\81i
\8eÀ
\91\95\95\94\81j
803 procedure DeleteTab(index, selectIndex: Integer); overload;
804 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
805 procedure BrowserMovement(const AName: string); overload;
806 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
807 procedure BrowserMovement(scroll: Integer); overload;
808 //Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
809 function GetMainForm(): TComponent;
810 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
811 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
812 procedure OnGestureStart(Sender: TObject);
813 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
814 procedure OnGestureMove(Sender: TObject);
815 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
816 procedure OnGestureEnd(Sender: TObject);
817 ///
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
818 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
819 //ListView
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\82ð
\8eæ
\93¾
\82·
\82é
820 procedure SelectListItem(List: TList);
821 //
\8ew
\92è
\82µ
\82½
\83\8c\83X
\82ð
\83R
\83s
\81[
\82·
\82é
822 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
824 procedure ModifySelectList;
826 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
828 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
830 procedure SetSelectRoundName(Sender: TObject);
832 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
834 function WebBrowserClick(Sender: TObject): WordBool;
835 //!
\83c
\81[
\83\8b\83o
\81[
\82É
\83X
\83\8c\8di
\8d\9e\82Ý
\83R
\83\93\83{
\83{
\83b
\83N
\83X
\82ð
\90Ý
\92è
\82·
\82é
836 procedure SetSelectComboBox();
838 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\8ai
\94[
\82µ
\82½
\83A
\83C
\83R
\83\93\82ð
\83N
\83\8a\83b
\83N
\82µ
\82½
\82Æ
\82«
\82Ì
\8f\88\97\9d
839 procedure TaskTrayIconMessage(var Msg : TMsg); message WM_USER + 2010;
840 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
841 procedure StoredTaskTray;
842 //!
\93¯ID
\83\8c\83X
\83A
\83\93\83J
\81[
\95\
\8e¦
843 procedure ShowSameIDAncher(const AID: String);
845 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
848 TFavoriteMenuItem = class(TMenuItem)
852 property Data: Pointer read FData write FData;
855 TBBSMenuItem = class(TMenuItem)
859 property Data: Pointer read FData write FData;
862 TLinkToolButton = class(TToolButton)
866 property Data: Pointer read FData write FData;
875 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
876 YofUtils, ToolBarUtil, ToolBarSetting,
877 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
878 FavoriteArrange, AddressHistory, Gesture,
879 About, Option, Round, Splash, Sort, ListSelect, Imm,
880 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
881 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
882 InputAssistDataModule, Types, ReplaceDataModule;
885 BLANK_HTML: string = 'about:blank';
886 BROWSER_COUNT = 5; //
\83u
\83\89\83E
\83U
\82Ì
\90\94
888 DandD_THRESHOLD = 5; //D&D
\82Ìè
\87\92l
\81ipixcel)
889 //
\83v
\83\8c\83r
\83\85\81[
\83t
\83@
\83C
\83\8b\96¼
890 HTML_FILE_NAME = 'temp_preview.html';
891 //
\83\81\83b
\83Z
\81[
\83WID
892 USER_TREECLICK = WM_USER + 2000;
893 USER_RESIZED = WM_USER + 2001;
894 USER_MINIMIZED = WM_USER + 2002;
895 USER_SETLINKBAR = WM_USER + 2003;
896 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
897 USER_TASKTRAY = WM_USER + 2010;
900 procedure TGikoForm.CreateParams(var Params: TCreateParams);
903 if FormStyle in [fsNormal, fsStayOnTop] then begin
904 if BorderStyle in [bsSingle, bsSizeable] then begin
905 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
906 Params.WndParent := 0;
911 procedure TGikoForm.FormCreate(Sender: TObject);
913 TVS_NOTOOLTIPS = $0080;
919 wp: TWindowPlacement;
923 Writeln('============================================================');
924 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
926 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
927 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¢');
928 Writeln('============================================================');
931 Sort.SetSortDate(Now());
933 FTreeType := gttNone;
934 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô
936 Application.HookMainWindow(Hook);
937 FIsIgnoreResize := rtResizing;
938 //ActionList
\82ÌGuoupIndex
\82ð
\95Û
\91¶
\82µ
\82Ä
\81A0
\82É
\83N
\83\8a\83A
\82·
\82é
\81B
939 //(
\8bN
\93®
\8e\9e\82É
\83c
\81[
\83\8b\83{
\83^
\83\93\82ÌDown
\83v
\83\8d\83p
\83e
\83B
\82ð
\94½
\89f
\82³
\82¹
\82é
\93s
\8d\87\8fãGroupIndex
\82Í
\90Ý
\92è
\82Å
\82«
\82È
\82¢)
940 //
\82±
\82ê
\88È
\8cãSet
\81`
\82Å
\8dÄ
\90Ý
\92è
\82·
\82é
\82Ü
\82Å
\81AAction
\82ÌChecked
\82ð
\82¢
\82¶
\82é
\82Æ
\82«
\82Í
\92\8d\88Ó
\81I
941 GetGroupIndex(GikoDM.GikoFormActionList);
942 FSearchDialog := nil;
943 FResPopupBrowser := nil;
944 CreateBrowsers(BROWSER_COUNT);
946 FUpdateExePath := '';
947 FUpdateExeArgs := '';
949 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
952 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
953 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
955 //
\83A
\83C
\83R
\83\93\82Ì
\93Ç
\82Ý
\8eæ
\82è
958 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
959 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
961 EnabledCloseButton := True;
963 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
964 ListView.ViewStyle := GikoSys.Setting.ListStyle;
966 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
968 AnimePanel.Left := 0;
970 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
972 //
\83L
\83\83\83r
\83l
\83b
\83g
973 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
975 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
976 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
977 GikoDM.MsgBarVisibleActionExecute(nil);
978 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
980 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
981 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
982 GikoDM.StatusBarVisibleActionExecute(nil);
984 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
985 TreeView.Items.BeginUpdate;
986 FavoriteTreeView.Items.BeginUpdate;
987 ListView.Items.BeginUpdate;
989 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
990 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
991 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
992 TreeView.Color := GikoSys.Setting.CabinetBackColor;
993 FavoriteTreeView.Font.Assign(TreeView.Font);
994 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
996 ListView.Font.Name := GikoSys.Setting.ListFontName;
997 ListView.Font.Size := GikoSys.Setting.ListFontSize;
998 ListView.Font.Color := GikoSys.Setting.ListFontColor;
999 ListView.Font.Style := [];
1000 if GikoSys.Setting.ListFontBold then
1001 ListView.Font.Style := [fsbold];
1002 if GikoSys.Setting.ListFontItalic then
1003 ListView.Font.Style := ListView.Font.Style + [fsitalic];
1005 ListViewBackGroundColor := clWhite; //
\83f
\83t
\83H
\83\8b\83g
\82É
\90Ý
\92è
\82µ
\82½
\82Ì
\82¿
1006 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; //
\83\86\81[
\83U
\92è
\8b`
\82É
\95Ï
\8dX
1007 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
1008 FOddColor := GikoSys.Setting.OddColor;
1011 TreeView.Items.EndUpdate;
1012 FavoriteTreeView.Items.EndUpdate;
1013 ListView.Items.EndUpdate;
1015 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
1016 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
1018 //
\83~
\83\85\81[
\83g
\82Ì
\8fó
\91Ô
\82ð
\90Ý
\92è
1019 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
1021 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1022 FResRangeMenuSelect := GikoSys.ResRange;
1023 case GikoSys.ResRange of
1026 GikoDM.AllResAction.Execute;
1030 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
1031 GikoDM.SelectResAction.Checked := True;
1034 case FResRangeMenuSelect of
1035 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
1036 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
1039 GikoDM.OnlyAHundredResAction.Checked := True;
1040 GikoSys.ResRange := GikoSys.Setting.ResRangeExCount;
1045 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\95\
\8e¦
\94Í
\88Í
1046 case GikoSys.Setting.ThreadRange of
1049 GikoDM.AllItemAction.Checked := True;
1054 GikoDM.LogItemAction.Checked := True;
1059 GikoDM.NewItemAction.Checked := True;
1064 GikoDM.LiveItemAction.Checked := True;
1065 ViewType := gvtLive;
1069 GikoDM.ArchiveItemAction.Checked := True;
1070 ViewType := gvtArch;
1075 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
1076 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1077 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1078 BrowserTab.Font.Style := [];
1079 if GikoSys.Setting.BrowserTabFontBold then
1080 BrowserTab.Font.Style := [fsBold];
1081 if GikoSys.Setting.BrowserTabFontItalic then
1082 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1084 BrowserTab.DoubleBuffered := True;
1085 FDragWFirst := false;
1086 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1088 //
\83u
\83\89\83E
\83U
\83^
\83u
1089 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1091 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1092 GikoDM.BrowserTabTopAction.Checked := True;
1094 GikoDM.BrowserTabBottomAction.Checked := True;
1097 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1098 GikoDM.BrowserTabTabStyleAction.Checked := True;
1099 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1100 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1102 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1105 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1106 ProgressBar.Parent := StatusBar;
1107 ProgressBar.Top := 2;
1108 ProgressBar.Left := 0;
1109 ProgressBar.Width := StatusBar.Panels[0].Width;
1110 ProgressBar.Height := StatusBar.Height - 2;
1111 ProgressBar.Position := 0;
1113 //
\8aO
\95\94\94Â
\83v
\83\89\83O
\83C
\83\93\82ð
\83\8d\81[
\83h(ReadBoardFile, LoadHistory
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1114 InitializeBoardPlugIns;
1116 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1117 GikoSys.ListBoardFile;
1118 //
\81@
\98A
\91±
\8bN
\93®
\8e\9e\82É
\83X
\83v
\83\89\83b
\83V
\83\85\83E
\83B
\83\93\83h
\83E
\82Ì
\83\81\83\82\83\8a\82ª
\95s
\92è
\82É
1120 //
\83X
\83v
\83\89\83b
\83V
\83\85\83E
\83B
\83\93\83h
\83E
\82Ì
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\90Ý
\92è
1121 if (SplashWindow <> nil) then begin
1122 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1126 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1127 for i := Length(BBSs) - 1 downto 0 do begin
1128 if not BBSs[i].IsBoardFileRead then
1129 GikoSys.ReadBoardFile(BBSs[i]);
1131 if SplashWindow <> nil then begin
1132 SplashWindow.ProgressBar.StepBy(20);
1133 SplashWindow.Update;
1137 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1138 RoundList := TRoundList.Create;
1139 RoundList.LoadRoundBoardFile;
1140 RoundList.LoadRoundThreadFile;
1142 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1143 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1144 Style := Style or TVS_NOTOOLTIPS;
1145 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1147 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1148 TreeView.Align := alClient;
1149 FavoriteTreeView.Align := alClient;
1150 FavoriteTreeView.Visible := False;
1152 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1155 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1156 wp.length := sizeof(wp);
1157 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1158 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1159 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1160 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1161 wp.showCmd := SW_HIDE;
1162 SetWindowPlacement(Handle, @wp);
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;
1180 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1181 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1182 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1185 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1186 FHistoryList := THistoryList.Create;
1188 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1189 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1190 TreeView, FTreeType);
1192 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1193 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1194 FavoriteDM.ReadFavorite;
1196 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1197 GikoDM.ArrangeAction.Execute;
1199 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1200 case GikoSys.Setting.ListWidthState of
1202 ViewPanel.Width := 1;
1203 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1204 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1207 ViewPanel.Width := GikoSys.Setting.ListWidth;
1208 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1209 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1212 ViewPanel.Width := GikoSys.Setting.ListWidth;
1213 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1214 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1218 case GikoSys.Setting.ListHeightState of
1220 ViewPanel.Height := 1;
1221 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1222 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1225 ViewPanel.Height := GikoSys.Setting.ListHeight;
1226 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1227 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1230 ViewPanel.Height := GikoSys.Setting.ListHeight;
1231 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1232 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1237 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1238 CreateControlThread();
1240 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1241 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1243 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1246 BrowserBoardNameLabel.Caption := '';
1247 BrowserNameLabel.Caption := '';
1250 FTabHintIndex := -1;
1252 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1253 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1254 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1256 MakeDefaultINIFile();
1257 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1258 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1259 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1260 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1263 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1264 SetSelectComboBox();
1266 //
\83A
\83h
\83\8c\83X
\83o
\81[
1267 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1269 //
\83\8a\83\93\83N
\83o
\81[
1271 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1273 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1274 if not FileExists(GikoSys.GetBoardFileName) then begin
1275 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
1276 + '
\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
1277 + '
\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';
1278 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1279 GikoDM.NewBoardAction.Execute;
1282 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1283 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1285 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1286 // FLastRoundTime := 0;
1288 ListView.OnData := TListViewUtils.ListViewData;
1290 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1291 CabinetVisible( False );
1292 if GikoSys.Setting.CabinetVisible then begin
1293 i := CabinetSelectPopupMenu.Items.Count - 1;
1294 if GikoSys.Setting.CabinetIndex = i - 1 then
1295 GikoDM.CabinetHistoryAction.Execute
1296 else if GikoSys.Setting.CabinetIndex = i then
1297 GikoDM.CabinetFavoriteAction.Execute
1299 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1300 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1301 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1302 FIsIgnoreResize := rtResizing;
1303 GikoDM.CabinetBBSAction.Execute;
1306 ShowBBSTreeOld( BBSs[ 0 ] );
1307 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1310 //
\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
1311 for i := 1 to ParamCount do begin
1312 MoveToURL(ParamStr(i));
1315 GikoDM.RepaintStatusBar;
1316 StatusBarResize(Sender);
1318 dummy1.Caption := ItemReservPMenu.Caption;
1319 dummy1.Hint := ItemReservPMenu.Hint;
1321 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1322 MouseGesture := TMouseGesture.Create;
1324 {$IFDEF SPAM_FILTER_ENABLED}
1325 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1326 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1329 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1330 GikoSys.SetGikoMessage;
1332 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1333 if GikoSys.Setting.AutoLogin then
1334 GikoDM.LoginAction.Execute;
1336 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1338 //
\83L
\83\83\83v
\83V
\83\87\83\93\82ª
\8fã
\8f\91\82«
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\82Ì
\82Å
\81A
\82±
\82±
\82Å
\8dÄ
\90Ý
\92è
1339 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1340 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1342 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\8f\89\8aú
\89»
1343 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1345 //
\92u
\8a·
\90Ý
\92è
\83t
\83@
\83C
\83\8b\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1346 ReplaceDM.LoadFromFile(GikoSys.GetReplaceFileName);
1348 //
\83\8c\83X
\83|
\83b
\83v
\83A
\83b
\83v
\8fÁ
\8b\8e\83^
\83C
\83}
\81[
1349 ResPopupClearTimer.Interval := GikoSys.Setting.RespopupWait;
1351 // D&D
\82ð
\8eó
\82¯
\8eæ
\82é
1352 DragAcceptFiles(ListView.Handle, True);
1354 //
\8f\89\8aú
\89»
\82É
\8e¸
\94s
\82µ
\82½
\83\82\83W
\83\85\81[
\83\8b\83`
\83F
\83b
\83N
1355 if (FavoriteDM.AbEnd) then begin
1356 GikoUtil.MsgBox(Self.Handle,
1357 '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\8f\89\8aú
\89»
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½
\81B
\83M
\83R
\83i
\83r
\82ð
\8fI
\97¹
\82µ
\82Ü
\82·
\81B'#13#10 +
1358 '
\83M
\83R
\83i
\83r
\83t
\83H
\83\8b\83_
\82ð
\8aJ
\82«
\82Ü
\82·
\81Aconfig/' + Favorite.FAVORITE_FILE_NAME +
1359 '
\82ð config/~' + Favorite.FAVORITE_FILE_NAME + '(
\91O
\89ñ
\8bN
\93®
\8e\9e\82Ì
\82¨
\8bC
\82É
\93ü
\82è)
\82Å'#13#10 +
1360 '
\92u
\82«
\8a·
\82¦
\82é
\8e\96\82Å
\92¼
\82é
\89Â
\94\
\90«
\82ª
\82 \82è
\82Ü
\82·
\81B',
1361 '
\8f\89\8aú
\89»
\88Ù
\8fí');
1362 GikoDM.GikoFolderOpenAction.Execute;
1368 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1369 procedure TGikoForm.SaveCoolBarSettings;
1372 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1374 SaveMainCoolBarSettings;
1375 SaveBoardCoolBarSettings;
1376 SaveBrowserCoolBarSettings;
1379 procedure TGikoForm.SaveMainCoolBarSettings;
1384 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1385 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1386 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1387 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1388 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1389 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1392 procedure TGikoForm.SaveBoardCoolBarSettings;
1397 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1398 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1399 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1400 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1401 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1402 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1405 procedure TGikoForm.SaveBrowserCoolBarSettings;
1410 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1411 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1412 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1413 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1414 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1415 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1418 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1419 procedure TGikoForm.LoadCoolBarSettings;
1425 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1426 MainCoolBar.Bands.BeginUpdate;
1428 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1429 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1430 CoolSet := GikoSys.Setting.MainCoolSet[i];
1431 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1432 FIsIgnoreResize := rtNone;
1433 SaveCoolBarSettings;
1436 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1437 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1438 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1441 MainCoolBar.Bands.EndUpdate;
1444 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1445 ListCoolBar.Bands.BeginUpdate;
1447 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1448 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1449 CoolSet := GikoSys.Setting.ListCoolSet[i];
1450 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1451 FIsIgnoreResize := rtNone;
1452 SaveCoolBarSettings;
1455 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1456 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1457 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1460 ListCoolBar.Bands.EndUpdate;
1463 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1464 BrowserCoolBar.Bands.BeginUpdate;
1466 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1467 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1468 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1469 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1470 FIsIgnoreResize := rtNone;
1471 SaveCoolBarSettings;
1474 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1475 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1476 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1479 BrowserCoolBar.Bands.EndUpdate;
1484 procedure TGikoForm.FormShow(Sender: TObject);
1488 if FStartUp then begin
1490 ShowWindow(Application.Handle, SW_HIDE);
1491 //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½
1492 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1493 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1494 GikoDM.StdToolBarVisibleActionExecute( nil );
1495 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1496 GikoDM.AddressBarVisibleActionExecute( nil );
1497 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1498 GikoDM.LinkBarVisibleActionExecute( nil );
1499 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1500 GikoDM.ListToolBarVisibleActionExecute( nil );
1501 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1502 GikoDM.ListNameBarVisibleActionExecute( nil );
1503 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1504 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1505 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1506 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1508 // CoolBar
\95\9c\8c³
1509 LoadCoolBarSettings;
1511 //
\8fd
\97v
\81@
\82±
\82ê
\82ª
\82È
\82¢
\82Æ
\83c
\81[
\83\8b\83{
\83^
\83\93\82Ì
\8dX
\90V
\82ª
\82¨
\82©
\82µ
\82
\82È
\82é
1512 // ResetBandInfo( ListCoolBar, ListToolBar );
1513 FIsIgnoreResize := rtNone;
1515 //ActionList
\82ÌGroupIndex
\82ð
\8c³
\82É
\96ß
\82·
1516 SetGroupIndex(GikoDM.GikoFormActionList);
1518 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1519 if GikoSys.Setting.TabAutoLoadSave then begin
1520 GikoDM.TabsOpenAction.Tag := 1;
1521 GikoDM.TabsOpenAction.Execute;
1522 GikoDM.TabsOpenAction.Tag := 0;
1523 if (GikoSys.Setting.LastCloseTabURL <> '') then begin
1524 if ( FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
1525 while (FActiveContent.Browser.ReadyState <> READYSTATE_COMPLETE) and
1526 (FActiveContent.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
1527 //
\83\81\83b
\83Z
\81[
\83W
\82ð
\8eó
\82¯
\8eæ
\82ç
\82È
\82¢
\82æ
\82¤
\82É
\83X
\83\8a\81[
\83v
\82É
\95Ï
\8dX
1531 item := BBSsFindThreadFromURL( GikoSys.Setting.LastCloseTabURL );
1532 GikoSys.Setting.LastCloseTabURL := '';
1533 if (item <> nil) and (item.IsLogFile) then begin
1534 OpenThreadItem(item, item.URL);
1536 //ShowWindow(Self.Handle, SW_SHOW);
1542 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1544 // if GikoForm.WindowState <> wsMinimized then
1545 // SaveCoolBarSettings;
1547 if ( GikoSys.Setting.ShowDialogForEnd ) and
1548 (MessageDlg('
\83M
\83R
\83i
\83r
\82ð
\8fI
\97¹
\82µ
\82Ä
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H', mtConfirmation,[mbOk, mbCancel], 0) = mrCancel ) then begin
1553 GikoSys.Setting.LastCloseTabURL := '';
1554 if GikoSys.Setting.TabAutoLoadSave then begin
1555 GikoDM.TabsSaveAction.Execute;
1556 if (GetActiveContent <> nil) and
1557 (GetActiveContent.IsLogFile) then begin
1558 GikoSys.Setting.LastCloseTabURL := GetActiveContent.URL;
1562 if (SearchDialog <> nil) then begin
1563 if (SearchDialog.Visible) then begin
1567 SearchDialog.Release;
1570 SearchDialog := nil;
1573 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82Ì
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81AEditorForm
\82ð
\95Â
\82¶
\82é
1574 GikoDM.CloseAllEditorAction.Execute;
1576 Application.UnhookMainWindow(Hook);
1577 //
\83A
\83v
\83\8a\83P
\81[
\83V
\83\87\83\93\8fI
\97¹
\82Ì
\91O
\82É
\83_
\83E
\83\93\83\8d\81[
\83h
\83X
\83\8c\83b
\83h
\82É
\90³
\8fí
\8fI
\97¹
\82ð
\91£
\82·
1578 FControlThread.DownloadAbort;
1579 FControlThread.Terminate;
1581 //OnDestory
\82¾
\82Æ
\8dÄ
\8bN
\93®
\82ð
\82©
\82¯
\82½
\82Æ
\82«
\82È
\82Ç
\82É
\95Û
\91¶
\82³
\82ê
\82È
\82¢
\82Ì
\82ÅOnCloseQuery
\82Å
\90Ý
\92è
\95Û
\91¶
1584 Application.Terminate;
1587 procedure TGikoForm.SaveSettingAll();
1589 wp : TWindowPlacement;
1590 WindowPlacement: TWindowPlacement;
1593 ActiveListColumnSave;
1598 WindowPlacement.length := SizeOf(TWindowPlacement);
1599 GetWindowPlacement(Self.Handle, @WindowPlacement);
1601 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1602 wp.length := sizeof(wp);
1603 GetWindowPlacement(Handle, @wp);
1604 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1605 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1606 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1607 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1608 GikoSys.Setting.WindowMax := (WindowState = wsMaximized) or
1609 (WindowPlacement.flags = WPF_RESTORETOMAXIMIZED);
1610 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1611 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1612 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1613 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1614 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1615 if GikoDM.ArrangeAction.Checked then
1616 GikoSys.Setting.ListOrientation := gloVertical
1618 GikoSys.Setting.ListOrientation := gloHorizontal;
1619 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1624 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1625 if not GikoSys.Setting.ResRangeHold then
1626 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1629 //
\8d¡
\82Ìwinodw
\82Ì
\83X
\83^
\83C
\83\8b\82ÅCoolBar
\82Ì
\88Ê
\92u
\81A
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82ð
\95Û
\91¶
1630 SaveCoolBarSettings;
1631 GikoSys.Setting.WriteWindowSettingFile;
1632 //
\96¼
\91O
\82Æ
\83\81\81[
\83\8b\82Ì
\95Û
\91¶
\82È
\82Ì
\82Å
\83G
\83f
\83B
\83^
\82ª
\95Â
\82¶
\82½
\8cã
\82È
\82ç
\82¢
\82Â
\82Å
\82à
\82¢
\82¢
1633 GikoSys.Setting.WriteNameMailSettingFile;
1635 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\90Ý
\92è
\82Ì
\95Û
\91¶
1636 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1638 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1640 //FavoriteDM
\82Í
\8e©
\93®
\90¶
\90¬
\83t
\83H
\81[
\83\80\82È
\82Ì
\82Å
\81A
\89ð
\95ú
\82Í
\8e©
\93®
\93I
\82É
\82³
\82ê
\82é
1641 //
\8f\89\8aú
\89»
\88Ù
\8fí
\8e\9e\82©
\82ç
\82Ì
\8fI
\97¹
\82Å
\82Í
\95Û
\91¶
\82µ
\82È
\82¢
1642 if not (FavoriteDM.AbEnd) then begin
1643 FavoriteDM.WriteFavorite;
1648 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1650 //AddressHistoryDM
\82Í
\8e©
\93®
\90¶
\90¬
\83t
\83H
\81[
\83\80\82È
\82Ì
\82Å
\81A
\89ð
\95ú
\82Í
\8e©
\93®
\93I
\82É
\82³
\82ê
\82é
\81B
1651 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1655 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
1657 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1661 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1663 RoundList.SaveRoundFile;
1667 //
\83^
\83X
\83N
\83g
\83\8c\83C
\82Ì
\83A
\83C
\83R
\83\93\8dí
\8f\9c
1668 if (FIconData.uID <> 0) then begin
1669 Shell_NotifyIcon(NIM_DELETE, @FIconData);
1674 procedure TGikoForm.FormDestroy(Sender: TObject);
1679 //
\88ê
\8e\9e\93I
\82É
\92Ê
\8fí
\83X
\83^
\83C
\83\8b\82É
\96ß
\82µ
\82ÄCoolBar
\82Ì
\88Ê
\92u
\81A
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82ð
\95Û
\91¶
1680 //
\81¦
\92\8d\88Ó
\81FOnDestroy
\82Å
\8eg
\82¤
\82±
\82Æ
\82µ
\82©
\8dl
\97¶
\82³
\82ê
\82Ä
\82¢
\82È
\82¢
1681 //
\91¼
\82Å
\82â
\82é
\82Æ
\8dÄ
\95`
\89æ
\82ª
\94
\90¶
\82·
\82é
1682 if WindowState <> wsNormal then begin
1683 WindowState := wsNormal;
1685 SaveCoolBarSettings;
1686 GikoSys.Setting.WriteWindowSettingFile;
1691 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1693 if GikoSys.Setting.GestureEnabled then begin
1694 MouseGesture.OnGestureStart := nil;
1695 MouseGesture.OnGestureMove := nil;
1696 MouseGesture.OnGestureEnd := nil;
1699 MouseGesture.UnHook;
1704 //
\82¨
\8bC
\82É
\93ü
\82è
\94j
\8aü
1711 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1712 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1713 GikoSys.Setting.ShowDialogForAllTabClose := false;
1714 GikoDM.AllTabCloseAction.Execute;
1715 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1720 for i := FBrowsers.Count - 1 downto 0 do begin
1721 GikoSys.ShowRefCount('browser' + IntToStr(i), TWebBrowser(FBrowsers[i]).ControlInterface);
1722 GikoSys.ShowRefCount('document' + IntToStr(i), TWebBrowser(FBrowsers[i]).ControlInterface.Document);
1725 for i := FBrowsers.Count - 1 downto 0 do begin
1726 TWebBrowser(FBrowsers[i]).Free;
1729 FBrowsers.Capacity := 0;
1735 if BrowserNullTab <> nil then begin
1736 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
1737 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
1739 BrowserNullTab.Free;
1745 TreeView.Items.BeginUpdate;
1746 TreeView.Items.GetFirstNode.Free;
1747 TreeView.Items.Clear;
1748 TreeView.Items.EndUpdate;
1773 //FControlThread.DownloadAbort;
1774 FControlThread.Terminate;
1775 FControlThread.WaitFor;
1779 FControlThread.Free;
1781 //
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82Á
\82Ä
\92Ç
\89Á
\82³
\82ê
\82½
\83\81\83j
\83\85\81[
\82ð
\8aJ
\95ú
\82·
\82é
1782 for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
1783 GikoForm.PlugInMenu.items[i].Free;
1785 GikoForm.PlugInMenu.Clear;
1788 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
1789 // TBoard, TThreadItem
\82Ì
\83f
\83X
\83g
\83\89\83N
\83^
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94j
\8aü
\82ð
\93`
\82¦
\82é
\82Ì
\82Å
1790 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
1791 for i := Length(BoardGroups) - 1 downto 0 do begin
1792 //BoardGroups[i].Clear;
1793 BoardGroups[i].Free;
1797 for i := Length( BBSs ) - 1 downto 0 do begin
1798 if BBSs[ i ] <> nil then
1802 DestorySpecialBBS(BoardGroup.SpecialBBS);
1807 if FEvent <> nil then
1811 if FResPopupBrowser <> nil then begin
1812 TOleControl(FResPopupBrowser).Parent := nil;
1813 FResPopupBrowser.Free;
1819 if FPreviewBrowser <> nil then begin
1820 FPreviewBrowser.Free;
1821 FPreviewBrowser := nil;
1826 // Update
\82ª
\82¢
\82ê
\82Î
\8eÀ
\8ds
\82·
\82é
1827 if FileExists(FUpdateExePath) then begin
1828 //
\83A
\83b
\83v
\83f
\81[
\83g
\8eÀ
\8ds
1829 GikoSys.CreateProcess(FUpdateExePath, FUpdateExeArgs);
1833 //
\8ae
\8f\8a\82É
\82 \82é
\83L
\83\83\83r
\83l
\83b
\83g
\81E BBS
\83\81\83j
\83\85\81[
\82ð
\83Z
\83b
\83g
\81^
\8dX
\90V
1834 procedure TGikoForm.SetBBSMenu;
1837 item : TBBSMenuItem;
1840 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
1841 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1843 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1844 CabinetSelectPopupMenu.Items[ i ].Free;
1845 CabinetMenu.Items[ i ].Free;
1846 BBSSelectPopupMenu.Items[ i ].Free;
1852 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
1853 for i := Length( BBSs ) - 1 downto 0 do begin
1855 item := TBBSMenuItem.Create( PopupMenu );
1856 item.Caption := BBSs[ i ].Title;
1857 item.Data := BBSs[ i ];
1858 item.OnClick := BBSMenuItemOnClick;
1859 CabinetSelectPopupMenu.Items.Insert( 0, item );
1860 item := TBBSMenuItem.Create( PopupMenu );
1861 item.Caption := BBSs[ i ].Title;
1862 item.Data := BBSs[ i ];
1863 item.OnClick := BBSMenuItemOnClick;
1864 CabinetMenu.Insert( 0, item );
1865 item := TBBSMenuItem.Create( PopupMenu );
1866 item.Caption := BBSs[ i ].Title;
1867 item.Data := BBSs[ i ];
1868 item.OnClick := BBSMenuItemOnClick;
1869 BBSSelectPopupMenu.Items.Insert( 0, Item );
1876 procedure TGikoForm.ReloadBBS;
1881 LockWindowUpdate(Self.Handle);
1883 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1884 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1885 GikoSys.Setting.ShowDialogForAllTabClose := false;
1886 GikoDM.AllTabCloseAction.Execute;
1887 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1888 SetContent(BrowserNullTab);
1889 //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
1890 TreeView.Items.Clear;
1892 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1894 RoundList.SaveRoundFile;
1897 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
1903 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1905 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1910 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1912 FavoriteDM.WriteFavorite;
1917 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
1918 for i := Length(BoardGroups) - 1 downto 0 do begin
1920 BoardGroups[i].Free;
1926 for i := Length( BBSs ) - 1 downto 0 do begin
1927 if BBSs[ i ] <> nil then
1936 FTreeType := gttNone;
1938 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
1940 //
\8aO
\95\94\94Â
\83v
\83\89\83O
\83C
\83\93\82ð
\83\8d\81[
\83h(ReadBoardFile, LoadHistory
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1941 InitializeBoardPlugIns;
1943 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1945 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1946 for i := Length(BBSs) - 1 downto 0 do begin
1947 if not BBSs[i].IsBoardFileRead then
1948 GikoSys.ReadBoardFile(BBSs[i]);
1951 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
1954 ShowBBSTree( BBSs[ 0 ] );
1956 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1957 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1958 TreeView, FTreeType);
1960 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1961 FavoriteDM.ReadFavorite;
1965 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1966 RoundList.LoadRoundBoardFile;
1967 RoundList.LoadRoundThreadFile;
1969 LockWindowUpdate(0);
1973 \todo
\89½
\8cÌ IE 7
\82Å
\82Í about:..
\82É
\82È
\82é
\82Ì
\82©
1974 (IE 7
\82ª about:..
\82ð
\92Ç
\89Á
\82µ
\82Ä
\82¢
\82é
\82Ì
\82©
\81A
\83M
\83R
\83i
\83r
\82ª
\92Ç
\89Á
\82µ
\82Ä
\82¢
\82é
\82Ì
\82©)
1975 \92²
\8d¸
\82·
\82é
\82±
\82Æ
1977 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1985 threadItem : TThreadItem;
1987 Protocol, Host, Path, Document, Port, Bookmark: string;
1992 ActiveFileName: string;
1997 cResPopup: TResPopupBrowser;
1998 senderBrowser :TWebBrowser;
1999 doc: IHTMLDocument2;
2001 //
\83M
\83R
\83i
\83r
\82Í
\83\8c\83X
\83A
\83\93\83J
\81[
\82ª about:blank..
\82Å
\8en
\82Ü
\82é
\82±
\82Æ
\82ð
\8aú
\91Ò
\82µ
\82Ä
\82¢
\82é
\82ª
2002 // IE 7
\82Å
\82Í about:blank..
\82Å
\82Í
\82È
\82 about:..
\82É
\82È
\82é
\82Ì
\82Å
\81A
\92u
\8a·
\82·
\82é(
\93\8a\82°
\82â
\82è)
2003 if Pos('about:..', Text) = 1 then
2004 Text2 := 'about:blank..' + Copy( Text, Length('about:..')+1, Length(Text) )
2008 if not( TObject(Sender) is TWebBrowser )then
2011 senderBrowser := TWebBrowser(Sender);
2012 doc := senderBrowser.ControlInterface.Document as IHTMLDocument2;
2016 if ((not senderBrowser.Busy) and Assigned(doc)) then begin
2017 if LowerCase(doc.charset) <> 'shift_jis' then begin
2018 doc.charset := 'shift_jis';
2026 if PreviewTimer.Enabled then
2027 PreviewTimer.Enabled := False;
2029 Application.CancelHint;
2032 if GetActiveContent <> nil then
2033 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
2035 ActiveFileName := '';
2037 FActiveContent := nil;
2041 //
\91O
\89ñ
\82Æ
\93¯
\82¶
\8fê
\8d\87\8fI
\97¹
2042 if (StatusBar.Panels[1].Text = Text2) then begin
2043 if Text2 = '' then begin
2044 if FResPopupBrowser <> nil then begin
2045 if not(Sender is TResPopupBrowser) then
2046 FResPopupBrowser.Clear
2048 TResPopupBrowser(Sender).ChildClear;
2054 StatusBar.Panels[1].Text := Text2;
2057 if FPreviewBrowser <> nil then
2058 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2060 if FResPopupBrowser <> nil then begin
2061 if not(Sender is TResPopupBrowser) then begin
2062 if (FResPopupBrowser.Visible) then begin
2063 if ResPopupClearTimer.Interval > 0 then begin
2064 ResPopupClearTimer.Enabled := True;
2065 ResPopupClearTimer.Tag := 0;
2067 FResPopupBrowser.Clear;
2071 if ResPopupClearTimer.Interval > 0 then begin
2072 ResPopupClearTimer.Enabled := True;
2073 ResPopupClearTimer.Tag := 1;
2075 TResPopupBrowser(Sender).ChildClear;
2081 if not(Sender is TResPopupBrowser) then
2082 if not GikoSys.Setting.UnActivePopup then
2083 if not GikoForm.Active then
2088 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
2089 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
2090 //
\91¼
\82Ì
\83A
\83v
\83\8a\82Å
\8f\88\97\9d\82·
\82éURL
\82©
\8am
\94F
2091 if (ExtPreviewDM.PreviewURL(Text2)) then begin
2095 Ext := AnsiLowerCase(ExtractFileExt(Text2));
2096 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
2097 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) or
2098 (Pos('http://www.nicovideo.jp/watch/', Text2) = 1) then begin
2099 if FPreviewBrowser = nil then begin
2100 FPreviewBrowser := TPreviewBrowser.Create(Self);
2101 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2102 TOleControl(FPreviewBrowser).Parent := nil;
2104 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
2105 FPreviewURL := Text2;
2106 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
2107 PreviewTimer.Enabled := True;
2108 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
2109 if (Pos('mailto:', Text2) = 1) and (GikoSys.Setting.RespopupMailTo) then begin
2110 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
2111 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
2113 p.x := p.x - senderBrowser.ClientOrigin.x;
2114 p.y := p.y - senderBrowser.ClientOrigin.y;
2115 e := doc.elementFromPoint(p.x, p.y);
2116 if (Assigned(e)) then begin
2117 CreateResPopupBrowser;
2119 if not(Sender is TResPopupBrowser) then begin
2120 if (FResPopupBrowser.Visible) then begin
2121 FResPopupBrowser.Clear;
2124 TResPopupBrowser(Sender).ChildClear;
2127 cResPopup := FResPopupBrowser.CreateNewBrowser;
2128 tmp2 := Trim(ZenToHan(e.Get_outerText));
2129 if (GikoSys.IsNumeric(tmp2)) then begin
2130 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
2131 wkIntSt := StrToInt64(tmp2);
2132 wkIntTo := StrToInt64(tmp2);
2133 cResPopup.PopupType := gptThread;
2134 HTMLCreater.SetResPopupText(cResPopup, GetActiveContent(true), wkIntSt, wkIntTo, False, False);
2136 cResPopup.PopupType := gptRaw;
2137 cResPopup.Title := s;
2141 CreateResPopupBrowser;
2143 if not(Sender is TResPopupBrowser) then begin
2144 if (FResPopupBrowser.Visible) then begin
2145 FResPopupBrowser.Clear;
2148 TResPopupBrowser(Sender).ChildClear;
2151 threadItem := GetActiveContent(true);
2152 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
2153 PathRec := Gikosys.Parse2chURL2(URL);
2154 if (PathRec.FNoParam) then begin
2158 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
2160 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
2162 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
2164 URL := GikoSys.GetBrowsableThreadURL( URL );
2165 wkIntSt := PathRec.FSt;
2166 wkIntTo := PathRec.FTo;
2168 if (wkIntSt = 0) and (wkIntTo = 0) then begin
2171 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
2173 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
2175 end else if wkIntSt > wkIntTo then begin
2180 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
2185 threadItem := BBSsFindThreadFromURL( URL );
2187 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
2188 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
2189 if board <> nil then begin
2190 if not board.IsThreadDatRead then
2191 GikoSys.ReadSubjectFile( board );
2192 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
2196 if threadItem <> nil then begin
2197 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
2198 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
2199 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
2203 cResPopup := FResPopupBrowser.CreateNewBrowser;
2204 cResPopup.PopupType := gptThread;
2205 HTMLCreater.SetResPopupText(cResPopup, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
2209 if (cResPopup <> nil) then begin
2210 ResPopupClearTimer.Enabled := False;
2212 if cResPopup.PopupType = gptRaw then begin
2213 if cResPopup.Title <> '' then begin
2214 cResPopup.TitlePopup;
2217 if cResPopup.RawDocument <> '' then begin
2219 end else if cResPopup.Title <> '' then begin
2220 cResPopup.TitlePopup;
2227 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2231 FEnabledCloseButton := Enabled;
2232 SysMenu := GetSystemMenu(Handle, False);
2234 if Enabled then begin
2235 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2237 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2240 DrawMenuBar(Handle);
2243 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2244 var AllowChange: Boolean);
2246 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
2247 // if FTreeType = gtt2ch then
2248 // FSortIndex := -1;
2251 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2252 Shift: TShiftState);
2256 if GetActiveList is TBoard then begin
2258 VK_BACK:; // UpFolderButtonClick(Sender);
2259 VK_SPACE: ListDoubleClick(Shift);
2260 VK_RETURN: ListClick;
2263 if ListView.Selected <> nil then begin
2264 pos.X := ListView.Column[ 0 ].Width;
2265 pos.Y := ListView.Selected.Top;
2267 pos.X := ListView.Left;
2268 pos.Y := ListView.Top;
2270 Windows.ClientToScreen( ListView.Handle, pos );
2271 ListPopupMenu.Popup( pos.X, pos.Y );
2274 end else begin // TBBS, TCategory
2276 VK_BACK:; // UpFolderButtonClick(Sender);
2277 VK_SPACE: ListClick;
2278 VK_RETURN: ListDoubleClick(Shift);
2281 if ListView.Selected <> nil then begin
2282 pos.X := ListView.Column[ 0 ].Width;
2283 pos.Y := ListView.Selected.Top;
2285 pos.X := ListView.Left;
2286 pos.Y := ListView.Top;
2288 Windows.ClientToScreen( ListView.Handle, pos );
2289 ListPopupMenu.Popup( pos.X, pos.Y );
2295 function TGikoForm.GetHttpState: Boolean;
2297 Result := FHttpState;
2300 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2301 Column: TListColumn);
2305 vSortIndex : Integer;
2306 vSortOrder : Boolean;
2308 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2309 if TObject( FActiveList ) is TBBS then begin
2310 orderList := GikoSys.Setting.BBSColumnOrder;
2311 vSortIndex := GikoSys.Setting.BBSSortIndex;
2312 vSortOrder := GikoSys.Setting.BBSSortOrder;
2313 end else if TObject( FActiveList ) is TCategory then begin
2314 orderList := GikoSys.Setting.CategoryColumnOrder;
2315 vSortIndex := GikoSys.Setting.CategorySortIndex;
2316 vSortOrder := GikoSys.Setting.CategorySortOrder;
2317 end else if TObject( FActiveList ) is TBoard then begin
2318 orderList := GikoSys.Setting.BoardColumnOrder;
2319 vSortIndex := GikoSys.Setting.BoardSortIndex;
2320 vSortOrder := GikoSys.Setting.BoardSortOrder;
2324 id := Integer( orderList[ idx ] );
2327 if vSortIndex = id then
2328 vSortOrder := not vSortOrder
2330 vSortOrder := id = 0;
2333 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2336 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2337 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2341 DefaultDraw := True;
2342 //
\82È
\82º
\82©
\96³
\8fð
\8c\8f\82ÅExit
\82µ
\82Ä
\82¢
\82é
2344 DefaultDraw := False;
2345 if (cdsSelected in State) or (cdsHot in State) then begin
2346 Sender.Canvas.Brush.Color := clHighlight;
2347 Sender.Canvas.Font.Color := clHighlightText;
2349 Sender.Canvas.Brush.Color := clBtnFace;
2350 Sender.Canvas.Font.Color := clBtnText;
2352 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2353 Sender.Canvas.FillRect(ARect);
2354 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2357 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2362 Nodes := TreeView.Items;
2364 for i := 0 to Nodes.Count - 1 do begin
2365 if Nodes.Item[i].Data = Data then begin
2366 Result := Nodes.Item[i];
2373 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2374 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2375 Headers: OleVariant; var Cancel: WordBool);
2380 kMenuName: string = 'menu:';
2385 FKokoPopupThreadItem := nil;
2386 if Pos(kMenuName, URL) <> 0 then begin
2387 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2389 if not GikoSys.IsNumeric(sNo) then Exit;
2393 KokoPopupMenu.PopupComponent := nil;
2394 if (Sender is TComponent) then
2395 KokoPopupMenu.PopupComponent := TComponent(Sender);
2396 //
\8cë
\94\9a\91Î
\8dô
\83N
\83\8a\83b
\83N
\82µ
\82½
\83u
\83\89\83E
\83U
\82Æ
\88Ù
\82È
\82é
\82Æ
\82«
\82É
\8fÁ
\82·
\8f\88\97\9d\82ð
\92Ç
\89Á
2397 if not (Sender is TResPopupBrowser) then begin
2398 if (FResPopupBrowser <> nil) and (FResPopupBrowser.CurrentBrowser.Visible = True) then begin
2399 FResPopupBrowser.Clear;
2402 if (Sender <> FResPopupBrowser.CurrentBrowser) then begin
2403 TResPopupBrowser(Sender).ChildClear;
2406 FKokoPopupThreadItem := GetActiveContent(true);
2407 KokoPopupMenu.Tag := StrToInt(sNo);
2408 KokoPopupMenu.Popup(p.x, p.y);
2409 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2410 Cancel := not GikoSys.Setting.OpenMailer;
2412 //@
\82Æ.
\82ð
\8aÜ
\82Ü
\82È
\82¢URL
\82Í
\83\81\81[
\83\8b\83A
\83h
\83\8c\83X
\82Æ
\82Ý
\82È
\82³
\82È
\82¢
2413 //
\8eå
\82Éage
\81Asage
\91Î
\8dô
2414 if (Pos('@', URL) = 0) or (Pos('.', URL) = 0) then begin
2421 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2422 const ARect: TRect; var DefaultDraw: Boolean);
2426 IsBoardNode: Boolean;
2432 Category: TCategory;
2436 DefaultDraw := True;
2438 if FTreeType = gttHistory then Exit;
2440 TreeView.Canvas.Font.Color := clBlue;
2441 IsBoardNode := False;
2442 for i := 0 to TreeView.Items.Count - 1 do begin
2444 if not TreeView.Items[i].IsVisible then
2447 if TObject(TreeView.Items[i].Data) is TCategory then begin
2448 if TreeView.Items[i].Expanded then
2451 IsBoardNode := False;
2452 Category := TCategory(TreeView.Items[i].Data);
2453 for j := 0 to Category.Count - 1 do begin
2454 Board := Category.Items[j];
2455 if Board <> nil then begin
2456 if Board.UnRead > 0 then begin
2464 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2465 IsBoardNode := True;
2466 Board := TBoard(TreeView.Items[i].Data);
2468 Cnt := Board.UnRead;
2474 Bitmap := TBitmap.Create;
2476 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2477 Bitmap.Canvas.Font.Style := [fsBold];
2478 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2483 NodeRect := TreeView.Items[i].DisplayRect(True);
2486 CntText := '(' + IntToStr(Cnt) + ')'
2487 else if Cnt = 1 then
2491 TextWidth := TreeView.Canvas.TextWidth(CntText);
2493 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2495 NodeRect.Left + NodeWidth + TextWidth + 8,
2497 DrawText(TreeView.Canvas.Handle,
2501 DT_SINGLELINE or DT_VCENTER);
2503 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2506 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2507 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2510 Category: TCategory;
2513 DefaultDraw := True;
2515 if FTreeType = gttHistory then Exit;
2517 TreeView.Canvas.Font.Style := [];
2518 if Node <> nil then begin
2519 if TObject(Node.Data) is TCategory then begin
2520 Category := TCategory(Node.Data);
2521 for i := 0 to Category.Count - 1 do begin
2522 Board := Category.Items[i];
2523 if Board <> nil then begin
2524 if Board.UnRead > 0 then begin
2525 TreeView.Canvas.Font.Style := [fsBold];
2530 end else if TObject(Node.Data) is TBoard then begin
2531 Board := TBoard(Node.Data);
2532 if Board.UnRead > 0 then
2533 TreeView.Canvas.Font.Style := [fsBold];
2538 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2540 TreeView.Invalidate;
2542 if TObject(Node.Data) is TBBS then begin
2543 TBBS(Node.Data).NodeExpand := True;
2544 end else if TObject(Node.Data) is TCategory then begin
2545 TCategory(Node.Data).NodeExpand := True;
2546 end else if TObject(Node.Data) is TBoard then begin
2547 TBoard(Node.Data).NodeExpand := True;
2551 procedure TGikoForm.ListViewAllSelect;
2556 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2558 if csDestroying in Self.ComponentState then
2560 AddMessageList(Msg, nil, Icon);
2562 // *************************************************************************
2563 //!
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82½
\82Æ
\82«
\82É
\94
\90¶
\82·
\82é
\83C
\83x
\83\93\83g
2564 // *************************************************************************
2565 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2569 boardPlugIn : TBoardPlugIn;
2574 if csDestroying in Self.ComponentState then
2576 if Item.DownType = gdtBoard then
2577 ATitle := Item.Board.Title
2579 ATitle := Item.ThreadItem.Title;
2581 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2583 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2585 if Item.DownType = gdtBoard then begin
2588 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2589 if GetActiveList = Item.Board then begin
2591 //
\8e©
\93®
\83\
\81[
\83g
\82Ì
\8fê
\8d\87\94Â
\88ê
\97\97\82Ì
\83\
\81[
\83g
\8f\87\82ð
\83N
\83\8a\83A
\82·
\82é
2592 if (GikoSys.Setting.AutoSortThreadList) then begin
2593 GikoSys.Setting.BoardSortIndex := 0;
2594 GikoSys.Setting.BoardSortOrder := True;
2596 Sort.SetSortDate(Now());
2597 SetActiveList(Item.Board);
2599 Item.Board.Modified := True;
2600 Item.Board.IsThreadDatRead := True;
2603 end else if Item.DownType = gdtThread then begin
2606 Item.ThreadItem.NewArrival := True;
2607 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2608 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2609 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2610 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2611 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2612 Item.ThreadItem.Title := Res.FTitle;
2613 ATitle := Item.ThreadItem.Title;
2614 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2615 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2616 ATitle := Res.FTitle;
2618 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2619 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2620 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2624 if GikoSys.Setting.BrowserTabVisible then begin
2625 if GetActiveContent = Item.ThreadItem then
2626 InsertBrowserTab(Item.ThreadItem)
2627 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2628 InsertBrowserTab(Item.ThreadItem, True)
2630 InsertBrowserTab(Item.ThreadItem, False);
2633 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2634 InsertBrowserTab(Item.ThreadItem);
2637 Application.ProcessMessages;
2639 if Item.State = gdsComplete then begin
2641 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2645 PlaySound('NewDiff');
2646 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2651 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2652 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2653 // 2ch
\88È
\8aO
\82Í
\81A1000
\82ª
\8dÅ
\8d\82\82©
\95s
\96¾
\82È
\82Ì
\82Å
\81A2ch
\8cÀ
\92è
\82É
\82·
\82é
2654 if (Item.ThreadItem.ParentBoard.Is2ch) then begin
2655 Item.ThreadItem.Round := False;
2656 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);
2660 //ListView
\82Å
\82±
\82Ì
\83X
\83\8c\82ª
\8aÜ
\82Ü
\82ê
\82é
\94Â
\82ð
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Æ
\82«
\82Ì
\8dX
\90V
\8f\88\97\9d
2662 RefreshListView(Item.ThreadItem);
2665 end else if Item.State = gdsNotModify then begin
2667 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2668 //SetContent(Item.ThreadItem);
2669 InsertBrowserTab(Item.ThreadItem);
2671 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2672 PlaySound('NoChange');
2673 Screen.Cursor := crDefault;
2674 end else if Item.State = gdsAbort then begin
2676 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2677 end else if Item.State = gdsError then begin
2682 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2683 // if Item.ResponseCode = 302 then
2684 // 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);
2690 if FWorkCount < 0 then FWorkCount := 0;
2691 if FWorkCount = 0 then begin
2693 Animate.Active := False;
2695 Screen.Cursor := crDefault;
2702 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2704 // SetProgressValue(Number, 0, AWorkCountMax);
2705 // ProgressBar.Visible := True;
2706 if csDestroying in Self.ComponentState then
2709 ProgressBar.Position := 0;
2710 ProgressBar.Max := AWorkCountMax;
2711 FDownloadTitle := AWorkTitle;
2712 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2713 FDownloadMax := AWorkCountMax;
2716 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2718 if csDestroying in Self.ComponentState then
2720 ProgressBar.Position := 0;
2721 if FDownloadMax <> 0 then
2722 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2725 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2727 if csDestroying in Self.ComponentState then
2729 ProgressBar.Position := AWorkCount;
2730 // SetProgressValue(Number, AWorkCount);
2731 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2734 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2736 ListItem: TListItem;
2738 MessageListView.Items.BeginUpdate;
2740 ListItem := MessageListView.Items.Add;
2741 ListItem.Caption := ACaption;
2742 ListItem.Data := AObject;
2743 ListItem.MakeVisible(False);
2745 gmiOK: ListItem.ImageIndex := 0;
2746 gmiSAD: ListItem.ImageIndex := 1;
2747 gmiNG: ListItem.ImageIndex := 2;
2748 gmiWhat: ListItem.ImageIndex := 3;
2751 MessageListView.Items.EndUpdate;
2755 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
2756 procedure TGikoForm.ReleaseOldestBrowser;
2760 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2761 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2762 TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2763 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2769 function TGikoForm.InsertBrowserTab(
2770 ThreadItem : TThreadItem;
2771 ActiveTab : Boolean = True
2774 i, j, idx : Integer;
2775 favItem : TFavoriteThreadItem;
2776 newBrowser : TBrowserRecord;
2781 if Threaditem = nil then Exit;
2783 if ThreadItem.IsLogFile then begin
2784 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\91S
\82Ä
\8aJ
\82
\82Æ
\82©
\82â
\82é
\82Æ
\81A
\8d¡
\8aJ
\82¢
\82Ä
\82é
\83X
\83\8c\82Ìbrowser
\82ð
\95t
\82¯
\91Ö
\82¦
\82é
\8b°
\82ê
\82ª
\82 \82é
2785 //
\8fí
\82É
\82S
\94Ô
\96Ú
\82ÉActive
\82Ì
\83u
\83\89\83E
\83U
\82ª
\97\88\82È
\82¢
\82æ
\82¤
\82É
\88Ú
\93®
\82³
\82¹
\82é
2786 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2787 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2788 j := FBrowsers.IndexOf(FActiveContent.Browser);
2789 if j = BROWSER_COUNT - 1 then
2790 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2792 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2793 if not FHistoryList.AddHistory( favItem, TreeView, FTreeType ) then
2796 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2797 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2798 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2799 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2800 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2801 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2802 ReleaseOldestBrowser;
2803 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2804 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2805 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2807 if ActiveTab then begin
2808 BrowserTab.TabIndex := i;
2809 BrowserTab.OnChange(nil);
2816 idx := BrowserTab.TabIndex;
2817 newBrowser := TBrowserRecord.Create;
2818 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2819 ReleaseOldestBrowser;
2820 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2821 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2822 newBrowser.thread := ThreadItem;
2823 newBrowser.Repaint := true;
2825 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2826 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2827 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2828 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2832 if ActiveTab then begin
2833 BrowserTab.TabIndex := 0;
2835 end else if GikoSys.Setting.BrowserTabAppend = gtaLast then begin
2836 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2837 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2838 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2842 if ActiveTab then begin
2843 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2844 BrowserTab.TabIndex := 0
2846 BrowserTab.TabIndex := i;
2849 //
\83^
\83u
\88Ê
\92u
\82ð
\8eæ
\93¾
2851 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2852 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2853 TWebBrowser(FBrowsers[1]) then begin
2858 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2861 //
\83^
\83u
\82ª
\96³
\82¢
\82Æ
\82«
\82È
\82Ç
\91Î
\8dô
2862 if (ins < 0) then begin
2865 BrowserTab.Tabs.InsertObject(ins, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2866 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2867 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2868 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2870 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2875 if ActiveTab then begin
2876 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2877 BrowserTab.TabIndex := 0
2879 BrowserTab.TabIndex := ins;
2882 Result := newBrowser;
2883 if(ActiveTab) or (idx = -1) then begin
2884 BrowserTab.OnChange(nil);
2887 if BrowserNullTab = nil then begin
2888 BrowserNullTab := TBrowserRecord.Create;
2889 BrowserNullTab.Browser := Browser;
2891 // if BrowserNullTab.thread <> ThreadItem then begin
2892 // BrowserNullTab.Movement := '';
2894 BrowserNullTab.thread := ThreadItem;
2895 Result := BrowserNullTab;
2896 BrowserTab.TabIndex := -1;
2897 SetContent(BrowserNullTab);
2900 if GikoSys.Setting.URLDisplay then
2901 AddressComboBox.Text := ThreadItem.URL;
2905 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2913 ThreadItem: TThreadItem;
2914 Thread: TBrowserRecord;
2915 ThreadTitle, ThreadPTitle: string;
2916 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2919 idx := BrowserTab.TabIndex;
2920 if (not FStartUp) and
2921 (FActiveContent <> nil) and
2922 (FActiveContent.Thread <> Thread.Thread) and
2923 (FActiveContent.Browser <> nil) and
2924 (Assigned(FActiveContent.Browser.ControlInterface.Document)) then begin
2927 FActiveContent.Thread.ScrollTop := FActiveContent.Browser.OleObject.Document.Body.ScrollTop;
2930 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2935 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2936 Thread.Browser.Navigate(BLANK_HTML);
2937 BrowserBoardNameLabel.Caption := '';
2938 ItemBoardImage.Picture := nil;
2939 BrowserNameLabel.Caption := '';
2940 ItemImage.Picture := nil;
2941 BrowserNullTab.Thread := nil;
2942 //TOleControl(BrowserNullTab.Browser).Visible := true;
2943 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2944 FActiveContent := nil;
2946 end else if Thread.Browser = nil then begin
2947 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2948 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2949 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2950 ReleaseOldestBrowser;
2951 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2952 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2955 ThreadTitle := Thread.Thread.Title;
2956 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2957 //ThreadScrollTop := Thread.Thread.ScrollTop;
2958 if Thread.Thread.IsLogFile then begin
2959 if not FileExists(Thread.Thread.GetThreadFileName) then begin
2960 Thread.Thread.DeleteLogFile;
2964 ThreadIsLog := Thread.Thread.IsLogFile;
2965 ThreadItem := Thread.Thread;
2966 ThreadNewArraical := Thread.Thread.NewArrival;
2967 //ThreadUnRead := Thread.Thread.UnRead;
2968 BBSID := ThreadItem.ParentBoard.BBSID;
2969 FileName := ThreadItem.FileName;
2971 if GetCapture = ListView.Handle then
2974 Screen.Cursor := crHourGlass;
2978 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2979 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2980 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2982 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2983 if (not Assigned(Thread.Browser.ControlInterface.Document)) then begin
2984 Thread.Browser.Navigate('about:blank');
2986 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2987 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2988 Application.ProcessMessages;
2989 if idx <> BrowserTab.TabIndex then begin
2994 if (Thread <> nil) and (ThreadItem <>nil) then begin
2995 BrowserBoardNameLabel.Caption := ThreadPTitle;
2996 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2997 BrowserNameLabel.Caption := ThreadTitle;
2998 ItemImage.Picture := nil;
3000 if ThreadNewArraical then
3001 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
3003 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
3005 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
3007 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
3008 BrowserNameLabel.Left := ItemImage.Left + 20;
3011 //ActiveContent
\81@
\82Ì
\8dX
\90V
3012 FActiveContent := Thread;
3014 if not ThreadIsLog then begin
3015 Self.Caption := GikoDataModule.CAPTION_NAME ;
3016 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\8fÁ
\8b\8e
3017 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
3019 Thread.Browser.BringToFront;
3020 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
3021 doc := Thread.Browser.OleObject.Document;
3023 doc.charset := 'Shift_JIS';
3030 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
3031 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\95\
\8e¦
3032 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
3033 StatusBar.Panels[THREADSIZE_PANEL].Width :=
3034 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
3035 //Thread.Repaint
\82Í
\81A
\83X
\83L
\83\93\93\99\82Ì
\90Ý
\92è
\82ð
\95Ï
\8dX
\82µ
\82½
\82Æ
\82«
\81AThread
\82ð
\83_
\83E
\83\93\83\8d\81[
\83h
\82µ
\82½
\82Æ
\82«
3036 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
3037 if Thread.Repaint then begin
3038 Thread.Repaint := false;
3040 Thread.Browser.OnStatusTextChange := nil;
3041 LockWindowUpdate(Thread.Browser.ParentWindow);
3042 HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
3043 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
3044 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
3048 RefreshListView(ThreadItem);
3050 Screen.Cursor := crDefault;
3054 function TGikoForm.GetActiveContent(popup :Boolean = false): TThreadItem;
3057 if FActiveContent <> nil then begin
3058 Result := FActiveContent.Thread;
3060 (FResPopupBrowser <> nil) and (FResPopupBrowser.CurrentBrowser.Visible = True) then
3061 if (FResPopupBrowser.CurrentBrowser.Thread <> nil) then begin
3062 Result := FResPopupBrowser.CurrentBrowser.Thread;
3072 procedure TGikoForm.SetActiveList(Obj: TObject);
3076 // if FActiveList <> Obj then begin
3079 if ListView.Selected <> nil then
3080 idx := ListView.Selected.Index
3086 ListView.Items.Count := 0;
3087 ListView.Items.Clear;
3088 ListView.Selected := nil;
3089 // ListView.Columns.Clear;
3090 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
3091 and (FActiveContent.Thread.IsLogFile) then begin
3093 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
3095 on E: Exception do begin
3096 //
\83X
\83\8c\88ê
\97\97DL
\8cã
\82È
\82Ç
\82ÉFActiveContent
\82Ì
\8e\9d\82ÂThread
\82ª
3097 //
\8dí
\8f\9c\82³
\82ê
\82Ä
\82¢
\82é
\8fê
\8d\87\82ª
\82 \82é
\82Ì
\82Å
\82±
\82±
\82Ä
\8f\88\97\9d\82·
\82é
3098 ReleaseBrowser(FActiveContent);
3099 FActiveContent.Thread := nil;
3100 Self.Caption := GikoDataModule.CAPTION_NAME;
3104 Self.Caption := GikoDataModule.CAPTION_NAME;
3105 //Application.Title := CAPTION_NAME;
3107 // ActiveListColumnSave;
3109 Screen.Cursor := crHourGlass;
3111 if Obj is TBBS then begin
3112 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3113 end else if Obj is TCategory then begin
3114 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3115 end else if Obj is TBoard then begin
3116 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3119 Screen.Cursor := crDefault;
3122 if idx >= 0 then begin
3123 if idx >= ListView.Items.Count then
3124 idx := ListView.Items.Count - 1;
3125 ListView.ItemIndex := idx;
3126 ListView.ItemFocused := ListView.Items.Item[ idx ];
3132 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
3133 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
3134 function TGikoForm.GetActiveList: TObject;
3136 Result := FActiveList;
3139 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
3141 SetListViewType(AViewType, '', False);
3144 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
3149 for i := Length( BBSs ) - 1 downto 0 do begin
3150 BBSs[i].SelectText := SelectText;
3151 BBSs[i].KubetsuChk := KubetsuChk;
3153 BoardGroup.SpecialBBS.SelectText := SelectText;
3154 BoardGroup.SpecialBBS.KubetsuChk := KubetsuChk;
3156 ViewType := AViewType;
3157 if ActiveList is TBoard then begin
3158 Board := TBoard(ActiveList);
3160 //gvtAll: ListView.Items.Count := Board.Count;
3161 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
3162 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
3163 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
3164 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
3165 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
3169 SetActiveList(Board);
3173 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
3174 const ARect: TRect; var DefaultDraw: Boolean);
3180 if ListView.Items.Count = 0 then begin
3181 DefaultDraw := true;
3182 ListView.Canvas.Brush.Color := ListView.Color;
3183 ListView.Canvas.FillRect(ARect);
3187 ListView.Canvas.Font.Color := clWindowText;
3188 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3191 ListView.Canvas.Font.Color := clBlue;
3192 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';
3195 ListView.Canvas.Font.Color := clGreen;
3196 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3199 ListView.Canvas.Font.Color := clFuchsia;
3200 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82ÍDAT
\97\8e\82¿
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3203 ListView.Canvas.Font.Color := clMaroon;
3204 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90¶
\91¶
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3207 ListView.Canvas.Font.Color := clNavy;
3208 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';
3209 if GetActiveList is TBoard then
3210 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
3218 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
3219 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
3220 ListView.Canvas.TextOut(p.X, p.Y, s);
3222 DefaultDraw := True;
3226 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
3228 Item: TDownloadItem;
3230 if not Board.IsThreadDatRead then
3231 GikoSys.ReadSubjectFile(Board);
3232 Item := TDownloadItem.Create;
3234 Item.Board := Board;
3235 Item.DownType := gdtBoard;
3236 Item.ForceDownload := ForceDownload;
3237 FControlThread.AddItem(Item);
3238 if FWorkCount = 0 then begin
3240 Animate.Active := True;
3243 Screen.Cursor := crAppStart;
3251 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
3253 Item: TDownloadItem;
3255 Item := TDownloadItem.Create;
3257 Item.ThreadItem := ThreadItem;
3258 Item.DownType := gdtThread;
3259 Item.ForceDownload := ForceDownload;
3260 FControlThread.AddItem(Item);
3261 if FWorkCount = 0 then begin
3263 Animate.Active := True;
3266 Screen.Cursor := crAppStart;
3274 procedure TGikoForm.PlaySound(SoundEventName: string);
3278 if not GikoSys.Setting.Mute then begin
3279 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
3280 if FileExists(FileName) then begin
3281 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
3282 sndPlaySound(nil, SND_SYNC);
3283 Application.ProcessMessages;
3285 sndPlaySound(PChar(FileName), SND_ASYNC);
3291 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
3292 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3294 FHistoryList.DeleteHistory( threadItem, TreeView, TreeType );
3297 procedure TGikoForm.ShowBBSTreeOld(
3305 FavoriteTreeView.Visible := False;
3306 FavoriteToolBar.Hide;
3307 TreeView.Visible := True;
3309 b := CabinetSelectPopupMenu.Items.Count - 1;
3310 for i := 0 to b do begin
3311 item := CabinetSelectPopupMenu.Items[ i ];
3312 if item is TBBSMenuItem then begin
3313 if TBBSMenuItem( item ).Data = inBBS then begin
3314 item.Checked := True;
3315 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3316 CabinetMenu.Items[ i ].Checked := True;
3317 GikoSys.Setting.CabinetIndex := i;
3321 item.Checked := False;
3322 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3323 CabinetMenu.Items[ i ].Checked := False;
3325 CabinetSelectToolButton.Caption := inBBS.Title;
3327 GikoDM.CabinetHistoryAction.Checked := False;
3328 GikoDM.CabinetFavoriteAction.Checked := False;
3330 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3331 FTreeType := gtt2ch;
3332 HistoryToolBar.Hide;
3333 FActiveBBS := inBBS;
3334 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3335 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3336 //?c???[??g?b?v?????I????
3337 if GetActiveList = nil then
3338 TreeView.Selected := TreeView.Items[0]
3340 for i := 0 to TreeView.Items.Count - 1 do begin
3341 if TreeView.Items[i].Data = GetActiveList then begin
3342 TreeView.Selected := TreeView.Items[i];
3346 TreeView.Selected := TreeView.Items[0]
3354 procedure TGikoForm.ShowBBSTree(
3363 FavoriteTreeView.Visible := False;
3364 FavoriteToolBar.Hide;
3365 TreeView.Visible := True;
3367 b := CabinetSelectPopupMenu.Items.Count - 1;
3368 for i := 0 to b do begin
3369 item := CabinetSelectPopupMenu.Items[ i ];
3370 if item is TBBSMenuItem then begin
3371 if TBBSMenuItem( item ).Data = inBBS then begin
3372 item.Checked := True;
3373 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3374 CabinetMenu.Items[ i ].Checked := True;
3375 GikoSys.Setting.CabinetIndex := i;
3379 item.Checked := False;
3380 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3381 CabinetMenu.Items[ i ].Checked := False;
3383 CabinetSelectToolButton.Caption := inBBS.Title;
3385 GikoDM.CabinetHistoryAction.Checked := False;
3386 GikoDM.CabinetFavoriteAction.Checked := False;
3388 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3389 or (not (CabinetPanel.Visible)) then begin
3390 FTreeType := gtt2ch;
3391 HistoryToolBar.Hide;
3392 FActiveBBS := inBBS;
3393 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3394 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3395 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3396 if GetActiveList = nil then begin
3398 TreeClick( TreeView.Items[0] );
3402 for i := 0 to TreeView.Items.Count - 1 do begin
3403 if TreeView.Items[i].Data = GetActiveList then begin
3404 TreeClick( TreeView.Items[i] );
3408 TreeClick( TreeView.Items[0] );
3416 procedure TGikoForm.ShowHistoryTree;
3421 if CabinetPanel.Visible then begin
3422 if FTreeType = gttHistory then begin
3423 CabinetVisible( False );
3424 GikoDM.CabinetHistoryAction.Checked := False;
3426 GikoDM.CabinetHistoryAction.Checked := True;
3429 CabinetVisible( True );
3430 GikoDM.CabinetHistoryAction.Checked := True;
3433 // BBS...BBS, History, Favorite
3434 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3436 FavoriteTreeView.Visible := False;
3437 TreeView.Visible := True;
3439 GikoDM.CabinetBBSAction.Checked := False;
3440 GikoDM.CabinetFavoriteAction.Checked := False;
3442 if FTreeType <> gttHistory then begin
3443 b := CabinetSelectPopupMenu.Items.Count - 1;
3444 for i := 0 to b do begin
3445 item := CabinetSelectPopupMenu.Items[ i ];
3446 if item is TBBSMenuItem then begin
3447 item.Checked := False;
3448 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3449 CabinetMenu.Items[ i ].Checked := False;
3453 FTreeType := gttHistory;
3454 HistoryToolBar.Show;
3455 FavoriteToolBar.Hide;
3456 FHistoryList.SetTreeNode( TreeView );
3457 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3461 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3463 ChangeEvent: TTVChangedEvent;
3464 ChangingEvent: TTVChangingEvent;
3468 if Item is TCategory then
3469 bbs := TCategory( Item ).ParenTBBS
3470 else if Item is TBoard then
3471 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3475 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3476 if Item <> FActiveList then begin
3478 ChangingEvent := nil;
3480 if not CallEvent then begin
3481 ChangeEvent := TreeView.OnChange;
3482 ChangingEvent := TreeView.OnChanging;
3485 if not CallEvent then begin
3486 TreeView.OnChange := nil;
3487 TreeView.OnChanging := nil;
3489 //Application.ProcessMessages;
3490 for i := 0 to TreeView.Items.Count - 1 do begin
3491 if TreeView.Items[i].Data = Item then begin
3492 TreeView.Items[i].Selected := True;
3494 TreeClick(TreeView.Items[i]);
3498 //Application.ProcessMessages;
3500 if not CallEvent then begin
3501 TreeView.OnChange := ChangeEvent;
3502 TreeView.OnChanging := ChangingEvent;
3507 if Item <> FActiveList then begin
3508 ActiveListColumnSave;
3509 if (Item is TBBS) or (Item is TCategory) then begin
3510 ListView.Columns.Clear;
3511 SetActiveList( Item );
3512 end else if Item is TBoard then begin
3513 if not TBoard( Item ).IsThreadDatRead then begin
3514 Screen.Cursor := crHourGlass;
3516 if not TBoard( Item ).IsThreadDatRead then
3517 GikoSys.ReadSubjectFile(TBoard( Item ));
3519 Screen.Cursor := crDefault;
3522 Sort.SetSortDate(Now());
3523 SetActiveList( Item );
3528 if Item is TBoard then begin // not TCategory
3529 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3530 if GikoSys.Setting.ListWidthState = glsMax then begin
3531 GikoDM.BrowserMinAction.Execute;
3532 if GikoForm.Visible then
3536 if GikoSys.Setting.ListHeightState = glsMax then begin
3537 GikoDM.BrowserMinAction.Execute;
3538 if GikoForm.Visible then
3545 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3546 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3548 listItem : TListItem;
3549 threadItem : TThreadItem;
3556 if not (GetActiveList is TBoard) then Exit;
3557 listItem := ListView.GetItemAt( X, Y );
3558 if listItem = nil then Exit;
3559 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3561 threadItem := TThreadItem(ListItem.Data);
3562 InsertBrowserTab(threadItem, False);
3563 if threadItem.IsLogFile then
3564 ListView.UpdateItems(listItem.Index, listItem.Index);
3568 //
\82±
\82±
\82ÅDblClick
\8fE
\82í
\82È
\82¢
\82Æ
\81AClick
\83C
\83x
\83\93\83g
\82ª
\97D
\90æ
\82µ
\82Ä
\8bN
\82«
\82Ä
\82µ
\82Ü
\82¤
\82Ì
\82Å
3569 if (ssDouble in Shift) then
3570 ListDoubleClick(Shift)
3578 Windows.ClientToScreen( ListView.Handle, pos );
3579 ListPopupMenu.Popup( pos.X, pos.Y );
3585 procedure TGikoForm.ListClick;
3587 ListItem: TListItem;
3588 ThreadItem: TThreadItem;
3590 if ListView.SelCount <> 1 then Exit;
3591 ListItem := ListView.Selected;
3592 if ListItem = nil then Exit;
3593 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3595 ThreadItem := TThreadItem(ListItem.Data);
3596 if ThreadItem.IsLogFile then begin
3597 InsertBrowserTab(ThreadItem);
3598 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3600 InsertBrowserTab(ThreadItem);
3603 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3604 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3605 if GikoSys.Setting.ListWidthState = glsMin then begin
3606 GikoDM.BrowserMaxAndFocusAction.Execute;
3609 if GikoSys.Setting.ListHeightState = glsMin then begin
3610 GikoDM.BrowserMaxAndFocusAction.Execute;
3616 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3618 ThreadItem: TThreadItem;
3621 shiftDown := (ssShift in Shift);
3623 if ListView.Selected = nil then Exit;
3625 if TObject(ListView.Selected.Data) is TCategory then begin
3626 SelectTreeNode(ListView.Selected.Data, True);
3627 end else if TObject(ListView.Selected.Data) is TBoard then begin
3628 SelectTreeNode(ListView.Selected.Data, True)
3629 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3630 Application.ProcessMessages;
3631 ThreadItem := TThreadItem(ListView.Selected.Data);
3632 DownloadContent(ThreadItem, shiftDown);
3634 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3635 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3636 if GikoSys.Setting.ListWidthState = glsMin then begin
3637 GikoDM.BrowserMaxAction.Execute;
3638 GikoDM.SetFocusForBrowserAction.Execute;
3641 if GikoSys.Setting.ListHeightState = glsMin then begin
3642 GikoDM.BrowserMaxAction.Execute;
3643 GikoDM.SetFocusForBrowserAction.Execute;
3650 procedure TGikoForm.BrowserMovement(const AName: string);
3652 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3653 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3654 and (FActiveContent <> nil) then begin
3655 FActiveContent.Move(AName);
3658 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
3659 procedure TGikoForm.BrowserMovement(scroll: Integer);
3661 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3662 and (FActiveContent <> nil) then begin
3663 FActiveContent.Move(scroll);
3666 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3668 if TObject(Node.Data) is TBBS then begin
3669 TBBS(Node.Data).NodeExpand := False;
3670 end else if TObject(Node.Data) is TCategory then begin
3671 TCategory(Node.Data).NodeExpand := False;
3672 end else if TObject(Node.Data) is TBoard then begin
3673 TBoard(Node.Data).NodeExpand := False;
3675 if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3676 TreeClick(TreeView.Selected);
3680 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3682 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3684 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3686 TreeSplitter.Visible := isVisible;
3687 CabinetPanel.Visible := isVisible;
3688 GikoDM.CabinetVisibleAction.Checked := isVisible;
3691 procedure TGikoForm.SelectListItem(List: TList);
3693 TmpListItem: TListItem;
3697 TmpListItem := ListView.Selected;
3698 while TmpListItem <> nil do begin
3699 List.Add(TmpListItem.Data);
3700 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3705 procedure TGikoForm.FormResize(Sender: TObject);
3708 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3709 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3711 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3712 if GikoSys.Setting.ListWidthState = glsMin then begin
3713 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3714 ViewPanel.Width := ThreadMainPanel.Width - 80;
3717 if GikoSys.Setting.ListHeightState = glsMin then begin
3718 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3719 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3723 FIsIgnoreResize := rtResizing;
3724 PostMessage( Handle, USER_RESIZED, 0, 0 );
3729 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3733 FTabHintIndex := -1;
3734 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3735 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3736 DeleteTab(i, BrowserTab.TabIndex);
3741 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3745 FTabHintIndex := -1;
3746 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3747 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3748 DeleteTab(i, BrowserTab.TabIndex);
3753 procedure TGikoForm.DeleteTab(index, selectIndex: Integer);
3755 browserRec : TBrowserRecord;
3759 browserRec := TBrowserRecord(BrowserTab.Tabs.Objects[index]);
3761 if browserRec.Browser <> nil then begin
3762 doc := browserRec.Browser.OleObject.Document;
3763 browserRec.Thread.ScrollTop := doc.Body.ScrollTop;
3766 browserRec.Thread.ScrollTop := 0;
3769 if(FActiveContent = browserRec) then
3770 FActiveContent := nil;
3771 if browserRec.Browser <> nil then begin
3772 j := FBrowsers.IndexOf(browserRec.Browser);
3774 FBrowsers.Move(j, BROWSER_COUNT - 1);
3777 BrowserTab.Tabs.BeginUpdate;
3779 GikoSys.Setting.LastCloseTabURL := browserRec.Thread.URL;
3781 if ( BrowserTab.Tabs.Count - 1 = index ) and
3782 ( BrowserTab.TabRect(index).Left
3783 <= BrowserTab.DisplayRect.Left ) then begin
3784 BrowserTab.ScrollTabs(-1);
3786 BrowserTab.Tabs.Delete(index);
3787 if selectIndex > index then begin
3788 BrowserTab.TabIndex := selectIndex - 1;
3790 if BrowserTab.Tabs.Count -1 >= selectIndex then
3791 BrowserTab.TabIndex := selectIndex
3793 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3796 BrowserTab.Tabs.EndUpdate;
3798 if BrowserTab.Tabs.Count = 0 then begin
3799 BrowserNullTab.Thread := nil;
3802 if(BrowserTab.TabIndex <> -1) and
3803 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3804 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
3805 ReleaseOldestBrowser;
3807 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3808 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3809 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3810 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3813 if( FActiveContent = nil) then
3814 BrowserTab.OnChange(nil);
3816 function TGikoForm.Hook(var Message: TMessage): Boolean;
3818 //
\83T
\83u
\83t
\83H
\81[
\83\80\82ª
\83\81\83C
\83\93\83\81\83j
\83\85\81[
\82ð
\8e\9d\82½
\82È
\82¢
\82Æ
\82«
\82É
\81A
\83\81\83C
\83\93\83t
\83H
\81[
\83\80\82Ì
3819 //
\83\81\83j
\83\85\81[
\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\82ª
\83T
\83u
\83\81\83j
\83\85\81[
\82©
\82ç
\93ü
\97Í
\82³
\82ê
\82é
\82Ì
\82ð
\89ñ
\94ð
3823 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3825 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3829 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3831 bBoard, bCategory : Boolean;
3833 bBoard := (GetActiveList is TBoard);
3834 bCategory := (GetActiveList is TCategory);
3835 ItemRoundPMenu.Visible := bBoard;
3836 ItemReservPMenu.Visible := bBoard;
3837 LPMSep01.Visible := bBoard;
3838 ListRoundPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3839 ListReservPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3840 LPMSep02.Visible := bCategory or bBoard;
3841 KidokuPMenu.Visible := bBoard;
3842 MidokuPMenu.Visible := bBoard;
3843 UrlCopyPMenu.Visible := bCategory or bBoard;
3844 NameUrlCopyPMenu.Visible := bCategory or bBoard;
3845 AllSelectPMenu.Visible := bCategory or bBoard;
3846 LPMSep05.Visible := bCategory or bBoard;
3847 DeletePMenu.Visible := bBoard;
3848 LPMSep06.Visible := bCategory or bBoard;
3849 BoardFavoriteAddMenu.Visible := bCategory;
3850 ThreadFavoriteAddMenu.Visible := bBoard;
3851 SaveThreadFile.Visible := bBoard;
3852 AddRoundNameMenu(ItemReservPMenu);
3853 AddRoundNameMenu(ListReservPMenu);
3856 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3858 FClickNode := TreeView.Selected;
3859 if FClickNode = nil then begin
3860 TreeSelectThreadPupupMenu.Visible := False;
3861 TreeSelectBoardPupupMenu.Visible := False;
3862 TPMSep01.Visible := False;
3863 TreeSelectURLPupupMenu.Visible := False;
3864 TreeSelectNamePupupMenu.Visible := False;
3865 TreeSelectNameURLPupupMenu.Visible := False;
3866 TreeSelectFavoriteAddPupupMenu.Visible := False;
3867 TreeSelectLogDeleteSeparator.Visible := False;
3868 TreeSelectLogDeletePopupMenu.Visible := False;
3869 end else if TObject(FClickNode.Data) is TBoard then begin
3870 TreeSelectThreadPupupMenu.Visible := False;
3871 TreeSelectBoardPupupMenu.Visible := True;
3872 TPMSep01.Visible := True;
3873 TreeSelectURLPupupMenu.Visible := True;
3874 TreeSelectNamePupupMenu.Visible := True;
3875 TreeSelectNameURLPupupMenu.Visible := True;
3876 TreeSelectFavoriteAddPupupMenu.Visible := True;
3877 TreeSelectLogDeleteSeparator.Visible := False;
3878 TreeSelectLogDeletePopupMenu.Visible := False;
3879 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3880 TreeSelectThreadPupupMenu.Visible := False;
3881 TreeSelectBoardPupupMenu.Visible := True;
3882 TPMSep01.Visible := True;
3883 TreeSelectURLPupupMenu.Visible := True;
3884 TreeSelectNamePupupMenu.Visible := True;
3885 TreeSelectNameURLPupupMenu.Visible := True;
3886 TreeSelectFavoriteAddPupupMenu.Visible := True;
3887 TreeSelectLogDeleteSeparator.Visible := False;
3888 TreeSelectLogDeletePopupMenu.Visible := False;
3889 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3890 TreeSelectThreadPupupMenu.Visible := True;
3891 TreeSelectBoardPupupMenu.Visible := False;
3892 TPMSep01.Visible := True;
3893 TreeSelectURLPupupMenu.Visible := True;
3894 TreeSelectNamePupupMenu.Visible := True;
3895 TreeSelectNameURLPupupMenu.Visible := True;
3896 TreeSelectFavoriteAddPupupMenu.Visible := True;
3897 TreeSelectLogDeleteSeparator.Visible := True;
3898 TreeSelectLogDeletePopupMenu.Visible := True;
3899 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3900 TreeSelectThreadPupupMenu.Visible := True;
3901 TreeSelectBoardPupupMenu.Visible := False;
3902 TPMSep01.Visible := True;
3903 TreeSelectURLPupupMenu.Visible := True;
3904 TreeSelectNamePupupMenu.Visible := True;
3905 TreeSelectNameURLPupupMenu.Visible := True;
3906 TreeSelectFavoriteAddPupupMenu.Visible := True;
3907 TreeSelectLogDeleteSeparator.Visible := True;
3908 TreeSelectLogDeletePopupMenu.Visible := True;
3909 end else if (TObject(FClickNode.Data) is TCategory) then begin
3910 TreeSelectThreadPupupMenu.Visible := False;
3911 TreeSelectBoardPupupMenu.Visible := False;
3912 TPMSep01.Visible := False;
3913 TreeSelectURLPupupMenu.Visible := False;
3914 TreeSelectNamePupupMenu.Visible := True;
3915 TreeSelectNameURLPupupMenu.Visible := False;
3916 TreeSelectFavoriteAddPupupMenu.Visible := False;
3917 TreeSelectLogDeleteSeparator.Visible := False;
3918 TreeSelectLogDeletePopupMenu.Visible := False;
3919 end else if FClickNode.IsFirstNode then begin
3920 TreeSelectThreadPupupMenu.Visible := False;
3921 TreeSelectBoardPupupMenu.Visible := False;
3922 TPMSep01.Visible := False;
3923 TreeSelectURLPupupMenu.Visible := False;
3924 TreeSelectNamePupupMenu.Visible := True;
3925 TreeSelectNameURLPupupMenu.Visible := False;
3926 TreeSelectFavoriteAddPupupMenu.Visible := False;
3927 TreeSelectLogDeleteSeparator.Visible := False;
3928 TreeSelectLogDeletePopupMenu.Visible := False;
3930 TreeSelectThreadPupupMenu.Visible := False;
3931 TreeSelectBoardPupupMenu.Visible := False;
3932 TPMSep01.Visible := False;
3933 TreeSelectURLPupupMenu.Visible := False;
3934 TreeSelectNamePupupMenu.Visible := False;
3935 TreeSelectNameURLPupupMenu.Visible := False;
3936 TreeSelectFavoriteAddPupupMenu.Visible := False;
3937 TreeSelectLogDeleteSeparator.Visible := False;
3938 TreeSelectLogDeletePopupMenu.Visible := False;
3942 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
3943 var ppDisp: IDispatch; var Cancel: WordBool);
3952 threadItem: TThreadItem;
3953 aElement : IHTMLElement;
3954 senderBrowser : TWebBrowser;
3955 doc : IHTMLDocument2;
3958 Writeln(IntToStr(Integer(ppDisp)));
3962 if not( TObject(Sender) is TWebBrowser )then
3965 senderBrowser := TWebBrowser(Sender);
3966 doc := senderBrowser.ControlInterface.Document as IHTMLDocument2;
3967 if not Assigned(doc) then
3970 aElement := doc.activeElement;
3971 if not Assigned(aElement) then
3974 Text := aElement.Get_outerText;
3975 Html := aElement.Get_outerHTML;
3977 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
3978 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
3979 if GikoSys.Setting.ResAnchorJamp then begin
3981 Text := ZenToHan(Trim(Text));
3983 if(AnsiPos('>>', Text) = 1) then begin
3984 //Text := Copy(Text, 3, Length(Text) - 2);
3987 //Text := Copy(Text, 2, Length(Text) - 1);
3991 if AnsiPos('-', Text) <> 0 then begin
3992 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
3993 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
3994 wkIntTo := StrToIntDef(Text, 0);
3995 if wkIntTo < wkIntSt then
3998 wkIntSt := StrToIntDef(Text, 0);
4001 if wkIntSt <> 0 then begin
4002 FActiveContent.IDAnchorPopup('');
4003 MoveHisotryManager.pushItem(FActiveContent);
4004 if (Sender is TResPopupBrowser) then begin
4005 TResPopupBrowser(Sender).ChildClear;
4007 GetActiveContent(true),
4008 GetActiveContent(true).URL + '&st=' +
4009 IntToStr(wkIntSt) + '&to=' + IntToStr(wkIntSt));
4011 BrowserMovement(IntToStr(wkIntSt));
4016 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
4018 URL := GikoSys.GetHRefText(Html);
4019 URL := GikoSys.HTMLDecode(URL);
4020 if AnsiPos('BE:', URL) = 1 then begin
4021 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
4022 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
4023 threadItem := FActiveContent.Thread;
4024 if threadItem = nil then Exit;
4025 URL := BE_PHP_URL + BNum + '&u=d'
4026 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
4029 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
4030 ( AnsiPos('ftp://', URL) = 1) then begin
4031 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
4032 if GikoSys.Setting.LinkAddAddressBar then begin
4033 idx := AddressComboBox.Items.IndexOf(URL);
4034 if idx = -1 then begin
4035 AddressComboBox.Items.Insert(0, URL);
4036 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
4037 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
4039 AddressComboBox.Items.Delete(idx);
4040 AddressComboBox.Items.Insert(0, URL);
4043 if (Sender is TResPopupBrowser) then begin
4044 TResPopupBrowser(Sender).ChildClear
4047 MoveHisotryManager.pushItem(FActiveContent);
4054 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
4056 if Mouse.Capture <> 0 then
4058 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4059 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
4060 FBrowserSizeWidth := ViewPanel.Width;
4062 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
4063 FBrowserSizeHeight := ViewPanel.Height;
4065 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4066 if ViewPanel.Width < 2 then begin
4067 ViewPanel.Width := 1;
4068 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
4069 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
4070 GikoSys.Setting.ListWidthState := glsMax;
4071 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
4072 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
4073 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
4074 GikoSys.Setting.ListWidthState := glsMin;
4076 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
4077 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
4078 GikoSys.Setting.ListWidthState := glsNormal;
4081 if ViewPanel.Height < 2 then begin
4082 ViewPanel.Height := 1;
4083 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4084 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4085 GikoSys.Setting.ListHeightState := glsMax;
4086 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
4087 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4088 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4089 GikoSys.Setting.ListHeightState := glsMin;
4091 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4092 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4093 GikoSys.Setting.ListHeightState := glsNormal;
4096 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
4097 FBrowserSizeHeight := ViewPanel.Height
4098 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
4099 FBrowserSizeWidth := ViewPanel.Width;}
4102 procedure TGikoForm.BrowserTabChange(Sender: TObject);
4107 BrowserTab.Tabs.BeginUpdate;
4109 if not BrowserTab.Dragging then begin
4110 FTabHintIndex := -1;
4111 BrowserTab.Hint := '';
4112 idx := BrowserTab.TabIndex;
4113 if idx = -1 then begin
4114 SetContent(BrowserNullTab);
4116 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
4117 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
4118 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
4120 FBrowsers.Move(j ,0);
4122 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
4123 (FActiveContent.Browser <> BrowserNullTab.Browser) and
4124 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
4125 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4127 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
4128 ReleaseOldestBrowser;
4130 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
4131 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
4132 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4134 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
4135 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
4136 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4138 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
4139 AddressComboBox.Text := GetActiveContent.URL;
4141 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
4142 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
4145 GikoDM.SetFocusForBrowserAction.Execute;
4149 BrowserTab.Tabs.EndUpdate;
4154 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
4155 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
4161 if Button = mbMiddle then begin
4162 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
4165 p := BrowserTab.ScreenToClient(p);
4166 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
4168 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4169 end else if Button = mbLeft then begin
4170 FDragWFirst := true;
4171 FMouseDownPos.X := X;
4172 FMouseDownPos.Y := Y;
4177 procedure TGikoForm.SetBrowserTabState;
4179 CoolBand: TCoolBand;
4181 BrowserBottomPanel.AutoSize := False;
4182 if GikoSys.Setting.BrowserTabVisible then begin
4184 BrowserTab.Tabs.BeginUpdate;
4186 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
4187 BrowserTab.Style := tsTabs;
4188 if GikoSys.Setting.BrowserTabPosition = gtpTop then
4189 BrowserTab.TabPosition := tpTop
4191 BrowserTab.TabPosition := tpBottom;
4192 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
4193 BrowserTab.TabPosition := tpTop;
4194 BrowserTab.Style := tsButtons;
4196 BrowserTab.TabPosition := tpTop;
4197 BrowserTab.Style := tsFlatButtons
4200 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
4201 BrowserTab.Parent := BrowserTabToolBar;
4202 BrowserBottomPanel.Hide;
4203 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4204 if CoolBand <> nil then
4205 CoolBand.Visible := True;
4207 BrowserTab.Parent := BrowserBottomPanel;
4208 BrowserTab.Top := 0;
4209 BrowserTab.Left := 0;
4210 BrowserBottomPanel.Show;
4211 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4212 if CoolBand <> nil then
4213 CoolBand.Visible := False;
4216 BrowserTab.Tabs.EndUpdate;
4220 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4221 if CoolBand <> nil then
4222 CoolBand.Visible := False;
4223 BrowserBottomPanel.Visible := False;
4224 GikoDM.AllTabCloseAction.Execute;
4228 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
4229 Y: Integer; State: TDragState; var Accept: Boolean);
4233 idx := BrowserTab.IndexOfTabAt(X, Y);
4234 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
4237 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
4242 FDragWFirst := False;
4243 idx := BrowserTab.IndexOfTabAt(X, Y);
4245 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
4248 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
4249 Shift: TShiftState; X, Y: Integer);
4252 ThreadItem: TThreadItem;
4255 TabIdx := BrowserTab.IndexOfTabAt(x, y);
4257 if ( ssLeft in Shift ) then begin
4258 if (FDragWFirst) then begin
4259 BrowserTab.EndDrag(false);
4260 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
4263 BrowserTab.EndDrag(false);
4264 FDragWFirst := false;
4267 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
4268 Application.CancelHint;
4269 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
4270 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
4271 BrowserTab.Hint := ThreadItem.Title;
4272 Application.ShowHint := True;
4274 BrowserTab.Hint := '';
4275 Application.ShowHint := True;
4277 FTabHintIndex := TabIdx;
4282 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
4283 const pDisp: IDispatch; var URL: OleVariant);
4285 BrowserRecord :TBrowserRecord;
4287 doc : IHTMLDocument2;
4288 threadItem : TThreadItem;
4290 if TObject(Sender) is TWebBrowser then begin
4291 BrowserRecord := nil;
4292 if TWebBrowser(Sender) <> Browser then begin
4293 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4294 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
4295 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
4299 if BrowserRecord <> nil then begin
4300 if BrowserRecord.Event <> nil then
4301 BrowserRecord.Event.Free;
4302 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, BrowserRecord.Browser.ControlInterface.Document, HTMLDocumentEvents2);
4303 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4304 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4307 if GetActiveContent <> nil then begin
4308 if FEvent <> nil then
4310 FEvent := THTMLDocumentEventSink.Create(Self, Browser.ControlInterface.Document, HTMLDocumentEvents2);
4311 FEvent.OnContextMenu := OnDocumentContextMenu;
4312 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4314 if FEvent <> nil then begin
4322 if (BrowserRecord <> nil) and
4323 Assigned( BrowserRecord.Thread ) then begin
4324 threadItem := BrowserRecord.Thread;
4326 if (threadItem.JumpAddress > 0) then begin
4327 if threadItem.UnRead then begin
4328 threadItem.UnRead := False;
4330 RefreshListView(threadItem);
4332 //
\83X
\83N
\83\8d\81[
\83\8b\90æ
\82ª
\8eæ
\93¾
\8aO
\82Ì
\83\8c\83X
\82Ì
\8e\9e\82Í
\8fI
\92[
\82É
\88Ú
\93®
4333 //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4334 if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4335 BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4336 threadItem.JumpAddress := 0;
4338 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4341 end else if threadItem.UnRead then begin
4342 threadItem.UnRead := False;
4344 BrowserRecord.Move('new');
4345 RefreshListView(threadItem);
4346 end else if threadItem.ScrollTop <> 0 then begin
4348 doc := BrowserRecord.Browser.ControlInterface.Document as IHTMLDocument2;
4349 (doc.body as IHTMLElement2).ScrollTop := threadItem.ScrollTop;
4352 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4357 LockWindowUpdate(0);
4360 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4362 AddRoundNameMenu(RoundNamePopupMenu.Items);
4365 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4371 Item := TMenuItem.Create(Self);
4372 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4373 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4375 Item := TMenuItem.Create(Self);
4376 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4377 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4379 Item := TMenuItem.Create(Self);
4380 Item.Caption := '-';
4382 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4383 Item := TMenuItem.Create(Self);
4384 Item.Caption := RoundList.RoundNameList[i];
4385 Item.OnClick := SetSelectRoundName;
4390 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4392 threadItem : TThreadItem;
4394 if ParentName <> 'dummy1' then begin
4395 SetSelectItemRound(RoundFlag, RoundName);
4397 threadItem := GetActiveContent;
4398 if threadItem <> nil then begin
4399 threadItem.RoundName := RoundName;
4401 RoundList.RoundNameList.Add(RoundName);
4402 threadItem.Round := RoundFlag;
4407 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4412 List := TList.Create;
4414 SelectListItem(List);
4415 for i := 0 to List.Count - 1 do begin
4416 if TObject(List[i]) is TBoard then begin
4417 TBoard(List[i]).RoundName := RoundName;
4419 RoundList.RoundNameList.Add(RoundName);
4420 TBoard(List[i]).Round := RoundFlag;
4421 end else if TObject(List[i]) is TThreadItem then begin
4422 if TThreadItem(List[i]).IsLogFile then begin
4423 TThreadItem(List[i]).RoundName := RoundName;
4425 RoundList.RoundNameList.Add(RoundName);
4426 TThreadItem(List[i]).Round := RoundFlag;
4435 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4437 MenuItem: TMenuItem;
4439 if Sender is TMenuItem then begin
4440 MenuItem := TMenuItem(Sender);
4441 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4446 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4451 if CoolBar = nil then
4453 for i := 0 to CoolBar.Bands.Count - 1 do begin
4454 if CoolBar.Bands[i].Control = Control then begin
4455 Result := CoolBar.Bands[i];
4461 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4463 if BrowserTab.Parent = BrowserTabToolBar then
4464 BrowserTab.Width := BrowserTabToolBar.Width;
4467 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4472 procedure TGikoForm.SetMenuFont;
4474 // GikoSys.MenuFont(MenuToolBar.Font);
4475 // MenuToolBar.Buttons[0].AutoSize := False;
4476 // MenuToolBar.Buttons[0].AutoSize := True;
4477 // MenuToolBar.Font.Color := clMenuText;
4478 GikoSys.MenuFont(MainCoolBar.Font);
4479 MenuToolBar.Buttons[0].AutoSize := False;
4480 MenuToolBar.Buttons[0].AutoSize := True;
4481 MainCoolBar.AutoSize := False;
4482 MainCoolBar.AutoSize := True;
4483 GikoSys.MenuFont(ListCoolBar.Font);
4484 GikoSys.MenuFont(BrowserCoolBar.Font);
4485 // MenuToolBar.Font.Color := clMenuText;
4488 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4492 if FavoriteDM.Modified then begin
4495 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4496 NewMenu := TMenuItem.Create(MainMenu);
4497 NewMenu.Action := GikoDM.FavoriteAddAction;
4498 FavoriteMenu.Add(NewMenu);
4499 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4500 NewMenu := TMenuItem.Create(FavoriteMenu);
4501 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4502 FavoriteMenu.Add(NewMenu);
4503 //
\83Z
\83p
\83\8c\81[
\83^
4504 FavoriteMenu.InsertNewLineAfter(NewMenu);
4505 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4506 FavoriteDM.Modified := false;
4510 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4513 NewMenu: array of TMenuItem;
4515 SetLength(NewMenu, Node.Count);
4516 Node := Node.getFirstChild;
4518 while ( Node <> nil ) do begin
4519 NewMenu[i] := TFavoriteMenuItem.Create(nil);
4520 NewMenu[i].AutoHotkeys := maAutomatic;
4521 NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4522 TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4524 if TObject(Node.Data) is TFavoriteFolder then begin
4525 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4526 CreateFavMenu(Node, NewMenu[i]);
4527 end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4528 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4529 NewMenu[i].OnClick := FavoriteClick;
4530 end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4531 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4532 NewMenu[i].OnClick := FavoriteClick;
4535 Node := Node.getNextSibling;
4537 MenuItem.Add(NewMenu);
4540 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4542 MsgAdd : String = '
\8aù
\82É
\82¨
\8bC
\82É
\93ü
\82è
\82É
\93o
\98^
\82³
\82ê
\82Ä
\82¢
\82Ü
\82·
\81B
\82»
\82ê
\82Å
\82à
\92Ç
\89Á
\82µ
\82Ü
\82·
\82©
\81H';
4543 TitleAdd: String = '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á';
4545 Dlg : TFavoriteAddDialog;
4551 if Item is TFavoriteBoardItem then
4552 Item := TFavoriteBoardItem( Item ).Item
4553 else if Item is TFavoriteThreadItem then
4554 Item := TFavoriteThreadItem( Item ).Item;
4556 Node := FavoriteTreeView.Items.GetFirstNode;
4557 if Item is TBoard then begin
4558 ItemURL := TBoard( Item ).URL;
4559 while Node <> nil do begin
4561 if TObject( Data ) is TFavoriteBoardItem then begin
4562 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4563 if Application.MessageBox(PChar(MsgAdd) , PChar(TitleAdd), MB_YESNO ) = IDNO then
4568 Node := Node.GetNext;
4570 Dlg := TFavoriteAddDialog.Create(Self);
4572 Dlg.SetBoard( TBoard( Item ) );
4577 end else if Item is TThreadItem then begin
4578 ItemURL := TThreadItem( Item ).URL;
4579 while Node <> nil do begin
4581 if TObject( Data ) is TFavoriteThreadItem then begin
4582 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
4583 if Application.MessageBox( PChar(MsgAdd), PChar(TitleAdd), MB_YESNO ) = IDNO then
4588 Node := Node.GetNext;
4590 Dlg := TFavoriteAddDialog.Create(Self);
4592 Dlg.SetThreadItem( TThreadItem( Item ) );
4602 procedure TGikoForm.FavoriteClick(Sender: TObject);
4604 FavoriteClick( Sender, True );
4607 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4610 ThreadItem: TThreadItem;
4611 FavBoard: TFavoriteBoardItem;
4612 FavThread: TFavoriteThreadItem;
4616 if Sender is TFavoriteMenuItem then
4617 Item := TFavoriteMenuItem(Sender).Data
4618 else if Sender is TLinkToolButton then
4619 Item := TLinkToolButton(Sender).Data
4620 else if Sender is TTreeNode then
4621 Item := TTreeNode( Sender ).Data
4625 if TObject(Item) is TFavoriteBoardItem then begin
4626 FavBoard := TFavoriteBoardItem(Item);
4627 Board := FavBoard.Item;
4628 if Board <> nil then begin
4629 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4630 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4631 SelectTreeNode(Board, True);
4633 end else if TObject(Item) is TFavoriteThreadItem then begin
4634 FavThread := TFavoriteThreadItem(Item);
4635 ThreadItem := FavThread.Item;
4636 if ThreadItem = nil then
4639 InsertBrowserTab(ThreadItem, ActiveTab);
4641 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4642 if GikoSys.Setting.ListWidthState = glsMin then begin
4643 GikoDM.BrowserMaxAndFocusAction.Execute;
4646 if GikoSys.Setting.ListHeightState = glsMin then begin
4647 GikoDM.BrowserMaxAndFocusAction.Execute;
4653 procedure TGikoForm.BBSMenuItemOnClick(
4658 if Sender is TBBSMenuItem then
4659 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4663 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4665 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4668 //!
\8ew
\92è
\82³
\82ê
\82½
\83X
\83\8c\83b
\83h
\82ð
\8aJ
\82(
\83\8d\83O
\82ª
\96³
\82¢
\82Æ
\82« or
\8ew
\92èJUMP
\82Ü
\82Å
\91«
\82è
\82È
\82¢
\82Æ
\82«
\82ÍDL
\82·
\82é)
4669 procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4671 stRes, edRes : Int64;
4672 browserRec : TBrowserRecord;
4673 threadNumber : String;
4674 doc : IHTMLDocument2;
4678 Thread.JumpAddress := 0;
4679 //
\83^
\83u
\82ð
\90¶
\90¬
4680 browserRec := InsertBrowserTab(Thread);
4681 if (browserRec <> nil) then begin
4682 // JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N
\82·
\82é
4683 threadNumber := ChangeFileExt(Thread.FileName, '');
4684 GikoSys.GetPopupResNumber( URL, stRes, edRes );
4685 //
\83X
\83\8c\82Ì
\94Ô
\8d\86\82ð
\83\8c\83X
\94Ô
\82Æ
\8cë
\82Á
\82Ä
\94F
\8e¯
\82µ
\82Ä
\82¢
\82é
\82Ì
\82ð
\83N
\83\8a\83A
4686 if (StrToInt64(threadNumber) = stRes) then begin
4687 if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4688 and (Pos('&st=' + threadNumber , URL) = 0) then begin
4692 if ( stRes > 0 ) then begin
4693 Thread.JumpAddress := stRes;
4695 //
\83\8d\83O
\82ð
\8e\9d\82Á
\82Ä
\82¢
\82È
\82¢
\82© JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82Ü
\82Å
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\82ÍDL
\82·
\82é
4696 if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4697 DownloadContent(Thread);
4698 end else if (not browserRec.Repaint) and (stRes > 0) then begin
4699 browserRec.Move(IntToStr(stRes));
4700 Thread.JumpAddress := 0;
4702 doc := browserRec.Browser.ControlInterface.Document as IHTMLDocument2;
4703 if Assigned(doc) then
4704 Thread.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
4711 procedure TGikoForm.MoveToURL(const inURL: string; KeyMask: Boolean = False);
4713 protocol, host, path, document, port, bookmark : string;
4714 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4716 BBSID, BBSKey: string;
4717 {tmpBoard,} Board: TBoard;
4718 ThreadItem: TThreadItem;
4721 tmpThread : TThreadItem;
4722 shiftDown : Boolean;
4726 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4727 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4728 //
\83A
\83N
\83V
\83\87\83\93\82©
\82ç
\8cÄ
\82Î
\82ê
\82é
\82Æshift/ctrl
\82Í
\82¨
\82µ
\82Á
\82Ï
\82Ì
\8fê
\8d\87\82ª
\82Ù
\82Æ
\82ñ
\82Ç
\82È
\82Ì
\82Å
\83}
\83X
\83N
\82·
\82é
4729 if not KeyMask then begin
4730 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4731 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4732 if shiftDown then begin
4733 GikoSys.OpenBrowser(inURL, gbtUserApp);
4735 end else if ctrlDown then begin
4736 GikoSys.OpenBrowser(inURL, gbtIE);
4741 //=====
\83v
\83\89\83O
\83C
\83\93
4744 bi := Length(BoardGroups) - 1;
4745 for i := 1 to bi do begin
4746 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4747 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4750 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4751 Board := BBSsFindBoardFromURL( boardURL );
4754 if Board = nil then begin
4756 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4757 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4760 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4761 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4762 ShowBBSTree( BBSs[ 1 ] );
4765 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4766 if not Board.IsThreadDatRead then begin
4767 GikoSys.ReadSubjectFile( Board );
4771 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4772 if ThreadItem = nil then begin
4773 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4774 ThreadItem := tmpThread;
4775 Board.Insert( 0, ThreadItem );
4776 if ActiveList is TBoard then begin
4777 if TBoard(ActiveList) = Board then
4778 ListView.Items.Count := ListView.Items.Count + 1;
4783 OpenThreadItem(ThreadItem, inURL);
4790 Board := BBSsFindBoardFromURL(
4791 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4793 if Board <> nil then begin
4794 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4795 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4796 SelectTreeNode( Board, True );
4804 // exception
\82ª
\94
\90¶
\82µ
\82½
\8fê
\8d\87\82Í
\93à
\95\94\8f\88\97\9d\82É
\94C
\82¹
\82½
\82¢
\82Ì
\82Å
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
4808 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4809 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4810 Board := BBSsFindBoardFromURL( boardURL );
4811 if Board = nil then begin
4812 //
\93ü
\82é
\82×
\82«
\94Â
\82ª
\8c©
\82Â
\82©
\82ç
\82È
\82©
\82Á
\82½
\82Ì
\82Å
\81A
\95\81\92Ê
\82Ì
\83u
\83\89\83E
\83U
\82Å
\8aJ
\82
4813 GikoSys.OpenBrowser(inURL, gbtUserApp);
4816 //
\8aO
\95\94\82Ì
\94Â
\82È
\82Ì
\82É2ch
\82ÌURL
\82É
\82³
\82ê
\82Ä
\82µ
\82Ü
\82Á
\82½
\93z
\82ð
\82±
\82±
\82Å
\8am
\94F
\82·
\82é
4818 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4819 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4820 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4821 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4822 GikoSys.OpenBrowser(inURL, gbtUserApp);
4827 if not Board.IsThreadDatRead then
4828 GikoSys.ReadSubjectFile(Board);
4829 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4830 ThreadItem := Board.FindThreadFromURL( URL );
4831 //
\81@
\89ß
\8b\8e\83\8d\83O
\91q
\8cÉ
\82©
\82ç
\81A
\83_
\83E
\83\
\82µ
\82½
\83X
\83\8c\82ª
\94
\8c©
\82Å
\82«
\82È
\82¢
\82Ì
\82Å
\82±
\82±
\82Å
\92T
\82·
\82æ
\82¤
\82É
\82·
\82é (2004/01/22)
4832 if ThreadItem = nil then begin
4833 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4836 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ª
\82È
\82¢
\82È
\82ç
\90¶
\90¬
\82·
\82é
\81B
4837 if ThreadItem = nil then begin
4838 ThreadItem := TThreadItem.Create( nil, Board, URL );
4839 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4840 Board.Insert(0, ThreadItem);
4841 if ActiveList is TBoard then begin
4842 if TBoard(ActiveList) = Board then
4843 ListView.Items.Count := ListView.Items.Count + 1;
4846 //
\83\8d\83O
\82È
\82µ
\83X
\83\8c\83b
\83h
\82Ì
\82Æ
\82«
\82Í
\81A
\83z
\83X
\83g
\96¼
\82Ì
\83`
\83F
\83b
\83N
\82ð
\82·
\82é
4847 if (not ThreadItem.IsLogFile) then begin
4848 if AnsiPos(Host, Board.URL) = 0 then
4849 ThreadItem.DownloadHost := Host
4851 ThreadItem.DownloadHost := '';
4853 OpenThreadItem(ThreadItem, inURL);
4857 Board := BBSsFindBoardFromURL( inURL );
4858 if Board = nil then begin
4859 GikoSys.OpenBrowser(inURL, gbtAuto);
4861 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4862 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4863 SelectTreeNode( Board, True );
4868 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4870 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4871 CoolBarResized( Sender, MainCoolBar );
4874 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4875 Shift: TShiftState);
4877 if Key = VK_RETURN then
4878 GikoDM.MoveToAction.Execute;
4881 procedure TGikoForm.BrowserEnter(Sender: TObject);
4883 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4886 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4888 CDS:PCopyDataStruct;
4892 CDS := Message.CopyDataStruct;
4893 GetMem(PC, CDS^.cbData);
4895 lstrcpy(PC,CDS^.lpData);
4896 SetString(sURL, PC,lstrlen(PC));
4901 Message.Result := 1;
4904 procedure TGikoForm.WndProc(var Message: TMessage);
4906 senderBrowser : TWebBrowser;
4912 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4915 if Message.WParam = SC_MINIMIZE then begin
4917 PostMessage(Handle, USER_MINIMIZED, 0, 0);
4920 TreeClick( TreeView.Selected );
4925 if (GikoSys.Setting.StoredTaskTray) then begin
4932 USER_DOCUMENTCOMPLETE:
4933 if (Message.WParam <> 0) and
4934 (TObject(Message.WParam) is TWebBrowser) then begin
4935 senderBrowser := TWebBrowser( Message.WParam );
4936 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
4939 if (TObject(Message.WParam) is TResPopupBrowser) then begin
4941 TResPopupBrowser( Message.WParam ).Clear;
4944 end else if (TObject(Message.WParam) is TPreviewBrowser) then begin
4945 if FPreviewBrowser <> nil then begin
4946 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
4956 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
4961 //
\83A
\83h
\83\8c\83X
\82à
\82µ
\82
\82Í
\8di
\82è
\8d\9e\82Ý
\83R
\83\93\83{
\83{
\83b
\83N
\83X
\82à
\82µ
\82
\82Í
\82¨
\8bC
\82É
\93ü
\82è
\82ª
\95Ò
\8fW
\92\86\82Í
4962 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
4963 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
4964 if Msg.CharCode in [VK_BACK] then begin
4965 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4966 if Msg.KeyData > 0 then begin
4969 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4973 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
4974 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
4977 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4980 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
4981 if Msg.CharCode in [VK_BACK] then begin
4982 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4983 if Msg.KeyData > 0 then begin
4986 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4989 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
4992 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4996 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
5000 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
5005 PreviewTimer.Enabled := False;
5009 ARect := FPreviewBrowser.GetWindowRect(p);
5011 FPreviewBrowser.PreviewImage(FPreviewURL);
5013 if ARect.Bottom > Screen.DesktopHeight then begin
5014 OffsetRect(ARect, 0, -(ARect.Bottom - Screen.DesktopHeight));
5016 if (ARect.Right > Screen.DesktopWidth) then begin
5017 OffsetRect(ARect, -(ARect.Right - Screen.DesktopWidth), 0);
5019 if (ARect.Left < Screen.DesktopLeft) then begin
5020 OffsetRect(ARect, +(Screen.DesktopLeft - ARect.Left), 0);
5022 if (ARect.Top < Screen.DesktopTop) then begin
5023 OffsetRect(ARect, 0, (Screen.DesktopTop - ARect.Top));
5026 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST,
5027 ARect.Left, ARect.Top,
5028 (ARect.Right - ARect.Left), (ARect.Bottom - ARect.Top),
5029 SWP_NOACTIVATE or SWP_HIDEWINDOW);
5031 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
5032 FPreviewBrowserRect := ARect;
5035 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
5039 if PreviewTimer.Enabled then
5040 PreviewTimer.Enabled := False;
5042 //Window
\8aO
\82É
\88Ú
\93®
\82µ
\82½
\82Æ
\82«
\82Í
\8fÁ
\82¦
\82é
\82æ
\82¤
\82É
\82·
\82é
\82½
\82ß
\95\9c\8a\88
5043 if (FResPopupBrowser <> nil) and (IsWindowVisible(FResPopupBrowser.Handle)) then begin
5044 //
\89E
\83N
\83\8a\83b
\83N
\82Ì
\8e\9e\82Í
\8fÁ
\82³
\82È
\82¢
\82æ
\82¤
\82É
\8fð
\8c\8f\92Ç
\89Á
5045 if (Message.MouseMsg <> WM_RBUTTONUP) then begin
5046 FResPopupBrowser.Clear;
5050 if (FPreviewBrowser <> nil)
5051 and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
5052 //
\82±
\82±
\82Å
\8fÁ
\82³
\82ê
\82é
\82Ì
\82ª
\96â
\91è
5053 //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Å
\95\
\8e¦
\94Í
\88Í
\94»
\92è
\82Å
\82«
\82Ä
\82¢
\82é
\82Í
\82¸
5054 Pos := Mouse.CursorPos;
5055 Pos.X := Pos.X + Left;
5056 Pos.Y := Pos.Y + Top;
5057 if (FPreviewBrowserRect.Left > Pos.X) or
5058 (FPreviewBrowserRect.Right < Pos.X) or
5059 (FPreviewBrowserRect.Top > Pos.Y) or
5060 (FPreviewBrowserRect.Bottom < Pos.Y) then begin
5061 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
5065 Message.Result := 1;
5068 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
5070 GikoDM.MsgBarCloseAction.Execute;
5073 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
5075 doc: IHtmlDocument2;
5076 Range: IHTMLTxtRange;
5079 ThreadItem: TThreadItem;
5082 FactiveContent.IDAnchorPopup('');
5084 doc := FactiveContent.Browser.ControlInterface.Document as IHtmlDocument2;
5085 if not Assigned(doc) then
5088 Range := doc.selection.createRange as IHTMLTxtRange;
5089 if not Assigned(Range) then
5092 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
5093 s := ZenToHan(Trim(s));
5094 if GikoSys.IsNumeric(s) then begin
5095 Num := StrToInt64Def(s, -1);
5096 ThreadItem := GetActiveContent(true);
5097 if (ThreadItem <> nil) and (Num <= ThreadItem.Count)
5098 and (Num > 0)then begin
5099 CreateResPopupBrowser;
5100 FResPopupBrowser.CreateNewBrowser.PopupType := gptThread;
5101 HTMLCreater.SetResPopupText(FResPopupBrowser.CreateNewBrowser, ThreadItem, Num, Num, False, False);
5102 FResPopupBrowser.Popup;
5111 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
5113 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
5114 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
5116 if FTreeType = gttHistory then begin
5117 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
5118 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
5121 TreeView.Items.Clear;
5125 procedure TGikoForm.SetLinkBar;
5129 ToolButton: TLinkToolButton;
5130 MenuItem: TMenuItem;
5131 oldIgnoreResize : TResizeType;
5133 oldIgnoreResize := FIsIgnoreResize;
5134 FIsIgnoreResize := rtResizing;
5135 MainCoolBar.Bands.BeginUpdate;
5137 LinkBarPopupMenu.Items.Clear;
5138 for i := LinkToolBar.ButtonCount - 1 downto 0 do
5139 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
5140 LinkToolBar.Buttons[i].Free;
5141 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5142 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5143 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5144 ToolButton := TLinkToolButton.Create(LinkToolBar);
5145 // ToolButton.Parent := LinkToolBar;
5146 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
5147 MenuItem := TMenuItem.Create(Self);
5148 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
5149 LinkBarPopupMenu.Items.Add(MenuItem);
5150 ToolButton.MenuItem := MenuItem;
5151 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
5152 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
5153 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
5154 ToolButton.OnClick := FavoriteClick;
5155 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
5156 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
5157 ToolButton.OnClick := FavoriteClick;
5159 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
5160 ToolButton.Left := 10000;
5161 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
5162 ToolButton.AutoSize := True;
5163 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
5164 ToolButton.OnDragOver := FavoriteDragOver;
5165 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
5166 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
5167 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
5168 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
5169 //ToolButton.DragMode := dmAutomatic;
5170 ToolButton.DragMode := dmManual;
5171 ToolButton.PopupMenu := FavoriteTreePopupMenu;
5173 LinkToolBar.InsertControl(ToolButton);
5178 { if LinkToolBar.ButtonCount = 0 then begin
5179 ToolButton := TLinkToolButton.Create(LinkToolBar);
5180 ToolButton.Style := tbsButton;
5181 ToolButton.ImageIndex := -1;
5182 ToolButton.Caption := '';
5183 LinkToolBar.InsertControl(ToolButton);
5186 MainCoolBar.Bands.EndUpdate;
5187 LoadCoolBarSettings;
5188 FIsIgnoreResize := oldIgnoreResize;
5192 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5200 if Sender = FavoriteTreeView then begin
5201 Node := FavoriteTreeView.GetNodeAt(X, Y);
5206 bound := Node.DisplayRect( False );
5207 height := bound.Bottom - bound.Top;
5208 if (bound.Top + height / 2) <= Y then
5209 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
5214 if Node.IsFirstNode then
5219 if FDropSpaceNode <> nil then
5220 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
5223 if Change then begin
5224 if FDropSpaceNode <> nil then
5225 FDropSpaceNode.Free;
5227 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
5228 FDropSpaceNode.MoveTo( Node, naInsert );
5229 FDropSpaceNode.ImageIndex := -1;
5230 FDropSpaceNode.SelectedIndex := -1;
5234 if Source = FavoriteTreeView then begin
5235 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
5240 end else if Source = BrowserTab then
5242 else if Source = ListView then
5244 else if Source is TLinkToolButton then
5246 else if Source = TreeView then
5252 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5255 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
5258 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
5260 // FDragging := true;
5263 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
5265 SenderNode: TTreeNode;
5266 LinkToolButton: TLinkToolButton;
5269 LinkToolButton := TLinkToolButton( Sender );
5270 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5271 SenderNode.Selected := False;
5272 FavoriteDragDrop( SenderNode, Source );
5278 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5280 favButton : TLinkToolButton;
5281 favThreadItem : TFavoriteThreadItem;
5287 if Sender is TLinkToolButton then begin
5288 favButton := TLinkToolButton( Sender );
5289 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5290 favThreadItem := TFavoriteThreadItem( favButton.Data );
5291 if favThreadItem.Item <> nil then
5292 InsertBrowserTab( favThreadItem.Item, False );
5300 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5304 TToolButton( Sender ).DragMode := dmManual;
5305 if ssLeft in Shift then begin
5306 // TToolButton( Sender ).Down := true; //
\83\8a\83\93\83N
\83c
\81[
\83\8b\83o
\81[
\82Ì
\8b\93\93®
\95s
\90R
\82Ì
\8c´
\88ö
\82Ì
\82æ
\82¤
\82È
\82Ì
\82Å
\83R
\83\81\83\93\83g
\83A
\83E
\83g
\82µ
\82½(2003-dec-02)
5307 if FDragTime = 0 then begin
5308 FDragTime := GetTickCount();
5310 Now := GetTickCount();
5311 if (Now - FDragTime) > 500 then begin
5312 if FDragButton <> TToolButton( Sender ) then begin
5314 FDragButton := TToolButton( Sender );
5315 TToolButton(Sender).BeginDrag(false ,5);
5318 {$IF Defined(debug)}
5319 ShowMessage('Error');
5330 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5335 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5340 for i := 0 to ToolBar.ButtonCount - 1 do
5341 if ToolBar.Buttons[i].Visible then
5342 Result := Result + ToolBar.Buttons[i].Width;
5345 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5347 Control : TWinControl;
5350 Control := FindControl(BandInfo^.hwndChild);
5351 if Control = nil then
5354 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5355 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5356 idx := MainCoolBar.Bands[ i ].ID;
5360 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5361 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
5362 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5363 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5364 BandInfo^.cxMinChild := 0;
5365 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
5366 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5367 end else if Control = LinkToolBar then begin
5368 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5369 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5370 BandInfo^.cxMinChild := 0;
5371 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5372 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5373 end else begin // AddressToolBar
5374 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5375 BandInfo^.cxMinChild := 0;
5376 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5380 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5386 ChevronPopupMenu.Items.Clear;
5388 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5389 if MainCoolBar.Bands[ i ].Visible then begin
5390 if Idx = Int64(RebarChevron^.uBand) then begin
5397 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5398 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5400 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5401 ToolBarChevronMenu(StdToolBar);
5402 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5406 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5407 ChevronPopupMenu.Popup(p.x, p.y);
5411 procedure TGikoForm.MenuBarChevronMenu;
5412 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5418 for i := 0 to MenuItem.Count - 1 do begin
5420 if MenuItem[i] is TFavoriteMenuItem then begin
5421 Item := TFavoriteMenuItem.Create(Self);
5422 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5424 Item := TMenuItem.Create(Self);
5425 Item.Caption := MenuItem[i].Caption;
5426 Item.Action := MenuItem[i].Action;
5427 Item.ImageIndex := MenuItem[i].ImageIndex;
5428 Item.OnClick := MenuItem[i].OnClick;
5429 PopupItem.Add(Item);
5430 if MenuItem[i].Count > 0 then
5431 SetSubMenu(MenuItem[i], Item);
5440 ChevronPopupMenu.Items.Clear;
5441 ChevronPopupMenu.Images := MainMenu.Images;
5442 bw := GetWidthAllToolButton(MenuToolBar);
5443 if MenuToolBar.Width < bw then begin
5445 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5446 w := w + MenuToolBar.Buttons[i].Width;
5447 if MenuToolBar.Width <= w then begin
5448 Item := TMenuItem.Create(Self);
5449 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5450 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5451 ChevronPopupMenu.Items.Add(Item);
5452 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5458 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5459 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5464 if Assigned(PopupMenu.OnPopup) then
5465 PopupMenu.OnPopup(nil);
5466 for i := 0 to PopupMenu.Items.Count - 1 do begin
5468 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5469 Item := TFavoriteMenuItem.Create(Self);
5470 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5472 Item := TMenuItem.Create(Self);
5473 Item.Caption := PopupMenu.Items[i].Caption;
5474 Item.Action := PopupMenu.Items[i].Action;
5475 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5476 Item.OnClick := PopupMenu.Items[i].OnClick;
5477 PopupItem.Add(Item);
5486 ChevronPopupMenu.Items.Clear;
5487 ChevronPopupMenu.Images := ToolBar.HotImages;
5488 bw := GetWidthAllToolButton(ToolBar);
5489 if ToolBar.Width < bw then begin
5491 for i := 0 to ToolBar.ButtonCount - 1 do begin
5492 if ToolBar.Buttons[i].Visible then
5493 w := w + ToolBar.Buttons[i].Width;
5494 if ToolBar.Width <= w then begin
5495 if ToolBar.Buttons[i].Tag = 0 then begin
5496 Item := TMenuItem.Create(Self);
5497 if ToolBar.Buttons[i].Style = tbsSeparator then
5500 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5501 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5504 Item.Caption := ToolBar.Buttons[i].Caption;
5505 Item.Action := ToolBar.Buttons[i].Action;
5507 //Item.Visible := True;
5509 ChevronPopupMenu.Items.Add(Item);
5510 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5512 Item.OnClick := nil;
5513 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5521 procedure TGikoForm.LinkBarChevronMenu;
5526 Item: TFavoriteMenuItem;
5528 Button: TLinkToolButton;
5530 ChevronPopupMenu.Items.Clear;
5531 ChevronPopupMenu.Images := LinkToolBar.Images;
5532 bw := GetWidthAllToolButton(LinkToolBar);
5533 if LinkToolBar.Width < bw then begin
5535 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5536 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5537 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5538 w := w + LinkToolBar.Buttons[j].Width;
5539 if LinkToolBar.Width <= w then begin
5540 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5541 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5542 Item := TFavoriteMenuItem.Create(Self);
5543 if TObject(Button.Data) is TFavoriteFolder then begin
5544 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5545 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5546 Item.OnClick := FavoriteClick;
5547 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5548 Item.OnClick := FavoriteClick;
5550 Item.Data := Button.Data;
5551 Item.Caption := LinkToolBar.Buttons[j].Caption;
5552 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5553 ChevronPopupMenu.Items.Add(Item);
5564 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5565 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5566 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5568 \93Æ
\8e©
\82É
\83o
\83\93\83h
\82É
\94z
\92u
\82³
\82ê
\82Ä
\82¢
\82é
\83R
\83\93\83g
\83\8d\81[
\83\8b\82Ì
\83T
\83C
\83Y
\82ð
\95Ï
\8dX
\82µ
\82½
\8fê
\8d\87\82É
5569 \83V
\83F
\83u
\83\8d\83\93\82Ì
\95\
\8e¦
\88Ê
\92u
\82ð
\8dÄ
\90Ý
\92è
\82·
\82é
\82½
\82ß
\82É
\8eg
\97p
\82µ
\82Ü
\82·
\81B
5571 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5573 bandInfo : tagREBARBANDINFOA;
5574 pBandInfo : PReBarBandInfoA;
5581 pBandInfo := @bandInfo;
5582 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5583 bandInfo.cbSize := sizeof( bandInfo );
5584 bandInfo.hwndChild := h;
5585 bandInfo.cyMinChild := bar.Height;
5586 bar.OnBandInfo( nil, pBandInfo );
5587 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5589 for i := bar.Bands.Count - 1 downto 0 do begin
5590 if bar.Bands[ i ].Control.Handle = h then begin
5596 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5600 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5602 Control: TWinControl;
5605 Control := FindControl(BandInfo^.hwndChild);
5606 if Control = nil then
5609 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5610 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5611 idx := ListCoolBar.Bands[ i ].ID;
5615 if Control = ListToolBar then begin
5616 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5617 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5618 BandInfo^.cxMinChild := 0;
5619 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5620 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5622 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5623 BandInfo^.cxMinChild := 0;
5624 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5628 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5633 ChevronPopupMenu.Items.Clear;
5634 Idx := RebarChevron^.uBand;
5635 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5636 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5637 ToolBarChevronMenu(ListToolBar);
5640 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5641 ChevronPopupMenu.Popup(p.x, p.y);
5645 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5647 Control: TWinControl;
5650 Control := FindControl(BandInfo^.hwndChild);
5651 if Control = nil then
5654 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5655 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5656 idx := BrowserCoolBar.Bands[ i ].ID;
5660 if Control = BrowserToolBar then begin
5661 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5662 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5663 BandInfo^.cxMinChild := 0;
5664 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5665 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5667 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5668 BandInfo^.cxMinChild := 0;
5669 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5673 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5678 ChevronPopupMenu.Items.Clear;
5679 Idx := RebarChevron^.uBand;
5680 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5681 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5682 ToolBarChevronMenu(BrowserToolBar)
5685 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5686 ChevronPopupMenu.Popup(p.x, p.y);
5690 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5692 if Column^.iImage = -1 then begin
5693 Column^.mask := Column^.mask or LVCF_FMT;
5695 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5696 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5700 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5705 for i := bar.ButtonCount - 1 downto 0 do begin
5706 if bar.Buttons[ i ].Action = action then begin
5707 Result := bar.Buttons[ i ];
5713 procedure TGikoForm.SetToolBarPopup;
5716 aIEButton : TToolButton;
5717 aCabinetBBSButton : TToolButton;
5718 aResRangeButton : TToolButton;
5719 aThreadRangeButton: TToolButton;
5721 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5723 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5724 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5725 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5726 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5727 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5729 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5730 if aIEButton <> nil then
5731 aIEButton.DropdownMenu := BrowserPopupMenu;
5732 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5733 if aCabinetBBSButton <> nil then
5734 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5735 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5736 if aResRangeButton <> nil then
5737 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5738 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5739 if aThreadRangeButton <> nil then
5740 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5743 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5744 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5748 // browserPos : TPoint;
5752 Wnd := WindowFromPoint(Mouse.CursorPos);
5754 if WheelDelta > 0 then
5759 if (Wnd = BrowserTab.Handle) or
5760 (Wnd = BrowserTab.Parent.Handle) then begin
5761 BrowserTab.ScrollTabs(Delta);
5763 if FIsHandledWheel then begin
5764 FIsHandledWheel := False;
5767 FIsHandledWheel := True;
5768 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5769 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5771 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5779 procedure TGikoForm.SetSelectWord( const text : string );
5781 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5782 ClearThreadRengeAction;
5784 if Length( text ) = 0 then
5786 GikoDM.AllItemAction.Checked := True;
5787 SetListViewType( gvtAll )
5789 SetListViewType( gvtUser, text, false );
5793 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5796 SetSelectWord( SelectComboBox.Text );
5800 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5801 Shift: TShiftState);
5809 if Key = VK_Return then
5812 end else if Key = 229 then begin
5813 if GikoSys.Setting.UseUndecided then begin
5814 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5815 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5816 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5817 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5818 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5819 SetLength(Str, Len);
5820 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5821 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5822 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5824 Str := SelectComboBox.Text + Str;
5826 if (Length(Str) > 0) then begin
5830 end else if (Key = Windows.VK_DELETE) and (ssCtrl in Shift) then begin
5831 // Ctrl + DEL
\82Å
\8dí
\8f\9c\82·
\82é
5832 Str := SelectComboBox.Text;
5833 idx := GikoSys.Setting.SelectTextList.IndexOf( Str );
5834 if idx <> -1 then begin
5835 GikoSys.Setting.SelectTextList.Delete( idx );
5837 idx := SelectComboBox.Items.IndexOf( Str );
5838 if idx <> -1 then begin
5839 SelectComboBox.Items.Delete( idx );
5841 SelectComboBox.Text := '';
5842 //
\8di
\8d\9e\82Ý
\82ð
\89ð
\8f\9c\82·
\82é
\82½
\82ß
\82É
\95Ï
\8dX
\83C
\83x
\83\93\83g
\82ð
\8cÄ
\82Ñ
\8fo
\82·
5843 SelectComboBox.OnChange(Sender);
5844 end else if Length( SelectComboBox.Text ) = 0 then
5846 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5847 *
\8bó
\82Ì
\82Æ
\82«
\82ÉDel
\83L
\81[
\82ð
\89\9f\82µ
\82½
\82Æ
\82©
\82È
\82Ì
\82Å
\81A
\83X
\83\8c\82Ì
\8di
\8d\9e\82Ý
\82ð
\88Û
\8e\9d\82·
\82é
\81B
5848 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5851 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5852 ClearThreadRengeAction;
5856 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
5857 procedure TGikoForm.ClearThreadRengeAction;
5859 //
\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é
5860 if GikoDM.AllItemAction.Checked then
5861 GikoDM.AllItemAction.Checked := False;
5862 if GikoDM.LogItemAction.Checked then
5863 GikoDM.LogItemAction.Checked := False;
5864 if GikoDM.NewItemAction.Checked then
5865 GikoDM.NewItemaction.Checked := False;
5866 if GikoDM.LiveItemAction.Checked then
5867 GikoDM.LiveItemAction.Checked := False;
5868 if GikoDM.ArchiveItemAction.Checked then
5869 GikoDM.ArchiveItemAction.Checked := False;
5873 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5878 if Length( SelectComboBox.Text ) = 0 then
5880 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5881 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5886 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5887 procedure TGikoForm.ModifySelectList;
5894 if not SelectComboBoxPanel.Visible then
5897 if Length( SelectComboBox.Text ) > 0 then
5899 oldText := SelectComboBox.Text;
5900 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5902 GikoSys.Setting.SelectTextList.Delete( idx );
5903 idx := SelectComboBox.Items.IndexOf( oldText );
5905 SelectComboBox.Items.Delete( idx );
5906 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5907 SelectComboBox.Items.Insert( 0, oldText );
5908 SelectComboBox.Text := oldText;
5916 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5917 Shift: TShiftState; X, Y: Integer);
5922 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5925 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5926 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5927 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5929 If w <= 50 Then Begin
5930 //
\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
5931 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
5932 pos.X := pos.X + (50 - w);
5934 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
5938 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
5939 //If SelectComboBox.Width <> w Then Begin
5940 If SelectComboBoxPanel.Width <> w Then Begin
5941 SelectComboBoxPanel.Width := w;
5942 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
5943 GikoSys.Setting.SelectComboBoxWidth := w;
5944 DraggingSelectComboBoxPosition := pos;
5946 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
5947 ResetBandInfo( ListCoolBar, ListToolBar );
5953 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
5954 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5958 IsDraggingSelectComboBox := True;
5961 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
5965 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
5966 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5968 IsDraggingSelectComboBox := False;
5972 procedure TGikoForm.StatusBarResize(Sender: TObject);
5974 StatusBar.Panels[1].Width := StatusBar.Width -
5975 StatusBar.Panels[0].Width -
5976 StatusBar.Panels[THREADSIZE_PANEL].Width -
5977 StatusBar.Panels[NGWORDNAME_PANEL].Width;
5979 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
5982 if (Length( SelectComboBox.Text ) = 0) or
5983 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
5985 SelectComboBox.Text := '';
5986 SelectComboBox.Color := clWindow;
5991 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
5994 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
5997 if TObject(SenderNode.Data) is TFavoriteFolder then
5998 SourceNode.MoveTo(SenderNode, naAddChild)
6000 SourceNode.MoveTo(SenderNode, naInsert);
6004 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
6008 FavoBoardItem: TFavoriteBoardItem;
6009 FavoThreadItem: TFavoriteThreadItem;
6011 ThreadItem: TThreadItem;
6014 if (SenderNode = nil) or (Source = nil) then
6017 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
6018 FavNode := SenderNode.Parent
6020 FavNode := SenderNode;
6024 if Source is TBoard then begin
6025 Board := TBoard( Source );
6026 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
6027 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
6028 Node.ImageIndex := 15;
6029 Node.SelectedIndex := 15;
6030 end else if Source is TFavoriteBoardItem then begin
6031 FavoBoardItem := TFavoriteBoardItem( Source );
6032 Board := FavoBoardItem.Item;
6033 if Board <> nil then
6034 if not Board.IsThreadDatRead then
6035 GikoSys.ReadSubjectFile(Board);
6036 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
6037 Node.ImageIndex := 15;
6038 Node.SelectedIndex := 15;
6039 end else if Source is TThreadItem then begin
6040 ThreadItem := TThreadItem( Source );
6041 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
6042 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
6043 Node.ImageIndex := 16;
6044 Node.SelectedIndex := 16;
6045 end else if Source is TBrowserRecord then begin
6046 ThreadItem := TBrowserRecord( Source ).Thread;
6047 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
6048 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
6049 Node.ImageIndex := 16;
6050 Node.SelectedIndex := 16;
6051 end else if Source is TFavoriteThreadItem then begin
6052 FavoThreadItem := TFavoriteThreadItem( Source );
6053 ThreadItem := FavoThreadItem.Item;
6054 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
6055 Node.ImageIndex := 16;
6056 Node.SelectedIndex := 16;
6059 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
6061 FavoriteMoveTo( SenderNode, Node );
6065 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
6068 SourceNode: TTreeNode;
6069 LinkToolButton: TLinkToolButton;
6072 if SenderNode = nil then
6075 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
6076 if FDropSpaceNode <> nil then
6077 SenderNode := FDropSpaceNode;
6079 if Source = FavoriteTreeView then begin
6080 SourceNode := FavoriteTreeView.Selected;
6081 FavoriteMoveTo( SenderNode, SourceNode );
6082 end else if Source is TLinkToolButton then begin
6083 LinkToolButton := TLinkToolButton( Source );
6084 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
6085 FavoriteMoveTo( SenderNode, SourceNode );
6086 end else if Source = BrowserTab then begin
6087 idx := BrowserTab.TabIndex;
6088 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
6089 end else if Source = ListView then begin
6090 FavoriteAddTo( SenderNode, ListView.Selected.Data );
6091 end else if Source = TreeView then begin
6092 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
6096 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
6099 SenderNode: TTreeNode;
6102 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
6103 if SenderNode <> nil then begin
6104 FavoriteDragDrop( SenderNode, Source );
6107 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
6108 if FDropSpaceNode <> nil then begin
6110 FDropSpaceNode.Delete;
6112 FDropSpaceNode := nil;
6115 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6116 FavoriteDM.Modified := true;
6122 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
6123 Node: TTreeNode; var S: String);
6125 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6126 FavoriteDM.Modified := true;
6128 FavoriteTreeView.ReadOnly := True;
6133 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
6134 Shift: TShiftState);
6136 if not TTreeView(Sender).IsEditing then begin
6140 FClickNode := FavoriteTreeView.Selected;
6141 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
6145 FClickNode := FavoriteTreeView.Selected;
6146 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
6150 FavoriteClick( FavoriteTreeView.Selected );
6151 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
6155 FClickNode := FavoriteTreeView.Selected;
6156 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
6160 //
\95Ò
\8fW
\92\86\82ÉESC
\82ð
\89\9f\82µ
\82½
\82ç
\81A
\95Ò
\8fW
\82ð
\8fI
\97¹
\82µ
\82Ä
\81A
\8c³
\82Ì
\95¶
\8e\9a\97ñ
\82É
\96ß
\82·
6161 if Key = VK_ESCAPE then begin
6162 if (TTreeView(Sender).Selected <> nil) then begin
6163 TTreeView(Sender).Selected.Text := FOrigenCaption;
6165 TTreeView(Sender).Selected.Focused := False;
6171 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
6174 LinkToolButton: TLinkToolButton;
6177 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
6179 FClickNode := FavoriteTreeView.Selected;
6181 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
6183 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
6184 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6185 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6186 FClickNode := FavoriteTreeView.Items[i];
6190 for i := 0 to FClickNode.Count - 1 do begin
6191 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
6192 FClickNode := FClickNode.Item[i];
6199 if FClickNode = nil then begin
6200 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6201 FavoriteTreeDeletePopupMenu.Visible := False;
6202 FavoriteTreeRenamePopupMenu.Visible := False;
6203 FavoriteTreeNewFolderPopupMenu.Visible := False;
6204 FavoriteTreeURLCopyPopupMenu.Visible := False;
6205 FavoriteTreeNameCopyPopupMenu.Visible := False;
6206 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6207 FavoriteTreeReloadPopupMenu.Visible := False;
6208 FavoriteTreeLogDeletePopupMenu.Visible := False;
6209 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6210 end else if FClickNode.IsFirstNode then begin
6211 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6212 FavoriteTreeDeletePopupMenu.Visible := False;
6213 FavoriteTreeRenamePopupMenu.Visible := False;
6214 FavoriteTreeNewFolderPopupMenu.Visible := True;
6215 FavoriteTreeURLCopyPopupMenu.Visible := False;
6216 FavoriteTreeNameCopyPopupMenu.Visible := False;
6217 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6218 FavoriteTreeReloadPopupMenu.Visible := False;
6219 FavoriteTreeLogDeletePopupMenu.Visible := False;
6220 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6221 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
6222 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6223 FavoriteTreeDeletePopupMenu.Visible := True;
6224 FavoriteTreeRenamePopupMenu.Visible := False;
6225 FavoriteTreeNewFolderPopupMenu.Visible := True;
6226 FavoriteTreeURLCopyPopupMenu.Visible := False;
6227 FavoriteTreeNameCopyPopupMenu.Visible := False;
6228 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6229 FavoriteTreeReloadPopupMenu.Visible := False;
6230 FavoriteTreeLogDeletePopupMenu.Visible := False;
6231 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6232 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
6233 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6234 FavoriteTreeDeletePopupMenu.Visible := True;
6235 FavoriteTreeRenamePopupMenu.Visible := True;
6236 FavoriteTreeNewFolderPopupMenu.Visible := True;
6237 FavoriteTreeURLCopyPopupMenu.Visible := False;
6238 FavoriteTreeNameCopyPopupMenu.Visible := True;
6239 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6240 FavoriteTreeReloadPopupMenu.Visible := False;
6241 FavoriteTreeLogDeletePopupMenu.Visible := False;
6242 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6243 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
6244 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6245 FavoriteTreeDeletePopupMenu.Visible := True;
6246 FavoriteTreeRenamePopupMenu.Visible := True;
6247 FavoriteTreeNewFolderPopupMenu.Visible := True;
6248 FavoriteTreeURLCopyPopupMenu.Visible := True;
6249 FavoriteTreeNameCopyPopupMenu.Visible := True;
6250 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6251 FavoriteTreeReloadPopupMenu.Visible := True;
6252 FavoriteTreeLogDeletePopupMenu.Visible := True;
6253 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6254 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
6255 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6256 FavoriteTreeDeletePopupMenu.Visible := True;
6257 FavoriteTreeRenamePopupMenu.Visible := True;
6258 FavoriteTreeNewFolderPopupMenu.Visible := True;
6259 FavoriteTreeURLCopyPopupMenu.Visible := True;
6260 FavoriteTreeNameCopyPopupMenu.Visible := True;
6261 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6262 FavoriteTreeReloadPopupMenu.Visible := True;
6263 FavoriteTreeLogDeletePopupMenu.Visible := False;
6264 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6266 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6267 FavoriteTreeDeletePopupMenu.Visible := False;
6268 FavoriteTreeRenamePopupMenu.Visible := False;
6269 FavoriteTreeNewFolderPopupMenu.Visible := False;
6270 FavoriteTreeURLCopyPopupMenu.Visible := False;
6271 FavoriteTreeNameCopyPopupMenu.Visible := False;
6272 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6273 FavoriteTreeReloadPopupMenu.Visible := False;
6274 FavoriteTreeLogDeletePopupMenu.Visible := False;
6275 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6280 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
6285 if not (TObject(node.Data) is TFavoriteFolder) then
6288 for i := 0 to node.Count - 1 do
6290 if TObject(node.Item[i].Data) is TFavoriteFolder then
6291 FavoriteBrowseFolder( node.Item[i] )
6292 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
6293 FavoriteClick( node.Item[i], False );
6297 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6303 for i := 0 to Node.Count - 1 do begin
6304 if Node.Item[i].Data = FindPointer then begin
6305 Result := Node.Item[i];
6307 end else if Node.Item[i].Count > 0 then begin
6308 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6309 if Found <> nil then begin
6320 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6324 SenderNode: TTreeNode;
6328 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6329 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6330 SenderNode := FavoriteTreeView.Items[i];
6334 SenderNode.Selected := False;
6336 FavoriteDragDrop( SenderNode, Source );
6341 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6342 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6344 if FDragWFirst = true then
6345 FDragWFirst := false;
6347 //
\83}
\83E
\83X
\82Ì
\92\86\83{
\83^
\83\93\82Å
\95Â
\82¶
\82½
\82Æ
\82«
\82É
\8dÅ
\91å
\89»
\82µ
\82Ä
\82µ
\82Ü
\82¤
\82Ì
\82ð
\96h
\82®
\81@
6348 if Button <> mbMiddle then begin
6349 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6350 if GikoSys.Setting.ListWidthState = glsMin then begin
6351 GikoDM.BrowserMaxAndFocusAction.Execute;
6354 if GikoSys.Setting.ListHeightState = glsMin then begin
6355 GikoDM.BrowserMaxAndFocusAction.Execute;
6361 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6362 Y: Integer; State: TDragState; var Accept: Boolean);
6365 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6369 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6373 if FDropSpaceNode <> nil then begin
6375 FDropSpaceNode.Delete;
6377 FDropSpaceNode := nil;
6379 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6380 FavoriteDM.Modified := true;
6386 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6388 if FListViewBackGroundColor <> value then begin
6389 FListViewBackGroundColor := value;
6390 ListView.Color := FListViewBackGroundColor;
6393 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6395 threadItem : TThreadItem;
6399 if FClickNode = nil then Exit;
6401 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6403 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6404 if threadItem = nil then
6406 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6408 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6410 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6411 if boardItem = nil then
6413 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6419 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6420 MousePos: TPoint; var Handled: Boolean);
6424 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6425 if BrowserTab.TabIndex <> idx then begin
6426 BrowserTab.TabIndex := idx;
6427 BrowserTab.OnChange(nil);
6431 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6433 ThreadItem: TThreadItem;
6439 boardPlugIn : TBoardPlugIn;
6441 if Number = 0 then Exit;
6442 ThreadItem := GetActiveContent(True);
6444 if ThreadItem <> nil then begin
6445 //if ThreadItem.IsBoardPlugInAvailable then begin
6446 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6447 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6448 //boardPlugIn := ThreadItem.BoardPlugIn;
6449 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6451 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6452 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6453 //
\82±
\82±
\82Å
\82Q
\82¿
\82á
\82ñ
\82Ë
\82é
\82Ìdat
\82Ì
\8c`
\8e®
\82Å
\82P
\8ds
\93Ç
\82Ý
\8d\9e\82ß
\82ê
\82Î¥¥¥
\81B
6454 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6456 FileName := ThreadItem.FilePath;
6457 tmp := GikoSys.ReadThreadFile(FileName, Number);
6459 if tmp <> '' then begin
6460 THTMLCreate.DivideStrLine(tmp, @Res);
6462 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6463 if ReplaceTag then begin
6464 Header := CustomStringReplace(Header, '</b>', '',true);
6465 Header := CustomStringReplace(Header, '<b>', '',true);
6466 Header := CustomStringReplace(Header, '<br>', '',true);
6467 Header := DeleteFontTag(Header);
6469 //if ThreadItem.IsBoardPlugInAvailable then begin
6470 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6471 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6472 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6474 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6475 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6476 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6477 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6480 Body := CustomStringReplace(Body, '</a>', '',true);
6482 Body := HTMLCreater.DeleteLink(Body);
6483 if ReplaceTag then begin
6484 Body := CustomStringReplace(Body, '<', '<');
6485 Body := CustomStringReplace(Body, '>', '>');
6486 Body := CustomStringReplace(Body, '"', '"');
6487 Body := CustomStringReplace(Body, '&', '&');
6488 //Body := CustomStringReplace(Body, ' ', ' ');
6491 Header := Header + Body;
6493 Clipboard.SetTextBuf( PChar(Header) );
6499 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6501 AddRoundNameMenu(dummy1);
6502 AddMenuSameBoardThread;
6504 //!
\83A
\83N
\83e
\83B
\83u
\82È
\83^
\83u
\82Æ
\93¯
\82¶
\94Â
\82Ì
\8aJ
\82¢
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83\81\83j
\83\85\81[
\83A
\83C
\83e
\83\80\82É
\92Ç
\89Á
6505 procedure TGikoForm.AddMenuSameBoardThread;
6510 SameBoardThreadItem.Clear;
6511 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6512 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6513 if (FActiveContent.Thread.ParentBoard =
6514 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6515 //
\8e©
\95ª
\82Í
\8aO
\82·
6516 if FActiveContent.Thread <>
6517 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6518 Item := TMenuItem.Create(Self);
6519 Item.Caption := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.Title;
6520 Item.OnClick := SameBoardThreadSubItemOnClick;
6521 SameBoardThreadItem.Add(Item);
6525 //
\89½
\82à
\96³
\82¢
\82È
\82ç
\8eg
\97p
\82Å
\82«
\82È
\82¢
\82æ
\82¤
\82É
\82·
\82é
6526 SameBoardThreadItem.Enabled := SameBoardThreadItem.Count > 0;
6528 //!
\83A
\83N
\83e
\83B
\83u
\82È
\83^
\83u
\82Æ
\93¯
\82¶
\94Â
\82Ì
\8aJ
\82¢
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6529 procedure TGikoForm.SameBoardThreadSubItemOnClick(Sender: TObject);
6532 MenuItem: TMenuItem;
6534 if Sender is TMenuItem then begin
6537 MenuItem := TMenuItem(Sender);
6538 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6539 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6540 if (FActiveContent.Thread.ParentBoard =
6541 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6542 if FActiveContent.Thread <>
6543 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6544 if (SameBoardThreadItem.Items[j] = MenuItem) then begin
6545 MoveToURL( TBrowserRecord(BrowserTab.Tabs.Objects[i])
6557 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6559 FavoriteDM.URLReplace(oldURLs, newURLs);
6562 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6564 RoundList.URLReplace(oldURLs, newURLs);
6567 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6569 Filename = 'tab.sav';
6570 bFilename = '~tab.sav';
6576 oldBoardName: string;
6578 newBoardName: string;
6579 TabList: TStringList;
6582 if oldURLs.Count <> newURLs.Count then begin
6585 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6586 TabList := TStringList.Create;
6588 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6590 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6591 //
\96Ê
\93|
\82¾
\82¯
\82Çthread
\82Í
\82»
\82ê
\82¼
\82êURL
\82ð
\83`
\83\83\83b
\83N
\82µ
\82È
\82ª
\82ç
\82â
\82Á
\82Ä
\82©
\82È
\82«
\82á
\82¢
\82¯
\82È
\82¢
\81B
6592 for i := 0 to oldURLs.Count - 1 do begin
6593 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6594 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6595 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6596 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6597 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6598 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6600 for j := 0 to TabList.Count - 1 do begin
6601 tempString := TabList[j];
6602 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6603 tempString := StringReplace(tempString, oldHost, newHost,[]);
6604 TabList[j] := tempString;
6608 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6610 if FileExists( GikoSys.GetAppDir + Filename) then begin
6611 if FileExists( GikoSys.GetAppDir + bFilename) then
6612 DeleteFile(GikoSys.GetAppDir + bFilename);
6614 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6615 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6618 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6626 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6627 procedure TGikoForm.OnMinimize;
6629 doc: IHTMLDocument2;
6631 if FActiveContent <> nil then begin
6632 FIsMinimize := mtMinimizing;
6633 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6634 if Assigned(doc) then begin
6635 FActiveContent.Thread.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
6640 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6641 procedure TGikoForm.OnMinimized;
6643 FIsMinimize := mtMinimized;
6647 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6649 CoolBarResized( Sender, BrowserCoolBar );
6652 // *************************************************************************
6653 // ExternalBoardPlugInMain
6654 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6655 // *************************************************************************
6656 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6659 boardPlugIn : TBoardPlugIn;
6662 if not (Sender is TMenuItem) then
6665 item := TMenuItem( Sender );
6666 if not Assigned( Pointer( item.Tag ) ) then
6669 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83\81\83j
\83\85\81[
\83n
\83\93\83h
\83\89\82ð
\8cÄ
\82Ñ
\8fo
\82·
6670 boardPlugIn := TBoardPlugIn( item.Tag );
6671 boardPlugIn.PlugInMenu( item.Handle );
6674 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6675 procedure TGikoForm.TreeClick( Node : TTreeNode );
6681 if FTreeType = gttHistory then begin
6683 if TObject( Node.Data ) is TFavoriteThreadItem then
6684 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6685 FavoriteClick( Node );
6688 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6689 if ActiveList = Node.Data then
6692 ActiveListColumnSave;
6694 if TObject(Node.Data) is TBBS then begin
6695 SetActiveList(Node.data);
6696 end else if TObject(Node.Data) is TCategory then begin
6697 SetActiveList(Node.data);
6698 end else if TObject(Node.Data) is TBoard then begin
6699 if not TBoard(Node.Data).IsThreadDatRead then begin
6700 Screen.Cursor := crHourGlass;
6702 if not TBoard(Node.Data).IsThreadDatRead then
6703 GikoSys.ReadSubjectFile(Node.Data);
6705 Screen.Cursor := crDefault;
6708 Sort.SetSortDate(Now());
6709 SetActiveList(Node.data);
6712 if TObject( Node.Data ) is TBoard then begin // not TCategory
6713 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6714 if GikoSys.Setting.ListWidthState = glsMax then begin
6715 GikoDM.BrowserMinAction.Execute;
6716 if GikoForm.Visible then
6720 if GikoSys.Setting.ListHeightState = glsMax then begin
6721 GikoDM.BrowserMinAction.Execute;
6722 if GikoForm.Visible then
6730 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6731 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6734 ThreadItem : TThreadItem;
6735 shiftDown : Boolean;
6738 if Node = nil then Exit;
6740 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6742 if FTreeType = gtt2ch then begin
6743 if not (TObject(Node.Data) is TBoard) then Exit;
6744 Board := TBoard(Node.Data);
6745 DownloadList(Board, shiftDown);
6746 end else if FTreeType = gttHistory then begin
6747 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6748 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6749 DownloadContent(ThreadItem, shiftDown);
6753 // *************************************************************************
6754 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82ÌKeyDown
\83C
\83x
\83\93\83g
6755 // *************************************************************************
6756 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6757 Shift: TShiftState);
6759 if Key = VK_BACK then begin
6760 // UpFolderButtonClick(Sender);
6761 end else if Key = VK_SPACE then begin
6762 TreeDoubleClick( TreeView.Selected );
6763 end else if Key = VK_RETURN then begin
6764 TreeClick( TreeView.Selected );
6765 //
\97\9a\97ð
\82Ì
\8fê
\8d\87\81A
\8fÁ
\82³
\82ê
\82Ä
\82¢
\82é
\82Ì
\82Å
\83`
\83F
\83b
\83N
\82·
\82é
6766 if (TreeView.Selected <> nil) then begin
6767 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6771 //!
\82¨
\8bC
\82É
\93ü
\82è
\82ÌMouseDown
\83C
\83x
\83\93\83g
6772 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6773 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6775 favItem : TTreeNode;
6776 favThreadItem : TFavoriteThreadItem;
6782 if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6783 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6784 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6785 rect := FavoriteTreeView.Selected.DisplayRect(true);
6786 //
\83A
\83C
\83R
\83\93\95ª
\8d¶
\82É
\82¸
\82ç
\82·
6787 if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
6788 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6789 if ssDouble in Shift then begin
6790 FClickNode := FavoriteTreeView.Selected;
6791 GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6795 TObject(FavoriteTreeView.Selected));
6802 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6803 if favItem = nil then Exit;
6805 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6806 favThreadItem := TFavoriteThreadItem( favItem.Data );
6807 if favThreadItem.Item <> nil then
6808 InsertBrowserTab( favThreadItem.Item, False );
6815 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6818 if FIsIgnoreResize <> rtNone then
6821 if GikoSys.Setting.ListOrientation = gloVertical then begin
6822 if GikoSys.Setting.ListHeightState = glsMin then begin
6823 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6824 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6830 procedure TGikoForm.OnResized;
6832 doc : IHTMLDocument2;
6834 FOldFormWidth := Width;
6835 FIsIgnoreResize := rtNone;
6840 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6841 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6846 //
\8dÅ
\8f¬
\89»
\82Í
\8aù
\82É
\8a®
\97¹
\82µ
\82Ä
\82¢
\82é (
\82Â
\82Ü
\82è
\83^
\83X
\83N
\83o
\81[
\82©
\82ç
\83E
\83B
\83\93\83h
\83E
\82ð
\95\9c\8c³
\92\86)
6847 if FActiveContent <> nil then begin
6848 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6849 (doc.body as IHTMLElement2).ScrollTop := FActiveContent.Thread.ScrollTop;
6851 FIsMinimize := mtNone;
6856 // *************************************************************************
6857 //!
\83X
\83\8c\83b
\83h
\83u
\83\89\83E
\83U
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6858 // *************************************************************************
6859 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6862 doc : IHTMLDocument2;
6863 FOleInPlaceActiveObject: IOleInPlaceActiveObject;
6868 if not Assigned(FActiveContent) then
6870 if not Assigned(FActiveContent.Browser) then
6874 FOleInPlaceActiveObject := FActiveContent.Browser.ControlInterface as IOleInPlaceActiveObject;
6875 FOleInPlaceActiveObject.OnFrameWindowActivate(True);
6878 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6879 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6881 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6882 if not Assigned(doc) then
6885 e := doc.elementFromPoint(p.x, p.y);
6886 if not Assigned(e) then
6889 if (e.className = 'date') or (e.id = 'date') then begin
6890 AID := GikoSys.ExtructResID(e.innerText);
6891 ShowSameIDAncher(AID);
6896 procedure TGikoForm.ShowSameIDAncher(const AID: String);
6900 numbers : TStringList;
6903 numbers := TStringList.Create;
6906 GikoSys.GetSameIDRes(AID, FActiveContent.Thread, numbers);
6908 if not (GikoSys.Setting.LimitResCountMessage) then begin
6910 end else if (numbers.Count > LIMIT) then begin
6911 if (GikoUtil.MsgBox(Handle,
6912 IntToStr(LIMIT) + '
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6913 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6914 MB_YESNO or MB_ICONQUESTION) = ID_YES) then begin
6918 FActiveContent.IDAnchorPopup(
6919 GikoSys.CreateResAnchor(numbers, FActiveContent.Thread, limited));
6924 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
6925 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
6927 SelectTimer.Interval := 0;
6928 if not (ListView.Selected = nil) then
6929 if( FActiveContent = nil) or
6930 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
6935 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
6936 procedure TGikoForm.ActiveListColumnSave;
6938 ActivListObj : TObject;
6939 i, id, idx : Integer;
6940 BBSOrder : TGikoBBSColumnList;
6941 CategoryOrder : TGikoCategoryColumnList;
6942 BoardOrder : TGikoBoardColumnList;
6945 ActivListObj := ActiveList;
6946 if ActivListObj is TBBS then begin
6947 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6948 BBSOrder := TGikoBBSColumnList.Create;
6950 for i := 0 to ListView.Columns.Count - 1 do begin
6951 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6952 idx := ListView.Column[ i ].Tag;
6953 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
6954 BBSOrder.Add( TGikoBBSColumnID( id ) );
6955 //
\95\9d\82Ì
\95Û
\91¶
6956 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
6958 for i := 0 to ListView.Columns.Count - 1 do
6959 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6960 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
6964 end else if ActivListObj is TCategory then begin
6965 //=====
\94Â
\83\8a\83X
\83g =====
6966 CategoryOrder := TGikoCategoryColumnList.Create;
6968 for i := 0 to ListView.Columns.Count - 1 do begin
6969 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6970 idx := ListView.Column[ i ].Tag;
6971 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
6972 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
6973 //
\95\9d\82Ì
\95Û
\91¶
6974 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
6976 for i := 0 to ListView.Columns.Count - 1 do
6977 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6978 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
6982 end else if ActivListObj is TBoard then begin
6983 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6984 BoardOrder := TGikoBoardColumnList.Create;
6986 for i := 0 to ListView.Columns.Count - 1 do begin
6987 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6988 idx := ListView.Column[ i ].Tag;
6989 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
6990 BoardOrder.Add( TGikoBoardColumnID( id ) );
6991 //
\95\9d\82Ì
\95Û
\91¶
6992 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
6994 for i := 0 to ListView.Columns.Count - 1 do
6995 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6996 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
7004 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
7005 Column: TListColumn; Point: TPoint);
7011 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
7012 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
7013 ListColumnPopupMenu.Items.Items[ i ].Free;
7015 //
\83\81\83j
\83\85\81[
\82Ì
\8dì
\90¬ (
\83\81\83C
\83\93\83J
\83\89\83\80\82Í
\95K
\90{
\82È
\82Ì
\82Å
\83\81\83j
\83\85\81[
\82É
\8aÜ
\82ß
\82È
\82¢)
7016 if TObject( FActiveList ) is TBBS then begin
7018 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
7019 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
7020 item := TMenuItem.Create( ListColumnPopupMenu );
7021 item.Caption := GikoBBSColumnCaption[ i ];
7023 item.OnClick := ListColumnPopupMenuOnClick;
7024 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
7025 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
7026 item.Checked := True;
7030 ListColumnPopupMenu.Items.Add( item );
7033 end else if TObject( FActiveList ) is TCategory then begin
7035 //=====
\94Â
\83\8a\83X
\83g =====
7036 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
7037 item := TMenuItem.Create( ListColumnPopupMenu );
7038 item.Caption := GikoCategoryColumnCaption[ i ];
7040 item.OnClick := ListColumnPopupMenuOnClick;
7041 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
7042 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
7043 item.Checked := True;
7047 ListColumnPopupMenu.Items.Add( item );
7050 end else if TObject( FActiveList ) is TBoard then begin
7052 //=====
\83X
\83\8c\83\8a\83X
\83g =====
7053 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
7054 item := TMenuItem.Create( ListColumnPopupMenu );
7055 item.Caption := GikoBoardColumnCaption[ i ];
7057 item.OnClick := ListColumnPopupMenuOnClick;
7058 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
7059 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
7060 item.Checked := True;
7064 ListColumnPopupMenu.Items.Add( item );
7069 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
7070 Point := ListView.ClientToScreen( Point );
7071 if ListColumnPopupMenu.Items.Count > 0 then
7072 ListColumnPopupMenu.Popup( Point.X, Point.Y );
7076 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
7077 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
7084 if not (Sender is TMenuItem) then
7087 ActiveListColumnSave;
7088 item := TMenuItem( Sender );
7090 if TObject( FActiveList ) is TBBS then
7091 orderList := GikoSys.Setting.BBSColumnOrder
7092 else if TObject( FActiveList ) is TCategory then
7093 orderList := GikoSys.Setting.CategoryColumnOrder
7094 else if TObject( FActiveList ) is TBoard then
7095 orderList := GikoSys.Setting.BoardColumnOrder
7099 if item.Checked then begin
7100 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
7101 for i := orderList.Count - 1 downto 0 do begin
7102 if Integer( orderList[ i ] ) = item.Tag then begin
7103 orderList.Delete( i );
7108 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
7109 orderList.Add( Pointer( item.Tag ) );
7112 SetActiveList( FActiveList );
7116 procedure TGikoForm.OnGestureStart(Sender: TObject);
7121 procedure TGikoForm.OnGestureMove(Sender: TObject);
7128 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
7130 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
7131 s := MouseGesture.GetGestureStr;
7133 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7134 if Action <> nil then
7135 ActStr := '
\81i' + Action.Caption + '
\81j';
7136 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
7137 StatusBar.Panels[1].Text := s;
7140 procedure TGikoForm.OnGestureEnd(Sender: TObject);
7145 s := MouseGesture.GetGestureStr;
7147 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7148 if Action <> nil then
7150 StatusBar.Panels[1].Text := '';
7153 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
7154 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
7156 ThreadItem: TThreadItem;
7158 DefaultDraw := true;
7159 if TObject(Item.Data) is TThreadItem then begin
7160 ThreadItem := TThreadItem(Item.Data);
7161 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
7162 ListView.Canvas.Brush.Color := FOddColor;
7163 //
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\82¯
\82Ç
\81A
\83t
\83H
\81[
\83J
\83X
\82ª
\82È
\82¢
\82Æ
\81A
\83O
\83\8c\83C
\82É
\82È
\82é
\82Ì
\82Å
\81A
\91¾
\8e\9a\82É
\95Ï
\8dX
7164 if (GikoSys.Setting.UnFocusedBold) and
7165 (Item.Selected) and (not ListView.Focused) then begin
7166 ListView.Canvas.Font.Style := [fsBold];
7169 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
7172 if ThreadItem.UnRead then
7173 ListView.Canvas.Font.Style := [fsBold];
7178 procedure TGikoForm.FormActivate(Sender: TObject);
7180 if GikoSys.Setting.GestureEnabled then begin
7181 GikoSys.Setting.Gestures.ClearGesture;
7182 GikoSys.Setting.Gestures.LoadGesture(
7183 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
7184 MouseGesture.UnHook;
7185 MouseGesture.OnGestureStart := OnGestureStart;
7186 MouseGesture.OnGestureMove := OnGestureMove;
7187 MouseGesture.OnGestureEnd := OnGestureEnd;
7188 MouseGesture.SetHook(Handle);
7190 //MouseGesture.UnHook;
7191 MouseGesture.OnGestureStart := nil;
7192 MouseGesture.OnGestureMove := nil;
7193 MouseGesture.OnGestureEnd := nil;
7197 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
7199 if (FIsMinimize <> mtMinimizing) then begin
7200 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
7201 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
7205 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
7210 affectedBand : TCoolBand;
7213 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
7214 FIsIgnoreResize := rtResizing;
7215 PostMessage( Handle, USER_RESIZED, 0, 0 );
7217 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
7218 if CoolBar = MainCoolBar then begin
7219 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
7220 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7221 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7222 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7223 GikoSys.Setting.MainCoolSet[i] := CoolSet;
7225 end else if CoolBar = ListCoolBar then begin
7226 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
7227 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7228 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7229 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7230 GikoSys.Setting.ListCoolSet[i] := CoolSet;
7232 end else if CoolBar = BrowserCoolBar then begin
7233 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
7234 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7235 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7236 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7237 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
7240 if not (Sender is TToolBar) or (CoolBar = nil) then
7242 toolbar := TToolBar( Sender );
7243 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
7244 affectedBand := nil;
7245 for i := CoolBar.Bands.Count - 1 downto 0 do begin
7246 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
7247 band := CoolBar.Bands[ i ];
7248 if band.Break or (i = 0) then begin
7249 if i + 1 < CoolBar.Bands.Count then
7250 if not CoolBar.Bands[ i + 1 ].Break then
7251 affectedBand := CoolBar.Bands[ i + 1 ];
7254 affectedBand := CoolBar.Bands[ i - 1 ];
7259 //
\83h
\83\89\83b
\83O
\92\86\82Í band.Width
\82ª
\8dX
\90V
\82³
\82ê
\82È
\82¢
\82Ì
\82Å
\81A
\93à
\91¤
\82Ì
\83T
\83C
\83Y
\82©
\82ç
\82Ð
\82Ë
\82è
\8fo
\82·
7260 if CoolBar = MainCoolBar then begin
7261 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
7262 coolSet.FCoolWidth := toolbar.Width + 25;
7263 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
7264 if affectedBand <> nil then begin
7265 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
7266 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7267 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
7269 end else if CoolBar = ListCoolBar then begin
7270 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
7271 coolSet.FCoolWidth := toolbar.Width + 25;
7272 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
7273 if affectedBand <> nil then begin
7274 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
7275 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7276 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
7278 end else if CoolBar = BrowserCoolBar then begin
7279 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
7280 coolSet.FCoolWidth := toolbar.Width + 25;
7281 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
7282 if affectedBand <> nil then begin
7283 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
7284 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7285 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
7292 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
7294 CoolBarResized( Sender, MainCoolBar );
7297 procedure TGikoForm.ListToolBarResize(Sender: TObject);
7299 CoolBarResized( Sender, ListCoolBar );
7302 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
7304 CoolBarResized( Sender, BrowserCoolBar );
7307 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
7308 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
7310 doc : IHTMLDocument2;
7311 ThreadItem : TThreadItem;
7312 ReadList : TStringList;
7313 wordCount : TWordCount;
7315 if not Assigned(FActiveContent) then
7317 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7318 if not Assigned(doc) then
7321 ThreadItem := GetActiveContent(True);
7322 ReadList := TStringList.Create;
7323 wordCount := TWordCount.Create;
7325 ThreadItem.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
7326 {$IFDEF SPAM_FILTER_ENABLED}
7327 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7328 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7329 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
7330 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7331 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7333 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7334 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7339 FActiveContent.Repaint := true;
7340 if ThreadItem <> nil then
7341 InsertBrowserTab( ThreadItem, True );
7343 //
\93¯
\88êID
\82ðNG
\83\8f\81[
\83h
\82É
\93o
\98^
7344 procedure TGikoForm.AddIDtoNGWord(invisible : boolean);
7346 doc : IHTMLDocument2;
7347 ThreadItem : TThreadItem;
7349 {$IFDEF SPAM_FILTER_ENABLED}
7351 ReadList : TStringList;
7352 wordCount : TWordCount;
7354 id, dateStr: String;
7356 No := KokoPopupMenu.Tag;
7357 if No = 0 then Exit;
7358 ThreadItem := GikoForm.KokoPopupThreadItem;
7359 if ThreadItem = nil then Exit;
7361 id := GikoSys.GetResID(No, ThreadItem);
7362 if (id <> '') and (not IsNoValidID(id)) then begin
7363 //
\83R
\83\81\83\93\83g
\82Æ
\82µ
\82Ä
\81A
\83X
\83\8c\83b
\83h
\96¼
\82Æ
\8d¡
\93ú
\82Ì
\93ú
\95t
\82ð
\92Ç
\89Á
7364 DateTimeToString(dateStr, 'yyyymmdd', Now);
7365 id := id + #9'>>add ' + dateStr + ',' + ThreadItem.Title;
7366 if (GikoSys.FAbon.AddToken(id, invisible)) then begin
7367 GikoSys.FAbon.ReLoadFromNGwordFile;
7368 FActiveContent.Repaint := True;
7371 ShowMessage('ID
\82ð
\8eæ
\93¾
\82Å
\82«
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B');
7373 {$IFDEF SPAM_FILTER_ENABLED}
7374 body := TStringList.Create;
7376 GikoSys.GetSameIDRes(id, ThreadItem, body);
7377 ReadList := TStringList.Create;
7378 wordCount := TWordCount.Create;
7380 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7381 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7382 for i := 0 to body.Count - 1 do begin
7383 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7384 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7385 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7395 if (FActiveContent.Repaint) then begin
7396 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7398 if not Assigned(doc) then
7400 ThreadItem.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
7401 if ThreadItem <> nil then
7402 InsertBrowserTab( ThreadItem, True );
7406 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
7407 procedure TGikoForm.IndividualAbonID(Atype : Integer);
7409 ThreadItem : TThreadItem;
7412 ReadList : TStringList;
7413 wordCount : TWordCount;
7415 No := KokoPopupMenu.Tag;
7416 if No = 0 then Exit;
7417 ThreadItem := GikoForm.KokoPopupThreadItem;
7418 if ThreadItem = nil then Exit;
7419 body := TStringList.Create;
7421 GikoSys.GetSameIDRes(No, ThreadItem, body);
7423 ReadList := TStringList.Create;
7424 wordCount := TWordCount.Create;
7426 ThreadItem.ScrollTop := FActiveContent.Browser.OleObject.Document.Body.ScrollTop;
7427 {$IFDEF SPAM_FILTER_ENABLED}
7428 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7429 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7431 for i := 0 to body.Count - 1 do begin
7432 {$IFDEF SPAM_FILTER_ENABLED}
7433 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7434 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7435 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7437 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7438 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7444 FActiveContent.Repaint := true;
7445 if ThreadItem <> nil then
7446 InsertBrowserTab( ThreadItem, True );
7453 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7455 firstElement: IHTMLElement;
7456 doc: IHTMLDocument2;
7459 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7460 if Assigned(doc) then
7461 firstElement := doc.all.item('idSearch', 0) as IHTMLElement;
7462 if Assigned(firstElement) then
7463 if firstElement.style.visibility <> 'hidden' then
7464 firstElement.style.visibility := 'hidden';
7469 procedure TGikoForm.RepaintAllTabsBrowser();
7472 ThreadItem: TThreadItem;
7474 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7475 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7477 ThreadItem := GetActiveContent;
7478 if ThreadItem <> nil then
7479 InsertBrowserTab( ThreadItem, True );
7483 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7484 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7485 Shift: TShiftState);
7487 //
\83u
\83\89\83E
\83U
\83^
\83u
\96³
\82µ
\82Å
\81A
\83L
\81[
\88Ú
\93®
\82Å
\93Ç
\82Ý
\94ò
\82Î
\82µ
\82ð
\89Â
\94\
\82É
\82·
\82é
\82½
\82ß
\82Ì
7488 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7489 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7490 SelectTimer.Interval := 0;
7491 if not (GikoSys.Setting.BrowserTabVisible) then begin
7492 if (GetActiveList is TBoard) then begin
7493 //Shift Alt Ctrl
\82ª
\98b
\82³
\82ê
\82½
\82Æ
\82«
\82Í
\81A
\95û
\8cü
\83L
\81[
\82ð
\97£
\82µ
\82Ä
\82¢
\82Ä
\82à
\96³
\8e\8b
7494 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7495 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7496 (Key = VK_UP) or (Key = VK_DOWN)) then
7497 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7501 // *************************************************************************
7502 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7503 // *************************************************************************
7504 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7505 Node: TTreeNode; var AllowEdit: Boolean);
7507 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7508 FOrigenCaption := Node.Text;
7510 // *************************************************************************
7511 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7512 // *************************************************************************
7513 function TGikoForm.GetMainForm(): TComponent;
7515 Result := Application.MainForm;
7517 // *************************************************************************
7518 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7519 // *************************************************************************
7520 function TGikoForm.GetScreenCursor(): TCursor;
7522 Result := Screen.Cursor;
7524 // *************************************************************************
7525 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7526 // *************************************************************************
7527 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7529 if (Screen.Cursor <> Cursor) then
7530 Screen.Cursor := Cursor;
7532 // *************************************************************************
7533 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82ð
\95Â
\82¶
\82é
\81~
\83{
\83^
\83\93\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
7534 // *************************************************************************
7535 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7537 //Action
\82Å
\90Ý
\92è
\82·
\82é
\82Æ
\83L
\83\83\83v
\83V
\83\87\83\93\82ª
\8fÁ
\82¹
\82È
\82¢
\82Ì
\82Å
\81AOnClick
\83C
\83x
\83\93\83g
\82Å
\82Ì
7538 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7539 if GikoDM.CabinetVisibleAction.Enabled then begin
7540 GikoDM.CabinetVisibleAction.Execute;
7543 // *************************************************************************
7544 //!
\82¨
\8bC
\82É
\93ü
\82è
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\90®
\97\9d\83{
\83^
\83\93\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
7545 // *************************************************************************
7546 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7548 if GikoDM.FavoriteArrangeAction.Enabled then begin
7549 GikoDM.FavoriteArrangeAction.Execute;
7552 // *************************************************************************
7553 //!
\83M
\83R
\83i
\83r
\82Ì
\83\81\83b
\83Z
\81[
\83W
\83n
\83\93\83h
\83\8a\83\93\83O (
\92\8d\88Ó
\81j
\8f\88\97\9d\97Ê
\82É
\92\8d\88Ó
\81I
7554 // *************************************************************************
7555 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7556 var Handled: Boolean);
7560 //GikoForm
\82ª
\83A
\83N
\83e
\83B
\83u
\82È
\82Æ
\82«
\82¾
\82¯
\8eó
\82¯
\8eæ
\82é
\91¼
\82Ì
\83t
\83H
\81[
\83\80\82Ì
\82ð
\89¡
\8eæ
\82è
\82µ
\82È
\82¢
\82½
\82ß
7561 if Self.Active then begin
7563 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7564 WM_KEYFIRST..WM_KEYLAST :
7566 //
\83L
\81[
\83A
\83b
\83v
\82Í
\96³
\8e\8b\82·
\82é
\81@KeyDown
\82Æ
\8d\87\82í
\82¹
\82Ä
\82Q
\89ñ
\8cÄ
\82Î
\82ê
\82é
\82©
\82ç
7567 if (Msg.message <> WM_KEYUP)
7568 and (Msg.message <> WM_CHAR)
7569 and (Msg.message <> WM_SYSKEYUP) then begin
7570 wmMsg.Msg := Msg.message;
7571 wmMsg.CharCode := Word(Msg.wParam);
7572 wmMsg.KeyData := Msg.lParam;
7573 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7574 Self.OnShortCut(wmMsg, Handled);
7579 // Explorer
\82ÌD&D
\82ð
\8eó
\82¯
\82é
\82Æ
\82Ì
\94ñ
\83A
\83N
\83e
\83B
\83u
7580 if Msg.message = WM_DROPFILES then begin
7581 AcceptDropFiles(Msg);
7586 // *************************************************************************
7587 //!
\83A
\83v
\83\8a\83P
\81[
\83V
\83\87\83\93\82ª
\83A
\83N
\83e
\83B
\83u
\82Å
\82È
\82
\82È
\82Á
\82½
\82Æ
\82«
\82Ì
\83C
\83x
\83\93\83g
7588 // *************************************************************************
7589 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7591 Application.ProcessMessages;
7592 if not Application.Terminated then begin
7593 if PreviewTimer.Enabled then
7594 PreviewTimer.Enabled := False;
7595 //
\83t
\83H
\81[
\83J
\83X
\82ª
\91¼
\82Ì
\83A
\83v
\83\8a\82É
\95Ï
\82í
\82Á
\82½
\82Æ
\82«
\82É
\83|
\83b
\83v
\83A
\83b
\83v
\8fÁ
\8b\8e
7596 if (FResPopupBrowser <> nil) then
7597 FResPopupBrowser.Clear;
7599 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7600 if FPreviewBrowser <> nil then
7601 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7605 // *************************************************************************
7606 //!
\83A
\83v
\83\8a\83P
\81[
\83V
\83\87\83\93\82ª
\8f\88\97\9d\82³
\82ê
\82È
\82¢
\97á
\8aO
\82ð
\8fE
\82Á
\82½
\82Æ
\82«
\82Ì
\83C
\83x
\83\93\83g
7607 // *************************************************************************
7608 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7613 if (Sender <> nil) then begin
7614 s := ' [' + Sender.ClassName + ']' + #13#10;
7616 s := ' [ Sender is nil ] ' + #13#10;
7619 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7621 // *************************************************************************
7622 //!
\83_
\83E
\83\93\83\8d\81[
\83h
\83R
\83\93\83g
\83\8d\81[
\83\8b\83X
\83\8c\83b
\83h
\82Ì
\90¶
\90¬
7623 // *************************************************************************
7624 procedure TGikoForm.CreateControlThread();
7626 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7627 FControlThread := TThreadControl.Create(True);
7628 FControlThread.MaxThreadCount := 1;
7629 FControlThread.Resume;
7630 FControlThread.OnDownloadEnd := DownloadEnd;
7631 FControlThread.OnDownloadMsg := DownloadMsg;
7632 FControlThread.OnWork := Work;
7633 FControlThread.OnWorkBegin := WorkBegin;
7634 FControlThread.OnWorkEnd := WorkEnd;
7636 // *************************************************************************
7637 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7638 // *************************************************************************
7639 procedure TGikoForm.CreateBrowsers(count: Integer);
7642 newBrowser: TWebBrowser;
7644 BrowserNullTab := TBrowserRecord.Create;
7645 BrowserNullTab.Browser := Browser;
7646 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7648 FBrowsers := TList.Create;
7650 for i := 0 to count -1 do begin
7651 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7652 newBrowser := FBrowsers[FBrowsers.Count - 1];
7653 TOleControl(newBrowser).Parent := BrowserPanel;
7654 TOleControl(newBrowser).Align := alNone;
7655 TOleControl(newBrowser).Left := 0;
7656 TOleControl(newBrowser).Top := 0;
7657 newBrowser.RegisterAsDropTarget := False;
7658 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7659 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7660 newBrowser.OnEnter := BrowserEnter;
7661 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7662 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7663 newBrowser.Navigate(BLANK_HTML);
7664 ShowWindow(newBrowser.Handle, SW_HIDE);
7665 GikoSys.ShowRefCount('Browser' + IntToStr(i), newBrowser.ControlInterface);
7666 GikoSys.ShowRefCount('Document' + IntToStr(i), newBrowser.ControlInterface.Document);
7668 BrowserNullTab.Browser.BringToFront;
7669 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7671 //
\8bN
\93®
\8e\9e\82É
\83^
\83u
\8e©
\93®
\95\9c\8c³
\82ð
\93ü
\82ê
\82Ä
\82¢
\82é
\82Æ
\81A
\8bó
\83y
\81[
\83W
\97p
\82ÌBrowser
\82Ì
7672 //
\95`
\89æ
\82ª
\8fI
\82í
\82Á
\82Ä
\82¢
\82È
\82
\82Ä
\81A
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
\82Ì
\90Ý
\92è
\93\99\82É
\93Ë
\93ü
\82·
\82é
\82Ì
\82Å
7673 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7674 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7675 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7676 Application.ProcessMessages;
7679 // *************************************************************************
7680 //!
\83c
\81[
\83\8b\83o
\81[
\82É
\83X
\83\8c\8di
\8d\9e\82Ý
\83R
\83\93\83{
\83{
\83b
\83N
\83X
\82ð
\90Ý
\92è
\82·
\82é
7681 // *************************************************************************
7682 procedure TGikoForm.SetSelectComboBox();
7684 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7687 ToolButton: TToolButton;
7689 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7690 SelectComboBoxPanel.Visible := False;
7692 for i := ListToolBar.ControlCount - 1 downto 0 do
7694 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7696 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7697 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7698 SelectComboBoxPanel.Parent := ListToolBar;
7699 SelectComboBoxPanel.Visible := True;
7701 SelectComboBox.Left := 0;
7702 SelectComboBox.Top := 0;
7703 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7704 SelectComboBox.Width := SelectComboBoxPanel.Width -
7705 SelectComboBoxSplitter.Width;
7707 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7708 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7709 if ToolButton = nil then begin
7710 ToolButton := TToolButton.Create(ListToolBar);
7711 ToolButton.Name := DUMMYCOMPNAME;
7713 ToolButton.Style := tbsSeparator;
7714 ToolButton.Width := 0;
7715 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7716 ListToolBar.InsertControl(ToolButton);
7717 ToolButton.Visible := False;
7719 //
\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·
7720 if (i + 1) < ListToolBar.ControlCount then
7721 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7722 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7723 ListToolBar.Controls[ i + 1 ].Visible := False;
7726 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7727 ListToolBar.Controls[ i ].Visible := False;
7735 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\83}
\83E
\83X
\83_
\83E
\83\93\83C
\83x
\83\93\83g
7736 procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7737 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7744 if (TreeView.Selected <> nil) and
7745 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7746 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
7747 rect := TreeView.Selected.DisplayRect(true);
7748 //
\83A
\83C
\83R
\83\93\95ª
\82¾
\82¯
\8d¶
\82É
\82¸
\82ç
\82·
7749 if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
7750 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7751 //
\83N
\83\8a\83b
\83N
\82Æ
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82ð
\83R
\83R
\82Å
\94»
\92è
7752 if ssDouble in Shift then begin
7753 TreeDoubleClick( TreeView.Selected );
7755 TreeClick(TreeView.Selected);
7762 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
7763 procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7767 if ActionList <> nil then begin
7768 SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7770 for i := 0 to ActionList.ActionCount - 1 do begin
7772 FActionListGroupIndexes[i] :=
7773 TCustomAction(ActionList.Actions[i]).GroupIndex;
7774 TCustomAction(ActionList.Actions[i]).GroupIndex
7777 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7783 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
7784 procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7788 if ActionList <> nil then begin
7789 if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7790 for i := 0 to ActionList.ActionCount - 1 do begin
7792 TCustomAction(ActionList.Actions[i]).GroupIndex
7793 := FActionListGroupIndexes[i];
7795 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7801 //!
\82±
\82Ì
\83\8c\83X
\82ÌURL
\8eæ
\93¾
7802 procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
7806 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
7807 procedure TGikoForm.RefreshListView(Thread: TThreadItem);
7809 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
7810 if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin
7815 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
7816 MousePos: TPoint; var Handled: Boolean);
7819 coolBar: TGikoCoolBar;
7822 if (Sender <> nil) and (Sender is TGikoCoolBar) then begin
7823 coolBar := TGikoCoolBar(Sender);
7824 if (coolBar = MainCoolBar) then begin
7825 FToolBarSettingSender := tssMain;
7826 end else if (coolBar = ListCoolBar) then begin
7827 FToolBarSettingSender := tssList;
7828 end else if (coolBar = BrowserCoolBar) then begin
7829 FToolBarSettingSender := tssBrowser;
7831 FToolBarSettingSender := tssNone;
7833 pos := coolBar.ClientToScreen( MousePos );
7834 MainCoolBarPopupMenu.Popup( pos.X, pos.Y );
7839 procedure TGikoForm.TaskTrayIconMessage(var Msg: TMsg);
7843 //
\8d¶
\83N
\83\8a\83b
\83N
\82È
\82ç
\95\9c\8c³
\82·
\82é
7844 if (Msg.wParam = WM_LBUTTONUP) then begin
7846 end else if (Msg.wParam=WM_RBUTTONUP) then begin
7847 //
\89E
\83N
\83\8a\83b
\83N
\82È
\82ç
\8fI
\97¹
\82·
\82é
7849 SetForegroundWindow ( Self.Handle );
7850 TaskTrayPopupMenu.Popup ( p.X, p.Y );
7853 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
7854 procedure TGikoForm.StoredTaskTray;
7857 if (FIconData.uID = 0) then begin
7858 FIconData.cbSize := SizeOf(TNotifyIconData);
7859 FIconData.uID := Self.Handle;
7860 FIconData.Wnd := Handle;
7861 FIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
7862 FIconData.uCallbackMessage := USER_TASKTRAY;
7863 FIconData.hIcon := Application.Icon.Handle; {
\83A
\83C
\83R
\83\93\8ew
\92è}
7864 FIconData.szTip := '
\83M
\83R
\83i
\83r'; {
\83q
\83\93\83g
\95¶
\8e\9a\97ñ}
7865 Shell_NotifyIcon(NIM_ADD, @FIconData);
7866 ShowEditors(SW_HIDE);
7867 ShowWindow(Self.Handle, SW_HIDE);
7872 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82Ì
\83A
\83C
\83R
\83\93\8dí
\8f\9c\81\95\83t
\83H
\81[
\83\80\95\
\8e¦
7873 procedure TGikoForm.UnStoredTaskTray;
7877 Shell_NotifyIcon(NIM_DELETE, @FIconData);
7878 SetForegroundWindow(Application.Handle);
7883 // Action
\82©
\82ç
\8ai
\94[
\82µ
\82½
\82Æ
\82«
\82ÍTag
\82Ì
\92l
\82Í0
\88È
\8aO
7884 if (GikoDM.StoredTaskTrayAction.Tag = 0) then begin
7885 ShowWindow(Self.Handle, SW_RESTORE);
7887 ShowWindow(Self.Handle, SW_SHOW);
7889 ShowEditors(SW_SHOW);
7890 GikoDM.StoredTaskTrayAction.Tag := 0;
7894 \brief
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
7895 \param nCmdShow Windows.ShowWindow
\82É
\91\97\82é
\83p
\83\89\83\81\81[
\83^
\82Æ
\93¯
\82¶
7897 procedure TGikoForm.ShowEditors(nCmdShow: Integer);
7901 //
\83\8c\83X
\83G
\83f
\83B
\83^
\82ð
\92T
\82·
7902 for i := 0 to Screen.CustomFormCount - 1 do begin
7903 if TObject(Screen.CustomForms[i]) is TEditorForm then
7904 ShowWindow(Screen.CustomForms[i].Handle, nCmdShow);
7908 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83u
\83\89\83E
\83U
\8dì
\90¬
7909 procedure TGikoForm.CreateResPopupBrowser;
7911 if (FResPopupBrowser = nil) then begin
7912 FResPopupBrowser := TResPopupBrowser.Create(BrowserPanel);
7915 //! ListView
\82ÌD&D
\8eó
\82¯
\8eæ
\82è
7916 procedure TGikoForm.AcceptDropFiles(var Msg: TMsg);
7918 FileName: Array[0..MAX_PATH] of Char;
7922 datList: TStringList;
7924 //
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\94Â
\82Ì
\82Æ
\82«
\88È
\8aO
\82Í
\8b\91\94Û
7925 if GetActiveList is TBoard then begin
7926 Board := TBoard(GetActiveList);
7927 if MsgBox(Handle, Board.Title
7928 + '
\94Â
\82É
\93ü
\82ê
\82Ä
\82¢
\82¢
\82Å
\82·
\82©
\81H', '
\83M
\83R
\83i
\83r', MB_YESNO or MB_ICONQUESTION) = IDYES then begin
7929 //
\94Â
\82Ì
\8e\9e\82Í
\81A
\83\8d\83O
\83t
\83H
\83\8b\83_
\82É
\83R
\83s
\81[
\82µ
\82Ä
\82Í
\82®
\82ê
\83\8d\83O
\91Î
\89\9e\82Æ
\93¯
\82¶
\8f\88\97\9d\81H
7930 datList := TStringList.Create;
7932 Cnt := DragQueryFile(Msg.WParam, $FFFFFFFF, FileName, SizeOf(FileName));
7933 for K := 0 to Cnt - 1 do begin
7934 DragQueryFile(Msg.WParam, K, FileName, SizeOf(FileName));
7935 // FileName
\82Édrop
\82³
\82ê
\82½
\83t
\83@
\83C
\83\8b\96¼
\82ª
\93ü
\82Á
\82Ä
\82¢
\82é
\82Ì
\82Å
\81A
\82±
\82±
\82Å
\89½
\82ç
\82©
\82Ì
\8f\88\97\9d\82ð
\82·
\82é
\81B
\82½
\82Æ
\82¦
\82Î
\8e\9f\82Ì
\8ds
7936 //
\83t
\83@
\83C
\83\8b\82Ì
\83`
\83F
\83b
\83N
7937 if (isValidFile(FileName)) then begin
7938 LogFolder := ExtractFilePath(Board.FilePath);
7939 if (FileExists( LogFolder + ExtractFileName(FileName))) then begin
7940 GikoUtil.MsgBox(Handle, LogFolder + '
\82É' + ExtractFileName(FileName) + '
\82ª
\8aù
\82É
\91¶
\8dÝ
\82µ
\82Ü
\82·
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7942 if (not DirectoryExists(LogFolder)) then begin
7943 if (not GikoSys.ForceDirectoriesEx(LogFolder) ) then begin
7944 GikoUtil.MsgBox(Handle, LogFolder + '
\82Ì
\90¶
\90¬
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7947 if (not Windows.CopyFile(FileName, PChar(LogFolder + ExtractFileName(FileName)), true)) then begin
7948 GikoUtil.MsgBox(Handle, FileName + '
\82Ì
\83R
\83s
\81[
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7950 datList.Add(ExtractFileName(FileName));
7955 DragFinish(Msg.WParam);
7956 if (datList.Count > 0) then begin
7957 GikoSys.AddOutofIndexDat(Board, datList, False);
7958 ShowMessage(IntToStr(datList.Count) + '
\8cÂ
\82Ìdat
\83t
\83@
\83C
\83\8b\82ª
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82µ
\82½
\81B' );
7959 if GikoForm.TreeView.Visible then begin
7960 GikoForm.TreeView.Refresh;
7962 if GikoForm.ListView.Visible then begin
7966 ShowMessage('
\88ê
\82Â
\82à
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B' );
7974 ShowMessage('
\94Â
\82ð
\95\
\8e¦
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
7977 procedure TGikoForm.UpdateListView();
7979 //ListView
\82Å
\82±
\82Ì
\83X
\83\8c\82ª
\8aÜ
\82Ü
\82ê
\82é
\94Â
\82ð
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Æ
\82«
\82Ì
\8dX
\90V
\8f\88\97\9d
7980 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
7981 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
7982 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
7983 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
7984 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
7985 case GikoForm.ViewType of
7986 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
7987 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
7988 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
7989 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
7990 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
7991 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
7996 //!
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
7997 function TGikoForm.isValidFile(FileName: String) : boolean;
8002 //
\91¶
\8dÝ
\82·
\82é
\82©
\81A
\8ag
\92£
\8eqdat
\81A
\83t
\83@
\83C
\83\8b\96¼
8003 if ( not FileExists(FileName) ) then begin
8005 GikoUtil.MsgBox(Handle, FileName + '
\82Í
\91¶
\8dÝ
\82µ
\82Ü
\82¹
\82ñ
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
8006 end else if (ExtractFileExt(ExtractFileName(FileName)) <> '.dat' ) then begin
8008 GikoUtil.MsgBox(Handle, ExtractFileName(FileName) + '
\82Ì
\8ag
\92£
\8eq
\82ª".dat"
\82Å
\82 \82è
\82Ü
\82¹
\82ñ
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
8010 //
\83\8d\83O
\83t
\83@
\83C
\83\8b\82Ì
\8ag
\92£
\8eq
\82ð
\82Í
\82¸
\82µ
\82½
\82à
\82Ì
\82ª
\83X
\83\8c\8dì
\90¬
\93ú
\8e\9e
8012 dt := GikoSys.GetCreateDateFromName(ExtractFileName(FileName));
8013 if ((UnixToDateTime(ZERO_DATE) + OffsetFromUTC) = dt) then begin
8015 GikoUtil.MsgBox(Handle, ExtractFileName(FileName) + '
\82Ì
\83t
\83@
\83C
\83\8b\96¼
\82ª
\95s
\90³
\82Å
\82·
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
8019 GikoUtil.MsgBox(Handle, ExtractFileName(FileName) + '
\82Ì
\83t
\83@
\83C
\83\8b\96¼
\82ª
\95s
\90³
\82Å
\82·
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
8024 procedure TGikoForm.ResPopupClearTimerTimer(Sender: TObject);
8026 ResPopupClearTimer.Enabled := False;
8027 if ResPopupClearTimer.Tag = 0 then begin
8028 FResPopupBrowser.Clear;
8030 FResPopupBrowser.CurrentBrowser.ChildClear;
8033 //!
\83A
\83C
\83R
\83\93\93Ç
\82Ý
\8d\9e\82Ý
8034 procedure TGikoForm.LoadIcon();
8036 ICONI6 = 'icon16.bmp';
8037 ICON32 = 'icon32.bmp';
8038 ICONSTAT = 'state_icon.bmp';
8039 ICONMES = 'message_icon.bmp';
8040 ICONADD = 'address_icon.bmp';
8041 ICONITEM = 'item_icon.bmp';
8042 ICONTOOL = 'hottoolbar_icon.bmp';
8044 if FileExists(GikoSys.Setting.GetAppDir + ICONI6) then begin
8046 ItemIcon16.FileLoad(rtBitmap,
8047 GikoSys.Setting.GetAppDir + ICONI6, clPurple);
8049 if FileExists(GikoSys.Setting.GetAppDir + ICON32) then begin
8051 ItemIcon32.FileLoad(rtBitmap,
8052 GikoSys.Setting.GetAppDir + ICON32, clPurple);
8054 if FileExists(GikoSys.Setting.GetAppDir + ICONSTAT) then begin
8055 StateIconImageList.Clear;
8056 StateIconImageList.FileLoad(rtBitmap,
8057 GikoSys.Setting.GetAppDir + ICONSTAT, clPurple);
8059 if FileExists(GikoSys.Setting.GetAppDir + ICONMES) then begin
8060 MessageImageList.Clear;
8061 MessageImageList.FileLoad(rtBitmap,
8062 GikoSys.Setting.GetAppDir + ICONMES, clPurple);
8064 if FileExists(GikoSys.Setting.GetAppDir + ICONADD) then begin
8065 AddressImageList.Clear;
8066 AddressImageList.FileLoad(rtBitmap,
8067 GikoSys.Setting.GetAppDir + ICONADD, clPurple);
8069 if FileExists(GikoSys.Setting.GetAppDir + ICONITEM) then begin
8070 ItemImageList.Clear;
8071 ItemImageList.FileLoad(rtBitmap,
8072 GikoSys.Setting.GetAppDir + ICONITEM, clPurple);
8074 if FileExists(GikoSys.Setting.GetAppDir + ICONTOOL) then begin
8075 HotToobarImageList.Clear;
8076 HotToobarImageList.FileLoad(rtBitmap,
8077 GikoSys.Setting.GetAppDir + ICONTOOL, clPurple);
8080 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\93Ç
\82Ý
\8d\9e\82Ý
8081 procedure TGikoForm.LoadPopupMenu();