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();
709 procedure CreateParams(var Params: TCreateParams); override;
710 procedure WndProc(var Message: TMessage); override;
711 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
712 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
713 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
716 LastRoundTime: TDateTime;
717 BrowserNullTab: TBrowserRecord;
718 FControlThread: TThreadControl;
719 FIconData : TNotifyIconData;
720 procedure MoveToURL(const inURL: string; KeyMask: Boolean = False);
721 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
723 function GetHttpState: Boolean;
724 procedure SetEnabledCloseButton(Enabled: Boolean);
725 function GetTreeNode(Data: TObject): TTreeNode;
726 procedure ListViewAllSelect;
727 property ListStyle: TViewStyle read FListStyle write FListStyle;
728 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
729 property ViewType: TGikoViewType read FViewType write FViewType;
730 property NameCookie: string read FNameCookie write FNameCookie;
731 property MailCookie: string read FMailCookie write FMailCookie;
732 property ClickNode: TTreeNode read FClickNode write FClickNode;
733 property TreeType: TGikoTreeType read FTreeType write FTreeType;
734 property ActiveContent: TBrowserRecord read FActiveContent write FActiveContent;
735 property ResRangeMenuSelect: Longint read FResRangeMenuSelect write FResRangeMenuSelect;
736 property SelectResWord : string read FSelectResWord write FSelectResWord;
737 property BrowserSizeWidth: Integer read FBrowserSizeWidth write FBrowserSizeWidth;
738 property BrowserSizeHeight: Integer read FBrowserSizeHeight write FBrowserSizeHeight;
739 property SearchDialog: TSearchDialog read FSearchDialog write FSearchDialog;
740 property ToolBarSettingSender : TToolBarSettingSenderType
741 read FToolBarSettingSender write FToolBarSettingSender;
742 property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
743 property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
744 property WorkCount: Integer read FWorkCount write FWorkCount;
745 property UpdateExePath: string read FUpdateExePath write FUpdateExePath;
746 property UpdateExeArgs: string read FUpdateExeArgs write FUpdateExeArgs;
748 procedure SetContent(inThread: TBrowserRecord);
749 function GetActiveContent(popup :Boolean = false): TThreadItem;
750 function GetActiveList: TObject;
752 procedure SetListViewType(AViewType: TGikoViewType); overload;
753 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
754 procedure PlaySound(SoundEventName: string);
755 procedure ShowBBSTree( inBBS : TBBS );
756 procedure ShowBBSTreeOld( inBBS : TBBS );
757 procedure ShowHistoryTree;
758 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
759 procedure SetBrowserTabState;
760 procedure SetToolBarPopup;
761 procedure ShowFavoriteAddDialog( Item : TObject );
762 procedure FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
763 procedure RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
764 property ListViewBackGroundColor: TColor read FListViewBackGroundColor write SetListViewBackGroundColor;
765 property UseOddResOddColor : Boolean read FUseOddResOddColor write FUseOddResOddColor;
766 property OddColor : TColor read FOddColor write FOddColor;
767 //!
\83\8c\83X
\83\81\83j
\83\85\81[
\83A
\83N
\83e
\83B
\83u
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80
768 property KokoPopupThreadItem : TThreadItem read FKokoPopupThreadItem;
770 function FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
771 procedure OnPlugInMenuItem( Sender : TObject );
772 procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
773 /// 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Å
774 procedure ActiveListColumnSave;
775 procedure SetActiveList(Obj: TObject);
776 property ActiveList: TObject read GetActiveList write SetActiveList;
777 /// CoolBar
\82ª
\83T
\83C
\83Y
\95Ï
\8dX
\82³
\82ê
\82½
778 procedure CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
779 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
780 procedure IndividualAbonID(Atype : Integer);
781 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
782 procedure IndividualAbon(Atag, Atype : Integer);
783 //
\93¯
\88êID
\82ðNG
\83\8f\81[
\83h
\82É
\93o
\98^
784 procedure AddIDtoNGWord(invisible : boolean);
785 //
\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Ý
786 procedure RepaintAllTabsBrowser();
787 //
\83\8a\83\93\83N
\83o
\81[
\90Ý
\92è
788 procedure SetLinkBar;
789 procedure FavoriteBrowseFolder( node: TTreeNode );
790 //
\83X
\83\8c\83b
\83h
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
791 procedure DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
792 //
\94Â
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
793 procedure DownloadList(Board: TBoard; ForceDownload: Boolean = False);
794 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
795 procedure DeleteHistory( threadItem: TThreadItem );
796 //
\83^
\83u
\82ð
\8dí
\8f\9c \83X
\83\8c\83b
\83h
\8ew
\92è
797 procedure DeleteTab(ThreadItem: TThreadItem); overload;
798 //
\83^
\83u
\82ð
\8dí
\8f\9c \83u
\83\89\83E
\83U
\83\8c\83R
\81[
\83h
\81i
\83^
\83u
\81j
\8ew
\92è
799 procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
800 //
\83^
\83u
\8dí
\8f\9c\81i
\8eÀ
\91\95\95\94\81j
801 procedure DeleteTab(index, selectIndex: Integer); overload;
802 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
803 procedure BrowserMovement(const AName: string); 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(scroll: Integer); overload;
806 //Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
807 function GetMainForm(): TComponent;
808 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
809 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
810 procedure OnGestureStart(Sender: TObject);
811 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
812 procedure OnGestureMove(Sender: TObject);
813 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
814 procedure OnGestureEnd(Sender: TObject);
815 ///
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
816 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
817 //ListView
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\82ð
\8eæ
\93¾
\82·
\82é
818 procedure SelectListItem(List: TList);
819 //
\8ew
\92è
\82µ
\82½
\83\8c\83X
\82ð
\83R
\83s
\81[
\82·
\82é
820 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
822 procedure ModifySelectList;
824 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
826 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
828 procedure SetSelectRoundName(Sender: TObject);
830 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
832 function WebBrowserClick(Sender: TObject): WordBool;
833 //!
\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é
834 procedure SetSelectComboBox();
836 //!
\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
837 procedure TaskTrayIconMessage(var Msg : TMsg); message WM_USER + 2010;
838 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
839 procedure StoredTaskTray;
840 //!
\93¯ID
\83\8c\83X
\83A
\83\93\83J
\81[
\95\
\8e¦
841 procedure ShowSameIDAncher(const AID: String);
843 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
846 TFavoriteMenuItem = class(TMenuItem)
850 property Data: Pointer read FData write FData;
853 TBBSMenuItem = class(TMenuItem)
857 property Data: Pointer read FData write FData;
860 TLinkToolButton = class(TToolButton)
864 property Data: Pointer read FData write FData;
873 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
874 YofUtils, ToolBarUtil, ToolBarSetting,
875 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
876 FavoriteArrange, AddressHistory, Gesture,
877 About, Option, Round, Splash, Sort, ListSelect, Imm,
878 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
879 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
880 InputAssistDataModule, Types, ReplaceDataModule;
883 BLANK_HTML: string = 'about:blank';
884 BROWSER_COUNT = 5; //
\83u
\83\89\83E
\83U
\82Ì
\90\94
886 DandD_THRESHOLD = 5; //D&D
\82Ìè
\87\92l
\81ipixcel)
887 //
\83v
\83\8c\83r
\83\85\81[
\83t
\83@
\83C
\83\8b\96¼
888 HTML_FILE_NAME = 'temp_preview.html';
889 //
\83\81\83b
\83Z
\81[
\83WID
890 USER_TREECLICK = WM_USER + 2000;
891 USER_RESIZED = WM_USER + 2001;
892 USER_MINIMIZED = WM_USER + 2002;
893 USER_SETLINKBAR = WM_USER + 2003;
894 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
895 USER_TASKTRAY = WM_USER + 2010;
898 procedure TGikoForm.CreateParams(var Params: TCreateParams);
901 if FormStyle in [fsNormal, fsStayOnTop] then begin
902 if BorderStyle in [bsSingle, bsSizeable] then begin
903 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
904 Params.WndParent := 0;
909 procedure TGikoForm.FormCreate(Sender: TObject);
911 TVS_NOTOOLTIPS = $0080;
917 wp: TWindowPlacement;
921 Writeln('============================================================');
922 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
924 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
925 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¢');
926 Writeln('============================================================');
929 Sort.SetSortDate(Now());
931 FTreeType := gttNone;
932 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô
934 Application.HookMainWindow(Hook);
935 FIsIgnoreResize := rtResizing;
936 //ActionList
\82ÌGuoupIndex
\82ð
\95Û
\91¶
\82µ
\82Ä
\81A0
\82É
\83N
\83\8a\83A
\82·
\82é
\81B
937 //(
\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¢)
938 //
\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
939 GetGroupIndex(GikoDM.GikoFormActionList);
940 FSearchDialog := nil;
941 FResPopupBrowser := nil;
942 CreateBrowsers(BROWSER_COUNT);
944 FUpdateExePath := '';
945 FUpdateExeArgs := '';
947 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
950 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
951 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
953 //
\83A
\83C
\83R
\83\93\82Ì
\93Ç
\82Ý
\8eæ
\82è
956 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
957 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
959 EnabledCloseButton := True;
961 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
962 ListView.ViewStyle := GikoSys.Setting.ListStyle;
964 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
966 AnimePanel.Left := 0;
968 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
970 //
\83L
\83\83\83r
\83l
\83b
\83g
971 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
973 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
974 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
975 GikoDM.MsgBarVisibleActionExecute(nil);
976 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
978 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
979 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
980 GikoDM.StatusBarVisibleActionExecute(nil);
982 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
983 TreeView.Items.BeginUpdate;
984 FavoriteTreeView.Items.BeginUpdate;
985 ListView.Items.BeginUpdate;
987 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
988 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
989 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
990 TreeView.Color := GikoSys.Setting.CabinetBackColor;
991 FavoriteTreeView.Font.Assign(TreeView.Font);
992 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
994 ListView.Font.Name := GikoSys.Setting.ListFontName;
995 ListView.Font.Size := GikoSys.Setting.ListFontSize;
996 ListView.Font.Color := GikoSys.Setting.ListFontColor;
997 ListView.Font.Style := [];
998 if GikoSys.Setting.ListFontBold then
999 ListView.Font.Style := [fsbold];
1000 if GikoSys.Setting.ListFontItalic then
1001 ListView.Font.Style := ListView.Font.Style + [fsitalic];
1003 ListViewBackGroundColor := clWhite; //
\83f
\83t
\83H
\83\8b\83g
\82É
\90Ý
\92è
\82µ
\82½
\82Ì
\82¿
1004 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; //
\83\86\81[
\83U
\92è
\8b`
\82É
\95Ï
\8dX
1005 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
1006 FOddColor := GikoSys.Setting.OddColor;
1009 TreeView.Items.EndUpdate;
1010 FavoriteTreeView.Items.EndUpdate;
1011 ListView.Items.EndUpdate;
1013 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
1014 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
1016 //
\83~
\83\85\81[
\83g
\82Ì
\8fó
\91Ô
\82ð
\90Ý
\92è
1017 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
1019 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1020 FResRangeMenuSelect := GikoSys.ResRange;
1021 case GikoSys.ResRange of
1024 GikoDM.AllResAction.Execute;
1028 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
1029 GikoDM.SelectResAction.Checked := True;
1032 case FResRangeMenuSelect of
1033 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
1034 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
1037 GikoDM.OnlyAHundredResAction.Checked := True;
1038 GikoSys.ResRange := GikoSys.Setting.ResRangeExCount;
1043 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\95\
\8e¦
\94Í
\88Í
1044 case GikoSys.Setting.ThreadRange of
1047 GikoDM.AllItemAction.Checked := True;
1052 GikoDM.LogItemAction.Checked := True;
1057 GikoDM.NewItemAction.Checked := True;
1062 GikoDM.LiveItemAction.Checked := True;
1063 ViewType := gvtLive;
1067 GikoDM.ArchiveItemAction.Checked := True;
1068 ViewType := gvtArch;
1073 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
1074 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1075 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1076 BrowserTab.Font.Style := [];
1077 if GikoSys.Setting.BrowserTabFontBold then
1078 BrowserTab.Font.Style := [fsBold];
1079 if GikoSys.Setting.BrowserTabFontItalic then
1080 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1082 BrowserTab.DoubleBuffered := True;
1083 FDragWFirst := false;
1084 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1086 //
\83u
\83\89\83E
\83U
\83^
\83u
1087 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1089 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1090 GikoDM.BrowserTabTopAction.Checked := True;
1092 GikoDM.BrowserTabBottomAction.Checked := True;
1095 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1096 GikoDM.BrowserTabTabStyleAction.Checked := True;
1097 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1098 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1100 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1103 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1104 ProgressBar.Parent := StatusBar;
1105 ProgressBar.Top := 2;
1106 ProgressBar.Left := 0;
1107 ProgressBar.Width := StatusBar.Panels[0].Width;
1108 ProgressBar.Height := StatusBar.Height - 2;
1109 ProgressBar.Position := 0;
1111 //
\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Æ)
1112 InitializeBoardPlugIns;
1114 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1115 GikoSys.ListBoardFile;
1116 //
\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É
1118 //
\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è
1119 if (SplashWindow <> nil) then begin
1120 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1124 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1125 for i := Length(BBSs) - 1 downto 0 do begin
1126 if not BBSs[i].IsBoardFileRead then
1127 GikoSys.ReadBoardFile(BBSs[i]);
1129 if SplashWindow <> nil then begin
1130 SplashWindow.ProgressBar.StepBy(20);
1131 SplashWindow.Update;
1135 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1136 RoundList := TRoundList.Create;
1137 RoundList.LoadRoundBoardFile;
1138 RoundList.LoadRoundThreadFile;
1140 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1141 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1142 Style := Style or TVS_NOTOOLTIPS;
1143 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1145 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1146 TreeView.Align := alClient;
1147 FavoriteTreeView.Align := alClient;
1148 FavoriteTreeView.Visible := False;
1150 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1153 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1154 wp.length := sizeof(wp);
1155 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1156 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1157 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1158 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1159 wp.showCmd := SW_HIDE;
1160 SetWindowPlacement(Handle, @wp);
1163 if GikoSys.Setting.WindowMax then
1164 WindowState := wsMaximized;
1166 //
\83M
\83R
\83A
\83j
\83\81
1168 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1169 if FileExists(FileName) then
1170 Animate.FileName := FileName;
1178 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1179 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1180 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1183 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1184 FHistoryList := THistoryList.Create;
1186 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1187 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1188 TreeView, FTreeType);
1190 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1191 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1192 FavoriteDM.ReadFavorite;
1194 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1195 GikoDM.ArrangeAction.Execute;
1197 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1198 case GikoSys.Setting.ListWidthState of
1200 ViewPanel.Width := 1;
1201 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1202 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1205 ViewPanel.Width := GikoSys.Setting.ListWidth;
1206 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1207 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1210 ViewPanel.Width := GikoSys.Setting.ListWidth;
1211 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1212 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1216 case GikoSys.Setting.ListHeightState of
1218 ViewPanel.Height := 1;
1219 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1220 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1223 ViewPanel.Height := GikoSys.Setting.ListHeight;
1224 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1225 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1228 ViewPanel.Height := GikoSys.Setting.ListHeight;
1229 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1230 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1235 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1236 CreateControlThread();
1238 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1239 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1241 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1244 BrowserBoardNameLabel.Caption := '';
1245 BrowserNameLabel.Caption := '';
1248 FTabHintIndex := -1;
1250 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1251 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1252 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1254 MakeDefaultINIFile();
1255 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1256 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1257 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1258 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1261 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1262 SetSelectComboBox();
1264 //
\83A
\83h
\83\8c\83X
\83o
\81[
1265 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1267 //
\83\8a\83\93\83N
\83o
\81[
1269 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1271 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1272 if not FileExists(GikoSys.GetBoardFileName) then begin
1273 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
1274 + '
\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
1275 + '
\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';
1276 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1277 GikoDM.NewBoardAction.Execute;
1280 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1281 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1283 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1284 // FLastRoundTime := 0;
1286 ListView.OnData := TListViewUtils.ListViewData;
1288 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1289 CabinetVisible( False );
1290 if GikoSys.Setting.CabinetVisible then begin
1291 i := CabinetSelectPopupMenu.Items.Count - 1;
1292 if GikoSys.Setting.CabinetIndex = i - 1 then
1293 GikoDM.CabinetHistoryAction.Execute
1294 else if GikoSys.Setting.CabinetIndex = i then
1295 GikoDM.CabinetFavoriteAction.Execute
1297 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1298 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1299 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1300 FIsIgnoreResize := rtResizing;
1301 GikoDM.CabinetBBSAction.Execute;
1304 ShowBBSTreeOld( BBSs[ 0 ] );
1305 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1308 //
\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
1309 for i := 1 to ParamCount do begin
1310 MoveToURL(ParamStr(i));
1313 GikoDM.RepaintStatusBar;
1314 StatusBarResize(Sender);
1316 dummy1.Caption := ItemReservPMenu.Caption;
1317 dummy1.Hint := ItemReservPMenu.Hint;
1319 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1320 MouseGesture := TMouseGesture.Create;
1322 {$IFDEF SPAM_FILTER_ENABLED}
1323 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1324 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1327 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1328 GikoSys.SetGikoMessage;
1330 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1331 if GikoSys.Setting.AutoLogin then
1332 GikoDM.LoginAction.Execute;
1334 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1336 //
\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è
1337 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1338 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1340 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\8f\89\8aú
\89»
1341 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1343 //
\92u
\8a·
\90Ý
\92è
\83t
\83@
\83C
\83\8b\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1344 ReplaceDM.LoadFromFile(GikoSys.GetReplaceFileName);
1346 //
\83\8c\83X
\83|
\83b
\83v
\83A
\83b
\83v
\8fÁ
\8b\8e\83^
\83C
\83}
\81[
1347 ResPopupClearTimer.Interval := GikoSys.Setting.RespopupWait;
1349 // D&D
\82ð
\8eó
\82¯
\8eæ
\82é
1350 DragAcceptFiles(ListView.Handle, True);
1352 //
\8f\89\8aú
\89»
\82É
\8e¸
\94s
\82µ
\82½
\83\82\83W
\83\85\81[
\83\8b\83`
\83F
\83b
\83N
1353 if (FavoriteDM.AbEnd) then begin
1354 GikoUtil.MsgBox(Self.Handle,
1355 '
\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 +
1356 '
\83M
\83R
\83i
\83r
\83t
\83H
\83\8b\83_
\82ð
\8aJ
\82«
\82Ü
\82·
\81Aconfig/' + Favorite.FAVORITE_FILE_NAME +
1357 '
\82ð config/~' + Favorite.FAVORITE_FILE_NAME + '(
\91O
\89ñ
\8bN
\93®
\8e\9e\82Ì
\82¨
\8bC
\82É
\93ü
\82è)
\82Å'#13#10 +
1358 '
\92u
\82«
\8a·
\82¦
\82é
\8e\96\82Å
\92¼
\82é
\89Â
\94\
\90«
\82ª
\82 \82è
\82Ü
\82·
\81B',
1359 '
\8f\89\8aú
\89»
\88Ù
\8fí');
1360 GikoDM.GikoFolderOpenAction.Execute;
1366 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1367 procedure TGikoForm.SaveCoolBarSettings;
1370 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1372 SaveMainCoolBarSettings;
1373 SaveBoardCoolBarSettings;
1374 SaveBrowserCoolBarSettings;
1377 procedure TGikoForm.SaveMainCoolBarSettings;
1382 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1383 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1384 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1385 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1386 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1387 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1390 procedure TGikoForm.SaveBoardCoolBarSettings;
1395 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1396 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1397 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1398 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1399 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1400 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1403 procedure TGikoForm.SaveBrowserCoolBarSettings;
1408 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1409 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1410 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1411 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1412 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1413 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1416 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1417 procedure TGikoForm.LoadCoolBarSettings;
1423 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1424 MainCoolBar.Bands.BeginUpdate;
1426 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1427 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1428 CoolSet := GikoSys.Setting.MainCoolSet[i];
1429 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1430 FIsIgnoreResize := rtNone;
1431 SaveCoolBarSettings;
1434 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1435 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1436 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1439 MainCoolBar.Bands.EndUpdate;
1442 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1443 ListCoolBar.Bands.BeginUpdate;
1445 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1446 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1447 CoolSet := GikoSys.Setting.ListCoolSet[i];
1448 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1449 FIsIgnoreResize := rtNone;
1450 SaveCoolBarSettings;
1453 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1454 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1455 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1458 ListCoolBar.Bands.EndUpdate;
1461 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1462 BrowserCoolBar.Bands.BeginUpdate;
1464 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1465 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1466 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1467 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1468 FIsIgnoreResize := rtNone;
1469 SaveCoolBarSettings;
1472 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1473 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1474 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1477 BrowserCoolBar.Bands.EndUpdate;
1482 procedure TGikoForm.FormShow(Sender: TObject);
1486 if FStartUp then begin
1488 ShowWindow(Application.Handle, SW_HIDE);
1489 //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½
1490 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1491 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1492 GikoDM.StdToolBarVisibleActionExecute( nil );
1493 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1494 GikoDM.AddressBarVisibleActionExecute( nil );
1495 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1496 GikoDM.LinkBarVisibleActionExecute( nil );
1497 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1498 GikoDM.ListToolBarVisibleActionExecute( nil );
1499 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1500 GikoDM.ListNameBarVisibleActionExecute( nil );
1501 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1502 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1503 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1504 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1506 // CoolBar
\95\9c\8c³
1507 LoadCoolBarSettings;
1509 //
\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é
1510 // ResetBandInfo( ListCoolBar, ListToolBar );
1511 FIsIgnoreResize := rtNone;
1513 //ActionList
\82ÌGroupIndex
\82ð
\8c³
\82É
\96ß
\82·
1514 SetGroupIndex(GikoDM.GikoFormActionList);
1516 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1517 if GikoSys.Setting.TabAutoLoadSave then begin
1518 GikoDM.TabsOpenAction.Tag := 1;
1519 GikoDM.TabsOpenAction.Execute;
1520 GikoDM.TabsOpenAction.Tag := 0;
1521 if (GikoSys.Setting.LastCloseTabURL <> '') then begin
1522 if ( FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
1523 while (FActiveContent.Browser.ReadyState <> READYSTATE_COMPLETE) and
1524 (FActiveContent.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
1525 //
\83\81\83b
\83Z
\81[
\83W
\82ð
\8eó
\82¯
\8eæ
\82ç
\82È
\82¢
\82æ
\82¤
\82É
\83X
\83\8a\81[
\83v
\82É
\95Ï
\8dX
1529 item := BBSsFindThreadFromURL( GikoSys.Setting.LastCloseTabURL );
1530 GikoSys.Setting.LastCloseTabURL := '';
1531 if (item <> nil) and (item.IsLogFile) then begin
1532 OpenThreadItem(item, item.URL);
1534 //ShowWindow(Self.Handle, SW_SHOW);
1540 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1542 // if GikoForm.WindowState <> wsMinimized then
1543 // SaveCoolBarSettings;
1545 if ( GikoSys.Setting.ShowDialogForEnd ) and
1546 (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
1551 GikoSys.Setting.LastCloseTabURL := '';
1552 if GikoSys.Setting.TabAutoLoadSave then begin
1553 GikoDM.TabsSaveAction.Execute;
1554 if (GetActiveContent <> nil) and
1555 (GetActiveContent.IsLogFile) then begin
1556 GikoSys.Setting.LastCloseTabURL := GetActiveContent.URL;
1560 if (SearchDialog <> nil) then begin
1561 if (SearchDialog.Visible) then begin
1565 SearchDialog.Release;
1568 SearchDialog := nil;
1571 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82Ì
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81AEditorForm
\82ð
\95Â
\82¶
\82é
1572 GikoDM.CloseAllEditorAction.Execute;
1574 Application.UnhookMainWindow(Hook);
1575 //
\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·
1576 FControlThread.DownloadAbort;
1577 FControlThread.Terminate;
1579 //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¶
1582 Application.Terminate;
1585 procedure TGikoForm.SaveSettingAll();
1587 wp : TWindowPlacement;
1588 WindowPlacement: TWindowPlacement;
1591 ActiveListColumnSave;
1596 WindowPlacement.length := SizeOf(TWindowPlacement);
1597 GetWindowPlacement(Self.Handle, @WindowPlacement);
1599 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1600 wp.length := sizeof(wp);
1601 GetWindowPlacement(Handle, @wp);
1602 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1603 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1604 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1605 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1606 GikoSys.Setting.WindowMax := (WindowState = wsMaximized) or
1607 (WindowPlacement.flags = WPF_RESTORETOMAXIMIZED);
1608 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1609 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1610 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1611 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1612 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1613 if GikoDM.ArrangeAction.Checked then
1614 GikoSys.Setting.ListOrientation := gloVertical
1616 GikoSys.Setting.ListOrientation := gloHorizontal;
1617 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1622 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1623 if not GikoSys.Setting.ResRangeHold then
1624 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1627 //
\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¶
1628 SaveCoolBarSettings;
1629 GikoSys.Setting.WriteWindowSettingFile;
1630 //
\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¢
1631 GikoSys.Setting.WriteNameMailSettingFile;
1633 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\90Ý
\92è
\82Ì
\95Û
\91¶
1634 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1636 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1638 //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é
1639 //
\8f\89\8aú
\89»
\88Ù
\8fí
\8e\9e\82©
\82ç
\82Ì
\8fI
\97¹
\82Å
\82Í
\95Û
\91¶
\82µ
\82È
\82¢
1640 if not (FavoriteDM.AbEnd) then begin
1641 FavoriteDM.WriteFavorite;
1646 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1648 //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
1649 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1653 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
1655 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1659 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1661 RoundList.SaveRoundFile;
1665 //
\83^
\83X
\83N
\83g
\83\8c\83C
\82Ì
\83A
\83C
\83R
\83\93\8dí
\8f\9c
1666 if (FIconData.uID <> 0) then begin
1667 Shell_NotifyIcon(NIM_DELETE, @FIconData);
1672 procedure TGikoForm.FormDestroy(Sender: TObject);
1677 //
\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¶
1678 //
\81¦
\92\8d\88Ó
\81FOnDestroy
\82Å
\8eg
\82¤
\82±
\82Æ
\82µ
\82©
\8dl
\97¶
\82³
\82ê
\82Ä
\82¢
\82È
\82¢
1679 //
\91¼
\82Å
\82â
\82é
\82Æ
\8dÄ
\95`
\89æ
\82ª
\94
\90¶
\82·
\82é
1680 if WindowState <> wsNormal then begin
1681 WindowState := wsNormal;
1683 SaveCoolBarSettings;
1684 GikoSys.Setting.WriteWindowSettingFile;
1689 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1691 if GikoSys.Setting.GestureEnabled then begin
1692 MouseGesture.OnGestureStart := nil;
1693 MouseGesture.OnGestureMove := nil;
1694 MouseGesture.OnGestureEnd := nil;
1697 MouseGesture.UnHook;
1702 //
\82¨
\8bC
\82É
\93ü
\82è
\94j
\8aü
1709 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1710 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1711 GikoSys.Setting.ShowDialogForAllTabClose := false;
1712 GikoDM.AllTabCloseAction.Execute;
1713 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1718 for i := FBrowsers.Count - 1 downto 0 do begin
1719 GikoSys.ShowRefCount('browser' + IntToStr(i), TWebBrowser(FBrowsers[i]).ControlInterface);
1720 GikoSys.ShowRefCount('document' + IntToStr(i), TWebBrowser(FBrowsers[i]).ControlInterface.Document);
1723 for i := FBrowsers.Count - 1 downto 0 do begin
1724 TWebBrowser(FBrowsers[i]).Free;
1727 FBrowsers.Capacity := 0;
1733 if BrowserNullTab <> nil then begin
1734 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
1735 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
1737 BrowserNullTab.Free;
1743 TreeView.Items.BeginUpdate;
1744 TreeView.Items.GetFirstNode.Free;
1745 TreeView.Items.Clear;
1746 TreeView.Items.EndUpdate;
1771 //FControlThread.DownloadAbort;
1772 FControlThread.Terminate;
1773 FControlThread.WaitFor;
1777 FControlThread.Free;
1779 //
\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é
1780 for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
1781 GikoForm.PlugInMenu.items[i].Free;
1783 GikoForm.PlugInMenu.Clear;
1786 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
1787 // 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Å
1788 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
1789 for i := Length(BoardGroups) - 1 downto 0 do begin
1790 //BoardGroups[i].Clear;
1791 BoardGroups[i].Free;
1795 for i := Length( BBSs ) - 1 downto 0 do begin
1796 if BBSs[ i ] <> nil then
1800 DestorySpecialBBS(BoardGroup.SpecialBBS);
1805 if FEvent <> nil then
1809 if FResPopupBrowser <> nil then begin
1810 TOleControl(FResPopupBrowser).Parent := nil;
1811 FResPopupBrowser.Free;
1817 if FPreviewBrowser <> nil then begin
1818 FPreviewBrowser.Free;
1819 FPreviewBrowser := nil;
1824 // Update
\82ª
\82¢
\82ê
\82Î
\8eÀ
\8ds
\82·
\82é
1825 if FileExists(FUpdateExePath) then begin
1826 //
\83A
\83b
\83v
\83f
\81[
\83g
\8eÀ
\8ds
1827 GikoSys.CreateProcess(FUpdateExePath, FUpdateExeArgs);
1831 //
\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
1832 procedure TGikoForm.SetBBSMenu;
1835 item : TBBSMenuItem;
1838 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
1839 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1841 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1842 CabinetSelectPopupMenu.Items[ i ].Free;
1843 CabinetMenu.Items[ i ].Free;
1844 BBSSelectPopupMenu.Items[ i ].Free;
1850 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
1851 for i := Length( BBSs ) - 1 downto 0 do begin
1853 item := TBBSMenuItem.Create( PopupMenu );
1854 item.Caption := BBSs[ i ].Title;
1855 item.Data := BBSs[ i ];
1856 item.OnClick := BBSMenuItemOnClick;
1857 CabinetSelectPopupMenu.Items.Insert( 0, item );
1858 item := TBBSMenuItem.Create( PopupMenu );
1859 item.Caption := BBSs[ i ].Title;
1860 item.Data := BBSs[ i ];
1861 item.OnClick := BBSMenuItemOnClick;
1862 CabinetMenu.Insert( 0, item );
1863 item := TBBSMenuItem.Create( PopupMenu );
1864 item.Caption := BBSs[ i ].Title;
1865 item.Data := BBSs[ i ];
1866 item.OnClick := BBSMenuItemOnClick;
1867 BBSSelectPopupMenu.Items.Insert( 0, Item );
1874 procedure TGikoForm.ReloadBBS;
1879 LockWindowUpdate(Self.Handle);
1881 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1882 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1883 GikoSys.Setting.ShowDialogForAllTabClose := false;
1884 GikoDM.AllTabCloseAction.Execute;
1885 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1886 SetContent(BrowserNullTab);
1887 //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
1888 TreeView.Items.Clear;
1890 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1892 RoundList.SaveRoundFile;
1895 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
1901 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1903 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1908 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1910 FavoriteDM.WriteFavorite;
1915 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
1916 for i := Length(BoardGroups) - 1 downto 0 do begin
1918 BoardGroups[i].Free;
1924 for i := Length( BBSs ) - 1 downto 0 do begin
1925 if BBSs[ i ] <> nil then
1934 FTreeType := gttNone;
1936 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
1938 //
\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Æ)
1939 InitializeBoardPlugIns;
1941 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1943 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1944 for i := Length(BBSs) - 1 downto 0 do begin
1945 if not BBSs[i].IsBoardFileRead then
1946 GikoSys.ReadBoardFile(BBSs[i]);
1949 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
1952 ShowBBSTree( BBSs[ 0 ] );
1954 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1955 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1956 TreeView, FTreeType);
1958 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1959 FavoriteDM.ReadFavorite;
1963 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1964 RoundList.LoadRoundBoardFile;
1965 RoundList.LoadRoundThreadFile;
1967 LockWindowUpdate(0);
1971 \todo
\89½
\8cÌ IE 7
\82Å
\82Í about:..
\82É
\82È
\82é
\82Ì
\82©
1972 (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©)
1973 \92²
\8d¸
\82·
\82é
\82±
\82Æ
1975 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1983 threadItem : TThreadItem;
1985 Protocol, Host, Path, Document, Port, Bookmark: string;
1990 ActiveFileName: string;
1995 cResPopup: TResPopupBrowser;
1996 senderBrowser :TWebBrowser;
1997 doc: IHTMLDocument2;
1999 //
\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ª
2000 // 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è)
2001 if Pos('about:..', Text) = 1 then
2002 Text2 := 'about:blank..' + Copy( Text, Length('about:..')+1, Length(Text) )
2006 if not( TObject(Sender) is TWebBrowser )then
2009 senderBrowser := TWebBrowser(Sender);
2010 doc := senderBrowser.ControlInterface.Document as IHTMLDocument2;
2014 if ((not senderBrowser.Busy) and Assigned(doc)) then begin
2015 if LowerCase(doc.charset) <> 'shift_jis' then begin
2016 doc.charset := 'shift_jis';
2024 if PreviewTimer.Enabled then
2025 PreviewTimer.Enabled := False;
2027 Application.CancelHint;
2030 if GetActiveContent <> nil then
2031 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
2033 ActiveFileName := '';
2035 FActiveContent := nil;
2039 //
\91O
\89ñ
\82Æ
\93¯
\82¶
\8fê
\8d\87\8fI
\97¹
2040 if (StatusBar.Panels[1].Text = Text2) then begin
2041 if Text2 = '' then begin
2042 if FResPopupBrowser <> nil then begin
2043 if not(Sender is TResPopupBrowser) then
2044 FResPopupBrowser.Clear
2046 TResPopupBrowser(Sender).ChildClear;
2052 StatusBar.Panels[1].Text := Text2;
2055 if FPreviewBrowser <> nil then
2056 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2058 if FResPopupBrowser <> nil then begin
2059 if not(Sender is TResPopupBrowser) then begin
2060 if (FResPopupBrowser.Visible) then begin
2061 if ResPopupClearTimer.Interval > 0 then begin
2062 ResPopupClearTimer.Enabled := True;
2063 ResPopupClearTimer.Tag := 0;
2065 FResPopupBrowser.Clear;
2069 if ResPopupClearTimer.Interval > 0 then begin
2070 ResPopupClearTimer.Enabled := True;
2071 ResPopupClearTimer.Tag := 1;
2073 TResPopupBrowser(Sender).ChildClear;
2079 if not(Sender is TResPopupBrowser) then
2080 if not GikoSys.Setting.UnActivePopup then
2081 if not GikoForm.Active then
2086 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
2087 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
2088 //
\91¼
\82Ì
\83A
\83v
\83\8a\82Å
\8f\88\97\9d\82·
\82éURL
\82©
\8am
\94F
2089 if (ExtPreviewDM.PreviewURL(Text2)) then begin
2093 Ext := AnsiLowerCase(ExtractFileExt(Text2));
2094 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
2095 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) or
2096 (Pos('http://www.nicovideo.jp/watch/', Text2) = 1) then begin
2097 if FPreviewBrowser = nil then begin
2098 FPreviewBrowser := TPreviewBrowser.Create(Self);
2099 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2100 TOleControl(FPreviewBrowser).Parent := nil;
2102 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
2103 FPreviewURL := Text2;
2104 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
2105 PreviewTimer.Enabled := True;
2106 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
2107 if (Pos('mailto:', Text2) = 1) and (GikoSys.Setting.RespopupMailTo) then begin
2108 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
2109 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
2111 p.x := p.x - senderBrowser.ClientOrigin.x;
2112 p.y := p.y - senderBrowser.ClientOrigin.y;
2113 e := doc.elementFromPoint(p.x, p.y);
2114 if (Assigned(e)) then begin
2115 CreateResPopupBrowser;
2117 if not(Sender is TResPopupBrowser) then begin
2118 if (FResPopupBrowser.Visible) then begin
2119 FResPopupBrowser.Clear;
2122 TResPopupBrowser(Sender).ChildClear;
2125 cResPopup := FResPopupBrowser.CreateNewBrowser;
2126 tmp2 := Trim(ZenToHan(e.Get_outerText));
2127 if (GikoSys.IsNumeric(tmp2)) then begin
2128 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
2129 wkIntSt := StrToInt64(tmp2);
2130 wkIntTo := StrToInt64(tmp2);
2131 cResPopup.PopupType := gptThread;
2132 HTMLCreater.SetResPopupText(cResPopup, GetActiveContent(true), wkIntSt, wkIntTo, False, False);
2134 cResPopup.PopupType := gptRaw;
2135 cResPopup.Title := s;
2139 CreateResPopupBrowser;
2141 if not(Sender is TResPopupBrowser) then begin
2142 if (FResPopupBrowser.Visible) then begin
2143 FResPopupBrowser.Clear;
2146 TResPopupBrowser(Sender).ChildClear;
2149 threadItem := GetActiveContent(true);
2150 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
2151 PathRec := Gikosys.Parse2chURL2(URL);
2152 if (PathRec.FNoParam) then begin
2156 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
2158 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
2160 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
2162 URL := GikoSys.GetBrowsableThreadURL( URL );
2163 wkIntSt := PathRec.FSt;
2164 wkIntTo := PathRec.FTo;
2166 if (wkIntSt = 0) and (wkIntTo = 0) then begin
2169 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
2171 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
2173 end else if wkIntSt > wkIntTo then begin
2178 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
2183 threadItem := BBSsFindThreadFromURL( URL );
2185 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
2186 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
2187 if board <> nil then begin
2188 if not board.IsThreadDatRead then
2189 GikoSys.ReadSubjectFile( board );
2190 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
2194 if threadItem <> nil then begin
2195 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
2196 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
2197 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
2201 cResPopup := FResPopupBrowser.CreateNewBrowser;
2202 cResPopup.PopupType := gptThread;
2203 HTMLCreater.SetResPopupText(cResPopup, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
2207 if (cResPopup <> nil) then begin
2208 ResPopupClearTimer.Enabled := False;
2210 if cResPopup.PopupType = gptRaw then begin
2211 if cResPopup.Title <> '' then begin
2212 cResPopup.TitlePopup;
2215 if cResPopup.RawDocument <> '' then begin
2217 end else if cResPopup.Title <> '' then begin
2218 cResPopup.TitlePopup;
2225 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2229 FEnabledCloseButton := Enabled;
2230 SysMenu := GetSystemMenu(Handle, False);
2232 if Enabled then begin
2233 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2235 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2238 DrawMenuBar(Handle);
2241 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2242 var AllowChange: Boolean);
2244 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
2245 // if FTreeType = gtt2ch then
2246 // FSortIndex := -1;
2249 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2250 Shift: TShiftState);
2254 if GetActiveList is TBoard then begin
2256 VK_BACK:; // UpFolderButtonClick(Sender);
2257 VK_SPACE: ListDoubleClick(Shift);
2258 VK_RETURN: ListClick;
2261 if ListView.Selected <> nil then begin
2262 pos.X := ListView.Column[ 0 ].Width;
2263 pos.Y := ListView.Selected.Top;
2265 pos.X := ListView.Left;
2266 pos.Y := ListView.Top;
2268 Windows.ClientToScreen( ListView.Handle, pos );
2269 ListPopupMenu.Popup( pos.X, pos.Y );
2272 end else begin // TBBS, TCategory
2274 VK_BACK:; // UpFolderButtonClick(Sender);
2275 VK_SPACE: ListClick;
2276 VK_RETURN: ListDoubleClick(Shift);
2279 if ListView.Selected <> nil then begin
2280 pos.X := ListView.Column[ 0 ].Width;
2281 pos.Y := ListView.Selected.Top;
2283 pos.X := ListView.Left;
2284 pos.Y := ListView.Top;
2286 Windows.ClientToScreen( ListView.Handle, pos );
2287 ListPopupMenu.Popup( pos.X, pos.Y );
2293 function TGikoForm.GetHttpState: Boolean;
2295 Result := FHttpState;
2298 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2299 Column: TListColumn);
2303 vSortIndex : Integer;
2304 vSortOrder : Boolean;
2306 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2307 if TObject( FActiveList ) is TBBS then begin
2308 orderList := GikoSys.Setting.BBSColumnOrder;
2309 vSortIndex := GikoSys.Setting.BBSSortIndex;
2310 vSortOrder := GikoSys.Setting.BBSSortOrder;
2311 end else if TObject( FActiveList ) is TCategory then begin
2312 orderList := GikoSys.Setting.CategoryColumnOrder;
2313 vSortIndex := GikoSys.Setting.CategorySortIndex;
2314 vSortOrder := GikoSys.Setting.CategorySortOrder;
2315 end else if TObject( FActiveList ) is TBoard then begin
2316 orderList := GikoSys.Setting.BoardColumnOrder;
2317 vSortIndex := GikoSys.Setting.BoardSortIndex;
2318 vSortOrder := GikoSys.Setting.BoardSortOrder;
2322 id := Integer( orderList[ idx ] );
2325 if vSortIndex = id then
2326 vSortOrder := not vSortOrder
2328 vSortOrder := id = 0;
2331 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2334 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2335 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2339 DefaultDraw := True;
2340 //
\82È
\82º
\82©
\96³
\8fð
\8c\8f\82ÅExit
\82µ
\82Ä
\82¢
\82é
2342 DefaultDraw := False;
2343 if (cdsSelected in State) or (cdsHot in State) then begin
2344 Sender.Canvas.Brush.Color := clHighlight;
2345 Sender.Canvas.Font.Color := clHighlightText;
2347 Sender.Canvas.Brush.Color := clBtnFace;
2348 Sender.Canvas.Font.Color := clBtnText;
2350 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2351 Sender.Canvas.FillRect(ARect);
2352 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2355 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2360 Nodes := TreeView.Items;
2362 for i := 0 to Nodes.Count - 1 do begin
2363 if Nodes.Item[i].Data = Data then begin
2364 Result := Nodes.Item[i];
2371 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2372 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2373 Headers: OleVariant; var Cancel: WordBool);
2378 kMenuName: string = 'menu:';
2383 FKokoPopupThreadItem := nil;
2384 if Pos(kMenuName, URL) <> 0 then begin
2385 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2387 if not GikoSys.IsNumeric(sNo) then Exit;
2391 KokoPopupMenu.PopupComponent := nil;
2392 if (Sender is TComponent) then
2393 KokoPopupMenu.PopupComponent := TComponent(Sender);
2394 //
\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Á
2395 if not (Sender is TResPopupBrowser) then begin
2396 if (FResPopupBrowser <> nil) and (FResPopupBrowser.CurrentBrowser.Visible = True) then begin
2397 FResPopupBrowser.Clear;
2400 if (Sender <> FResPopupBrowser.CurrentBrowser) then begin
2401 TResPopupBrowser(Sender).ChildClear;
2404 FKokoPopupThreadItem := GetActiveContent(true);
2405 KokoPopupMenu.Tag := StrToInt(sNo);
2406 KokoPopupMenu.Popup(p.x, p.y);
2407 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2408 Cancel := not GikoSys.Setting.OpenMailer;
2410 //@
\82Æ.
\82ð
\8aÜ
\82Ü
\82È
\82¢URL
\82Í
\83\81\81[
\83\8b\83A
\83h
\83\8c\83X
\82Æ
\82Ý
\82È
\82³
\82È
\82¢
2411 //
\8eå
\82Éage
\81Asage
\91Î
\8dô
2412 if (Pos('@', URL) = 0) or (Pos('.', URL) = 0) then begin
2419 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2420 const ARect: TRect; var DefaultDraw: Boolean);
2424 IsBoardNode: Boolean;
2430 Category: TCategory;
2434 DefaultDraw := True;
2436 if FTreeType = gttHistory then Exit;
2438 TreeView.Canvas.Font.Color := clBlue;
2439 IsBoardNode := False;
2440 for i := 0 to TreeView.Items.Count - 1 do begin
2442 if not TreeView.Items[i].IsVisible then
2445 if TObject(TreeView.Items[i].Data) is TCategory then begin
2446 if TreeView.Items[i].Expanded then
2449 IsBoardNode := False;
2450 Category := TCategory(TreeView.Items[i].Data);
2451 for j := 0 to Category.Count - 1 do begin
2452 Board := Category.Items[j];
2453 if Board <> nil then begin
2454 if Board.UnRead > 0 then begin
2462 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2463 IsBoardNode := True;
2464 Board := TBoard(TreeView.Items[i].Data);
2466 Cnt := Board.UnRead;
2472 Bitmap := TBitmap.Create;
2474 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2475 Bitmap.Canvas.Font.Style := [fsBold];
2476 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2481 NodeRect := TreeView.Items[i].DisplayRect(True);
2484 CntText := '(' + IntToStr(Cnt) + ')'
2485 else if Cnt = 1 then
2489 TextWidth := TreeView.Canvas.TextWidth(CntText);
2491 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2493 NodeRect.Left + NodeWidth + TextWidth + 8,
2495 DrawText(TreeView.Canvas.Handle,
2499 DT_SINGLELINE or DT_VCENTER);
2501 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2504 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2505 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2508 Category: TCategory;
2511 DefaultDraw := True;
2513 if FTreeType = gttHistory then Exit;
2515 TreeView.Canvas.Font.Style := [];
2516 if Node <> nil then begin
2517 if TObject(Node.Data) is TCategory then begin
2518 Category := TCategory(Node.Data);
2519 for i := 0 to Category.Count - 1 do begin
2520 Board := Category.Items[i];
2521 if Board <> nil then begin
2522 if Board.UnRead > 0 then begin
2523 TreeView.Canvas.Font.Style := [fsBold];
2528 end else if TObject(Node.Data) is TBoard then begin
2529 Board := TBoard(Node.Data);
2530 if Board.UnRead > 0 then
2531 TreeView.Canvas.Font.Style := [fsBold];
2536 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2538 TreeView.Invalidate;
2540 if TObject(Node.Data) is TBBS then begin
2541 TBBS(Node.Data).NodeExpand := True;
2542 end else if TObject(Node.Data) is TCategory then begin
2543 TCategory(Node.Data).NodeExpand := True;
2544 end else if TObject(Node.Data) is TBoard then begin
2545 TBoard(Node.Data).NodeExpand := True;
2549 procedure TGikoForm.ListViewAllSelect;
2554 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2556 if csDestroying in Self.ComponentState then
2558 AddMessageList(Msg, nil, Icon);
2560 // *************************************************************************
2561 //!
\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
2562 // *************************************************************************
2563 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2567 boardPlugIn : TBoardPlugIn;
2572 if csDestroying in Self.ComponentState then
2574 if Item.DownType = gdtBoard then
2575 ATitle := Item.Board.Title
2577 ATitle := Item.ThreadItem.Title;
2579 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2581 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2583 if Item.DownType = gdtBoard then begin
2586 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2587 if GetActiveList = Item.Board then begin
2589 //
\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é
2590 if (GikoSys.Setting.AutoSortThreadList) then begin
2591 GikoSys.Setting.BoardSortIndex := 0;
2592 GikoSys.Setting.BoardSortOrder := True;
2594 Sort.SetSortDate(Now());
2595 SetActiveList(Item.Board);
2597 Item.Board.Modified := True;
2598 Item.Board.IsThreadDatRead := True;
2601 end else if Item.DownType = gdtThread then begin
2604 Item.ThreadItem.NewArrival := True;
2605 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2606 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2607 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2608 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2609 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2610 Item.ThreadItem.Title := Res.FTitle;
2611 ATitle := Item.ThreadItem.Title;
2612 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2613 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2614 ATitle := Res.FTitle;
2616 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2617 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2618 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2622 if GikoSys.Setting.BrowserTabVisible then begin
2623 if GetActiveContent = Item.ThreadItem then
2624 InsertBrowserTab(Item.ThreadItem)
2625 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2626 InsertBrowserTab(Item.ThreadItem, True)
2628 InsertBrowserTab(Item.ThreadItem, False);
2631 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2632 InsertBrowserTab(Item.ThreadItem);
2635 Application.ProcessMessages;
2637 if Item.State = gdsComplete then begin
2639 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2643 PlaySound('NewDiff');
2644 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2649 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2650 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2651 // 2ch
\88È
\8aO
\82Í
\81A1000
\82ª
\8dÅ
\8d\82\82©
\95s
\96¾
\82È
\82Ì
\82Å
\81A2ch
\8cÀ
\92è
\82É
\82·
\82é
2652 if (Item.ThreadItem.ParentBoard.Is2ch) then begin
2653 Item.ThreadItem.Round := False;
2654 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);
2658 //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
2660 RefreshListView(Item.ThreadItem);
2663 end else if Item.State = gdsNotModify then begin
2665 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2666 //SetContent(Item.ThreadItem);
2667 InsertBrowserTab(Item.ThreadItem);
2669 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2670 PlaySound('NoChange');
2671 Screen.Cursor := crDefault;
2672 end else if Item.State = gdsAbort then begin
2674 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2675 end else if Item.State = gdsError then begin
2680 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2681 // if Item.ResponseCode = 302 then
2682 // 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);
2688 if FWorkCount < 0 then FWorkCount := 0;
2689 if FWorkCount = 0 then begin
2691 Animate.Active := False;
2693 Screen.Cursor := crDefault;
2700 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2702 // SetProgressValue(Number, 0, AWorkCountMax);
2703 // ProgressBar.Visible := True;
2704 if csDestroying in Self.ComponentState then
2707 ProgressBar.Position := 0;
2708 ProgressBar.Max := AWorkCountMax;
2709 FDownloadTitle := AWorkTitle;
2710 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2711 FDownloadMax := AWorkCountMax;
2714 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2716 if csDestroying in Self.ComponentState then
2718 ProgressBar.Position := 0;
2719 if FDownloadMax <> 0 then
2720 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2723 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2725 if csDestroying in Self.ComponentState then
2727 ProgressBar.Position := AWorkCount;
2728 // SetProgressValue(Number, AWorkCount);
2729 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2732 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2734 ListItem: TListItem;
2736 MessageListView.Items.BeginUpdate;
2738 ListItem := MessageListView.Items.Add;
2739 ListItem.Caption := ACaption;
2740 ListItem.Data := AObject;
2741 ListItem.MakeVisible(False);
2743 gmiOK: ListItem.ImageIndex := 0;
2744 gmiSAD: ListItem.ImageIndex := 1;
2745 gmiNG: ListItem.ImageIndex := 2;
2746 gmiWhat: ListItem.ImageIndex := 3;
2749 MessageListView.Items.EndUpdate;
2753 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
2754 procedure TGikoForm.ReleaseOldestBrowser;
2758 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2759 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2760 TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2761 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2767 function TGikoForm.InsertBrowserTab(
2768 ThreadItem : TThreadItem;
2769 ActiveTab : Boolean = True
2772 i, j, idx : Integer;
2773 favItem : TFavoriteThreadItem;
2774 newBrowser : TBrowserRecord;
2779 if Threaditem = nil then Exit;
2781 if ThreadItem.IsLogFile then begin
2782 //
\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é
2783 //
\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é
2784 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2785 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2786 j := FBrowsers.IndexOf(FActiveContent.Browser);
2787 if j = BROWSER_COUNT - 1 then
2788 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2790 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2791 if not FHistoryList.AddHistory( favItem, TreeView, FTreeType ) then
2794 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2795 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2796 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2797 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2798 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2799 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2800 ReleaseOldestBrowser;
2801 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2802 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2803 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2805 if ActiveTab then begin
2806 BrowserTab.TabIndex := i;
2807 BrowserTab.OnChange(nil);
2814 idx := BrowserTab.TabIndex;
2815 newBrowser := TBrowserRecord.Create;
2816 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2817 ReleaseOldestBrowser;
2818 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2819 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2820 newBrowser.thread := ThreadItem;
2821 newBrowser.Repaint := true;
2823 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2824 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2825 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2826 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2830 if ActiveTab then begin
2831 BrowserTab.TabIndex := 0;
2833 end else if GikoSys.Setting.BrowserTabAppend = gtaLast then begin
2834 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2835 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2836 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2840 if ActiveTab then begin
2841 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2842 BrowserTab.TabIndex := 0
2844 BrowserTab.TabIndex := i;
2847 //
\83^
\83u
\88Ê
\92u
\82ð
\8eæ
\93¾
2849 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2850 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2851 TWebBrowser(FBrowsers[1]) then begin
2856 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2859 //
\83^
\83u
\82ª
\96³
\82¢
\82Æ
\82«
\82È
\82Ç
\91Î
\8dô
2860 if (ins < 0) then begin
2863 BrowserTab.Tabs.InsertObject(ins, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2864 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2865 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2866 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2868 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2873 if ActiveTab then begin
2874 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2875 BrowserTab.TabIndex := 0
2877 BrowserTab.TabIndex := ins;
2880 Result := newBrowser;
2881 if(ActiveTab) or (idx = -1) then begin
2882 BrowserTab.OnChange(nil);
2885 if BrowserNullTab = nil then begin
2886 BrowserNullTab := TBrowserRecord.Create;
2887 BrowserNullTab.Browser := Browser;
2889 // if BrowserNullTab.thread <> ThreadItem then begin
2890 // BrowserNullTab.Movement := '';
2892 BrowserNullTab.thread := ThreadItem;
2893 Result := BrowserNullTab;
2894 BrowserTab.TabIndex := -1;
2895 SetContent(BrowserNullTab);
2898 if GikoSys.Setting.URLDisplay then
2899 AddressComboBox.Text := ThreadItem.URL;
2903 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2911 ThreadItem: TThreadItem;
2912 Thread: TBrowserRecord;
2913 ThreadTitle, ThreadPTitle: string;
2914 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2917 idx := BrowserTab.TabIndex;
2918 if (not FStartUp) and
2919 (FActiveContent <> nil) and
2920 (FActiveContent.Thread <> Thread.Thread) and
2921 (FActiveContent.Browser <> nil) and
2922 (Assigned(FActiveContent.Browser.ControlInterface.Document)) then begin
2925 FActiveContent.Thread.ScrollTop := FActiveContent.Browser.OleObject.Document.Body.ScrollTop;
2928 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2933 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2934 Thread.Browser.Navigate(BLANK_HTML);
2935 BrowserBoardNameLabel.Caption := '';
2936 ItemBoardImage.Picture := nil;
2937 BrowserNameLabel.Caption := '';
2938 ItemImage.Picture := nil;
2939 BrowserNullTab.Thread := nil;
2940 //TOleControl(BrowserNullTab.Browser).Visible := true;
2941 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2942 FActiveContent := nil;
2944 end else if Thread.Browser = nil then begin
2945 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2946 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2947 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2948 ReleaseOldestBrowser;
2949 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2950 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2953 ThreadTitle := Thread.Thread.Title;
2954 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2955 //ThreadScrollTop := Thread.Thread.ScrollTop;
2956 if Thread.Thread.IsLogFile then begin
2957 if not FileExists(Thread.Thread.GetThreadFileName) then begin
2958 Thread.Thread.DeleteLogFile;
2962 ThreadIsLog := Thread.Thread.IsLogFile;
2963 ThreadItem := Thread.Thread;
2964 ThreadNewArraical := Thread.Thread.NewArrival;
2965 //ThreadUnRead := Thread.Thread.UnRead;
2966 BBSID := ThreadItem.ParentBoard.BBSID;
2967 FileName := ThreadItem.FileName;
2969 if GetCapture = ListView.Handle then
2972 Screen.Cursor := crHourGlass;
2976 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2977 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2978 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2980 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2981 if (not Assigned(Thread.Browser.ControlInterface.Document)) then begin
2982 Thread.Browser.Navigate('about:blank');
2984 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2985 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2986 Application.ProcessMessages;
2987 if idx <> BrowserTab.TabIndex then begin
2992 if (Thread <> nil) and (ThreadItem <>nil) then begin
2993 BrowserBoardNameLabel.Caption := ThreadPTitle;
2994 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2995 BrowserNameLabel.Caption := ThreadTitle;
2996 ItemImage.Picture := nil;
2998 if ThreadNewArraical then
2999 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
3001 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
3003 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
3005 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
3006 BrowserNameLabel.Left := ItemImage.Left + 20;
3009 //ActiveContent
\81@
\82Ì
\8dX
\90V
3010 FActiveContent := Thread;
3012 if not ThreadIsLog then begin
3013 Self.Caption := GikoDataModule.CAPTION_NAME ;
3014 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\8fÁ
\8b\8e
3015 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
3017 Thread.Browser.BringToFront;
3018 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
3019 doc := Thread.Browser.OleObject.Document;
3021 doc.charset := 'Shift_JIS';
3028 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
3029 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\95\
\8e¦
3030 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
3031 StatusBar.Panels[THREADSIZE_PANEL].Width :=
3032 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
3033 //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«
3034 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
3035 if Thread.Repaint then begin
3036 Thread.Repaint := false;
3038 Thread.Browser.OnStatusTextChange := nil;
3039 LockWindowUpdate(Thread.Browser.ParentWindow);
3040 HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
3041 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
3042 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
3046 RefreshListView(ThreadItem);
3048 Screen.Cursor := crDefault;
3052 function TGikoForm.GetActiveContent(popup :Boolean = false): TThreadItem;
3055 if FActiveContent <> nil then begin
3056 Result := FActiveContent.Thread;
3058 (FResPopupBrowser <> nil) and (FResPopupBrowser.CurrentBrowser.Visible = True) then
3059 if (FResPopupBrowser.CurrentBrowser.Thread <> nil) then begin
3060 Result := FResPopupBrowser.CurrentBrowser.Thread;
3070 procedure TGikoForm.SetActiveList(Obj: TObject);
3074 // if FActiveList <> Obj then begin
3077 if ListView.Selected <> nil then
3078 idx := ListView.Selected.Index
3084 ListView.Items.Count := 0;
3085 ListView.Items.Clear;
3086 ListView.Selected := nil;
3087 // ListView.Columns.Clear;
3088 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
3089 and (FActiveContent.Thread.IsLogFile) then begin
3091 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
3093 on E: Exception do begin
3094 //
\83X
\83\8c\88ê
\97\97DL
\8cã
\82È
\82Ç
\82ÉFActiveContent
\82Ì
\8e\9d\82ÂThread
\82ª
3095 //
\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é
3096 ReleaseBrowser(FActiveContent);
3097 FActiveContent.Thread := nil;
3098 Self.Caption := GikoDataModule.CAPTION_NAME;
3102 Self.Caption := GikoDataModule.CAPTION_NAME;
3103 //Application.Title := CAPTION_NAME;
3105 // ActiveListColumnSave;
3107 Screen.Cursor := crHourGlass;
3109 if Obj is TBBS then begin
3110 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3111 end else if Obj is TCategory then begin
3112 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3113 end else if Obj is TBoard then begin
3114 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3117 Screen.Cursor := crDefault;
3120 if idx >= 0 then begin
3121 if idx >= ListView.Items.Count then
3122 idx := ListView.Items.Count - 1;
3123 ListView.ItemIndex := idx;
3124 ListView.ItemFocused := ListView.Items.Item[ idx ];
3130 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
3131 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
3132 function TGikoForm.GetActiveList: TObject;
3134 Result := FActiveList;
3137 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
3139 SetListViewType(AViewType, '', False);
3142 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
3147 for i := Length( BBSs ) - 1 downto 0 do begin
3148 BBSs[i].SelectText := SelectText;
3149 BBSs[i].KubetsuChk := KubetsuChk;
3151 BoardGroup.SpecialBBS.SelectText := SelectText;
3152 BoardGroup.SpecialBBS.KubetsuChk := KubetsuChk;
3154 ViewType := AViewType;
3155 if ActiveList is TBoard then begin
3156 Board := TBoard(ActiveList);
3158 //gvtAll: ListView.Items.Count := Board.Count;
3159 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
3160 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
3161 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
3162 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
3163 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
3167 SetActiveList(Board);
3171 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
3172 const ARect: TRect; var DefaultDraw: Boolean);
3178 if ListView.Items.Count = 0 then begin
3179 DefaultDraw := true;
3180 ListView.Canvas.Brush.Color := ListView.Color;
3181 ListView.Canvas.FillRect(ARect);
3185 ListView.Canvas.Font.Color := clWindowText;
3186 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3189 ListView.Canvas.Font.Color := clBlue;
3190 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';
3193 ListView.Canvas.Font.Color := clGreen;
3194 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3197 ListView.Canvas.Font.Color := clFuchsia;
3198 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';
3201 ListView.Canvas.Font.Color := clMaroon;
3202 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90¶
\91¶
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3205 ListView.Canvas.Font.Color := clNavy;
3206 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';
3207 if GetActiveList is TBoard then
3208 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
3216 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
3217 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
3218 ListView.Canvas.TextOut(p.X, p.Y, s);
3220 DefaultDraw := True;
3224 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
3226 Item: TDownloadItem;
3228 if not Board.IsThreadDatRead then
3229 GikoSys.ReadSubjectFile(Board);
3230 Item := TDownloadItem.Create;
3232 Item.Board := Board;
3233 Item.DownType := gdtBoard;
3234 Item.ForceDownload := ForceDownload;
3235 FControlThread.AddItem(Item);
3236 if FWorkCount = 0 then begin
3238 Animate.Active := True;
3241 Screen.Cursor := crAppStart;
3249 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
3251 Item: TDownloadItem;
3253 Item := TDownloadItem.Create;
3255 Item.ThreadItem := ThreadItem;
3256 Item.DownType := gdtThread;
3257 Item.ForceDownload := ForceDownload;
3258 FControlThread.AddItem(Item);
3259 if FWorkCount = 0 then begin
3261 Animate.Active := True;
3264 Screen.Cursor := crAppStart;
3272 procedure TGikoForm.PlaySound(SoundEventName: string);
3276 if not GikoSys.Setting.Mute then begin
3277 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
3278 if FileExists(FileName) then begin
3279 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
3280 sndPlaySound(nil, SND_SYNC);
3281 Application.ProcessMessages;
3283 sndPlaySound(PChar(FileName), SND_ASYNC);
3289 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
3290 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3292 FHistoryList.DeleteHistory( threadItem, TreeView, TreeType );
3295 procedure TGikoForm.ShowBBSTreeOld(
3303 FavoriteTreeView.Visible := False;
3304 FavoriteToolBar.Hide;
3305 TreeView.Visible := True;
3307 b := CabinetSelectPopupMenu.Items.Count - 1;
3308 for i := 0 to b do begin
3309 item := CabinetSelectPopupMenu.Items[ i ];
3310 if item is TBBSMenuItem then begin
3311 if TBBSMenuItem( item ).Data = inBBS then begin
3312 item.Checked := True;
3313 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3314 CabinetMenu.Items[ i ].Checked := True;
3315 GikoSys.Setting.CabinetIndex := i;
3319 item.Checked := False;
3320 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3321 CabinetMenu.Items[ i ].Checked := False;
3323 CabinetSelectToolButton.Caption := inBBS.Title;
3325 GikoDM.CabinetHistoryAction.Checked := False;
3326 GikoDM.CabinetFavoriteAction.Checked := False;
3328 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3329 FTreeType := gtt2ch;
3330 HistoryToolBar.Hide;
3331 FActiveBBS := inBBS;
3332 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3333 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3334 //?c???[??g?b?v?????I????
3335 if GetActiveList = nil then
3336 TreeView.Selected := TreeView.Items[0]
3338 for i := 0 to TreeView.Items.Count - 1 do begin
3339 if TreeView.Items[i].Data = GetActiveList then begin
3340 TreeView.Selected := TreeView.Items[i];
3344 TreeView.Selected := TreeView.Items[0]
3352 procedure TGikoForm.ShowBBSTree(
3361 FavoriteTreeView.Visible := False;
3362 FavoriteToolBar.Hide;
3363 TreeView.Visible := True;
3365 b := CabinetSelectPopupMenu.Items.Count - 1;
3366 for i := 0 to b do begin
3367 item := CabinetSelectPopupMenu.Items[ i ];
3368 if item is TBBSMenuItem then begin
3369 if TBBSMenuItem( item ).Data = inBBS then begin
3370 item.Checked := True;
3371 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3372 CabinetMenu.Items[ i ].Checked := True;
3373 GikoSys.Setting.CabinetIndex := i;
3377 item.Checked := False;
3378 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3379 CabinetMenu.Items[ i ].Checked := False;
3381 CabinetSelectToolButton.Caption := inBBS.Title;
3383 GikoDM.CabinetHistoryAction.Checked := False;
3384 GikoDM.CabinetFavoriteAction.Checked := False;
3386 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3387 or (not (CabinetPanel.Visible)) then begin
3388 FTreeType := gtt2ch;
3389 HistoryToolBar.Hide;
3390 FActiveBBS := inBBS;
3391 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3392 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3393 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3394 if GetActiveList = nil then begin
3396 TreeClick( TreeView.Items[0] );
3400 for i := 0 to TreeView.Items.Count - 1 do begin
3401 if TreeView.Items[i].Data = GetActiveList then begin
3402 TreeClick( TreeView.Items[i] );
3406 TreeClick( TreeView.Items[0] );
3414 procedure TGikoForm.ShowHistoryTree;
3419 if CabinetPanel.Visible then begin
3420 if FTreeType = gttHistory then begin
3421 CabinetVisible( False );
3422 GikoDM.CabinetHistoryAction.Checked := False;
3424 GikoDM.CabinetHistoryAction.Checked := True;
3427 CabinetVisible( True );
3428 GikoDM.CabinetHistoryAction.Checked := True;
3431 // BBS...BBS, History, Favorite
3432 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3434 FavoriteTreeView.Visible := False;
3435 TreeView.Visible := True;
3437 GikoDM.CabinetBBSAction.Checked := False;
3438 GikoDM.CabinetFavoriteAction.Checked := False;
3440 if FTreeType <> gttHistory then begin
3441 b := CabinetSelectPopupMenu.Items.Count - 1;
3442 for i := 0 to b do begin
3443 item := CabinetSelectPopupMenu.Items[ i ];
3444 if item is TBBSMenuItem then begin
3445 item.Checked := False;
3446 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3447 CabinetMenu.Items[ i ].Checked := False;
3451 FTreeType := gttHistory;
3452 HistoryToolBar.Show;
3453 FavoriteToolBar.Hide;
3454 FHistoryList.SetTreeNode( TreeView );
3455 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3459 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3461 ChangeEvent: TTVChangedEvent;
3462 ChangingEvent: TTVChangingEvent;
3466 if Item is TCategory then
3467 bbs := TCategory( Item ).ParenTBBS
3468 else if Item is TBoard then
3469 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3473 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3474 if Item <> FActiveList then begin
3476 ChangingEvent := nil;
3478 if not CallEvent then begin
3479 ChangeEvent := TreeView.OnChange;
3480 ChangingEvent := TreeView.OnChanging;
3483 if not CallEvent then begin
3484 TreeView.OnChange := nil;
3485 TreeView.OnChanging := nil;
3487 //Application.ProcessMessages;
3488 for i := 0 to TreeView.Items.Count - 1 do begin
3489 if TreeView.Items[i].Data = Item then begin
3490 TreeView.Items[i].Selected := True;
3492 TreeClick(TreeView.Items[i]);
3496 //Application.ProcessMessages;
3498 if not CallEvent then begin
3499 TreeView.OnChange := ChangeEvent;
3500 TreeView.OnChanging := ChangingEvent;
3505 if Item <> FActiveList then begin
3506 ActiveListColumnSave;
3507 if (Item is TBBS) or (Item is TCategory) then begin
3508 ListView.Columns.Clear;
3509 SetActiveList( Item );
3510 end else if Item is TBoard then begin
3511 if not TBoard( Item ).IsThreadDatRead then begin
3512 Screen.Cursor := crHourGlass;
3514 if not TBoard( Item ).IsThreadDatRead then
3515 GikoSys.ReadSubjectFile(TBoard( Item ));
3517 Screen.Cursor := crDefault;
3520 Sort.SetSortDate(Now());
3521 SetActiveList( Item );
3526 if Item is TBoard then begin // not TCategory
3527 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3528 if GikoSys.Setting.ListWidthState = glsMax then begin
3529 GikoDM.BrowserMinAction.Execute;
3530 if GikoForm.Visible then
3534 if GikoSys.Setting.ListHeightState = glsMax then begin
3535 GikoDM.BrowserMinAction.Execute;
3536 if GikoForm.Visible then
3543 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3544 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3546 listItem : TListItem;
3547 threadItem : TThreadItem;
3554 if not (GetActiveList is TBoard) then Exit;
3555 listItem := ListView.GetItemAt( X, Y );
3556 if listItem = nil then Exit;
3557 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3559 threadItem := TThreadItem(ListItem.Data);
3560 InsertBrowserTab(threadItem, False);
3561 if threadItem.IsLogFile then
3562 ListView.UpdateItems(listItem.Index, listItem.Index);
3566 //
\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Å
3567 if (ssDouble in Shift) then
3568 ListDoubleClick(Shift)
3576 Windows.ClientToScreen( ListView.Handle, pos );
3577 ListPopupMenu.Popup( pos.X, pos.Y );
3583 procedure TGikoForm.ListClick;
3585 ListItem: TListItem;
3586 ThreadItem: TThreadItem;
3588 if ListView.SelCount <> 1 then Exit;
3589 ListItem := ListView.Selected;
3590 if ListItem = nil then Exit;
3591 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3593 ThreadItem := TThreadItem(ListItem.Data);
3594 if ThreadItem.IsLogFile then begin
3595 InsertBrowserTab(ThreadItem);
3596 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3598 InsertBrowserTab(ThreadItem);
3601 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3602 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3603 if GikoSys.Setting.ListWidthState = glsMin then begin
3604 GikoDM.BrowserMaxAndFocusAction.Execute;
3607 if GikoSys.Setting.ListHeightState = glsMin then begin
3608 GikoDM.BrowserMaxAndFocusAction.Execute;
3614 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3616 ThreadItem: TThreadItem;
3619 shiftDown := (ssShift in Shift);
3621 if ListView.Selected = nil then Exit;
3623 if TObject(ListView.Selected.Data) is TCategory then begin
3624 SelectTreeNode(ListView.Selected.Data, True);
3625 end else if TObject(ListView.Selected.Data) is TBoard then begin
3626 SelectTreeNode(ListView.Selected.Data, True)
3627 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3628 Application.ProcessMessages;
3629 ThreadItem := TThreadItem(ListView.Selected.Data);
3630 DownloadContent(ThreadItem, shiftDown);
3632 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3633 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3634 if GikoSys.Setting.ListWidthState = glsMin then begin
3635 GikoDM.BrowserMaxAction.Execute;
3636 GikoDM.SetFocusForBrowserAction.Execute;
3639 if GikoSys.Setting.ListHeightState = glsMin then begin
3640 GikoDM.BrowserMaxAction.Execute;
3641 GikoDM.SetFocusForBrowserAction.Execute;
3648 procedure TGikoForm.BrowserMovement(const AName: string);
3650 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3651 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3652 and (FActiveContent <> nil) then begin
3653 FActiveContent.Move(AName);
3656 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
3657 procedure TGikoForm.BrowserMovement(scroll: Integer);
3659 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3660 and (FActiveContent <> nil) then begin
3661 FActiveContent.Move(scroll);
3664 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3666 if TObject(Node.Data) is TBBS then begin
3667 TBBS(Node.Data).NodeExpand := False;
3668 end else if TObject(Node.Data) is TCategory then begin
3669 TCategory(Node.Data).NodeExpand := False;
3670 end else if TObject(Node.Data) is TBoard then begin
3671 TBoard(Node.Data).NodeExpand := False;
3673 if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3674 TreeClick(TreeView.Selected);
3678 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3680 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3682 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3684 TreeSplitter.Visible := isVisible;
3685 CabinetPanel.Visible := isVisible;
3686 GikoDM.CabinetVisibleAction.Checked := isVisible;
3689 procedure TGikoForm.SelectListItem(List: TList);
3691 TmpListItem: TListItem;
3695 TmpListItem := ListView.Selected;
3696 while TmpListItem <> nil do begin
3697 List.Add(TmpListItem.Data);
3698 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3703 procedure TGikoForm.FormResize(Sender: TObject);
3706 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3707 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3709 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3710 if GikoSys.Setting.ListWidthState = glsMin then begin
3711 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3712 ViewPanel.Width := ThreadMainPanel.Width - 80;
3715 if GikoSys.Setting.ListHeightState = glsMin then begin
3716 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3717 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3721 FIsIgnoreResize := rtResizing;
3722 PostMessage( Handle, USER_RESIZED, 0, 0 );
3727 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3731 FTabHintIndex := -1;
3732 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3733 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3734 DeleteTab(i, BrowserTab.TabIndex);
3739 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3743 FTabHintIndex := -1;
3744 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3745 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3746 DeleteTab(i, BrowserTab.TabIndex);
3751 procedure TGikoForm.DeleteTab(index, selectIndex: Integer);
3753 browserRec : TBrowserRecord;
3757 browserRec := TBrowserRecord(BrowserTab.Tabs.Objects[index]);
3759 if browserRec.Browser <> nil then begin
3760 doc := browserRec.Browser.OleObject.Document;
3761 browserRec.Thread.ScrollTop := doc.Body.ScrollTop;
3764 browserRec.Thread.ScrollTop := 0;
3767 if(FActiveContent = browserRec) then
3768 FActiveContent := nil;
3769 if browserRec.Browser <> nil then begin
3770 j := FBrowsers.IndexOf(browserRec.Browser);
3772 FBrowsers.Move(j, BROWSER_COUNT - 1);
3775 BrowserTab.Tabs.BeginUpdate;
3777 GikoSys.Setting.LastCloseTabURL := browserRec.Thread.URL;
3779 if ( BrowserTab.Tabs.Count - 1 = index ) and
3780 ( BrowserTab.TabRect(index).Left
3781 <= BrowserTab.DisplayRect.Left ) then begin
3782 BrowserTab.ScrollTabs(-1);
3784 BrowserTab.Tabs.Delete(index);
3785 if selectIndex > index then begin
3786 BrowserTab.TabIndex := selectIndex - 1;
3788 if BrowserTab.Tabs.Count -1 >= selectIndex then
3789 BrowserTab.TabIndex := selectIndex
3791 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3794 BrowserTab.Tabs.EndUpdate;
3796 if BrowserTab.Tabs.Count = 0 then begin
3797 BrowserNullTab.Thread := nil;
3800 if(BrowserTab.TabIndex <> -1) and
3801 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3802 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
3803 ReleaseOldestBrowser;
3805 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3806 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3807 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3808 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3811 if( FActiveContent = nil) then
3812 BrowserTab.OnChange(nil);
3814 function TGikoForm.Hook(var Message: TMessage): Boolean;
3816 //
\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Ì
3817 //
\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ð
3821 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3823 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3827 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3829 bBoard, bCategory : Boolean;
3831 bBoard := (GetActiveList is TBoard);
3832 bCategory := (GetActiveList is TCategory);
3833 ItemRoundPMenu.Visible := bBoard;
3834 ItemReservPMenu.Visible := bBoard;
3835 LPMSep01.Visible := bBoard;
3836 ListRoundPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3837 ListReservPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3838 LPMSep02.Visible := bCategory or bBoard;
3839 KidokuPMenu.Visible := bBoard;
3840 MidokuPMenu.Visible := bBoard;
3841 UrlCopyPMenu.Visible := bCategory or bBoard;
3842 NameUrlCopyPMenu.Visible := bCategory or bBoard;
3843 AllSelectPMenu.Visible := bCategory or bBoard;
3844 LPMSep05.Visible := bCategory or bBoard;
3845 DeletePMenu.Visible := bBoard;
3846 LPMSep06.Visible := bCategory or bBoard;
3847 BoardFavoriteAddMenu.Visible := bCategory;
3848 ThreadFavoriteAddMenu.Visible := bBoard;
3849 SaveThreadFile.Visible := bBoard;
3850 AddRoundNameMenu(ItemReservPMenu);
3851 AddRoundNameMenu(ListReservPMenu);
3854 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3856 FClickNode := TreeView.Selected;
3857 if FClickNode = nil then begin
3858 TreeSelectThreadPupupMenu.Visible := False;
3859 TreeSelectBoardPupupMenu.Visible := False;
3860 TPMSep01.Visible := False;
3861 TreeSelectURLPupupMenu.Visible := False;
3862 TreeSelectNamePupupMenu.Visible := False;
3863 TreeSelectNameURLPupupMenu.Visible := False;
3864 TreeSelectFavoriteAddPupupMenu.Visible := False;
3865 TreeSelectLogDeleteSeparator.Visible := False;
3866 TreeSelectLogDeletePopupMenu.Visible := False;
3867 end else if TObject(FClickNode.Data) is TBoard then begin
3868 TreeSelectThreadPupupMenu.Visible := False;
3869 TreeSelectBoardPupupMenu.Visible := True;
3870 TPMSep01.Visible := True;
3871 TreeSelectURLPupupMenu.Visible := True;
3872 TreeSelectNamePupupMenu.Visible := True;
3873 TreeSelectNameURLPupupMenu.Visible := True;
3874 TreeSelectFavoriteAddPupupMenu.Visible := True;
3875 TreeSelectLogDeleteSeparator.Visible := False;
3876 TreeSelectLogDeletePopupMenu.Visible := False;
3877 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3878 TreeSelectThreadPupupMenu.Visible := False;
3879 TreeSelectBoardPupupMenu.Visible := True;
3880 TPMSep01.Visible := True;
3881 TreeSelectURLPupupMenu.Visible := True;
3882 TreeSelectNamePupupMenu.Visible := True;
3883 TreeSelectNameURLPupupMenu.Visible := True;
3884 TreeSelectFavoriteAddPupupMenu.Visible := True;
3885 TreeSelectLogDeleteSeparator.Visible := False;
3886 TreeSelectLogDeletePopupMenu.Visible := False;
3887 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3888 TreeSelectThreadPupupMenu.Visible := True;
3889 TreeSelectBoardPupupMenu.Visible := False;
3890 TPMSep01.Visible := True;
3891 TreeSelectURLPupupMenu.Visible := True;
3892 TreeSelectNamePupupMenu.Visible := True;
3893 TreeSelectNameURLPupupMenu.Visible := True;
3894 TreeSelectFavoriteAddPupupMenu.Visible := True;
3895 TreeSelectLogDeleteSeparator.Visible := True;
3896 TreeSelectLogDeletePopupMenu.Visible := True;
3897 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3898 TreeSelectThreadPupupMenu.Visible := True;
3899 TreeSelectBoardPupupMenu.Visible := False;
3900 TPMSep01.Visible := True;
3901 TreeSelectURLPupupMenu.Visible := True;
3902 TreeSelectNamePupupMenu.Visible := True;
3903 TreeSelectNameURLPupupMenu.Visible := True;
3904 TreeSelectFavoriteAddPupupMenu.Visible := True;
3905 TreeSelectLogDeleteSeparator.Visible := True;
3906 TreeSelectLogDeletePopupMenu.Visible := True;
3907 end else if (TObject(FClickNode.Data) is TCategory) then begin
3908 TreeSelectThreadPupupMenu.Visible := False;
3909 TreeSelectBoardPupupMenu.Visible := False;
3910 TPMSep01.Visible := False;
3911 TreeSelectURLPupupMenu.Visible := False;
3912 TreeSelectNamePupupMenu.Visible := True;
3913 TreeSelectNameURLPupupMenu.Visible := False;
3914 TreeSelectFavoriteAddPupupMenu.Visible := False;
3915 TreeSelectLogDeleteSeparator.Visible := False;
3916 TreeSelectLogDeletePopupMenu.Visible := False;
3917 end else if FClickNode.IsFirstNode then begin
3918 TreeSelectThreadPupupMenu.Visible := False;
3919 TreeSelectBoardPupupMenu.Visible := False;
3920 TPMSep01.Visible := False;
3921 TreeSelectURLPupupMenu.Visible := False;
3922 TreeSelectNamePupupMenu.Visible := True;
3923 TreeSelectNameURLPupupMenu.Visible := False;
3924 TreeSelectFavoriteAddPupupMenu.Visible := False;
3925 TreeSelectLogDeleteSeparator.Visible := False;
3926 TreeSelectLogDeletePopupMenu.Visible := False;
3928 TreeSelectThreadPupupMenu.Visible := False;
3929 TreeSelectBoardPupupMenu.Visible := False;
3930 TPMSep01.Visible := False;
3931 TreeSelectURLPupupMenu.Visible := False;
3932 TreeSelectNamePupupMenu.Visible := False;
3933 TreeSelectNameURLPupupMenu.Visible := False;
3934 TreeSelectFavoriteAddPupupMenu.Visible := False;
3935 TreeSelectLogDeleteSeparator.Visible := False;
3936 TreeSelectLogDeletePopupMenu.Visible := False;
3940 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
3941 var ppDisp: IDispatch; var Cancel: WordBool);
3950 threadItem: TThreadItem;
3951 aElement : IHTMLElement;
3952 senderBrowser : TWebBrowser;
3953 doc : IHTMLDocument2;
3956 Writeln(IntToStr(Integer(ppDisp)));
3960 if not( TObject(Sender) is TWebBrowser )then
3963 senderBrowser := TWebBrowser(Sender);
3964 doc := senderBrowser.ControlInterface.Document as IHTMLDocument2;
3965 if not Assigned(doc) then
3968 aElement := doc.activeElement;
3969 if not Assigned(aElement) then
3972 Text := aElement.Get_outerText;
3973 Html := aElement.Get_outerHTML;
3975 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
3976 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
3977 if GikoSys.Setting.ResAnchorJamp then begin
3979 Text := ZenToHan(Trim(Text));
3981 if(AnsiPos('>>', Text) = 1) then begin
3982 //Text := Copy(Text, 3, Length(Text) - 2);
3985 //Text := Copy(Text, 2, Length(Text) - 1);
3989 if AnsiPos('-', Text) <> 0 then begin
3990 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
3991 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
3992 wkIntTo := StrToIntDef(Text, 0);
3993 if wkIntTo < wkIntSt then
3996 wkIntSt := StrToIntDef(Text, 0);
3999 if wkIntSt <> 0 then begin
4000 FActiveContent.IDAnchorPopup('');
4001 MoveHisotryManager.pushItem(FActiveContent);
4002 if (Sender is TResPopupBrowser) then begin
4003 TResPopupBrowser(Sender).ChildClear;
4005 GetActiveContent(true),
4006 GetActiveContent(true).URL + '&st=' +
4007 IntToStr(wkIntSt) + '&to=' + IntToStr(wkIntSt));
4009 BrowserMovement(IntToStr(wkIntSt));
4014 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
4016 URL := GikoSys.GetHRefText(Html);
4017 URL := GikoSys.HTMLDecode(URL);
4018 if AnsiPos('BE:', URL) = 1 then begin
4019 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
4020 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
4021 threadItem := FActiveContent.Thread;
4022 if threadItem = nil then Exit;
4023 URL := BE_PHP_URL + BNum + '&u=d'
4024 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
4027 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
4028 ( AnsiPos('ftp://', URL) = 1) then begin
4029 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
4030 if GikoSys.Setting.LinkAddAddressBar then begin
4031 idx := AddressComboBox.Items.IndexOf(URL);
4032 if idx = -1 then begin
4033 AddressComboBox.Items.Insert(0, URL);
4034 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
4035 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
4037 AddressComboBox.Items.Delete(idx);
4038 AddressComboBox.Items.Insert(0, URL);
4041 if (Sender is TResPopupBrowser) then begin
4042 TResPopupBrowser(Sender).ChildClear
4045 MoveHisotryManager.pushItem(FActiveContent);
4052 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
4054 if Mouse.Capture <> 0 then
4056 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4057 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
4058 FBrowserSizeWidth := ViewPanel.Width;
4060 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
4061 FBrowserSizeHeight := ViewPanel.Height;
4063 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4064 if ViewPanel.Width < 2 then begin
4065 ViewPanel.Width := 1;
4066 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
4067 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
4068 GikoSys.Setting.ListWidthState := glsMax;
4069 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
4070 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
4071 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
4072 GikoSys.Setting.ListWidthState := glsMin;
4074 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
4075 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
4076 GikoSys.Setting.ListWidthState := glsNormal;
4079 if ViewPanel.Height < 2 then begin
4080 ViewPanel.Height := 1;
4081 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4082 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4083 GikoSys.Setting.ListHeightState := glsMax;
4084 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
4085 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4086 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4087 GikoSys.Setting.ListHeightState := glsMin;
4089 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4090 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4091 GikoSys.Setting.ListHeightState := glsNormal;
4094 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
4095 FBrowserSizeHeight := ViewPanel.Height
4096 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
4097 FBrowserSizeWidth := ViewPanel.Width;}
4100 procedure TGikoForm.BrowserTabChange(Sender: TObject);
4105 BrowserTab.Tabs.BeginUpdate;
4107 if not BrowserTab.Dragging then begin
4108 FTabHintIndex := -1;
4109 BrowserTab.Hint := '';
4110 idx := BrowserTab.TabIndex;
4111 if idx = -1 then begin
4112 SetContent(BrowserNullTab);
4114 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
4115 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
4116 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
4118 FBrowsers.Move(j ,0);
4120 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
4121 (FActiveContent.Browser <> BrowserNullTab.Browser) and
4122 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
4123 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4125 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
4126 ReleaseOldestBrowser;
4128 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
4129 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
4130 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4132 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
4133 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
4134 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4136 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
4137 AddressComboBox.Text := GetActiveContent.URL;
4139 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
4140 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
4143 GikoDM.SetFocusForBrowserAction.Execute;
4147 BrowserTab.Tabs.EndUpdate;
4152 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
4153 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
4159 if Button = mbMiddle then begin
4160 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
4163 p := BrowserTab.ScreenToClient(p);
4164 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
4166 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4167 end else if Button = mbLeft then begin
4168 FDragWFirst := true;
4169 FMouseDownPos.X := X;
4170 FMouseDownPos.Y := Y;
4175 procedure TGikoForm.SetBrowserTabState;
4177 CoolBand: TCoolBand;
4179 BrowserBottomPanel.AutoSize := False;
4180 if GikoSys.Setting.BrowserTabVisible then begin
4182 BrowserTab.Tabs.BeginUpdate;
4184 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
4185 BrowserTab.Style := tsTabs;
4186 if GikoSys.Setting.BrowserTabPosition = gtpTop then
4187 BrowserTab.TabPosition := tpTop
4189 BrowserTab.TabPosition := tpBottom;
4190 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
4191 BrowserTab.TabPosition := tpTop;
4192 BrowserTab.Style := tsButtons;
4194 BrowserTab.TabPosition := tpTop;
4195 BrowserTab.Style := tsFlatButtons
4198 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
4199 BrowserTab.Parent := BrowserTabToolBar;
4200 BrowserBottomPanel.Hide;
4201 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4202 if CoolBand <> nil then
4203 CoolBand.Visible := True;
4205 BrowserTab.Parent := BrowserBottomPanel;
4206 BrowserTab.Top := 0;
4207 BrowserTab.Left := 0;
4208 BrowserBottomPanel.Show;
4209 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4210 if CoolBand <> nil then
4211 CoolBand.Visible := False;
4214 BrowserTab.Tabs.EndUpdate;
4218 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4219 if CoolBand <> nil then
4220 CoolBand.Visible := False;
4221 BrowserBottomPanel.Visible := False;
4222 GikoDM.AllTabCloseAction.Execute;
4226 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
4227 Y: Integer; State: TDragState; var Accept: Boolean);
4231 idx := BrowserTab.IndexOfTabAt(X, Y);
4232 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
4235 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
4240 FDragWFirst := False;
4241 idx := BrowserTab.IndexOfTabAt(X, Y);
4243 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
4246 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
4247 Shift: TShiftState; X, Y: Integer);
4250 ThreadItem: TThreadItem;
4253 TabIdx := BrowserTab.IndexOfTabAt(x, y);
4255 if ( ssLeft in Shift ) then begin
4256 if (FDragWFirst) then begin
4257 BrowserTab.EndDrag(false);
4258 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
4261 BrowserTab.EndDrag(false);
4262 FDragWFirst := false;
4265 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
4266 Application.CancelHint;
4267 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
4268 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
4269 BrowserTab.Hint := ThreadItem.Title;
4270 Application.ShowHint := True;
4272 BrowserTab.Hint := '';
4273 Application.ShowHint := True;
4275 FTabHintIndex := TabIdx;
4280 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
4281 const pDisp: IDispatch; var URL: OleVariant);
4283 BrowserRecord :TBrowserRecord;
4285 doc : IHTMLDocument2;
4286 threadItem : TThreadItem;
4288 if TObject(Sender) is TWebBrowser then begin
4289 BrowserRecord := nil;
4290 if TWebBrowser(Sender) <> Browser then begin
4291 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4292 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
4293 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
4297 if BrowserRecord <> nil then begin
4298 if BrowserRecord.Event <> nil then
4299 BrowserRecord.Event.Free;
4300 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, BrowserRecord.Browser.ControlInterface.Document, HTMLDocumentEvents2);
4301 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4302 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4305 if GetActiveContent <> nil then begin
4306 if FEvent <> nil then
4308 FEvent := THTMLDocumentEventSink.Create(Self, Browser.ControlInterface.Document, HTMLDocumentEvents2);
4309 FEvent.OnContextMenu := OnDocumentContextMenu;
4310 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4312 if FEvent <> nil then begin
4320 if (BrowserRecord <> nil) and
4321 Assigned( BrowserRecord.Thread ) then begin
4322 threadItem := BrowserRecord.Thread;
4324 if (threadItem.JumpAddress > 0) then begin
4325 if threadItem.UnRead then begin
4326 threadItem.UnRead := False;
4328 RefreshListView(threadItem);
4330 //
\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®
4331 //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4332 if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4333 BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4334 threadItem.JumpAddress := 0;
4336 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4339 end else if threadItem.UnRead then begin
4340 threadItem.UnRead := False;
4342 BrowserRecord.Move('new');
4343 RefreshListView(threadItem);
4344 end else if threadItem.ScrollTop <> 0 then begin
4346 doc := BrowserRecord.Browser.ControlInterface.Document as IHTMLDocument2;
4347 (doc.body as IHTMLElement2).ScrollTop := threadItem.ScrollTop;
4350 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4355 LockWindowUpdate(0);
4358 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4360 AddRoundNameMenu(RoundNamePopupMenu.Items);
4363 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4369 Item := TMenuItem.Create(Self);
4370 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4371 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4373 Item := TMenuItem.Create(Self);
4374 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4375 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4377 Item := TMenuItem.Create(Self);
4378 Item.Caption := '-';
4380 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4381 Item := TMenuItem.Create(Self);
4382 Item.Caption := RoundList.RoundNameList[i];
4383 Item.OnClick := SetSelectRoundName;
4388 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4390 threadItem : TThreadItem;
4392 if ParentName <> 'dummy1' then begin
4393 SetSelectItemRound(RoundFlag, RoundName);
4395 threadItem := GetActiveContent;
4396 if threadItem <> nil then begin
4397 threadItem.RoundName := RoundName;
4399 RoundList.RoundNameList.Add(RoundName);
4400 threadItem.Round := RoundFlag;
4405 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4410 List := TList.Create;
4412 SelectListItem(List);
4413 for i := 0 to List.Count - 1 do begin
4414 if TObject(List[i]) is TBoard then begin
4415 TBoard(List[i]).RoundName := RoundName;
4417 RoundList.RoundNameList.Add(RoundName);
4418 TBoard(List[i]).Round := RoundFlag;
4419 end else if TObject(List[i]) is TThreadItem then begin
4420 if TThreadItem(List[i]).IsLogFile then begin
4421 TThreadItem(List[i]).RoundName := RoundName;
4423 RoundList.RoundNameList.Add(RoundName);
4424 TThreadItem(List[i]).Round := RoundFlag;
4433 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4435 MenuItem: TMenuItem;
4437 if Sender is TMenuItem then begin
4438 MenuItem := TMenuItem(Sender);
4439 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4444 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4449 if CoolBar = nil then
4451 for i := 0 to CoolBar.Bands.Count - 1 do begin
4452 if CoolBar.Bands[i].Control = Control then begin
4453 Result := CoolBar.Bands[i];
4459 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4461 if BrowserTab.Parent = BrowserTabToolBar then
4462 BrowserTab.Width := BrowserTabToolBar.Width;
4465 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4470 procedure TGikoForm.SetMenuFont;
4472 // GikoSys.MenuFont(MenuToolBar.Font);
4473 // MenuToolBar.Buttons[0].AutoSize := False;
4474 // MenuToolBar.Buttons[0].AutoSize := True;
4475 // MenuToolBar.Font.Color := clMenuText;
4476 GikoSys.MenuFont(MainCoolBar.Font);
4477 MenuToolBar.Buttons[0].AutoSize := False;
4478 MenuToolBar.Buttons[0].AutoSize := True;
4479 MainCoolBar.AutoSize := False;
4480 MainCoolBar.AutoSize := True;
4481 GikoSys.MenuFont(ListCoolBar.Font);
4482 GikoSys.MenuFont(BrowserCoolBar.Font);
4483 // MenuToolBar.Font.Color := clMenuText;
4486 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4490 if FavoriteDM.Modified then begin
4493 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4494 NewMenu := TMenuItem.Create(MainMenu);
4495 NewMenu.Action := GikoDM.FavoriteAddAction;
4496 FavoriteMenu.Add(NewMenu);
4497 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4498 NewMenu := TMenuItem.Create(FavoriteMenu);
4499 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4500 FavoriteMenu.Add(NewMenu);
4501 //
\83Z
\83p
\83\8c\81[
\83^
4502 FavoriteMenu.InsertNewLineAfter(NewMenu);
4503 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4504 FavoriteDM.Modified := false;
4508 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4511 NewMenu: array of TMenuItem;
4513 SetLength(NewMenu, Node.Count);
4514 Node := Node.getFirstChild;
4516 while ( Node <> nil ) do begin
4517 NewMenu[i] := TFavoriteMenuItem.Create(nil);
4518 NewMenu[i].AutoHotkeys := maAutomatic;
4519 NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4520 TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4522 if TObject(Node.Data) is TFavoriteFolder then begin
4523 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4524 CreateFavMenu(Node, NewMenu[i]);
4525 end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4526 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4527 NewMenu[i].OnClick := FavoriteClick;
4528 end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4529 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4530 NewMenu[i].OnClick := FavoriteClick;
4533 Node := Node.getNextSibling;
4535 MenuItem.Add(NewMenu);
4538 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4540 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';
4541 TitleAdd: String = '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á';
4543 Dlg : TFavoriteAddDialog;
4549 if Item is TFavoriteBoardItem then
4550 Item := TFavoriteBoardItem( Item ).Item
4551 else if Item is TFavoriteThreadItem then
4552 Item := TFavoriteThreadItem( Item ).Item;
4554 Node := FavoriteTreeView.Items.GetFirstNode;
4555 if Item is TBoard then begin
4556 ItemURL := TBoard( Item ).URL;
4557 while Node <> nil do begin
4559 if TObject( Data ) is TFavoriteBoardItem then begin
4560 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4561 if Application.MessageBox(PChar(MsgAdd) , PChar(TitleAdd), MB_YESNO ) = IDNO then
4566 Node := Node.GetNext;
4568 Dlg := TFavoriteAddDialog.Create(Self);
4570 Dlg.SetBoard( TBoard( Item ) );
4575 end else if Item is TThreadItem then begin
4576 ItemURL := TThreadItem( Item ).URL;
4577 while Node <> nil do begin
4579 if TObject( Data ) is TFavoriteThreadItem then begin
4580 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
4581 if Application.MessageBox( PChar(MsgAdd), PChar(TitleAdd), MB_YESNO ) = IDNO then
4586 Node := Node.GetNext;
4588 Dlg := TFavoriteAddDialog.Create(Self);
4590 Dlg.SetThreadItem( TThreadItem( Item ) );
4600 procedure TGikoForm.FavoriteClick(Sender: TObject);
4602 FavoriteClick( Sender, True );
4605 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4608 ThreadItem: TThreadItem;
4609 FavBoard: TFavoriteBoardItem;
4610 FavThread: TFavoriteThreadItem;
4614 if Sender is TFavoriteMenuItem then
4615 Item := TFavoriteMenuItem(Sender).Data
4616 else if Sender is TLinkToolButton then
4617 Item := TLinkToolButton(Sender).Data
4618 else if Sender is TTreeNode then
4619 Item := TTreeNode( Sender ).Data
4623 if TObject(Item) is TFavoriteBoardItem then begin
4624 FavBoard := TFavoriteBoardItem(Item);
4625 Board := FavBoard.Item;
4626 if Board <> nil then begin
4627 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4628 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4629 SelectTreeNode(Board, True);
4631 end else if TObject(Item) is TFavoriteThreadItem then begin
4632 FavThread := TFavoriteThreadItem(Item);
4633 ThreadItem := FavThread.Item;
4634 if ThreadItem = nil then
4637 InsertBrowserTab(ThreadItem, ActiveTab);
4639 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4640 if GikoSys.Setting.ListWidthState = glsMin then begin
4641 GikoDM.BrowserMaxAndFocusAction.Execute;
4644 if GikoSys.Setting.ListHeightState = glsMin then begin
4645 GikoDM.BrowserMaxAndFocusAction.Execute;
4651 procedure TGikoForm.BBSMenuItemOnClick(
4656 if Sender is TBBSMenuItem then
4657 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4661 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4663 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4666 //!
\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é)
4667 procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4669 stRes, edRes : Int64;
4670 browserRec : TBrowserRecord;
4671 threadNumber : String;
4672 doc : IHTMLDocument2;
4676 Thread.JumpAddress := 0;
4677 //
\83^
\83u
\82ð
\90¶
\90¬
4678 browserRec := InsertBrowserTab(Thread);
4679 if (browserRec <> nil) then begin
4680 // JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N
\82·
\82é
4681 threadNumber := ChangeFileExt(Thread.FileName, '');
4682 GikoSys.GetPopupResNumber( URL, stRes, edRes );
4683 //
\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
4684 if (StrToInt64(threadNumber) = stRes) then begin
4685 if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4686 and (Pos('&st=' + threadNumber , URL) = 0) then begin
4690 if ( stRes > 0 ) then begin
4691 Thread.JumpAddress := stRes;
4693 //
\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é
4694 if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4695 DownloadContent(Thread);
4696 end else if (not browserRec.Repaint) and (stRes > 0) then begin
4697 browserRec.Move(IntToStr(stRes));
4698 Thread.JumpAddress := 0;
4700 doc := browserRec.Browser.ControlInterface.Document as IHTMLDocument2;
4701 if Assigned(doc) then
4702 Thread.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
4709 procedure TGikoForm.MoveToURL(const inURL: string; KeyMask: Boolean = False);
4711 protocol, host, path, document, port, bookmark : string;
4712 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4714 BBSID, BBSKey: string;
4715 {tmpBoard,} Board: TBoard;
4716 ThreadItem: TThreadItem;
4719 tmpThread : TThreadItem;
4720 shiftDown : Boolean;
4724 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4725 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4726 //
\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é
4727 if not KeyMask then begin
4728 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4729 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4730 if shiftDown then begin
4731 GikoSys.OpenBrowser(inURL, gbtUserApp);
4733 end else if ctrlDown then begin
4734 GikoSys.OpenBrowser(inURL, gbtIE);
4739 //=====
\83v
\83\89\83O
\83C
\83\93
4742 bi := Length(BoardGroups) - 1;
4743 for i := 1 to bi do begin
4744 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4745 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4748 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4749 Board := BBSsFindBoardFromURL( boardURL );
4752 if Board = nil then begin
4754 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4755 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4758 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4759 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4760 ShowBBSTree( BBSs[ 1 ] );
4763 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4764 if not Board.IsThreadDatRead then begin
4765 GikoSys.ReadSubjectFile( Board );
4769 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4770 if ThreadItem = nil then begin
4771 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4772 ThreadItem := tmpThread;
4773 Board.Insert( 0, ThreadItem );
4774 if ActiveList is TBoard then begin
4775 if TBoard(ActiveList) = Board then
4776 ListView.Items.Count := ListView.Items.Count + 1;
4781 OpenThreadItem(ThreadItem, inURL);
4788 Board := BBSsFindBoardFromURL(
4789 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4791 if Board <> nil then begin
4792 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4793 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4794 SelectTreeNode( Board, True );
4802 // 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¢
4806 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4807 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4808 Board := BBSsFindBoardFromURL( boardURL );
4809 if Board = nil then begin
4810 //
\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
4811 GikoSys.OpenBrowser(inURL, gbtUserApp);
4814 //
\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é
4816 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4817 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4818 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4819 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4820 GikoSys.OpenBrowser(inURL, gbtUserApp);
4825 if not Board.IsThreadDatRead then
4826 GikoSys.ReadSubjectFile(Board);
4827 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4828 ThreadItem := Board.FindThreadFromURL( URL );
4829 //
\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)
4830 if ThreadItem = nil then begin
4831 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4834 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ª
\82È
\82¢
\82È
\82ç
\90¶
\90¬
\82·
\82é
\81B
4835 if ThreadItem = nil then begin
4836 ThreadItem := TThreadItem.Create( nil, Board, URL );
4837 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4838 Board.Insert(0, ThreadItem);
4839 if ActiveList is TBoard then begin
4840 if TBoard(ActiveList) = Board then
4841 ListView.Items.Count := ListView.Items.Count + 1;
4844 //
\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é
4845 if (not ThreadItem.IsLogFile) then begin
4846 if AnsiPos(Host, Board.URL) = 0 then
4847 ThreadItem.DownloadHost := Host
4849 ThreadItem.DownloadHost := '';
4851 OpenThreadItem(ThreadItem, inURL);
4855 Board := BBSsFindBoardFromURL( inURL );
4856 if Board = nil then begin
4857 GikoSys.OpenBrowser(inURL, gbtAuto);
4859 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4860 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4861 SelectTreeNode( Board, True );
4866 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4868 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4869 CoolBarResized( Sender, MainCoolBar );
4872 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4873 Shift: TShiftState);
4875 if Key = VK_RETURN then
4876 GikoDM.MoveToAction.Execute;
4879 procedure TGikoForm.BrowserEnter(Sender: TObject);
4881 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4884 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4886 CDS:PCopyDataStruct;
4890 CDS := Message.CopyDataStruct;
4891 GetMem(PC, CDS^.cbData);
4893 lstrcpy(PC,CDS^.lpData);
4894 SetString(sURL, PC,lstrlen(PC));
4899 Message.Result := 1;
4902 procedure TGikoForm.WndProc(var Message: TMessage);
4904 senderBrowser : TWebBrowser;
4910 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4913 if Message.WParam = SC_MINIMIZE then begin
4915 PostMessage(Handle, USER_MINIMIZED, 0, 0);
4918 TreeClick( TreeView.Selected );
4923 if (GikoSys.Setting.StoredTaskTray) then begin
4930 USER_DOCUMENTCOMPLETE:
4931 if (Message.WParam <> 0) and
4932 (TObject(Message.WParam) is TWebBrowser) then begin
4933 senderBrowser := TWebBrowser( Message.WParam );
4934 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
4937 if (TObject(Message.WParam) is TResPopupBrowser) then begin
4939 TResPopupBrowser( Message.WParam ).Clear;
4942 end else if (TObject(Message.WParam) is TPreviewBrowser) then begin
4943 if FPreviewBrowser <> nil then begin
4944 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
4954 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
4959 //
\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Í
4960 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
4961 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
4962 if Msg.CharCode in [VK_BACK] then begin
4963 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4964 if Msg.KeyData > 0 then begin
4967 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4971 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
4972 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
4975 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4978 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
4979 if Msg.CharCode in [VK_BACK] then begin
4980 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4981 if Msg.KeyData > 0 then begin
4984 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4987 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
4990 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4994 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
4998 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
5003 PreviewTimer.Enabled := False;
5007 ARect := FPreviewBrowser.GetWindowRect(p);
5009 FPreviewBrowser.PreviewImage(FPreviewURL);
5011 if ARect.Bottom > Screen.DesktopHeight then begin
5012 OffsetRect(ARect, 0, -(ARect.Bottom - Screen.DesktopHeight));
5014 if (ARect.Right > Screen.DesktopWidth) then begin
5015 OffsetRect(ARect, -(ARect.Right - Screen.DesktopWidth), 0);
5017 if (ARect.Left < Screen.DesktopLeft) then begin
5018 OffsetRect(ARect, +(Screen.DesktopLeft - ARect.Left), 0);
5020 if (ARect.Top < Screen.DesktopTop) then begin
5021 OffsetRect(ARect, 0, (Screen.DesktopTop - ARect.Top));
5024 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST,
5025 ARect.Left, ARect.Top,
5026 (ARect.Right - ARect.Left), (ARect.Bottom - ARect.Top),
5027 SWP_NOACTIVATE or SWP_HIDEWINDOW);
5029 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
5030 FPreviewBrowserRect := ARect;
5033 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
5037 if PreviewTimer.Enabled then
5038 PreviewTimer.Enabled := False;
5040 //Window
\8aO
\82É
\88Ú
\93®
\82µ
\82½
\82Æ
\82«
\82Í
\8fÁ
\82¦
\82é
\82æ
\82¤
\82É
\82·
\82é
\82½
\82ß
\95\9c\8a\88
5041 if (FResPopupBrowser <> nil) and (IsWindowVisible(FResPopupBrowser.Handle)) then begin
5042 //
\89E
\83N
\83\8a\83b
\83N
\82Ì
\8e\9e\82Í
\8fÁ
\82³
\82È
\82¢
\82æ
\82¤
\82É
\8fð
\8c\8f\92Ç
\89Á
5043 if (Message.MouseMsg <> WM_RBUTTONUP) then begin
5044 FResPopupBrowser.Clear;
5048 if (FPreviewBrowser <> nil)
5049 and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
5050 //
\82±
\82±
\82Å
\8fÁ
\82³
\82ê
\82é
\82Ì
\82ª
\96â
\91è
5051 //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Å
\95\
\8e¦
\94Í
\88Í
\94»
\92è
\82Å
\82«
\82Ä
\82¢
\82é
\82Í
\82¸
5052 Pos := Mouse.CursorPos;
5053 Pos.X := Pos.X + Left;
5054 Pos.Y := Pos.Y + Top;
5055 if (FPreviewBrowserRect.Left > Pos.X) or
5056 (FPreviewBrowserRect.Right < Pos.X) or
5057 (FPreviewBrowserRect.Top > Pos.Y) or
5058 (FPreviewBrowserRect.Bottom < Pos.Y) then begin
5059 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
5063 Message.Result := 1;
5066 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
5068 GikoDM.MsgBarCloseAction.Execute;
5071 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
5073 doc: IHtmlDocument2;
5074 Range: IHTMLTxtRange;
5077 ThreadItem: TThreadItem;
5080 FactiveContent.IDAnchorPopup('');
5082 doc := FactiveContent.Browser.ControlInterface.Document as IHtmlDocument2;
5083 if not Assigned(doc) then
5086 Range := doc.selection.createRange as IHTMLTxtRange;
5087 if not Assigned(Range) then
5090 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
5091 s := ZenToHan(Trim(s));
5092 if GikoSys.IsNumeric(s) then begin
5093 Num := StrToInt64Def(s, -1);
5094 ThreadItem := GetActiveContent(true);
5095 if (ThreadItem <> nil) and (Num <= ThreadItem.Count)
5096 and (Num > 0)then begin
5097 CreateResPopupBrowser;
5098 FResPopupBrowser.CreateNewBrowser.PopupType := gptThread;
5099 HTMLCreater.SetResPopupText(FResPopupBrowser.CreateNewBrowser, ThreadItem, Num, Num, False, False);
5100 FResPopupBrowser.Popup;
5109 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
5111 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
5112 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
5114 if FTreeType = gttHistory then begin
5115 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
5116 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
5119 TreeView.Items.Clear;
5123 procedure TGikoForm.SetLinkBar;
5127 ToolButton: TLinkToolButton;
5128 MenuItem: TMenuItem;
5129 oldIgnoreResize : TResizeType;
5131 oldIgnoreResize := FIsIgnoreResize;
5132 FIsIgnoreResize := rtResizing;
5133 MainCoolBar.Bands.BeginUpdate;
5135 LinkBarPopupMenu.Items.Clear;
5136 for i := LinkToolBar.ButtonCount - 1 downto 0 do
5137 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
5138 LinkToolBar.Buttons[i].Free;
5139 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5140 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5141 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5142 ToolButton := TLinkToolButton.Create(LinkToolBar);
5143 // ToolButton.Parent := LinkToolBar;
5144 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
5145 MenuItem := TMenuItem.Create(Self);
5146 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
5147 LinkBarPopupMenu.Items.Add(MenuItem);
5148 ToolButton.MenuItem := MenuItem;
5149 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
5150 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
5151 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
5152 ToolButton.OnClick := FavoriteClick;
5153 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
5154 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
5155 ToolButton.OnClick := FavoriteClick;
5157 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
5158 ToolButton.Left := 10000;
5159 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
5160 ToolButton.AutoSize := True;
5161 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
5162 ToolButton.OnDragOver := FavoriteDragOver;
5163 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
5164 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
5165 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
5166 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
5167 //ToolButton.DragMode := dmAutomatic;
5168 ToolButton.DragMode := dmManual;
5169 ToolButton.PopupMenu := FavoriteTreePopupMenu;
5171 LinkToolBar.InsertControl(ToolButton);
5176 { if LinkToolBar.ButtonCount = 0 then begin
5177 ToolButton := TLinkToolButton.Create(LinkToolBar);
5178 ToolButton.Style := tbsButton;
5179 ToolButton.ImageIndex := -1;
5180 ToolButton.Caption := '';
5181 LinkToolBar.InsertControl(ToolButton);
5184 MainCoolBar.Bands.EndUpdate;
5185 LoadCoolBarSettings;
5186 FIsIgnoreResize := oldIgnoreResize;
5190 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5198 if Sender = FavoriteTreeView then begin
5199 Node := FavoriteTreeView.GetNodeAt(X, Y);
5204 bound := Node.DisplayRect( False );
5205 height := bound.Bottom - bound.Top;
5206 if (bound.Top + height / 2) <= Y then
5207 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
5212 if Node.IsFirstNode then
5217 if FDropSpaceNode <> nil then
5218 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
5221 if Change then begin
5222 if FDropSpaceNode <> nil then
5223 FDropSpaceNode.Free;
5225 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
5226 FDropSpaceNode.MoveTo( Node, naInsert );
5227 FDropSpaceNode.ImageIndex := -1;
5228 FDropSpaceNode.SelectedIndex := -1;
5232 if Source = FavoriteTreeView then begin
5233 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
5238 end else if Source = BrowserTab then
5240 else if Source = ListView then
5242 else if Source is TLinkToolButton then
5244 else if Source = TreeView then
5250 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5253 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
5256 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
5258 // FDragging := true;
5261 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
5263 SenderNode: TTreeNode;
5264 LinkToolButton: TLinkToolButton;
5267 LinkToolButton := TLinkToolButton( Sender );
5268 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5269 SenderNode.Selected := False;
5270 FavoriteDragDrop( SenderNode, Source );
5276 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5278 favButton : TLinkToolButton;
5279 favThreadItem : TFavoriteThreadItem;
5285 if Sender is TLinkToolButton then begin
5286 favButton := TLinkToolButton( Sender );
5287 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5288 favThreadItem := TFavoriteThreadItem( favButton.Data );
5289 if favThreadItem.Item <> nil then
5290 InsertBrowserTab( favThreadItem.Item, False );
5298 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5302 TToolButton( Sender ).DragMode := dmManual;
5303 if ssLeft in Shift then begin
5304 // 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)
5305 if FDragTime = 0 then begin
5306 FDragTime := GetTickCount();
5308 Now := GetTickCount();
5309 if (Now - FDragTime) > 500 then begin
5310 if FDragButton <> TToolButton( Sender ) then begin
5312 FDragButton := TToolButton( Sender );
5313 TToolButton(Sender).BeginDrag(false ,5);
5316 {$IF Defined(debug)}
5317 ShowMessage('Error');
5328 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5333 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5338 for i := 0 to ToolBar.ButtonCount - 1 do
5339 if ToolBar.Buttons[i].Visible then
5340 Result := Result + ToolBar.Buttons[i].Width;
5343 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5345 Control : TWinControl;
5348 Control := FindControl(BandInfo^.hwndChild);
5349 if Control = nil then
5352 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5353 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5354 idx := MainCoolBar.Bands[ i ].ID;
5358 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5359 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
5360 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5361 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5362 BandInfo^.cxMinChild := 0;
5363 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
5364 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5365 end else if Control = LinkToolBar then begin
5366 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5367 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5368 BandInfo^.cxMinChild := 0;
5369 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5370 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5371 end else begin // AddressToolBar
5372 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5373 BandInfo^.cxMinChild := 0;
5374 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5378 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5384 ChevronPopupMenu.Items.Clear;
5386 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5387 if MainCoolBar.Bands[ i ].Visible then begin
5388 if Idx = Int64(RebarChevron^.uBand) then begin
5395 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5396 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5398 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5399 ToolBarChevronMenu(StdToolBar);
5400 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5404 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5405 ChevronPopupMenu.Popup(p.x, p.y);
5409 procedure TGikoForm.MenuBarChevronMenu;
5410 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5416 for i := 0 to MenuItem.Count - 1 do begin
5418 if MenuItem[i] is TFavoriteMenuItem then begin
5419 Item := TFavoriteMenuItem.Create(Self);
5420 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5422 Item := TMenuItem.Create(Self);
5423 Item.Caption := MenuItem[i].Caption;
5424 Item.Action := MenuItem[i].Action;
5425 Item.ImageIndex := MenuItem[i].ImageIndex;
5426 Item.OnClick := MenuItem[i].OnClick;
5427 PopupItem.Add(Item);
5428 if MenuItem[i].Count > 0 then
5429 SetSubMenu(MenuItem[i], Item);
5438 ChevronPopupMenu.Items.Clear;
5439 ChevronPopupMenu.Images := MainMenu.Images;
5440 bw := GetWidthAllToolButton(MenuToolBar);
5441 if MenuToolBar.Width < bw then begin
5443 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5444 w := w + MenuToolBar.Buttons[i].Width;
5445 if MenuToolBar.Width <= w then begin
5446 Item := TMenuItem.Create(Self);
5447 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5448 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5449 ChevronPopupMenu.Items.Add(Item);
5450 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5456 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5457 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5462 if Assigned(PopupMenu.OnPopup) then
5463 PopupMenu.OnPopup(nil);
5464 for i := 0 to PopupMenu.Items.Count - 1 do begin
5466 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5467 Item := TFavoriteMenuItem.Create(Self);
5468 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5470 Item := TMenuItem.Create(Self);
5471 Item.Caption := PopupMenu.Items[i].Caption;
5472 Item.Action := PopupMenu.Items[i].Action;
5473 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5474 Item.OnClick := PopupMenu.Items[i].OnClick;
5475 PopupItem.Add(Item);
5484 ChevronPopupMenu.Items.Clear;
5485 ChevronPopupMenu.Images := ToolBar.HotImages;
5486 bw := GetWidthAllToolButton(ToolBar);
5487 if ToolBar.Width < bw then begin
5489 for i := 0 to ToolBar.ButtonCount - 1 do begin
5490 if ToolBar.Buttons[i].Visible then
5491 w := w + ToolBar.Buttons[i].Width;
5492 if ToolBar.Width <= w then begin
5493 if ToolBar.Buttons[i].Tag = 0 then begin
5494 Item := TMenuItem.Create(Self);
5495 if ToolBar.Buttons[i].Style = tbsSeparator then
5498 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5499 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5502 Item.Caption := ToolBar.Buttons[i].Caption;
5503 Item.Action := ToolBar.Buttons[i].Action;
5505 //Item.Visible := True;
5507 ChevronPopupMenu.Items.Add(Item);
5508 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5510 Item.OnClick := nil;
5511 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5519 procedure TGikoForm.LinkBarChevronMenu;
5524 Item: TFavoriteMenuItem;
5526 Button: TLinkToolButton;
5528 ChevronPopupMenu.Items.Clear;
5529 ChevronPopupMenu.Images := LinkToolBar.Images;
5530 bw := GetWidthAllToolButton(LinkToolBar);
5531 if LinkToolBar.Width < bw then begin
5533 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5534 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5535 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5536 w := w + LinkToolBar.Buttons[j].Width;
5537 if LinkToolBar.Width <= w then begin
5538 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5539 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5540 Item := TFavoriteMenuItem.Create(Self);
5541 if TObject(Button.Data) is TFavoriteFolder then begin
5542 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5543 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5544 Item.OnClick := FavoriteClick;
5545 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5546 Item.OnClick := FavoriteClick;
5548 Item.Data := Button.Data;
5549 Item.Caption := LinkToolBar.Buttons[j].Caption;
5550 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5551 ChevronPopupMenu.Items.Add(Item);
5562 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5563 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5564 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5566 \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É
5567 \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
5569 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5571 bandInfo : tagREBARBANDINFOA;
5572 pBandInfo : PReBarBandInfoA;
5579 pBandInfo := @bandInfo;
5580 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5581 bandInfo.cbSize := sizeof( bandInfo );
5582 bandInfo.hwndChild := h;
5583 bandInfo.cyMinChild := bar.Height;
5584 bar.OnBandInfo( nil, pBandInfo );
5585 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5587 for i := bar.Bands.Count - 1 downto 0 do begin
5588 if bar.Bands[ i ].Control.Handle = h then begin
5594 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5598 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5600 Control: TWinControl;
5603 Control := FindControl(BandInfo^.hwndChild);
5604 if Control = nil then
5607 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5608 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5609 idx := ListCoolBar.Bands[ i ].ID;
5613 if Control = ListToolBar then begin
5614 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5615 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5616 BandInfo^.cxMinChild := 0;
5617 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5618 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5620 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5621 BandInfo^.cxMinChild := 0;
5622 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5626 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5631 ChevronPopupMenu.Items.Clear;
5632 Idx := RebarChevron^.uBand;
5633 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5634 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5635 ToolBarChevronMenu(ListToolBar);
5638 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5639 ChevronPopupMenu.Popup(p.x, p.y);
5643 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5645 Control: TWinControl;
5648 Control := FindControl(BandInfo^.hwndChild);
5649 if Control = nil then
5652 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5653 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5654 idx := BrowserCoolBar.Bands[ i ].ID;
5658 if Control = BrowserToolBar then begin
5659 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5660 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5661 BandInfo^.cxMinChild := 0;
5662 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5663 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5665 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5666 BandInfo^.cxMinChild := 0;
5667 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5671 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5676 ChevronPopupMenu.Items.Clear;
5677 Idx := RebarChevron^.uBand;
5678 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5679 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5680 ToolBarChevronMenu(BrowserToolBar)
5683 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5684 ChevronPopupMenu.Popup(p.x, p.y);
5688 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5690 if Column^.iImage = -1 then begin
5691 Column^.mask := Column^.mask or LVCF_FMT;
5693 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5694 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5698 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5703 for i := bar.ButtonCount - 1 downto 0 do begin
5704 if bar.Buttons[ i ].Action = action then begin
5705 Result := bar.Buttons[ i ];
5711 procedure TGikoForm.SetToolBarPopup;
5714 aIEButton : TToolButton;
5715 aCabinetBBSButton : TToolButton;
5716 aResRangeButton : TToolButton;
5717 aThreadRangeButton: TToolButton;
5719 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5721 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5722 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5723 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5724 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5725 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5727 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5728 if aIEButton <> nil then
5729 aIEButton.DropdownMenu := BrowserPopupMenu;
5730 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5731 if aCabinetBBSButton <> nil then
5732 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5733 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5734 if aResRangeButton <> nil then
5735 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5736 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5737 if aThreadRangeButton <> nil then
5738 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5741 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5742 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5746 // browserPos : TPoint;
5750 Wnd := WindowFromPoint(Mouse.CursorPos);
5752 if WheelDelta > 0 then
5757 if (Wnd = BrowserTab.Handle) or
5758 (Wnd = BrowserTab.Parent.Handle) then begin
5759 BrowserTab.ScrollTabs(Delta);
5761 if FIsHandledWheel then begin
5762 FIsHandledWheel := False;
5765 FIsHandledWheel := True;
5766 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5767 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5769 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5777 procedure TGikoForm.SetSelectWord( const text : string );
5779 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5780 ClearThreadRengeAction;
5782 if Length( text ) = 0 then
5784 GikoDM.AllItemAction.Checked := True;
5785 SetListViewType( gvtAll )
5787 SetListViewType( gvtUser, text, false );
5791 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5794 SetSelectWord( SelectComboBox.Text );
5798 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5799 Shift: TShiftState);
5807 if Key = VK_Return then
5810 end else if Key = 229 then begin
5811 if GikoSys.Setting.UseUndecided then begin
5812 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5813 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5814 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5815 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5816 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5817 SetLength(Str, Len);
5818 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5819 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5820 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5822 Str := SelectComboBox.Text + Str;
5824 if (Length(Str) > 0) then begin
5828 end else if (Key = Windows.VK_DELETE) and (ssCtrl in Shift) then begin
5829 // Ctrl + DEL
\82Å
\8dí
\8f\9c\82·
\82é
5830 Str := SelectComboBox.Text;
5831 idx := GikoSys.Setting.SelectTextList.IndexOf( Str );
5832 if idx <> -1 then begin
5833 GikoSys.Setting.SelectTextList.Delete( idx );
5835 idx := SelectComboBox.Items.IndexOf( Str );
5836 if idx <> -1 then begin
5837 SelectComboBox.Items.Delete( idx );
5839 SelectComboBox.Text := '';
5840 //
\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·
5841 SelectComboBox.OnChange(Sender);
5842 end else if Length( SelectComboBox.Text ) = 0 then
5844 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5845 *
\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
5846 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5849 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5850 ClearThreadRengeAction;
5854 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
5855 procedure TGikoForm.ClearThreadRengeAction;
5857 //
\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é
5858 if GikoDM.AllItemAction.Checked then
5859 GikoDM.AllItemAction.Checked := False;
5860 if GikoDM.LogItemAction.Checked then
5861 GikoDM.LogItemAction.Checked := False;
5862 if GikoDM.NewItemAction.Checked then
5863 GikoDM.NewItemaction.Checked := False;
5864 if GikoDM.LiveItemAction.Checked then
5865 GikoDM.LiveItemAction.Checked := False;
5866 if GikoDM.ArchiveItemAction.Checked then
5867 GikoDM.ArchiveItemAction.Checked := False;
5871 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5876 if Length( SelectComboBox.Text ) = 0 then
5878 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5879 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5884 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5885 procedure TGikoForm.ModifySelectList;
5892 if not SelectComboBoxPanel.Visible then
5895 if Length( SelectComboBox.Text ) > 0 then
5897 oldText := SelectComboBox.Text;
5898 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5900 GikoSys.Setting.SelectTextList.Delete( idx );
5901 idx := SelectComboBox.Items.IndexOf( oldText );
5903 SelectComboBox.Items.Delete( idx );
5904 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5905 SelectComboBox.Items.Insert( 0, oldText );
5906 SelectComboBox.Text := oldText;
5914 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5915 Shift: TShiftState; X, Y: Integer);
5920 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5923 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5924 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5925 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5927 If w <= 50 Then Begin
5928 //
\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
5929 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
5930 pos.X := pos.X + (50 - w);
5932 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
5936 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
5937 //If SelectComboBox.Width <> w Then Begin
5938 If SelectComboBoxPanel.Width <> w Then Begin
5939 SelectComboBoxPanel.Width := w;
5940 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
5941 GikoSys.Setting.SelectComboBoxWidth := w;
5942 DraggingSelectComboBoxPosition := pos;
5944 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
5945 ResetBandInfo( ListCoolBar, ListToolBar );
5951 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
5952 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5956 IsDraggingSelectComboBox := True;
5959 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
5963 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
5964 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5966 IsDraggingSelectComboBox := False;
5970 procedure TGikoForm.StatusBarResize(Sender: TObject);
5972 StatusBar.Panels[1].Width := StatusBar.Width -
5973 StatusBar.Panels[0].Width -
5974 StatusBar.Panels[THREADSIZE_PANEL].Width -
5975 StatusBar.Panels[NGWORDNAME_PANEL].Width;
5977 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
5980 if (Length( SelectComboBox.Text ) = 0) or
5981 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
5983 SelectComboBox.Text := '';
5984 SelectComboBox.Color := clWindow;
5989 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
5992 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
5995 if TObject(SenderNode.Data) is TFavoriteFolder then
5996 SourceNode.MoveTo(SenderNode, naAddChild)
5998 SourceNode.MoveTo(SenderNode, naInsert);
6002 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
6006 FavoBoardItem: TFavoriteBoardItem;
6007 FavoThreadItem: TFavoriteThreadItem;
6009 ThreadItem: TThreadItem;
6012 if (SenderNode = nil) or (Source = nil) then
6015 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
6016 FavNode := SenderNode.Parent
6018 FavNode := SenderNode;
6022 if Source is TBoard then begin
6023 Board := TBoard( Source );
6024 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
6025 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
6026 Node.ImageIndex := 15;
6027 Node.SelectedIndex := 15;
6028 end else if Source is TFavoriteBoardItem then begin
6029 FavoBoardItem := TFavoriteBoardItem( Source );
6030 Board := FavoBoardItem.Item;
6031 if Board <> nil then
6032 if not Board.IsThreadDatRead then
6033 GikoSys.ReadSubjectFile(Board);
6034 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
6035 Node.ImageIndex := 15;
6036 Node.SelectedIndex := 15;
6037 end else if Source is TThreadItem then begin
6038 ThreadItem := TThreadItem( Source );
6039 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
6040 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
6041 Node.ImageIndex := 16;
6042 Node.SelectedIndex := 16;
6043 end else if Source is TBrowserRecord then begin
6044 ThreadItem := TBrowserRecord( Source ).Thread;
6045 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
6046 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
6047 Node.ImageIndex := 16;
6048 Node.SelectedIndex := 16;
6049 end else if Source is TFavoriteThreadItem then begin
6050 FavoThreadItem := TFavoriteThreadItem( Source );
6051 ThreadItem := FavoThreadItem.Item;
6052 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
6053 Node.ImageIndex := 16;
6054 Node.SelectedIndex := 16;
6057 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
6059 FavoriteMoveTo( SenderNode, Node );
6063 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
6066 SourceNode: TTreeNode;
6067 LinkToolButton: TLinkToolButton;
6070 if SenderNode = nil then
6073 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
6074 if FDropSpaceNode <> nil then
6075 SenderNode := FDropSpaceNode;
6077 if Source = FavoriteTreeView then begin
6078 SourceNode := FavoriteTreeView.Selected;
6079 FavoriteMoveTo( SenderNode, SourceNode );
6080 end else if Source is TLinkToolButton then begin
6081 LinkToolButton := TLinkToolButton( Source );
6082 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
6083 FavoriteMoveTo( SenderNode, SourceNode );
6084 end else if Source = BrowserTab then begin
6085 idx := BrowserTab.TabIndex;
6086 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
6087 end else if Source = ListView then begin
6088 FavoriteAddTo( SenderNode, ListView.Selected.Data );
6089 end else if Source = TreeView then begin
6090 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
6094 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
6097 SenderNode: TTreeNode;
6100 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
6101 if SenderNode <> nil then begin
6102 FavoriteDragDrop( SenderNode, Source );
6105 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
6106 if FDropSpaceNode <> nil then begin
6108 FDropSpaceNode.Delete;
6110 FDropSpaceNode := nil;
6113 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6114 FavoriteDM.Modified := true;
6120 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
6121 Node: TTreeNode; var S: String);
6123 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6124 FavoriteDM.Modified := true;
6126 FavoriteTreeView.ReadOnly := True;
6131 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
6132 Shift: TShiftState);
6134 if not TTreeView(Sender).IsEditing then begin
6138 FClickNode := FavoriteTreeView.Selected;
6139 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
6143 FClickNode := FavoriteTreeView.Selected;
6144 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
6148 FavoriteClick( FavoriteTreeView.Selected );
6149 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
6153 FClickNode := FavoriteTreeView.Selected;
6154 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
6158 //
\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·
6159 if Key = VK_ESCAPE then begin
6160 if (TTreeView(Sender).Selected <> nil) then begin
6161 TTreeView(Sender).Selected.Text := FOrigenCaption;
6163 TTreeView(Sender).Selected.Focused := False;
6169 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
6172 LinkToolButton: TLinkToolButton;
6175 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
6177 FClickNode := FavoriteTreeView.Selected;
6179 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
6181 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
6182 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6183 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6184 FClickNode := FavoriteTreeView.Items[i];
6188 for i := 0 to FClickNode.Count - 1 do begin
6189 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
6190 FClickNode := FClickNode.Item[i];
6197 if FClickNode = nil then begin
6198 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6199 FavoriteTreeDeletePopupMenu.Visible := False;
6200 FavoriteTreeRenamePopupMenu.Visible := False;
6201 FavoriteTreeNewFolderPopupMenu.Visible := False;
6202 FavoriteTreeURLCopyPopupMenu.Visible := False;
6203 FavoriteTreeNameCopyPopupMenu.Visible := False;
6204 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6205 FavoriteTreeReloadPopupMenu.Visible := False;
6206 FavoriteTreeLogDeletePopupMenu.Visible := False;
6207 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6208 end else if FClickNode.IsFirstNode then begin
6209 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6210 FavoriteTreeDeletePopupMenu.Visible := False;
6211 FavoriteTreeRenamePopupMenu.Visible := False;
6212 FavoriteTreeNewFolderPopupMenu.Visible := True;
6213 FavoriteTreeURLCopyPopupMenu.Visible := False;
6214 FavoriteTreeNameCopyPopupMenu.Visible := False;
6215 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6216 FavoriteTreeReloadPopupMenu.Visible := False;
6217 FavoriteTreeLogDeletePopupMenu.Visible := False;
6218 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6219 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
6220 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6221 FavoriteTreeDeletePopupMenu.Visible := True;
6222 FavoriteTreeRenamePopupMenu.Visible := False;
6223 FavoriteTreeNewFolderPopupMenu.Visible := True;
6224 FavoriteTreeURLCopyPopupMenu.Visible := False;
6225 FavoriteTreeNameCopyPopupMenu.Visible := False;
6226 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6227 FavoriteTreeReloadPopupMenu.Visible := False;
6228 FavoriteTreeLogDeletePopupMenu.Visible := False;
6229 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6230 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
6231 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6232 FavoriteTreeDeletePopupMenu.Visible := True;
6233 FavoriteTreeRenamePopupMenu.Visible := True;
6234 FavoriteTreeNewFolderPopupMenu.Visible := True;
6235 FavoriteTreeURLCopyPopupMenu.Visible := False;
6236 FavoriteTreeNameCopyPopupMenu.Visible := True;
6237 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6238 FavoriteTreeReloadPopupMenu.Visible := False;
6239 FavoriteTreeLogDeletePopupMenu.Visible := False;
6240 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6241 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
6242 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6243 FavoriteTreeDeletePopupMenu.Visible := True;
6244 FavoriteTreeRenamePopupMenu.Visible := True;
6245 FavoriteTreeNewFolderPopupMenu.Visible := True;
6246 FavoriteTreeURLCopyPopupMenu.Visible := True;
6247 FavoriteTreeNameCopyPopupMenu.Visible := True;
6248 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6249 FavoriteTreeReloadPopupMenu.Visible := True;
6250 FavoriteTreeLogDeletePopupMenu.Visible := True;
6251 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6252 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
6253 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6254 FavoriteTreeDeletePopupMenu.Visible := True;
6255 FavoriteTreeRenamePopupMenu.Visible := True;
6256 FavoriteTreeNewFolderPopupMenu.Visible := True;
6257 FavoriteTreeURLCopyPopupMenu.Visible := True;
6258 FavoriteTreeNameCopyPopupMenu.Visible := True;
6259 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6260 FavoriteTreeReloadPopupMenu.Visible := True;
6261 FavoriteTreeLogDeletePopupMenu.Visible := False;
6262 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6264 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6265 FavoriteTreeDeletePopupMenu.Visible := False;
6266 FavoriteTreeRenamePopupMenu.Visible := False;
6267 FavoriteTreeNewFolderPopupMenu.Visible := False;
6268 FavoriteTreeURLCopyPopupMenu.Visible := False;
6269 FavoriteTreeNameCopyPopupMenu.Visible := False;
6270 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6271 FavoriteTreeReloadPopupMenu.Visible := False;
6272 FavoriteTreeLogDeletePopupMenu.Visible := False;
6273 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6278 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
6283 if not (TObject(node.Data) is TFavoriteFolder) then
6286 for i := 0 to node.Count - 1 do
6288 if TObject(node.Item[i].Data) is TFavoriteFolder then
6289 FavoriteBrowseFolder( node.Item[i] )
6290 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
6291 FavoriteClick( node.Item[i], False );
6295 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6301 for i := 0 to Node.Count - 1 do begin
6302 if Node.Item[i].Data = FindPointer then begin
6303 Result := Node.Item[i];
6305 end else if Node.Item[i].Count > 0 then begin
6306 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6307 if Found <> nil then begin
6318 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6322 SenderNode: TTreeNode;
6326 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6327 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6328 SenderNode := FavoriteTreeView.Items[i];
6332 SenderNode.Selected := False;
6334 FavoriteDragDrop( SenderNode, Source );
6339 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6340 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6342 if FDragWFirst = true then
6343 FDragWFirst := false;
6345 //
\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@
6346 if Button <> mbMiddle then begin
6347 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6348 if GikoSys.Setting.ListWidthState = glsMin then begin
6349 GikoDM.BrowserMaxAndFocusAction.Execute;
6352 if GikoSys.Setting.ListHeightState = glsMin then begin
6353 GikoDM.BrowserMaxAndFocusAction.Execute;
6359 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6360 Y: Integer; State: TDragState; var Accept: Boolean);
6363 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6367 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6371 if FDropSpaceNode <> nil then begin
6373 FDropSpaceNode.Delete;
6375 FDropSpaceNode := nil;
6377 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6378 FavoriteDM.Modified := true;
6384 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6386 if FListViewBackGroundColor <> value then begin
6387 FListViewBackGroundColor := value;
6388 ListView.Color := FListViewBackGroundColor;
6391 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6393 threadItem : TThreadItem;
6397 if FClickNode = nil then Exit;
6399 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6401 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6402 if threadItem = nil then
6404 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6406 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6408 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6409 if boardItem = nil then
6411 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6417 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6418 MousePos: TPoint; var Handled: Boolean);
6422 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6423 if BrowserTab.TabIndex <> idx then begin
6424 BrowserTab.TabIndex := idx;
6425 BrowserTab.OnChange(nil);
6429 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6431 ThreadItem: TThreadItem;
6437 boardPlugIn : TBoardPlugIn;
6439 if Number = 0 then Exit;
6440 ThreadItem := GetActiveContent(True);
6442 if ThreadItem <> nil then begin
6443 //if ThreadItem.IsBoardPlugInAvailable then begin
6444 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6445 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6446 //boardPlugIn := ThreadItem.BoardPlugIn;
6447 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6449 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6450 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6451 //
\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
6452 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6454 FileName := ThreadItem.FilePath;
6455 tmp := GikoSys.ReadThreadFile(FileName, Number);
6457 if tmp <> '' then begin
6458 THTMLCreate.DivideStrLine(tmp, @Res);
6460 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6461 if ReplaceTag then begin
6462 Header := CustomStringReplace(Header, '</b>', '',true);
6463 Header := CustomStringReplace(Header, '<b>', '',true);
6464 Header := CustomStringReplace(Header, '<br>', '',true);
6465 Header := DeleteFontTag(Header);
6467 //if ThreadItem.IsBoardPlugInAvailable then begin
6468 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6469 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6470 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6472 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6473 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6474 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6475 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6478 Body := CustomStringReplace(Body, '</a>', '',true);
6480 Body := HTMLCreater.DeleteLink(Body);
6481 if ReplaceTag then begin
6482 Body := CustomStringReplace(Body, '<', '<');
6483 Body := CustomStringReplace(Body, '>', '>');
6484 Body := CustomStringReplace(Body, '"', '"');
6485 Body := CustomStringReplace(Body, '&', '&');
6486 //Body := CustomStringReplace(Body, ' ', ' ');
6489 Header := Header + Body;
6491 Clipboard.SetTextBuf( PChar(Header) );
6497 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6499 AddRoundNameMenu(dummy1);
6500 AddMenuSameBoardThread;
6502 //!
\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Á
6503 procedure TGikoForm.AddMenuSameBoardThread;
6508 SameBoardThreadItem.Clear;
6509 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6510 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6511 if (FActiveContent.Thread.ParentBoard =
6512 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6513 //
\8e©
\95ª
\82Í
\8aO
\82·
6514 if FActiveContent.Thread <>
6515 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6516 Item := TMenuItem.Create(Self);
6517 Item.Caption := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.Title;
6518 Item.OnClick := SameBoardThreadSubItemOnClick;
6519 SameBoardThreadItem.Add(Item);
6523 //
\89½
\82à
\96³
\82¢
\82È
\82ç
\8eg
\97p
\82Å
\82«
\82È
\82¢
\82æ
\82¤
\82É
\82·
\82é
6524 SameBoardThreadItem.Enabled := SameBoardThreadItem.Count > 0;
6526 //!
\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
6527 procedure TGikoForm.SameBoardThreadSubItemOnClick(Sender: TObject);
6530 MenuItem: TMenuItem;
6532 if Sender is TMenuItem then begin
6535 MenuItem := TMenuItem(Sender);
6536 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6537 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6538 if (FActiveContent.Thread.ParentBoard =
6539 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6540 if FActiveContent.Thread <>
6541 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6542 if (SameBoardThreadItem.Items[j] = MenuItem) then begin
6543 MoveToURL( TBrowserRecord(BrowserTab.Tabs.Objects[i])
6555 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6557 FavoriteDM.URLReplace(oldURLs, newURLs);
6560 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6562 RoundList.URLReplace(oldURLs, newURLs);
6565 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6567 Filename = 'tab.sav';
6568 bFilename = '~tab.sav';
6574 oldBoardName: string;
6576 newBoardName: string;
6577 TabList: TStringList;
6580 if oldURLs.Count <> newURLs.Count then begin
6583 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6584 TabList := TStringList.Create;
6586 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6588 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6589 //
\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
6590 for i := 0 to oldURLs.Count - 1 do begin
6591 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6592 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6593 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6594 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6595 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6596 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6598 for j := 0 to TabList.Count - 1 do begin
6599 tempString := TabList[j];
6600 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6601 tempString := StringReplace(tempString, oldHost, newHost,[]);
6602 TabList[j] := tempString;
6606 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6608 if FileExists( GikoSys.GetAppDir + Filename) then begin
6609 if FileExists( GikoSys.GetAppDir + bFilename) then
6610 DeleteFile(GikoSys.GetAppDir + bFilename);
6612 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6613 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6616 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6624 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6625 procedure TGikoForm.OnMinimize;
6627 doc: IHTMLDocument2;
6629 if FActiveContent <> nil then begin
6630 FIsMinimize := mtMinimizing;
6631 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6632 if Assigned(doc) then begin
6633 FActiveContent.Thread.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
6638 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6639 procedure TGikoForm.OnMinimized;
6641 FIsMinimize := mtMinimized;
6645 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6647 CoolBarResized( Sender, BrowserCoolBar );
6650 // *************************************************************************
6651 // ExternalBoardPlugInMain
6652 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6653 // *************************************************************************
6654 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6657 boardPlugIn : TBoardPlugIn;
6660 if not (Sender is TMenuItem) then
6663 item := TMenuItem( Sender );
6664 if not Assigned( Pointer( item.Tag ) ) then
6667 //
\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·
6668 boardPlugIn := TBoardPlugIn( item.Tag );
6669 boardPlugIn.PlugInMenu( item.Handle );
6672 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6673 procedure TGikoForm.TreeClick( Node : TTreeNode );
6679 if FTreeType = gttHistory then begin
6681 if TObject( Node.Data ) is TFavoriteThreadItem then
6682 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6683 FavoriteClick( Node );
6686 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6687 if ActiveList = Node.Data then
6690 ActiveListColumnSave;
6692 if TObject(Node.Data) is TBBS then begin
6693 SetActiveList(Node.data);
6694 end else if TObject(Node.Data) is TCategory then begin
6695 SetActiveList(Node.data);
6696 end else if TObject(Node.Data) is TBoard then begin
6697 if not TBoard(Node.Data).IsThreadDatRead then begin
6698 Screen.Cursor := crHourGlass;
6700 if not TBoard(Node.Data).IsThreadDatRead then
6701 GikoSys.ReadSubjectFile(Node.Data);
6703 Screen.Cursor := crDefault;
6706 Sort.SetSortDate(Now());
6707 SetActiveList(Node.data);
6710 if TObject( Node.Data ) is TBoard then begin // not TCategory
6711 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6712 if GikoSys.Setting.ListWidthState = glsMax then begin
6713 GikoDM.BrowserMinAction.Execute;
6714 if GikoForm.Visible then
6718 if GikoSys.Setting.ListHeightState = glsMax then begin
6719 GikoDM.BrowserMinAction.Execute;
6720 if GikoForm.Visible then
6728 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6729 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6732 ThreadItem : TThreadItem;
6733 shiftDown : Boolean;
6736 if Node = nil then Exit;
6738 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6740 if FTreeType = gtt2ch then begin
6741 if not (TObject(Node.Data) is TBoard) then Exit;
6742 Board := TBoard(Node.Data);
6743 DownloadList(Board, shiftDown);
6744 end else if FTreeType = gttHistory then begin
6745 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6746 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6747 DownloadContent(ThreadItem, shiftDown);
6751 // *************************************************************************
6752 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82ÌKeyDown
\83C
\83x
\83\93\83g
6753 // *************************************************************************
6754 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6755 Shift: TShiftState);
6757 if Key = VK_BACK then begin
6758 // UpFolderButtonClick(Sender);
6759 end else if Key = VK_SPACE then begin
6760 TreeDoubleClick( TreeView.Selected );
6761 end else if Key = VK_RETURN then begin
6762 TreeClick( TreeView.Selected );
6763 //
\97\9a\97ð
\82Ì
\8fê
\8d\87\81A
\8fÁ
\82³
\82ê
\82Ä
\82¢
\82é
\82Ì
\82Å
\83`
\83F
\83b
\83N
\82·
\82é
6764 if (TreeView.Selected <> nil) then begin
6765 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6769 //!
\82¨
\8bC
\82É
\93ü
\82è
\82ÌMouseDown
\83C
\83x
\83\93\83g
6770 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6771 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6773 favItem : TTreeNode;
6774 favThreadItem : TFavoriteThreadItem;
6780 if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6781 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6782 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6783 rect := FavoriteTreeView.Selected.DisplayRect(true);
6784 //
\83A
\83C
\83R
\83\93\95ª
\8d¶
\82É
\82¸
\82ç
\82·
6785 if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
6786 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6787 if ssDouble in Shift then begin
6788 FClickNode := FavoriteTreeView.Selected;
6789 GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6793 TObject(FavoriteTreeView.Selected));
6800 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6801 if favItem = nil then Exit;
6803 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6804 favThreadItem := TFavoriteThreadItem( favItem.Data );
6805 if favThreadItem.Item <> nil then
6806 InsertBrowserTab( favThreadItem.Item, False );
6813 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6816 if FIsIgnoreResize <> rtNone then
6819 if GikoSys.Setting.ListOrientation = gloVertical then begin
6820 if GikoSys.Setting.ListHeightState = glsMin then begin
6821 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6822 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6828 procedure TGikoForm.OnResized;
6830 doc : IHTMLDocument2;
6832 FOldFormWidth := Width;
6833 FIsIgnoreResize := rtNone;
6838 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6839 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6844 //
\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)
6845 if FActiveContent <> nil then begin
6846 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6847 (doc.body as IHTMLElement2).ScrollTop := FActiveContent.Thread.ScrollTop;
6849 FIsMinimize := mtNone;
6854 // *************************************************************************
6855 //!
\83X
\83\8c\83b
\83h
\83u
\83\89\83E
\83U
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6856 // *************************************************************************
6857 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6860 doc : IHTMLDocument2;
6861 FOleInPlaceActiveObject: IOleInPlaceActiveObject;
6866 if not Assigned(FActiveContent) then
6868 if not Assigned(FActiveContent.Browser) then
6872 FOleInPlaceActiveObject := FActiveContent.Browser.ControlInterface as IOleInPlaceActiveObject;
6873 FOleInPlaceActiveObject.OnFrameWindowActivate(True);
6876 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6877 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6879 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6880 if not Assigned(doc) then
6883 e := doc.elementFromPoint(p.x, p.y);
6884 if not Assigned(e) then
6887 if (e.className = 'date') or (e.id = 'date') then begin
6888 AID := GikoSys.ExtructResID(e.innerText);
6889 ShowSameIDAncher(AID);
6894 procedure TGikoForm.ShowSameIDAncher(const AID: String);
6898 numbers : TStringList;
6901 numbers := TStringList.Create;
6904 GikoSys.GetSameIDRes(AID, FActiveContent.Thread, numbers);
6906 if not (GikoSys.Setting.LimitResCountMessage) then begin
6908 end else if (numbers.Count > LIMIT) then begin
6909 if (GikoUtil.MsgBox(Handle,
6910 IntToStr(LIMIT) + '
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6911 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6912 MB_YESNO or MB_ICONQUESTION) = ID_YES) then begin
6916 FActiveContent.IDAnchorPopup(
6917 GikoSys.CreateResAnchor(numbers, FActiveContent.Thread, limited));
6922 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
6923 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
6925 SelectTimer.Interval := 0;
6926 if not (ListView.Selected = nil) then
6927 if( FActiveContent = nil) or
6928 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
6933 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
6934 procedure TGikoForm.ActiveListColumnSave;
6936 ActivListObj : TObject;
6937 i, id, idx : Integer;
6938 BBSOrder : TGikoBBSColumnList;
6939 CategoryOrder : TGikoCategoryColumnList;
6940 BoardOrder : TGikoBoardColumnList;
6943 ActivListObj := ActiveList;
6944 if ActivListObj is TBBS then begin
6945 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6946 BBSOrder := TGikoBBSColumnList.Create;
6948 for i := 0 to ListView.Columns.Count - 1 do begin
6949 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6950 idx := ListView.Column[ i ].Tag;
6951 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
6952 BBSOrder.Add( TGikoBBSColumnID( id ) );
6953 //
\95\9d\82Ì
\95Û
\91¶
6954 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
6956 for i := 0 to ListView.Columns.Count - 1 do
6957 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6958 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
6962 end else if ActivListObj is TCategory then begin
6963 //=====
\94Â
\83\8a\83X
\83g =====
6964 CategoryOrder := TGikoCategoryColumnList.Create;
6966 for i := 0 to ListView.Columns.Count - 1 do begin
6967 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6968 idx := ListView.Column[ i ].Tag;
6969 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
6970 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
6971 //
\95\9d\82Ì
\95Û
\91¶
6972 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
6974 for i := 0 to ListView.Columns.Count - 1 do
6975 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6976 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
6980 end else if ActivListObj is TBoard then begin
6981 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6982 BoardOrder := TGikoBoardColumnList.Create;
6984 for i := 0 to ListView.Columns.Count - 1 do begin
6985 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6986 idx := ListView.Column[ i ].Tag;
6987 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
6988 BoardOrder.Add( TGikoBoardColumnID( id ) );
6989 //
\95\9d\82Ì
\95Û
\91¶
6990 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
6992 for i := 0 to ListView.Columns.Count - 1 do
6993 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6994 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
7002 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
7003 Column: TListColumn; Point: TPoint);
7009 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
7010 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
7011 ListColumnPopupMenu.Items.Items[ i ].Free;
7013 //
\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¢)
7014 if TObject( FActiveList ) is TBBS then begin
7016 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
7017 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
7018 item := TMenuItem.Create( ListColumnPopupMenu );
7019 item.Caption := GikoBBSColumnCaption[ i ];
7021 item.OnClick := ListColumnPopupMenuOnClick;
7022 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
7023 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
7024 item.Checked := True;
7028 ListColumnPopupMenu.Items.Add( item );
7031 end else if TObject( FActiveList ) is TCategory then begin
7033 //=====
\94Â
\83\8a\83X
\83g =====
7034 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
7035 item := TMenuItem.Create( ListColumnPopupMenu );
7036 item.Caption := GikoCategoryColumnCaption[ i ];
7038 item.OnClick := ListColumnPopupMenuOnClick;
7039 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
7040 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
7041 item.Checked := True;
7045 ListColumnPopupMenu.Items.Add( item );
7048 end else if TObject( FActiveList ) is TBoard then begin
7050 //=====
\83X
\83\8c\83\8a\83X
\83g =====
7051 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
7052 item := TMenuItem.Create( ListColumnPopupMenu );
7053 item.Caption := GikoBoardColumnCaption[ i ];
7055 item.OnClick := ListColumnPopupMenuOnClick;
7056 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
7057 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
7058 item.Checked := True;
7062 ListColumnPopupMenu.Items.Add( item );
7067 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
7068 Point := ListView.ClientToScreen( Point );
7069 if ListColumnPopupMenu.Items.Count > 0 then
7070 ListColumnPopupMenu.Popup( Point.X, Point.Y );
7074 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
7075 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
7082 if not (Sender is TMenuItem) then
7085 ActiveListColumnSave;
7086 item := TMenuItem( Sender );
7088 if TObject( FActiveList ) is TBBS then
7089 orderList := GikoSys.Setting.BBSColumnOrder
7090 else if TObject( FActiveList ) is TCategory then
7091 orderList := GikoSys.Setting.CategoryColumnOrder
7092 else if TObject( FActiveList ) is TBoard then
7093 orderList := GikoSys.Setting.BoardColumnOrder
7097 if item.Checked then begin
7098 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
7099 for i := orderList.Count - 1 downto 0 do begin
7100 if Integer( orderList[ i ] ) = item.Tag then begin
7101 orderList.Delete( i );
7106 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
7107 orderList.Add( Pointer( item.Tag ) );
7110 SetActiveList( FActiveList );
7114 procedure TGikoForm.OnGestureStart(Sender: TObject);
7119 procedure TGikoForm.OnGestureMove(Sender: TObject);
7126 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
7128 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
7129 s := MouseGesture.GetGestureStr;
7131 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7132 if Action <> nil then
7133 ActStr := '
\81i' + Action.Caption + '
\81j';
7134 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
7135 StatusBar.Panels[1].Text := s;
7138 procedure TGikoForm.OnGestureEnd(Sender: TObject);
7143 s := MouseGesture.GetGestureStr;
7145 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7146 if Action <> nil then
7148 StatusBar.Panels[1].Text := '';
7151 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
7152 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
7154 ThreadItem: TThreadItem;
7156 DefaultDraw := true;
7157 if TObject(Item.Data) is TThreadItem then begin
7158 ThreadItem := TThreadItem(Item.Data);
7159 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
7160 ListView.Canvas.Brush.Color := FOddColor;
7161 //
\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
7162 if (GikoSys.Setting.UnFocusedBold) and
7163 (Item.Selected) and (not ListView.Focused) then begin
7164 ListView.Canvas.Font.Style := [fsBold];
7167 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
7170 if ThreadItem.UnRead then
7171 ListView.Canvas.Font.Style := [fsBold];
7176 procedure TGikoForm.FormActivate(Sender: TObject);
7178 if GikoSys.Setting.GestureEnabled then begin
7179 GikoSys.Setting.Gestures.ClearGesture;
7180 GikoSys.Setting.Gestures.LoadGesture(
7181 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
7182 MouseGesture.UnHook;
7183 MouseGesture.OnGestureStart := OnGestureStart;
7184 MouseGesture.OnGestureMove := OnGestureMove;
7185 MouseGesture.OnGestureEnd := OnGestureEnd;
7186 MouseGesture.SetHook(Handle);
7188 //MouseGesture.UnHook;
7189 MouseGesture.OnGestureStart := nil;
7190 MouseGesture.OnGestureMove := nil;
7191 MouseGesture.OnGestureEnd := nil;
7195 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
7197 if (FIsMinimize <> mtMinimizing) then begin
7198 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
7199 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
7203 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
7208 affectedBand : TCoolBand;
7211 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
7212 FIsIgnoreResize := rtResizing;
7213 PostMessage( Handle, USER_RESIZED, 0, 0 );
7215 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
7216 if CoolBar = MainCoolBar then begin
7217 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
7218 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7219 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7220 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7221 GikoSys.Setting.MainCoolSet[i] := CoolSet;
7223 end else if CoolBar = ListCoolBar then begin
7224 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
7225 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7226 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7227 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7228 GikoSys.Setting.ListCoolSet[i] := CoolSet;
7230 end else if CoolBar = BrowserCoolBar then begin
7231 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
7232 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7233 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7234 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7235 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
7238 if not (Sender is TToolBar) or (CoolBar = nil) then
7240 toolbar := TToolBar( Sender );
7241 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
7242 affectedBand := nil;
7243 for i := CoolBar.Bands.Count - 1 downto 0 do begin
7244 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
7245 band := CoolBar.Bands[ i ];
7246 if band.Break or (i = 0) then begin
7247 if i + 1 < CoolBar.Bands.Count then
7248 if not CoolBar.Bands[ i + 1 ].Break then
7249 affectedBand := CoolBar.Bands[ i + 1 ];
7252 affectedBand := CoolBar.Bands[ i - 1 ];
7257 //
\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·
7258 if CoolBar = MainCoolBar then begin
7259 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
7260 coolSet.FCoolWidth := toolbar.Width + 25;
7261 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
7262 if affectedBand <> nil then begin
7263 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
7264 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7265 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
7267 end else if CoolBar = ListCoolBar then begin
7268 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
7269 coolSet.FCoolWidth := toolbar.Width + 25;
7270 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
7271 if affectedBand <> nil then begin
7272 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
7273 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7274 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
7276 end else if CoolBar = BrowserCoolBar then begin
7277 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
7278 coolSet.FCoolWidth := toolbar.Width + 25;
7279 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
7280 if affectedBand <> nil then begin
7281 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
7282 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7283 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
7290 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
7292 CoolBarResized( Sender, MainCoolBar );
7295 procedure TGikoForm.ListToolBarResize(Sender: TObject);
7297 CoolBarResized( Sender, ListCoolBar );
7300 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
7302 CoolBarResized( Sender, BrowserCoolBar );
7305 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
7306 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
7308 doc : IHTMLDocument2;
7309 ThreadItem : TThreadItem;
7310 ReadList : TStringList;
7311 wordCount : TWordCount;
7313 if not Assigned(FActiveContent) then
7315 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7316 if not Assigned(doc) then
7319 ThreadItem := GetActiveContent(True);
7320 ReadList := TStringList.Create;
7321 wordCount := TWordCount.Create;
7323 ThreadItem.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
7324 {$IFDEF SPAM_FILTER_ENABLED}
7325 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7326 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7327 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
7328 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7329 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7331 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7332 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7337 FActiveContent.Repaint := true;
7338 if ThreadItem <> nil then
7339 InsertBrowserTab( ThreadItem, True );
7341 //
\93¯
\88êID
\82ðNG
\83\8f\81[
\83h
\82É
\93o
\98^
7342 procedure TGikoForm.AddIDtoNGWord(invisible : boolean);
7344 doc : IHTMLDocument2;
7345 ThreadItem : TThreadItem;
7347 {$IFDEF SPAM_FILTER_ENABLED}
7349 ReadList : TStringList;
7350 wordCount : TWordCount;
7352 id, dateStr: String;
7354 No := KokoPopupMenu.Tag;
7355 if No = 0 then Exit;
7356 ThreadItem := GikoForm.KokoPopupThreadItem;
7357 if ThreadItem = nil then Exit;
7359 id := GikoSys.GetResID(No, ThreadItem);
7360 if (id <> '') and (not IsNoValidID(id)) then begin
7361 //
\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Á
7362 DateTimeToString(dateStr, 'yyyymmdd', Now);
7363 id := id + #9'>>add ' + dateStr + ',' + ThreadItem.Title;
7364 if (GikoSys.FAbon.AddToken(id, invisible)) then begin
7365 GikoSys.FAbon.ReLoadFromNGwordFile;
7366 FActiveContent.Repaint := True;
7369 ShowMessage('ID
\82ð
\8eæ
\93¾
\82Å
\82«
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B');
7371 {$IFDEF SPAM_FILTER_ENABLED}
7372 body := TStringList.Create;
7374 GikoSys.GetSameIDRes(id, ThreadItem, body);
7375 ReadList := TStringList.Create;
7376 wordCount := TWordCount.Create;
7378 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7379 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7380 for i := 0 to body.Count - 1 do begin
7381 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7382 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7383 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7393 if (FActiveContent.Repaint) then begin
7394 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7396 if not Assigned(doc) then
7398 ThreadItem.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
7399 if ThreadItem <> nil then
7400 InsertBrowserTab( ThreadItem, True );
7404 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
7405 procedure TGikoForm.IndividualAbonID(Atype : Integer);
7407 ThreadItem : TThreadItem;
7410 ReadList : TStringList;
7411 wordCount : TWordCount;
7413 No := KokoPopupMenu.Tag;
7414 if No = 0 then Exit;
7415 ThreadItem := GikoForm.KokoPopupThreadItem;
7416 if ThreadItem = nil then Exit;
7417 body := TStringList.Create;
7419 GikoSys.GetSameIDRes(No, ThreadItem, body);
7421 ReadList := TStringList.Create;
7422 wordCount := TWordCount.Create;
7424 ThreadItem.ScrollTop := FActiveContent.Browser.OleObject.Document.Body.ScrollTop;
7425 {$IFDEF SPAM_FILTER_ENABLED}
7426 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7427 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7429 for i := 0 to body.Count - 1 do begin
7430 {$IFDEF SPAM_FILTER_ENABLED}
7431 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7432 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7433 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7435 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7436 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7442 FActiveContent.Repaint := true;
7443 if ThreadItem <> nil then
7444 InsertBrowserTab( ThreadItem, True );
7451 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7453 firstElement: IHTMLElement;
7454 doc: IHTMLDocument2;
7457 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7458 if Assigned(doc) then
7459 firstElement := doc.all.item('idSearch', 0) as IHTMLElement;
7460 if Assigned(firstElement) then
7461 if firstElement.style.visibility <> 'hidden' then
7462 firstElement.style.visibility := 'hidden';
7467 procedure TGikoForm.RepaintAllTabsBrowser();
7470 ThreadItem: TThreadItem;
7472 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7473 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7475 ThreadItem := GetActiveContent;
7476 if ThreadItem <> nil then
7477 InsertBrowserTab( ThreadItem, True );
7481 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7482 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7483 Shift: TShiftState);
7485 //
\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Ì
7486 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7487 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7488 SelectTimer.Interval := 0;
7489 if not (GikoSys.Setting.BrowserTabVisible) then begin
7490 if (GetActiveList is TBoard) then begin
7491 //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
7492 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7493 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7494 (Key = VK_UP) or (Key = VK_DOWN)) then
7495 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7499 // *************************************************************************
7500 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7501 // *************************************************************************
7502 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7503 Node: TTreeNode; var AllowEdit: Boolean);
7505 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7506 FOrigenCaption := Node.Text;
7508 // *************************************************************************
7509 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7510 // *************************************************************************
7511 function TGikoForm.GetMainForm(): TComponent;
7513 Result := Application.MainForm;
7515 // *************************************************************************
7516 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7517 // *************************************************************************
7518 function TGikoForm.GetScreenCursor(): TCursor;
7520 Result := Screen.Cursor;
7522 // *************************************************************************
7523 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7524 // *************************************************************************
7525 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7527 if (Screen.Cursor <> Cursor) then
7528 Screen.Cursor := Cursor;
7530 // *************************************************************************
7531 //!
\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
7532 // *************************************************************************
7533 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7535 //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Ì
7536 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7537 if GikoDM.CabinetVisibleAction.Enabled then begin
7538 GikoDM.CabinetVisibleAction.Execute;
7541 // *************************************************************************
7542 //!
\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
7543 // *************************************************************************
7544 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7546 if GikoDM.FavoriteArrangeAction.Enabled then begin
7547 GikoDM.FavoriteArrangeAction.Execute;
7550 // *************************************************************************
7551 //!
\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
7552 // *************************************************************************
7553 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7554 var Handled: Boolean);
7558 //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ß
7559 if Self.Active then begin
7561 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7562 WM_KEYFIRST..WM_KEYLAST :
7564 //
\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ç
7565 if (Msg.message <> WM_KEYUP)
7566 and (Msg.message <> WM_CHAR)
7567 and (Msg.message <> WM_SYSKEYUP) then begin
7568 wmMsg.Msg := Msg.message;
7569 wmMsg.CharCode := Word(Msg.wParam);
7570 wmMsg.KeyData := Msg.lParam;
7571 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7572 Self.OnShortCut(wmMsg, Handled);
7577 // Explorer
\82ÌD&D
\82ð
\8eó
\82¯
\82é
\82Æ
\82Ì
\94ñ
\83A
\83N
\83e
\83B
\83u
7578 if Msg.message = WM_DROPFILES then begin
7579 AcceptDropFiles(Msg);
7584 // *************************************************************************
7585 //!
\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
7586 // *************************************************************************
7587 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7589 Application.ProcessMessages;
7590 if not Application.Terminated then begin
7591 if PreviewTimer.Enabled then
7592 PreviewTimer.Enabled := False;
7593 //
\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
7594 if (FResPopupBrowser <> nil) then
7595 FResPopupBrowser.Clear;
7597 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7598 if FPreviewBrowser <> nil then
7599 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7603 // *************************************************************************
7604 //!
\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
7605 // *************************************************************************
7606 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7611 if (Sender <> nil) then begin
7612 s := ' [' + Sender.ClassName + ']' + #13#10;
7614 s := ' [ Sender is nil ] ' + #13#10;
7617 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7619 // *************************************************************************
7620 //!
\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¬
7621 // *************************************************************************
7622 procedure TGikoForm.CreateControlThread();
7624 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7625 FControlThread := TThreadControl.Create(True);
7626 FControlThread.MaxThreadCount := 1;
7627 FControlThread.Resume;
7628 FControlThread.OnDownloadEnd := DownloadEnd;
7629 FControlThread.OnDownloadMsg := DownloadMsg;
7630 FControlThread.OnWork := Work;
7631 FControlThread.OnWorkBegin := WorkBegin;
7632 FControlThread.OnWorkEnd := WorkEnd;
7634 // *************************************************************************
7635 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7636 // *************************************************************************
7637 procedure TGikoForm.CreateBrowsers(count: Integer);
7640 newBrowser: TWebBrowser;
7642 BrowserNullTab := TBrowserRecord.Create;
7643 BrowserNullTab.Browser := Browser;
7644 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7646 FBrowsers := TList.Create;
7648 for i := 0 to count -1 do begin
7649 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7650 newBrowser := FBrowsers[FBrowsers.Count - 1];
7651 TOleControl(newBrowser).Parent := BrowserPanel;
7652 TOleControl(newBrowser).Align := alNone;
7653 TOleControl(newBrowser).Left := 0;
7654 TOleControl(newBrowser).Top := 0;
7655 newBrowser.RegisterAsDropTarget := False;
7656 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7657 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7658 newBrowser.OnEnter := BrowserEnter;
7659 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7660 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7661 newBrowser.Navigate(BLANK_HTML);
7662 ShowWindow(newBrowser.Handle, SW_HIDE);
7663 GikoSys.ShowRefCount('Browser' + IntToStr(i), newBrowser.ControlInterface);
7664 GikoSys.ShowRefCount('Document' + IntToStr(i), newBrowser.ControlInterface.Document);
7666 BrowserNullTab.Browser.BringToFront;
7667 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7669 //
\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Ì
7670 //
\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Å
7671 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7672 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7673 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7674 Application.ProcessMessages;
7677 // *************************************************************************
7678 //!
\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é
7679 // *************************************************************************
7680 procedure TGikoForm.SetSelectComboBox();
7682 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7685 ToolButton: TToolButton;
7687 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7688 SelectComboBoxPanel.Visible := False;
7690 for i := ListToolBar.ControlCount - 1 downto 0 do
7692 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7694 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7695 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7696 SelectComboBoxPanel.Parent := ListToolBar;
7697 SelectComboBoxPanel.Visible := True;
7699 SelectComboBox.Left := 0;
7700 SelectComboBox.Top := 0;
7701 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7702 SelectComboBox.Width := SelectComboBoxPanel.Width -
7703 SelectComboBoxSplitter.Width;
7705 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7706 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7707 if ToolButton = nil then begin
7708 ToolButton := TToolButton.Create(ListToolBar);
7709 ToolButton.Name := DUMMYCOMPNAME;
7711 ToolButton.Style := tbsSeparator;
7712 ToolButton.Width := 0;
7713 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7714 ListToolBar.InsertControl(ToolButton);
7715 ToolButton.Visible := False;
7717 //
\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·
7718 if (i + 1) < ListToolBar.ControlCount then
7719 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7720 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7721 ListToolBar.Controls[ i + 1 ].Visible := False;
7724 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7725 ListToolBar.Controls[ i ].Visible := False;
7733 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\83}
\83E
\83X
\83_
\83E
\83\93\83C
\83x
\83\93\83g
7734 procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7735 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7742 if (TreeView.Selected <> nil) and
7743 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7744 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
7745 rect := TreeView.Selected.DisplayRect(true);
7746 //
\83A
\83C
\83R
\83\93\95ª
\82¾
\82¯
\8d¶
\82É
\82¸
\82ç
\82·
7747 if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
7748 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7749 //
\83N
\83\8a\83b
\83N
\82Æ
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82ð
\83R
\83R
\82Å
\94»
\92è
7750 if ssDouble in Shift then begin
7751 TreeDoubleClick( TreeView.Selected );
7753 TreeClick(TreeView.Selected);
7760 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
7761 procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7765 if ActionList <> nil then begin
7766 SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7768 for i := 0 to ActionList.ActionCount - 1 do begin
7770 FActionListGroupIndexes[i] :=
7771 TCustomAction(ActionList.Actions[i]).GroupIndex;
7772 TCustomAction(ActionList.Actions[i]).GroupIndex
7775 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7781 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
7782 procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7786 if ActionList <> nil then begin
7787 if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7788 for i := 0 to ActionList.ActionCount - 1 do begin
7790 TCustomAction(ActionList.Actions[i]).GroupIndex
7791 := FActionListGroupIndexes[i];
7793 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7799 //!
\82±
\82Ì
\83\8c\83X
\82ÌURL
\8eæ
\93¾
7800 procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
7804 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
7805 procedure TGikoForm.RefreshListView(Thread: TThreadItem);
7807 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
7808 if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin
7813 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
7814 MousePos: TPoint; var Handled: Boolean);
7817 coolBar: TGikoCoolBar;
7820 if (Sender <> nil) and (Sender is TGikoCoolBar) then begin
7821 coolBar := TGikoCoolBar(Sender);
7822 if (coolBar = MainCoolBar) then begin
7823 FToolBarSettingSender := tssMain;
7824 end else if (coolBar = ListCoolBar) then begin
7825 FToolBarSettingSender := tssList;
7826 end else if (coolBar = BrowserCoolBar) then begin
7827 FToolBarSettingSender := tssBrowser;
7829 FToolBarSettingSender := tssNone;
7831 pos := coolBar.ClientToScreen( MousePos );
7832 MainCoolBarPopupMenu.Popup( pos.X, pos.Y );
7837 procedure TGikoForm.TaskTrayIconMessage(var Msg: TMsg);
7841 //
\8d¶
\83N
\83\8a\83b
\83N
\82È
\82ç
\95\9c\8c³
\82·
\82é
7842 if (Msg.wParam = WM_LBUTTONUP) then begin
7844 end else if (Msg.wParam=WM_RBUTTONUP) then begin
7845 //
\89E
\83N
\83\8a\83b
\83N
\82È
\82ç
\8fI
\97¹
\82·
\82é
7847 SetForegroundWindow ( Self.Handle );
7848 TaskTrayPopupMenu.Popup ( p.X, p.Y );
7851 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
7852 procedure TGikoForm.StoredTaskTray;
7855 if (FIconData.uID = 0) then begin
7856 FIconData.cbSize := SizeOf(TNotifyIconData);
7857 FIconData.uID := Self.Handle;
7858 FIconData.Wnd := Handle;
7859 FIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
7860 FIconData.uCallbackMessage := USER_TASKTRAY;
7861 FIconData.hIcon := Application.Icon.Handle; {
\83A
\83C
\83R
\83\93\8ew
\92è}
7862 FIconData.szTip := '
\83M
\83R
\83i
\83r'; {
\83q
\83\93\83g
\95¶
\8e\9a\97ñ}
7863 Shell_NotifyIcon(NIM_ADD, @FIconData);
7864 ShowEditors(SW_HIDE);
7865 ShowWindow(Self.Handle, SW_HIDE);
7870 //!
\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¦
7871 procedure TGikoForm.UnStoredTaskTray;
7875 Shell_NotifyIcon(NIM_DELETE, @FIconData);
7876 SetForegroundWindow(Application.Handle);
7881 // Action
\82©
\82ç
\8ai
\94[
\82µ
\82½
\82Æ
\82«
\82ÍTag
\82Ì
\92l
\82Í0
\88È
\8aO
7882 if (GikoDM.StoredTaskTrayAction.Tag = 0) then begin
7883 ShowWindow(Self.Handle, SW_RESTORE);
7885 ShowWindow(Self.Handle, SW_SHOW);
7887 ShowEditors(SW_SHOW);
7888 GikoDM.StoredTaskTrayAction.Tag := 0;
7892 \brief
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
7893 \param nCmdShow Windows.ShowWindow
\82É
\91\97\82é
\83p
\83\89\83\81\81[
\83^
\82Æ
\93¯
\82¶
7895 procedure TGikoForm.ShowEditors(nCmdShow: Integer);
7899 //
\83\8c\83X
\83G
\83f
\83B
\83^
\82ð
\92T
\82·
7900 for i := 0 to Screen.CustomFormCount - 1 do begin
7901 if TObject(Screen.CustomForms[i]) is TEditorForm then
7902 ShowWindow(Screen.CustomForms[i].Handle, nCmdShow);
7906 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83u
\83\89\83E
\83U
\8dì
\90¬
7907 procedure TGikoForm.CreateResPopupBrowser;
7909 if (FResPopupBrowser = nil) then begin
7910 FResPopupBrowser := TResPopupBrowser.Create(BrowserPanel);
7913 //! ListView
\82ÌD&D
\8eó
\82¯
\8eæ
\82è
7914 procedure TGikoForm.AcceptDropFiles(var Msg: TMsg);
7916 FileName: Array[0..MAX_PATH] of Char;
7920 datList: TStringList;
7922 //
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\94Â
\82Ì
\82Æ
\82«
\88È
\8aO
\82Í
\8b\91\94Û
7923 if GetActiveList is TBoard then begin
7924 Board := TBoard(GetActiveList);
7925 if MsgBox(Handle, Board.Title
7926 + '
\94Â
\82É
\93ü
\82ê
\82Ä
\82¢
\82¢
\82Å
\82·
\82©
\81H', '
\83M
\83R
\83i
\83r', MB_YESNO or MB_ICONQUESTION) = IDYES then begin
7927 //
\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
7928 datList := TStringList.Create;
7930 Cnt := DragQueryFile(Msg.WParam, $FFFFFFFF, FileName, SizeOf(FileName));
7931 for K := 0 to Cnt - 1 do begin
7932 DragQueryFile(Msg.WParam, K, FileName, SizeOf(FileName));
7933 // 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
7934 //
\83t
\83@
\83C
\83\8b\82Ì
\83`
\83F
\83b
\83N
7935 if (isValidFile(FileName)) then begin
7936 LogFolder := ExtractFilePath(Board.FilePath);
7937 if (FileExists( LogFolder + ExtractFileName(FileName))) then begin
7938 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);
7940 if (not DirectoryExists(LogFolder)) then begin
7941 if (not GikoSys.ForceDirectoriesEx(LogFolder) ) then begin
7942 GikoUtil.MsgBox(Handle, LogFolder + '
\82Ì
\90¶
\90¬
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7945 if (not Windows.CopyFile(FileName, PChar(LogFolder + ExtractFileName(FileName)), true)) then begin
7946 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);
7948 datList.Add(ExtractFileName(FileName));
7953 DragFinish(Msg.WParam);
7954 if (datList.Count > 0) then begin
7955 GikoSys.AddOutofIndexDat(Board, datList, False);
7956 ShowMessage(IntToStr(datList.Count) + '
\8cÂ
\82Ìdat
\83t
\83@
\83C
\83\8b\82ª
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82µ
\82½
\81B' );
7957 if GikoForm.TreeView.Visible then begin
7958 GikoForm.TreeView.Refresh;
7960 if GikoForm.ListView.Visible then begin
7964 ShowMessage('
\88ê
\82Â
\82à
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B' );
7972 ShowMessage('
\94Â
\82ð
\95\
\8e¦
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
7975 procedure TGikoForm.UpdateListView();
7977 //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
7978 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
7979 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
7980 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
7981 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
7982 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
7983 case GikoForm.ViewType of
7984 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
7985 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
7986 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
7987 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
7988 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
7989 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
7994 //!
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
7995 function TGikoForm.isValidFile(FileName: String) : boolean;
8000 //
\91¶
\8dÝ
\82·
\82é
\82©
\81A
\8ag
\92£
\8eqdat
\81A
\83t
\83@
\83C
\83\8b\96¼
8001 if ( not FileExists(FileName) ) then begin
8003 GikoUtil.MsgBox(Handle, FileName + '
\82Í
\91¶
\8dÝ
\82µ
\82Ü
\82¹
\82ñ
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
8004 end else if (ExtractFileExt(ExtractFileName(FileName)) <> '.dat' ) then begin
8006 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);
8008 //
\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
8010 dt := GikoSys.GetCreateDateFromName(ExtractFileName(FileName));
8011 if ((UnixToDateTime(ZERO_DATE) + OffsetFromUTC) = dt) then begin
8013 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);
8017 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);
8022 procedure TGikoForm.ResPopupClearTimerTimer(Sender: TObject);
8024 ResPopupClearTimer.Enabled := False;
8025 if ResPopupClearTimer.Tag = 0 then begin
8026 FResPopupBrowser.Clear;
8028 FResPopupBrowser.CurrentBrowser.ChildClear;
8031 //!
\83A
\83C
\83R
\83\93\93Ç
\82Ý
\8d\9e\82Ý
8032 procedure TGikoForm.LoadIcon();
8034 ICONI6 = 'icon16.bmp';
8035 ICON32 = 'icon32.bmp';
8036 ICONSTAT = 'state_icon.bmp';
8037 ICONMES = 'message_icon.bmp';
8038 ICONADD = 'address_icon.bmp';
8039 ICONITEM = 'item_icon.bmp';
8040 ICONTOOL = 'hottoolbar_icon.bmp';
8042 if FileExists(GikoSys.Setting.GetAppDir + ICONI6) then begin
8044 ItemIcon16.FileLoad(rtBitmap,
8045 GikoSys.Setting.GetAppDir + ICONI6, clPurple);
8047 if FileExists(GikoSys.Setting.GetAppDir + ICON32) then begin
8049 ItemIcon32.FileLoad(rtBitmap,
8050 GikoSys.Setting.GetAppDir + ICON32, clPurple);
8052 if FileExists(GikoSys.Setting.GetAppDir + ICONSTAT) then begin
8053 StateIconImageList.Clear;
8054 StateIconImageList.FileLoad(rtBitmap,
8055 GikoSys.Setting.GetAppDir + ICONSTAT, clPurple);
8057 if FileExists(GikoSys.Setting.GetAppDir + ICONMES) then begin
8058 MessageImageList.Clear;
8059 MessageImageList.FileLoad(rtBitmap,
8060 GikoSys.Setting.GetAppDir + ICONMES, clPurple);
8062 if FileExists(GikoSys.Setting.GetAppDir + ICONADD) then begin
8063 AddressImageList.Clear;
8064 AddressImageList.FileLoad(rtBitmap,
8065 GikoSys.Setting.GetAppDir + ICONADD, clPurple);
8067 if FileExists(GikoSys.Setting.GetAppDir + ICONITEM) then begin
8068 ItemImageList.Clear;
8069 ItemImageList.FileLoad(rtBitmap,
8070 GikoSys.Setting.GetAppDir + ICONITEM, clPurple);
8072 if FileExists(GikoSys.Setting.GetAppDir + ICONTOOL) then begin
8073 HotToobarImageList.Clear;
8074 HotToobarImageList.FileLoad(rtBitmap,
8075 GikoSys.Setting.GetAppDir + ICONTOOL, clPurple);