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;
429 procedure FormCreate(Sender: TObject);
430 procedure FormDestroy(Sender: TObject);
431 procedure SaveSettingAll();
432 procedure BrowserStatusTextChange(Sender: TObject;
433 const Text: WideString);
434 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
435 procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
436 var AllowChange: Boolean);
437 procedure ListViewKeyDown(Sender: TObject; var Key: Word;
439 procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
440 procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
441 Button: TToolButton; State: TCustomDrawState;
442 var DefaultDraw: Boolean);
443 procedure BrowserBeforeNavigate2(Sender: TObject;
444 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
445 Headers: OleVariant; var Cancel: WordBool);
446 procedure TreeViewCustomDraw(Sender: TCustomTreeView;
447 const ARect: TRect; var DefaultDraw: Boolean);
448 procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
449 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
450 procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
451 procedure ListViewCustomDraw(Sender: TCustomListView;
452 const ARect: TRect; var DefaultDraw: Boolean);
453 procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
454 Shift: TShiftState; X, Y: Integer);
455 procedure TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
456 procedure MessageListViewResize(Sender: TObject);
457 procedure CabinetVisible( isVisible : Boolean );
458 procedure FormResize(Sender: TObject);
459 procedure ListPopupMenuPopup(Sender: TObject);
460 procedure TreePopupMenuPopup(Sender: TObject);
461 procedure BrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
462 var Cancel: WordBool);
463 procedure ListSplitterMoved(Sender: TObject);
464 procedure BrowserTabChange(Sender: TObject);
465 procedure BrowserTabMouseDown(Sender: TObject; Button: TMouseButton;
466 Shift: TShiftState; X, Y: Integer);
467 procedure BrowserTabDragOver(Sender, Source: TObject; X, Y: Integer;
468 State: TDragState; var Accept: Boolean);
469 procedure BrowserTabDragDrop(Sender, Source: TObject; X, Y: Integer);
470 procedure BrowserTabMouseMove(Sender: TObject; Shift: TShiftState; X,
472 procedure BrowserDocumentComplete(Sender: TObject;
473 const pDisp: IDispatch; var URL: OleVariant);
474 procedure RoundNamePopupMenuPopup(Sender: TObject);
475 procedure FormShow(Sender: TObject);
476 procedure BrowserTabToolBarResize(Sender: TObject);
477 procedure FavoriteMenuClick(Sender: TObject);
478 procedure MainCoolBarResize(Sender: TObject);
479 procedure AddressToolBarResize(Sender: TObject);
480 procedure AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
482 procedure BrowserEnter(Sender: TObject);
483 procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
484 procedure PreviewTimerTimer(Sender: TObject);
485 procedure MessageHideButtonClick(Sender: TObject);
486 procedure HistoryAllClearToolButtonClick(Sender: TObject);
487 procedure MainCoolBarBandInfo(Sender: TObject;
488 var BandInfo: PReBarBandInfoA);
489 procedure MainCoolBarChevronClick(Sender: TObject;
490 RebarChevron: PNMRebarChevron);
491 procedure ListCoolBarBandInfo(Sender: TObject;
492 var BandInfo: PReBarBandInfoA);
493 procedure ListCoolBarChevronClick(Sender: TObject;
494 RebarChevron: PNMRebarChevron);
495 procedure BrowserCoolBarBandInfo(Sender: TObject;
496 var BandInfo: PReBarBandInfoA);
497 procedure BrowserCoolBarChevronClick(Sender: TObject;
498 RebarChevron: PNMRebarChevron);
499 procedure ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
500 procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
501 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
502 procedure SelectComboBoxChange(Sender: TObject);
503 procedure SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
505 procedure SelectComboBoxExit(Sender: TObject);
506 procedure SelectComboBoxSplitterMouseMove(Sender: TObject;
507 Shift: TShiftState; X, Y: Integer);
508 procedure SelectComboBoxSplitterMouseDown(Sender: TObject;
509 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
510 procedure SelectComboBoxSplitterMouseUp(Sender: TObject;
511 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
512 procedure StatusBarResize(Sender: TObject);
513 procedure SelectComboBoxEnter(Sender: TObject);
514 procedure FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
516 procedure FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
517 procedure FavoriteTreeViewEdited(Sender: TObject; Node: TTreeNode;
519 procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
521 procedure FavoriteTreePopupMenuPopup(Sender: TObject);
522 procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
523 procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
524 Shift: TShiftState; X, Y: Integer);
525 procedure LinkToolBarDragOver(Sender, Source: TObject; X, Y: Integer;
526 State: TDragState; var Accept: Boolean);
527 procedure FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
529 procedure FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
530 procedure BrowserTabContextPopup(Sender: TObject; MousePos: TPoint;
531 var Handled: Boolean);
532 procedure BrowserTabPopupMenuPopup(Sender: TObject);
533 procedure BrowserTabResize(Sender: TObject);
534 procedure TreeViewKeyDown(Sender: TObject; var Key: Word;
536 procedure FavoriteTreeViewMouseDown(Sender: TObject;
537 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
538 procedure MessagePanelResize(Sender: TObject);
540 procedure SelectTimerTimer(Sender: TObject);
541 procedure ListViewColumnRightClick(Sender: TObject;
542 Column: TListColumn; Point: TPoint);
543 procedure ListViewCustomDrawItem(Sender: TCustomListView;
544 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
545 procedure FormActivate(Sender: TObject);
546 procedure BrowserPanelResize(Sender: TObject);
547 procedure MenuToolBarResize(Sender: TObject);
548 procedure ListToolBarResize(Sender: TObject);
549 procedure BrowserToolBarResize(Sender: TObject);
550 procedure KokoPopupMenuPopup(Sender: TObject);
551 procedure ListViewKeyUp(Sender: TObject; var Key: Word;
553 procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
554 var AllowEdit: Boolean);
555 procedure CabinetCloseSpeedButtonClick(Sender: TObject);
556 procedure FavoriteArrangeToolButtonClick(Sender: TObject);
557 procedure GikoApplicationEventsMessage(var Msg: tagMSG;
558 var Handled: Boolean);
559 procedure GikoApplicationEventsDeactivate(Sender: TObject);
560 procedure GikoApplicationEventsException(Sender: TObject; E: Exception);
561 procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
562 Shift: TShiftState; X, Y: Integer);
563 procedure GetResURLMenuClick(Sender: TObject);
564 procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
565 var Handled: Boolean);
566 procedure ResPopupClearTimerTimer(Sender: TObject);
569 FEnabledCloseButton: Boolean;
570 FClickNode: TTreeNode;
572 FPreviewBrowser: TPreviewBrowser;
574 FBrowserSizeHeight: Integer;
575 FBrowserSizeWidth: Integer;
576 FTabHintIndex: Integer;
577 FListStyle: TViewStyle; //
\83\8a\83X
\83g
\83A
\83C
\83R
\83\93\83X
\83^
\83C
\83\8b
578 FItemNoVisible: Boolean; //
\83\8a\83X
\83g
\94Ô
\8d\86\95\
\8e¦
\83t
\83\89\83O
579 FViewType: TGikoViewType; //
\83\8a\83X
\83g
\83A
\83C
\83e
\83\80\95\
\8e¦
\83^
\83C
\83v
580 FActiveList: TObject;
581 FActiveContent: TBrowserRecord; //
583 FHistoryList: THistoryList; //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
584 FTreeType: TGikoTreeType;
588 FDownloadTitle: string; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\83^
\83C
\83g
\83\8b\96¼
589 FDownloadMax: Integer; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\8dÅ
\91å
\83T
\83C
\83Y
590 FEvent: THTMLDocumentEventSink;//
\83u
\83\89\83E
\83U
\83h
\83L
\83\85\83\81\83\93\83g
\83C
\83x
\83\93\83g
591 IsDraggingSelectComboBox : Boolean;
592 DraggingSelectComboBoxPosition : TPoint;
593 FSearchDialog: TSearchDialog;
594 FDropSpaceNode: TTreeNode;
595 FDragTime : Cardinal; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
596 FDragButton : TToolButton; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
\82ÉDrag
\82µ
\82Ä
\82éButton
\95Û
\91¶
597 FDragWFirst : Boolean; ///< WebTab
\82ÌD&D
\97p
598 FListViewBackGroundColor : TColor; ///< ListView
\82ÌBackGroundColor
599 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¦
600 FOddColor : TColor; ///<
\82»
\82Ì
\90F
601 FSelectResWord : string; ///<
\83\8c\83X
\8di
\8d\9e\83\8f\81[
\83h
602 FIsIgnoreResize : TResizeType; ///<
\83\8a\83T
\83C
\83Y
\83C
\83x
\83\93\83g
\82ð
\96³
\8e\8b\82·
\82é
\82©
\82Ç
\82¤
\82©
603 FIsMinimize : TMinimizeType; ///<
\8dÅ
\8f¬
\89»
\82µ
\82Ä
\82¢
\82é
\8dÅ
\92\86\82©
604 FOldFormWidth : Integer; ///<
\92¼
\91O
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\95\9d
605 FToolBarSettingSender : TToolBarSettingSenderType; ///<
\83c
\81[
\83\8b\83o
\81[
\90Ý
\92è
\82ð
\83N
\83\8a\83b
\83N
\82µ
\82½
\83N
\81[
\83\8b\83o
\81[
606 FMouseDownPos : TPoint; ///<
\83u
\83\89\83E
\83U
\83^
\83u
\82Å
\83}
\83E
\83X
\82ð
\89\9f\82µ
\82½
\82Æ
\82«
\82Ì
\8dÀ
\95W
608 FResRangeMenuSelect : Longint; ///< ResRangeButton
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\8d\80\96Ú (
\83t
\83H
\81[
\83}
\83b
\83g
\82Í ResRange
\8cÝ
\8a·)
610 FIsHandledWheel : Boolean; ///<
\8aù
\82É
\8eó
\82¯
\8eæ
\82Á
\82½ WM_MOUSEWHEEL
\82©
\82Ç
\82¤
\82©
611 DiffComp: Boolean; //Add by Genyakun
\83X
\83\8c\82ª
\8dX
\90V
\82³
\82ê
\82½
\82Æ
\82«
\82ÉTrue
\82É
\82È
\82é
612 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ñ
613 FPreviewBrowserRect: TRect; ///<
\83v
\83\8c\83r
\83\85\81[
\82Ì
\95\
\8e¦
\88Ê
\92u
\82ð
\8bL
\89¯
\82·
\82é
614 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ñ
615 FResPopupBrowser: TResPopupBrowser;
616 FUpdateExePath: string; ///
\83M
\83R
\83i
\83r
\8dX
\90V
\83C
\83\93\83X
\83g
\81[
\83\89\83p
\83X
617 FUpdateExeArgs: string; ///
\83M
\83R
\83i
\83r
\8dX
\90V
\83C
\83\93\83X
\83g
\81[
\83\89\88ø
\90\94
618 FKokoPopupThreadItem: TThreadItem;
619 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
620 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
621 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
622 procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
623 procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
625 procedure ListDoubleClick(Shift: TShiftState);
626 function Hook(var Message: TMessage): Boolean;
627 procedure AddRoundNameMenu(MenuItem: TMenuItem);
628 procedure SetMenuFont;
629 procedure CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
630 procedure FavoriteClick(Sender: TObject; ActiveTab: Boolean); overload;
631 procedure FavoriteClick(Sender: TObject); overload;
632 procedure FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
633 function OnDocumentContextMenu(Sender: TObject): WordBool;
634 function GetWidthAllToolButton(ToolBar: TToolBar): Integer;
635 procedure MenuBarChevronMenu;
636 procedure LinkBarChevronMenu;
637 procedure ToolBarChevronMenu(ToolBar: TToolBar);
638 procedure LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
639 procedure LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
640 procedure LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
641 procedure LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
642 procedure LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
643 function TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
644 procedure FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
645 procedure FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
646 procedure FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
648 procedure SetListViewBackGroundColor(value: TColor);
649 procedure BBSMenuItemOnClick( Sender : TObject );
650 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
651 procedure SaveCoolBarSettings;
652 procedure SaveMainCoolBarSettings;
653 procedure SaveBoardCoolBarSettings;
654 procedure SaveBrowserCoolBarSettings;
655 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
656 procedure LoadCoolBarSettings;
657 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
658 procedure OnMinimize;
659 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½
660 procedure OnMinimized;
661 /// TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
662 procedure TreeClick( Node : TTreeNode );
663 /// TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
664 procedure TreeDoubleClick( Node : TTreeNode );
665 ///
\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
666 procedure SetBBSMenu;
667 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
668 procedure ListColumnPopupMenuOnClick( Sender : TObject );
669 //!
\8di
\82è
\8d\9e\82Ý
\95¶
\8e\9a\97ñ
\90Ý
\92è
670 procedure SetSelectWord( const text : string );
671 //
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
672 function GetScreenCursor(): TCursor;
673 //
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
674 procedure SetScreenCursor(Cursor : TCursor);
675 //!
\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¬
676 procedure CreateControlThread();
677 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
678 procedure CreateBrowsers(count: Integer);
679 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
680 procedure GetGroupIndex(ActionList: TActionList);
681 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
682 procedure SetGroupIndex(ActionList: TActionList);
683 //!
\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é)
684 procedure OpenThreadItem(Thread: TThreadItem; URL: String);
685 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
686 procedure RefreshListView(Thread: TThreadItem);
687 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
688 procedure ClearThreadRengeAction;
689 //!
\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¦
690 procedure UnStoredTaskTray;
691 //!
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
692 procedure ShowEditors(nCmdShow: Integer);
693 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
694 procedure ReleaseOldestBrowser;
695 //!
\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Á
696 procedure AddMenuSameBoardThread(MenuItem: TMenuItem);
697 //!
\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
698 procedure SameBoardThreadSubItemOnClick(Sender: TObject);
699 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83u
\83\89\83E
\83U
\8dì
\90¬
700 procedure CreateResPopupBrowser;
701 //!
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
702 function isValidFile(FileName: String) : boolean;
703 //! ListView
\82ÌD&D
\8eó
\82¯
\8eæ
\82è
704 procedure AcceptDropFiles(var Msg: TMsg);
705 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\8dX
\90V
\8f\88\97\9d
706 procedure UpdateListView();
707 //!
\83A
\83C
\83R
\83\93\93Ç
\82Ý
\8d\9e\82Ý
708 procedure LoadIcon();
709 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\93Ç
\82Ý
\8d\9e\82Ý
710 procedure LoadPopupMenu();
712 procedure CreateParams(var Params: TCreateParams); override;
713 procedure WndProc(var Message: TMessage); override;
714 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
715 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
716 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
719 LastRoundTime: TDateTime;
720 BrowserNullTab: TBrowserRecord;
721 FControlThread: TThreadControl;
722 FIconData : TNotifyIconData;
723 procedure MoveToURL(const inURL: string; KeyMask: Boolean = False);
724 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
726 function GetHttpState: Boolean;
727 procedure SetEnabledCloseButton(Enabled: Boolean);
728 function GetTreeNode(Data: TObject): TTreeNode;
729 procedure ListViewAllSelect;
730 property ListStyle: TViewStyle read FListStyle write FListStyle;
731 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
732 property ViewType: TGikoViewType read FViewType write FViewType;
733 property NameCookie: string read FNameCookie write FNameCookie;
734 property MailCookie: string read FMailCookie write FMailCookie;
735 property ClickNode: TTreeNode read FClickNode write FClickNode;
736 property TreeType: TGikoTreeType read FTreeType write FTreeType;
737 property ActiveContent: TBrowserRecord read FActiveContent write FActiveContent;
738 property ResRangeMenuSelect: Longint read FResRangeMenuSelect write FResRangeMenuSelect;
739 property SelectResWord : string read FSelectResWord write FSelectResWord;
740 property BrowserSizeWidth: Integer read FBrowserSizeWidth write FBrowserSizeWidth;
741 property BrowserSizeHeight: Integer read FBrowserSizeHeight write FBrowserSizeHeight;
742 property SearchDialog: TSearchDialog read FSearchDialog write FSearchDialog;
743 property ToolBarSettingSender : TToolBarSettingSenderType
744 read FToolBarSettingSender write FToolBarSettingSender;
745 property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
746 property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
747 property WorkCount: Integer read FWorkCount write FWorkCount;
748 property UpdateExePath: string read FUpdateExePath write FUpdateExePath;
749 property UpdateExeArgs: string read FUpdateExeArgs write FUpdateExeArgs;
751 procedure SetContent(inThread: TBrowserRecord);
752 function GetActiveContent(popup :Boolean = false): TThreadItem;
753 function GetActiveList: TObject;
755 procedure SetListViewType(AViewType: TGikoViewType); overload;
756 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
757 procedure PlaySound(SoundEventName: string);
758 procedure ShowBBSTree( inBBS : TBBS );
759 procedure ShowBBSTreeOld( inBBS : TBBS );
760 procedure ShowHistoryTree;
761 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
762 procedure SetBrowserTabState;
763 procedure SetToolBarPopup;
764 procedure ShowFavoriteAddDialog( Item : TObject );
765 procedure FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
766 procedure RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
767 property ListViewBackGroundColor: TColor read FListViewBackGroundColor write SetListViewBackGroundColor;
768 property UseOddResOddColor : Boolean read FUseOddResOddColor write FUseOddResOddColor;
769 property OddColor : TColor read FOddColor write FOddColor;
770 //!
\83\8c\83X
\83\81\83j
\83\85\81[
\83A
\83N
\83e
\83B
\83u
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80
771 property KokoPopupThreadItem : TThreadItem read FKokoPopupThreadItem;
773 function FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
774 procedure OnPlugInMenuItem( Sender : TObject );
775 procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
776 /// 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Å
777 procedure ActiveListColumnSave;
778 procedure SetActiveList(Obj: TObject);
779 property ActiveList: TObject read GetActiveList write SetActiveList;
780 /// CoolBar
\82ª
\83T
\83C
\83Y
\95Ï
\8dX
\82³
\82ê
\82½
781 procedure CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
782 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
783 procedure IndividualAbonID(Atype : Integer);
784 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
785 procedure IndividualAbon(Atag, Atype : Integer);
786 //
\93¯
\88êID
\82ðNG
\83\8f\81[
\83h
\82É
\93o
\98^
787 procedure AddIDtoNGWord(invisible : boolean);
788 //
\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Ý
789 procedure RepaintAllTabsBrowser();
790 //
\83\8a\83\93\83N
\83o
\81[
\90Ý
\92è
791 procedure SetLinkBar;
792 procedure FavoriteBrowseFolder( node: TTreeNode );
793 //
\83X
\83\8c\83b
\83h
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
794 procedure DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
795 //
\94Â
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
796 procedure DownloadList(Board: TBoard; ForceDownload: Boolean = False);
797 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
798 procedure DeleteHistory( threadItem: TThreadItem );
799 //
\83^
\83u
\82ð
\8dí
\8f\9c \83X
\83\8c\83b
\83h
\8ew
\92è
800 procedure DeleteTab(ThreadItem: TThreadItem); overload;
801 //
\83^
\83u
\82ð
\8dí
\8f\9c \83u
\83\89\83E
\83U
\83\8c\83R
\81[
\83h
\81i
\83^
\83u
\81j
\8ew
\92è
802 procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
803 //
\83^
\83u
\8dí
\8f\9c\81i
\8eÀ
\91\95\95\94\81j
804 procedure DeleteTab(index, selectIndex: Integer); overload;
805 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
806 procedure BrowserMovement(const AName: string); overload;
807 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
808 procedure BrowserMovement(scroll: Integer); overload;
809 //Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
810 function GetMainForm(): TComponent;
811 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
812 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
813 procedure OnGestureStart(Sender: TObject);
814 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
815 procedure OnGestureMove(Sender: TObject);
816 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
817 procedure OnGestureEnd(Sender: TObject);
818 ///
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
819 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
820 //ListView
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\82ð
\8eæ
\93¾
\82·
\82é
821 procedure SelectListItem(List: TList);
822 //
\8ew
\92è
\82µ
\82½
\83\8c\83X
\82ð
\83R
\83s
\81[
\82·
\82é
823 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
825 procedure ModifySelectList;
827 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
829 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
831 procedure SetSelectRoundName(Sender: TObject);
833 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
835 function WebBrowserClick(Sender: TObject): WordBool;
836 //!
\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é
837 procedure SetSelectComboBox();
839 //!
\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
840 procedure TaskTrayIconMessage(var Msg : TMsg); message WM_USER + 2010;
841 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
842 procedure StoredTaskTray;
843 //!
\93¯ID
\83\8c\83X
\83A
\83\93\83J
\81[
\95\
\8e¦
844 procedure ShowSameIDAncher(const AID: String);
846 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
849 TFavoriteMenuItem = class(TMenuItem)
853 property Data: Pointer read FData write FData;
856 TBBSMenuItem = class(TMenuItem)
860 property Data: Pointer read FData write FData;
863 TLinkToolButton = class(TToolButton)
867 property Data: Pointer read FData write FData;
876 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
877 YofUtils, ToolBarUtil, ToolBarSetting,
878 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
879 FavoriteArrange, AddressHistory, Gesture,
880 About, Option, Round, Splash, Sort, ListSelect, Imm,
881 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
882 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
883 InputAssistDataModule, Types, ReplaceDataModule, PopupMenuUtil;
886 BLANK_HTML: string = 'about:blank';
887 BROWSER_COUNT = 5; //
\83u
\83\89\83E
\83U
\82Ì
\90\94
889 DandD_THRESHOLD = 5; //D&D
\82Ìè
\87\92l
\81ipixcel)
890 //
\83v
\83\8c\83r
\83\85\81[
\83t
\83@
\83C
\83\8b\96¼
891 HTML_FILE_NAME = 'temp_preview.html';
892 //
\83\81\83b
\83Z
\81[
\83WID
893 USER_TREECLICK = WM_USER + 2000;
894 USER_RESIZED = WM_USER + 2001;
895 USER_MINIMIZED = WM_USER + 2002;
896 USER_SETLINKBAR = WM_USER + 2003;
897 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
898 USER_TASKTRAY = WM_USER + 2010;
901 procedure TGikoForm.CreateParams(var Params: TCreateParams);
904 if FormStyle in [fsNormal, fsStayOnTop] then begin
905 if BorderStyle in [bsSingle, bsSizeable] then begin
906 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
907 Params.WndParent := 0;
912 procedure TGikoForm.FormCreate(Sender: TObject);
914 TVS_NOTOOLTIPS = $0080;
920 wp: TWindowPlacement;
924 Writeln('============================================================');
925 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
927 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
928 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¢');
929 Writeln('============================================================');
932 Sort.SetSortDate(Now());
934 FTreeType := gttNone;
935 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô
937 Application.HookMainWindow(Hook);
938 FIsIgnoreResize := rtResizing;
939 //ActionList
\82ÌGuoupIndex
\82ð
\95Û
\91¶
\82µ
\82Ä
\81A0
\82É
\83N
\83\8a\83A
\82·
\82é
\81B
940 //(
\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¢)
941 //
\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
942 GetGroupIndex(GikoDM.GikoFormActionList);
943 FSearchDialog := nil;
944 FResPopupBrowser := nil;
945 CreateBrowsers(BROWSER_COUNT);
947 FUpdateExePath := '';
948 FUpdateExeArgs := '';
950 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
953 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
954 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
956 //
\83A
\83C
\83R
\83\93\82Ì
\93Ç
\82Ý
\8eæ
\82è
959 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
960 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
962 EnabledCloseButton := True;
964 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
965 ListView.ViewStyle := GikoSys.Setting.ListStyle;
967 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
969 AnimePanel.Left := 0;
971 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
973 //
\83L
\83\83\83r
\83l
\83b
\83g
974 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
976 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
977 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
978 GikoDM.MsgBarVisibleActionExecute(nil);
979 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
981 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
982 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
983 GikoDM.StatusBarVisibleActionExecute(nil);
985 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
986 TreeView.Items.BeginUpdate;
987 FavoriteTreeView.Items.BeginUpdate;
988 ListView.Items.BeginUpdate;
990 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
991 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
992 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
993 TreeView.Color := GikoSys.Setting.CabinetBackColor;
994 FavoriteTreeView.Font.Assign(TreeView.Font);
995 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
997 ListView.Font.Name := GikoSys.Setting.ListFontName;
998 ListView.Font.Size := GikoSys.Setting.ListFontSize;
999 ListView.Font.Color := GikoSys.Setting.ListFontColor;
1000 ListView.Font.Style := [];
1001 if GikoSys.Setting.ListFontBold then
1002 ListView.Font.Style := [fsbold];
1003 if GikoSys.Setting.ListFontItalic then
1004 ListView.Font.Style := ListView.Font.Style + [fsitalic];
1006 ListViewBackGroundColor := clWhite; //
\83f
\83t
\83H
\83\8b\83g
\82É
\90Ý
\92è
\82µ
\82½
\82Ì
\82¿
1007 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; //
\83\86\81[
\83U
\92è
\8b`
\82É
\95Ï
\8dX
1008 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
1009 FOddColor := GikoSys.Setting.OddColor;
1012 TreeView.Items.EndUpdate;
1013 FavoriteTreeView.Items.EndUpdate;
1014 ListView.Items.EndUpdate;
1016 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
1017 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
1019 //
\83~
\83\85\81[
\83g
\82Ì
\8fó
\91Ô
\82ð
\90Ý
\92è
1020 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
1022 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1023 FResRangeMenuSelect := GikoSys.ResRange;
1024 case GikoSys.ResRange of
1027 GikoDM.AllResAction.Execute;
1031 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
1032 GikoDM.SelectResAction.Checked := True;
1035 case FResRangeMenuSelect of
1036 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
1037 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
1040 GikoDM.OnlyAHundredResAction.Checked := True;
1041 GikoSys.ResRange := GikoSys.Setting.ResRangeExCount;
1046 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\95\
\8e¦
\94Í
\88Í
1047 case GikoSys.Setting.ThreadRange of
1050 GikoDM.AllItemAction.Checked := True;
1055 GikoDM.LogItemAction.Checked := True;
1060 GikoDM.NewItemAction.Checked := True;
1065 GikoDM.LiveItemAction.Checked := True;
1066 ViewType := gvtLive;
1070 GikoDM.ArchiveItemAction.Checked := True;
1071 ViewType := gvtArch;
1076 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
1077 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1078 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1079 BrowserTab.Font.Style := [];
1080 if GikoSys.Setting.BrowserTabFontBold then
1081 BrowserTab.Font.Style := [fsBold];
1082 if GikoSys.Setting.BrowserTabFontItalic then
1083 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1085 BrowserTab.DoubleBuffered := True;
1086 FDragWFirst := false;
1087 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1089 //
\83u
\83\89\83E
\83U
\83^
\83u
1090 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1092 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1093 GikoDM.BrowserTabTopAction.Checked := True;
1095 GikoDM.BrowserTabBottomAction.Checked := True;
1098 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1099 GikoDM.BrowserTabTabStyleAction.Checked := True;
1100 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1101 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1103 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1106 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1107 ProgressBar.Parent := StatusBar;
1108 ProgressBar.Top := 2;
1109 ProgressBar.Left := 0;
1110 ProgressBar.Width := StatusBar.Panels[0].Width;
1111 ProgressBar.Height := StatusBar.Height - 2;
1112 ProgressBar.Position := 0;
1114 //
\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Æ)
1115 InitializeBoardPlugIns;
1117 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1118 GikoSys.ListBoardFile;
1119 //
\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É
1121 //
\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è
1122 if (SplashWindow <> nil) then begin
1123 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1127 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1128 for i := Length(BBSs) - 1 downto 0 do begin
1129 if not BBSs[i].IsBoardFileRead then
1130 GikoSys.ReadBoardFile(BBSs[i]);
1132 if SplashWindow <> nil then begin
1133 SplashWindow.ProgressBar.StepBy(20);
1134 SplashWindow.Update;
1138 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1139 RoundList := TRoundList.Create;
1140 RoundList.LoadRoundBoardFile;
1141 RoundList.LoadRoundThreadFile;
1143 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1144 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1145 Style := Style or TVS_NOTOOLTIPS;
1146 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1148 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1149 TreeView.Align := alClient;
1150 FavoriteTreeView.Align := alClient;
1151 FavoriteTreeView.Visible := False;
1153 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1156 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1157 wp.length := sizeof(wp);
1158 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1159 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1160 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1161 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1162 wp.showCmd := SW_HIDE;
1163 SetWindowPlacement(Handle, @wp);
1166 if GikoSys.Setting.WindowMax then
1167 WindowState := wsMaximized;
1169 //
\83M
\83R
\83A
\83j
\83\81
1171 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1172 if FileExists(FileName) then
1173 Animate.FileName := FileName;
1181 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1182 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1183 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1186 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1187 FHistoryList := THistoryList.Create;
1189 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1190 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1191 TreeView, FTreeType);
1193 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1194 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1195 FavoriteDM.ReadFavorite;
1197 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1198 GikoDM.ArrangeAction.Execute;
1200 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1201 case GikoSys.Setting.ListWidthState of
1203 ViewPanel.Width := 1;
1204 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1205 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1208 ViewPanel.Width := GikoSys.Setting.ListWidth;
1209 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1210 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1213 ViewPanel.Width := GikoSys.Setting.ListWidth;
1214 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1215 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1219 case GikoSys.Setting.ListHeightState of
1221 ViewPanel.Height := 1;
1222 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1223 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1226 ViewPanel.Height := GikoSys.Setting.ListHeight;
1227 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1228 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1231 ViewPanel.Height := GikoSys.Setting.ListHeight;
1232 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1233 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1238 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1239 CreateControlThread();
1241 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1242 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1244 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1247 BrowserBoardNameLabel.Caption := '';
1248 BrowserNameLabel.Caption := '';
1251 FTabHintIndex := -1;
1253 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1254 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1255 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1257 MakeDefaultINIFile();
1258 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1259 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1260 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1261 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1264 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1265 SetSelectComboBox();
1267 //
\83A
\83h
\83\8c\83X
\83o
\81[
1268 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1270 //
\83\8a\83\93\83N
\83o
\81[
1272 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1274 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1275 if not FileExists(GikoSys.GetBoardFileName) then begin
1276 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
1277 + '
\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
1278 + '
\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';
1279 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1280 GikoDM.NewBoardAction.Execute;
1283 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1284 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1286 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1287 // FLastRoundTime := 0;
1289 ListView.OnData := TListViewUtils.ListViewData;
1291 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1292 CabinetVisible( False );
1293 if GikoSys.Setting.CabinetVisible then begin
1294 i := CabinetSelectPopupMenu.Items.Count - 1;
1295 if GikoSys.Setting.CabinetIndex = i - 1 then
1296 GikoDM.CabinetHistoryAction.Execute
1297 else if GikoSys.Setting.CabinetIndex = i then
1298 GikoDM.CabinetFavoriteAction.Execute
1300 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1301 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1302 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1303 FIsIgnoreResize := rtResizing;
1304 GikoDM.CabinetBBSAction.Execute;
1307 ShowBBSTreeOld( BBSs[ 0 ] );
1308 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1311 //
\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
1312 for i := 1 to ParamCount do begin
1313 MoveToURL(ParamStr(i));
1316 GikoDM.RepaintStatusBar;
1317 StatusBarResize(Sender);
1319 // dummy1.Caption := ItemReservPMenu.Caption;
1320 // dummy1.Hint := ItemReservPMenu.Hint;
1321 //
\83u
\83\89\83E
\83U
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82Ì
\8f\89\8aú
\89»
1322 PopupMenuUtil.ReadSetting(GikoDM.GikoFormActionList, BrowserTabPopupMenu);
1323 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1324 MouseGesture := TMouseGesture.Create;
1326 {$IFDEF SPAM_FILTER_ENABLED}
1327 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1328 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1331 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1332 GikoSys.SetGikoMessage;
1334 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1335 if GikoSys.Setting.AutoLogin then
1336 GikoDM.LoginAction.Execute;
1338 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1340 //
\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è
1341 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1342 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1344 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\8f\89\8aú
\89»
1345 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1347 //
\92u
\8a·
\90Ý
\92è
\83t
\83@
\83C
\83\8b\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1348 ReplaceDM.LoadFromFile(GikoSys.GetReplaceFileName);
1350 //
\83\8c\83X
\83|
\83b
\83v
\83A
\83b
\83v
\8fÁ
\8b\8e\83^
\83C
\83}
\81[
1351 ResPopupClearTimer.Interval := GikoSys.Setting.RespopupWait;
1353 // D&D
\82ð
\8eó
\82¯
\8eæ
\82é
1354 DragAcceptFiles(ListView.Handle, True);
1357 //
\8f\89\8aú
\89»
\82É
\8e¸
\94s
\82µ
\82½
\83\82\83W
\83\85\81[
\83\8b\83`
\83F
\83b
\83N
1358 if (FavoriteDM.AbEnd) then begin
1359 GikoUtil.MsgBox(Self.Handle,
1360 '
\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 +
1361 '
\83M
\83R
\83i
\83r
\83t
\83H
\83\8b\83_
\82ð
\8aJ
\82«
\82Ü
\82·
\81Aconfig/' + Favorite.FAVORITE_FILE_NAME +
1362 '
\82ð config/~' + Favorite.FAVORITE_FILE_NAME + '(
\91O
\89ñ
\8bN
\93®
\8e\9e\82Ì
\82¨
\8bC
\82É
\93ü
\82è)
\82Å'#13#10 +
1363 '
\92u
\82«
\8a·
\82¦
\82é
\8e\96\82Å
\92¼
\82é
\89Â
\94\
\90«
\82ª
\82 \82è
\82Ü
\82·
\81B',
1364 '
\8f\89\8aú
\89»
\88Ù
\8fí');
1365 GikoDM.GikoFolderOpenAction.Execute;
1371 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1372 procedure TGikoForm.SaveCoolBarSettings;
1375 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1377 SaveMainCoolBarSettings;
1378 SaveBoardCoolBarSettings;
1379 SaveBrowserCoolBarSettings;
1382 procedure TGikoForm.SaveMainCoolBarSettings;
1387 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1388 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1389 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1390 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1391 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1392 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1395 procedure TGikoForm.SaveBoardCoolBarSettings;
1400 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1401 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1402 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1403 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1404 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1405 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1408 procedure TGikoForm.SaveBrowserCoolBarSettings;
1413 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1414 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1415 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1416 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1417 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1418 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1421 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1422 procedure TGikoForm.LoadCoolBarSettings;
1428 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1429 MainCoolBar.Bands.BeginUpdate;
1431 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1432 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1433 CoolSet := GikoSys.Setting.MainCoolSet[i];
1434 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1435 FIsIgnoreResize := rtNone;
1436 SaveCoolBarSettings;
1439 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1440 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1441 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1444 MainCoolBar.Bands.EndUpdate;
1447 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1448 ListCoolBar.Bands.BeginUpdate;
1450 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1451 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1452 CoolSet := GikoSys.Setting.ListCoolSet[i];
1453 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1454 FIsIgnoreResize := rtNone;
1455 SaveCoolBarSettings;
1458 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1459 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1460 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1463 ListCoolBar.Bands.EndUpdate;
1466 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1467 BrowserCoolBar.Bands.BeginUpdate;
1469 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1470 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1471 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1472 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1473 FIsIgnoreResize := rtNone;
1474 SaveCoolBarSettings;
1477 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1478 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1479 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1482 BrowserCoolBar.Bands.EndUpdate;
1487 procedure TGikoForm.FormShow(Sender: TObject);
1491 if FStartUp then begin
1493 ShowWindow(Application.Handle, SW_HIDE);
1494 //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½
1495 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1496 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1497 GikoDM.StdToolBarVisibleActionExecute( nil );
1498 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1499 GikoDM.AddressBarVisibleActionExecute( nil );
1500 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1501 GikoDM.LinkBarVisibleActionExecute( nil );
1502 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1503 GikoDM.ListToolBarVisibleActionExecute( nil );
1504 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1505 GikoDM.ListNameBarVisibleActionExecute( nil );
1506 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1507 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1508 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1509 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1511 // CoolBar
\95\9c\8c³
1512 LoadCoolBarSettings;
1514 //
\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é
1515 // ResetBandInfo( ListCoolBar, ListToolBar );
1516 FIsIgnoreResize := rtNone;
1518 //ActionList
\82ÌGroupIndex
\82ð
\8c³
\82É
\96ß
\82·
1519 SetGroupIndex(GikoDM.GikoFormActionList);
1521 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1522 if GikoSys.Setting.TabAutoLoadSave then begin
1523 GikoDM.TabsOpenAction.Tag := 1;
1524 GikoDM.TabsOpenAction.Execute;
1525 GikoDM.TabsOpenAction.Tag := 0;
1526 if (GikoSys.Setting.LastCloseTabURL <> '') then begin
1527 if ( FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
1528 while (FActiveContent.Browser.ReadyState <> READYSTATE_COMPLETE) and
1529 (FActiveContent.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
1530 //
\83\81\83b
\83Z
\81[
\83W
\82ð
\8eó
\82¯
\8eæ
\82ç
\82È
\82¢
\82æ
\82¤
\82É
\83X
\83\8a\81[
\83v
\82É
\95Ï
\8dX
1534 item := BBSsFindThreadFromURL( GikoSys.Setting.LastCloseTabURL );
1535 GikoSys.Setting.LastCloseTabURL := '';
1536 if (item <> nil) and (item.IsLogFile) then begin
1537 OpenThreadItem(item, item.URL);
1539 //ShowWindow(Self.Handle, SW_SHOW);
1545 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1547 // if GikoForm.WindowState <> wsMinimized then
1548 // SaveCoolBarSettings;
1550 if ( GikoSys.Setting.ShowDialogForEnd ) and
1551 (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
1556 GikoSys.Setting.LastCloseTabURL := '';
1557 if GikoSys.Setting.TabAutoLoadSave then begin
1558 GikoDM.TabsSaveAction.Execute;
1559 if (GetActiveContent <> nil) and
1560 (GetActiveContent.IsLogFile) then begin
1561 GikoSys.Setting.LastCloseTabURL := GetActiveContent.URL;
1565 if (SearchDialog <> nil) then begin
1566 if (SearchDialog.Visible) then begin
1570 SearchDialog.Release;
1573 SearchDialog := nil;
1576 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82Ì
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81AEditorForm
\82ð
\95Â
\82¶
\82é
1577 GikoDM.CloseAllEditorAction.Execute;
1579 Application.UnhookMainWindow(Hook);
1580 //
\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·
1581 FControlThread.DownloadAbort;
1582 FControlThread.Terminate;
1584 //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¶
1587 Application.Terminate;
1590 procedure TGikoForm.SaveSettingAll();
1592 wp : TWindowPlacement;
1593 WindowPlacement: TWindowPlacement;
1596 ActiveListColumnSave;
1601 WindowPlacement.length := SizeOf(TWindowPlacement);
1602 GetWindowPlacement(Self.Handle, @WindowPlacement);
1604 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1605 wp.length := sizeof(wp);
1606 GetWindowPlacement(Handle, @wp);
1607 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1608 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1609 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1610 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1611 GikoSys.Setting.WindowMax := (WindowState = wsMaximized) or
1612 (WindowPlacement.flags = WPF_RESTORETOMAXIMIZED);
1613 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1614 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1615 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1616 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1617 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1618 if GikoDM.ArrangeAction.Checked then
1619 GikoSys.Setting.ListOrientation := gloVertical
1621 GikoSys.Setting.ListOrientation := gloHorizontal;
1622 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1627 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1628 if not GikoSys.Setting.ResRangeHold then
1629 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1632 //
\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¶
1633 SaveCoolBarSettings;
1634 GikoSys.Setting.WriteWindowSettingFile;
1635 //
\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¢
1636 GikoSys.Setting.WriteNameMailSettingFile;
1638 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\90Ý
\92è
\82Ì
\95Û
\91¶
1639 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1641 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1643 //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é
1644 //
\8f\89\8aú
\89»
\88Ù
\8fí
\8e\9e\82©
\82ç
\82Ì
\8fI
\97¹
\82Å
\82Í
\95Û
\91¶
\82µ
\82È
\82¢
1645 if not (FavoriteDM.AbEnd) then begin
1646 FavoriteDM.WriteFavorite;
1651 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1653 //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
1654 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1658 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
1660 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1664 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1666 RoundList.SaveRoundFile;
1670 //
\83^
\83X
\83N
\83g
\83\8c\83C
\82Ì
\83A
\83C
\83R
\83\93\8dí
\8f\9c
1671 if (FIconData.uID <> 0) then begin
1672 Shell_NotifyIcon(NIM_DELETE, @FIconData);
1677 procedure TGikoForm.FormDestroy(Sender: TObject);
1682 //
\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¶
1683 //
\81¦
\92\8d\88Ó
\81FOnDestroy
\82Å
\8eg
\82¤
\82±
\82Æ
\82µ
\82©
\8dl
\97¶
\82³
\82ê
\82Ä
\82¢
\82È
\82¢
1684 //
\91¼
\82Å
\82â
\82é
\82Æ
\8dÄ
\95`
\89æ
\82ª
\94
\90¶
\82·
\82é
1685 if WindowState <> wsNormal then begin
1686 WindowState := wsNormal;
1688 SaveCoolBarSettings;
1689 GikoSys.Setting.WriteWindowSettingFile;
1694 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1696 if GikoSys.Setting.GestureEnabled then begin
1697 MouseGesture.OnGestureStart := nil;
1698 MouseGesture.OnGestureMove := nil;
1699 MouseGesture.OnGestureEnd := nil;
1702 MouseGesture.UnHook;
1707 //
\82¨
\8bC
\82É
\93ü
\82è
\94j
\8aü
1714 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1715 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1716 GikoSys.Setting.ShowDialogForAllTabClose := false;
1717 GikoDM.AllTabCloseAction.Execute;
1718 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1723 for i := FBrowsers.Count - 1 downto 0 do begin
1724 GikoSys.ShowRefCount('browser' + IntToStr(i), TWebBrowser(FBrowsers[i]).ControlInterface);
1725 GikoSys.ShowRefCount('document' + IntToStr(i), TWebBrowser(FBrowsers[i]).ControlInterface.Document);
1728 for i := FBrowsers.Count - 1 downto 0 do begin
1729 TWebBrowser(FBrowsers[i]).Free;
1732 FBrowsers.Capacity := 0;
1738 if BrowserNullTab <> nil then begin
1739 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
1740 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
1742 BrowserNullTab.Free;
1748 TreeView.Items.BeginUpdate;
1749 TreeView.Items.GetFirstNode.Free;
1750 TreeView.Items.Clear;
1751 TreeView.Items.EndUpdate;
1776 //FControlThread.DownloadAbort;
1777 FControlThread.Terminate;
1778 FControlThread.WaitFor;
1782 FControlThread.Free;
1784 //
\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é
1785 for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
1786 GikoForm.PlugInMenu.items[i].Free;
1788 GikoForm.PlugInMenu.Clear;
1791 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
1792 // 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Å
1793 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
1794 for i := Length(BoardGroups) - 1 downto 0 do begin
1795 //BoardGroups[i].Clear;
1796 BoardGroups[i].Free;
1800 for i := Length( BBSs ) - 1 downto 0 do begin
1801 if BBSs[ i ] <> nil then
1805 DestorySpecialBBS(BoardGroup.SpecialBBS);
1810 if FEvent <> nil then
1814 if FResPopupBrowser <> nil then begin
1815 TOleControl(FResPopupBrowser).Parent := nil;
1816 FResPopupBrowser.Free;
1822 if FPreviewBrowser <> nil then begin
1823 FPreviewBrowser.Free;
1824 FPreviewBrowser := nil;
1829 // Update
\82ª
\82¢
\82ê
\82Î
\8eÀ
\8ds
\82·
\82é
1830 if FileExists(FUpdateExePath) then begin
1831 //
\83A
\83b
\83v
\83f
\81[
\83g
\8eÀ
\8ds
1832 GikoSys.CreateProcess(FUpdateExePath, FUpdateExeArgs);
1836 //
\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
1837 procedure TGikoForm.SetBBSMenu;
1840 item : TBBSMenuItem;
1843 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
1844 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1846 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1847 CabinetSelectPopupMenu.Items[ i ].Free;
1848 CabinetMenu.Items[ i ].Free;
1849 BBSSelectPopupMenu.Items[ i ].Free;
1855 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
1856 for i := Length( BBSs ) - 1 downto 0 do begin
1858 item := TBBSMenuItem.Create( PopupMenu );
1859 item.Caption := BBSs[ i ].Title;
1860 item.Data := BBSs[ i ];
1861 item.OnClick := BBSMenuItemOnClick;
1862 CabinetSelectPopupMenu.Items.Insert( 0, item );
1863 item := TBBSMenuItem.Create( PopupMenu );
1864 item.Caption := BBSs[ i ].Title;
1865 item.Data := BBSs[ i ];
1866 item.OnClick := BBSMenuItemOnClick;
1867 CabinetMenu.Insert( 0, item );
1868 item := TBBSMenuItem.Create( PopupMenu );
1869 item.Caption := BBSs[ i ].Title;
1870 item.Data := BBSs[ i ];
1871 item.OnClick := BBSMenuItemOnClick;
1872 BBSSelectPopupMenu.Items.Insert( 0, Item );
1879 procedure TGikoForm.ReloadBBS;
1884 LockWindowUpdate(Self.Handle);
1886 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1887 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1888 GikoSys.Setting.ShowDialogForAllTabClose := false;
1889 GikoDM.AllTabCloseAction.Execute;
1890 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1891 SetContent(BrowserNullTab);
1892 //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
1893 TreeView.Items.Clear;
1895 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1897 RoundList.SaveRoundFile;
1900 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
1906 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1908 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1913 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1915 FavoriteDM.WriteFavorite;
1920 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
1921 for i := Length(BoardGroups) - 1 downto 0 do begin
1923 BoardGroups[i].Free;
1929 for i := Length( BBSs ) - 1 downto 0 do begin
1930 if BBSs[ i ] <> nil then
1939 FTreeType := gttNone;
1941 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
1943 //
\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Æ)
1944 InitializeBoardPlugIns;
1946 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1948 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1949 for i := Length(BBSs) - 1 downto 0 do begin
1950 if not BBSs[i].IsBoardFileRead then
1951 GikoSys.ReadBoardFile(BBSs[i]);
1954 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
1957 ShowBBSTree( BBSs[ 0 ] );
1959 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1960 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1961 TreeView, FTreeType);
1963 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1964 FavoriteDM.ReadFavorite;
1968 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1969 RoundList.LoadRoundBoardFile;
1970 RoundList.LoadRoundThreadFile;
1972 LockWindowUpdate(0);
1976 \todo
\89½
\8cÌ IE 7
\82Å
\82Í about:..
\82É
\82È
\82é
\82Ì
\82©
1977 (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©)
1978 \92²
\8d¸
\82·
\82é
\82±
\82Æ
1980 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1988 threadItem : TThreadItem;
1990 Protocol, Host, Path, Document, Port, Bookmark: string;
1995 ActiveFileName: string;
2000 cResPopup: TResPopupBrowser;
2001 senderBrowser :TWebBrowser;
2002 doc: IHTMLDocument2;
2004 //
\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ª
2005 // 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è)
2006 if Pos('about:..', Text) = 1 then
2007 Text2 := 'about:blank..' + Copy( Text, Length('about:..')+1, Length(Text) )
2011 if not( TObject(Sender) is TWebBrowser )then
2014 senderBrowser := TWebBrowser(Sender);
2015 doc := senderBrowser.ControlInterface.Document as IHTMLDocument2;
2019 if ((not senderBrowser.Busy) and Assigned(doc)) then begin
2020 if LowerCase(doc.charset) <> 'shift_jis' then begin
2021 doc.charset := 'shift_jis';
2029 if PreviewTimer.Enabled then
2030 PreviewTimer.Enabled := False;
2032 Application.CancelHint;
2035 if GetActiveContent <> nil then
2036 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
2038 ActiveFileName := '';
2040 FActiveContent := nil;
2044 //
\91O
\89ñ
\82Æ
\93¯
\82¶
\8fê
\8d\87\8fI
\97¹
2045 if (StatusBar.Panels[1].Text = Text2) then begin
2046 if Text2 = '' then begin
2047 if FResPopupBrowser <> nil then begin
2048 if not(Sender is TResPopupBrowser) then
2049 FResPopupBrowser.Clear
2051 TResPopupBrowser(Sender).ChildClear;
2057 StatusBar.Panels[1].Text := Text2;
2060 if FPreviewBrowser <> nil then
2061 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2063 if FResPopupBrowser <> nil then begin
2064 if not(Sender is TResPopupBrowser) then begin
2065 if (FResPopupBrowser.Visible) then begin
2066 if ResPopupClearTimer.Interval > 0 then begin
2067 ResPopupClearTimer.Enabled := True;
2068 ResPopupClearTimer.Tag := 0;
2070 FResPopupBrowser.Clear;
2074 if ResPopupClearTimer.Interval > 0 then begin
2075 ResPopupClearTimer.Enabled := True;
2076 ResPopupClearTimer.Tag := 1;
2078 TResPopupBrowser(Sender).ChildClear;
2084 if not(Sender is TResPopupBrowser) then
2085 if not GikoSys.Setting.UnActivePopup then
2086 if not GikoForm.Active then
2091 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
2092 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
2093 //
\91¼
\82Ì
\83A
\83v
\83\8a\82Å
\8f\88\97\9d\82·
\82éURL
\82©
\8am
\94F
2094 if (ExtPreviewDM.PreviewURL(Text2)) then begin
2098 Ext := AnsiLowerCase(ExtractFileExt(Text2));
2099 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
2100 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) or
2101 (Pos('http://www.nicovideo.jp/watch/', Text2) = 1) then begin
2102 if FPreviewBrowser = nil then begin
2103 FPreviewBrowser := TPreviewBrowser.Create(Self);
2104 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2105 TOleControl(FPreviewBrowser).Parent := nil;
2107 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
2108 FPreviewURL := Text2;
2109 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
2110 PreviewTimer.Enabled := True;
2111 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
2112 if (Pos('mailto:', Text2) = 1) and (GikoSys.Setting.RespopupMailTo) then begin
2113 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
2114 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
2116 p.x := p.x - senderBrowser.ClientOrigin.x;
2117 p.y := p.y - senderBrowser.ClientOrigin.y;
2118 e := doc.elementFromPoint(p.x, p.y);
2119 if (Assigned(e)) then begin
2120 CreateResPopupBrowser;
2122 if not(Sender is TResPopupBrowser) then begin
2123 if (FResPopupBrowser.Visible) then begin
2124 FResPopupBrowser.Clear;
2127 TResPopupBrowser(Sender).ChildClear;
2130 cResPopup := FResPopupBrowser.CreateNewBrowser;
2131 tmp2 := Trim(ZenToHan(e.Get_outerText));
2132 if (GikoSys.IsNumeric(tmp2)) then begin
2133 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
2134 wkIntSt := StrToInt64(tmp2);
2135 wkIntTo := StrToInt64(tmp2);
2136 cResPopup.PopupType := gptThread;
2137 HTMLCreater.SetResPopupText(cResPopup, GetActiveContent(true), wkIntSt, wkIntTo, False, False);
2139 cResPopup.PopupType := gptRaw;
2140 cResPopup.Title := s;
2144 CreateResPopupBrowser;
2146 if not(Sender is TResPopupBrowser) then begin
2147 if (FResPopupBrowser.Visible) then begin
2148 FResPopupBrowser.Clear;
2151 TResPopupBrowser(Sender).ChildClear;
2154 threadItem := GetActiveContent(true);
2155 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
2156 PathRec := Gikosys.Parse2chURL2(URL);
2157 if (PathRec.FNoParam) then begin
2161 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
2163 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
2165 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
2167 URL := GikoSys.GetBrowsableThreadURL( URL );
2168 wkIntSt := PathRec.FSt;
2169 wkIntTo := PathRec.FTo;
2171 if (wkIntSt = 0) and (wkIntTo = 0) then begin
2174 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
2176 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
2178 end else if wkIntSt > wkIntTo then begin
2183 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
2188 threadItem := BBSsFindThreadFromURL( URL );
2190 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
2191 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
2192 if board <> nil then begin
2193 if not board.IsThreadDatRead then
2194 GikoSys.ReadSubjectFile( board );
2195 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
2199 if threadItem <> nil then begin
2200 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
2201 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
2202 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
2206 cResPopup := FResPopupBrowser.CreateNewBrowser;
2207 cResPopup.PopupType := gptThread;
2208 HTMLCreater.SetResPopupText(cResPopup, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
2212 if (cResPopup <> nil) then begin
2213 ResPopupClearTimer.Enabled := False;
2215 if cResPopup.PopupType = gptRaw then begin
2216 if cResPopup.Title <> '' then begin
2217 cResPopup.TitlePopup;
2220 if cResPopup.RawDocument <> '' then begin
2222 end else if cResPopup.Title <> '' then begin
2223 cResPopup.TitlePopup;
2230 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2234 FEnabledCloseButton := Enabled;
2235 SysMenu := GetSystemMenu(Handle, False);
2237 if Enabled then begin
2238 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2240 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2243 DrawMenuBar(Handle);
2246 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2247 var AllowChange: Boolean);
2249 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
2250 // if FTreeType = gtt2ch then
2251 // FSortIndex := -1;
2254 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2255 Shift: TShiftState);
2259 if GetActiveList is TBoard then begin
2261 VK_BACK:; // UpFolderButtonClick(Sender);
2262 VK_SPACE: ListDoubleClick(Shift);
2263 VK_RETURN: ListClick;
2266 if ListView.Selected <> nil then begin
2267 pos.X := ListView.Column[ 0 ].Width;
2268 pos.Y := ListView.Selected.Top;
2270 pos.X := ListView.Left;
2271 pos.Y := ListView.Top;
2273 Windows.ClientToScreen( ListView.Handle, pos );
2274 ListPopupMenu.Popup( pos.X, pos.Y );
2277 end else begin // TBBS, TCategory
2279 VK_BACK:; // UpFolderButtonClick(Sender);
2280 VK_SPACE: ListClick;
2281 VK_RETURN: ListDoubleClick(Shift);
2284 if ListView.Selected <> nil then begin
2285 pos.X := ListView.Column[ 0 ].Width;
2286 pos.Y := ListView.Selected.Top;
2288 pos.X := ListView.Left;
2289 pos.Y := ListView.Top;
2291 Windows.ClientToScreen( ListView.Handle, pos );
2292 ListPopupMenu.Popup( pos.X, pos.Y );
2298 function TGikoForm.GetHttpState: Boolean;
2300 Result := FHttpState;
2303 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2304 Column: TListColumn);
2308 vSortIndex : Integer;
2309 vSortOrder : Boolean;
2311 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2312 if TObject( FActiveList ) is TBBS then begin
2313 orderList := GikoSys.Setting.BBSColumnOrder;
2314 vSortIndex := GikoSys.Setting.BBSSortIndex;
2315 vSortOrder := GikoSys.Setting.BBSSortOrder;
2316 end else if TObject( FActiveList ) is TCategory then begin
2317 orderList := GikoSys.Setting.CategoryColumnOrder;
2318 vSortIndex := GikoSys.Setting.CategorySortIndex;
2319 vSortOrder := GikoSys.Setting.CategorySortOrder;
2320 end else if TObject( FActiveList ) is TBoard then begin
2321 orderList := GikoSys.Setting.BoardColumnOrder;
2322 vSortIndex := GikoSys.Setting.BoardSortIndex;
2323 vSortOrder := GikoSys.Setting.BoardSortOrder;
2327 id := Integer( orderList[ idx ] );
2330 if vSortIndex = id then
2331 vSortOrder := not vSortOrder
2333 vSortOrder := id = 0;
2336 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2339 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2340 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2344 DefaultDraw := True;
2345 //
\82È
\82º
\82©
\96³
\8fð
\8c\8f\82ÅExit
\82µ
\82Ä
\82¢
\82é
2347 DefaultDraw := False;
2348 if (cdsSelected in State) or (cdsHot in State) then begin
2349 Sender.Canvas.Brush.Color := clHighlight;
2350 Sender.Canvas.Font.Color := clHighlightText;
2352 Sender.Canvas.Brush.Color := clBtnFace;
2353 Sender.Canvas.Font.Color := clBtnText;
2355 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2356 Sender.Canvas.FillRect(ARect);
2357 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2360 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2365 Nodes := TreeView.Items;
2367 for i := 0 to Nodes.Count - 1 do begin
2368 if Nodes.Item[i].Data = Data then begin
2369 Result := Nodes.Item[i];
2376 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2377 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2378 Headers: OleVariant; var Cancel: WordBool);
2383 kMenuName: string = 'menu:';
2388 FKokoPopupThreadItem := nil;
2389 if Pos(kMenuName, URL) <> 0 then begin
2390 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2392 if not GikoSys.IsNumeric(sNo) then Exit;
2396 KokoPopupMenu.PopupComponent := nil;
2397 if (Sender is TComponent) then
2398 KokoPopupMenu.PopupComponent := TComponent(Sender);
2399 //
\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Á
2400 if not (Sender is TResPopupBrowser) then begin
2401 if (FResPopupBrowser <> nil) and (FResPopupBrowser.CurrentBrowser.Visible = True) then begin
2402 FResPopupBrowser.Clear;
2405 if (Sender <> FResPopupBrowser.CurrentBrowser) then begin
2406 TResPopupBrowser(Sender).ChildClear;
2409 FKokoPopupThreadItem := GetActiveContent(true);
2410 KokoPopupMenu.Tag := StrToInt(sNo);
2411 KokoPopupMenu.Popup(p.x, p.y);
2412 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2413 Cancel := not GikoSys.Setting.OpenMailer;
2415 //@
\82Æ.
\82ð
\8aÜ
\82Ü
\82È
\82¢URL
\82Í
\83\81\81[
\83\8b\83A
\83h
\83\8c\83X
\82Æ
\82Ý
\82È
\82³
\82È
\82¢
2416 //
\8eå
\82Éage
\81Asage
\91Î
\8dô
2417 if (Pos('@', URL) = 0) or (Pos('.', URL) = 0) then begin
2424 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2425 const ARect: TRect; var DefaultDraw: Boolean);
2429 IsBoardNode: Boolean;
2435 Category: TCategory;
2439 DefaultDraw := True;
2441 if FTreeType = gttHistory then Exit;
2443 TreeView.Canvas.Font.Color := clBlue;
2444 IsBoardNode := False;
2445 for i := 0 to TreeView.Items.Count - 1 do begin
2447 if not TreeView.Items[i].IsVisible then
2450 if TObject(TreeView.Items[i].Data) is TCategory then begin
2451 if TreeView.Items[i].Expanded then
2454 IsBoardNode := False;
2455 Category := TCategory(TreeView.Items[i].Data);
2456 for j := 0 to Category.Count - 1 do begin
2457 Board := Category.Items[j];
2458 if Board <> nil then begin
2459 if Board.UnRead > 0 then begin
2467 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2468 IsBoardNode := True;
2469 Board := TBoard(TreeView.Items[i].Data);
2471 Cnt := Board.UnRead;
2477 Bitmap := TBitmap.Create;
2479 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2480 Bitmap.Canvas.Font.Style := [fsBold];
2481 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2486 NodeRect := TreeView.Items[i].DisplayRect(True);
2489 CntText := '(' + IntToStr(Cnt) + ')'
2490 else if Cnt = 1 then
2494 TextWidth := TreeView.Canvas.TextWidth(CntText);
2496 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2498 NodeRect.Left + NodeWidth + TextWidth + 8,
2500 DrawText(TreeView.Canvas.Handle,
2504 DT_SINGLELINE or DT_VCENTER);
2506 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2509 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2510 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2513 Category: TCategory;
2516 DefaultDraw := True;
2518 if FTreeType = gttHistory then Exit;
2520 TreeView.Canvas.Font.Style := [];
2521 if Node <> nil then begin
2522 if TObject(Node.Data) is TCategory then begin
2523 Category := TCategory(Node.Data);
2524 for i := 0 to Category.Count - 1 do begin
2525 Board := Category.Items[i];
2526 if Board <> nil then begin
2527 if Board.UnRead > 0 then begin
2528 TreeView.Canvas.Font.Style := [fsBold];
2533 end else if TObject(Node.Data) is TBoard then begin
2534 Board := TBoard(Node.Data);
2535 if Board.UnRead > 0 then
2536 TreeView.Canvas.Font.Style := [fsBold];
2541 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2543 TreeView.Invalidate;
2545 if TObject(Node.Data) is TBBS then begin
2546 TBBS(Node.Data).NodeExpand := True;
2547 end else if TObject(Node.Data) is TCategory then begin
2548 TCategory(Node.Data).NodeExpand := True;
2549 end else if TObject(Node.Data) is TBoard then begin
2550 TBoard(Node.Data).NodeExpand := True;
2554 procedure TGikoForm.ListViewAllSelect;
2559 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2561 if csDestroying in Self.ComponentState then
2563 AddMessageList(Msg, nil, Icon);
2565 // *************************************************************************
2566 //!
\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
2567 // *************************************************************************
2568 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2572 boardPlugIn : TBoardPlugIn;
2577 if csDestroying in Self.ComponentState then
2579 if Item.DownType = gdtBoard then
2580 ATitle := Item.Board.Title
2582 ATitle := Item.ThreadItem.Title;
2584 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2586 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2588 if Item.DownType = gdtBoard then begin
2591 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2592 if GetActiveList = Item.Board then begin
2594 //
\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é
2595 if (GikoSys.Setting.AutoSortThreadList) then begin
2596 GikoSys.Setting.BoardSortIndex := 0;
2597 GikoSys.Setting.BoardSortOrder := True;
2599 Sort.SetSortDate(Now());
2600 SetActiveList(Item.Board);
2602 Item.Board.Modified := True;
2603 Item.Board.IsThreadDatRead := True;
2606 end else if Item.DownType = gdtThread then begin
2609 Item.ThreadItem.NewArrival := True;
2610 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2611 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2612 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2613 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2614 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2615 Item.ThreadItem.Title := Res.FTitle;
2616 ATitle := Item.ThreadItem.Title;
2617 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2618 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2619 ATitle := Res.FTitle;
2621 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2622 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2623 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2627 if GikoSys.Setting.BrowserTabVisible then begin
2628 if GetActiveContent = Item.ThreadItem then
2629 InsertBrowserTab(Item.ThreadItem)
2630 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2631 InsertBrowserTab(Item.ThreadItem, True)
2633 InsertBrowserTab(Item.ThreadItem, False);
2636 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2637 InsertBrowserTab(Item.ThreadItem);
2640 Application.ProcessMessages;
2642 if Item.State = gdsComplete then begin
2644 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2648 PlaySound('NewDiff');
2649 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2654 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2655 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2656 // 2ch
\88È
\8aO
\82Í
\81A1000
\82ª
\8dÅ
\8d\82\82©
\95s
\96¾
\82È
\82Ì
\82Å
\81A2ch
\8cÀ
\92è
\82É
\82·
\82é
2657 if (Item.ThreadItem.ParentBoard.Is2ch) then begin
2658 Item.ThreadItem.Round := False;
2659 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);
2663 //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
2665 RefreshListView(Item.ThreadItem);
2668 end else if Item.State = gdsNotModify then begin
2670 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2671 //SetContent(Item.ThreadItem);
2672 InsertBrowserTab(Item.ThreadItem);
2674 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2675 PlaySound('NoChange');
2676 Screen.Cursor := crDefault;
2677 end else if Item.State = gdsAbort then begin
2679 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2680 end else if Item.State = gdsError then begin
2685 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2686 // if Item.ResponseCode = 302 then
2687 // 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);
2693 if FWorkCount < 0 then FWorkCount := 0;
2694 if FWorkCount = 0 then begin
2696 Animate.Active := False;
2698 Screen.Cursor := crDefault;
2705 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2707 // SetProgressValue(Number, 0, AWorkCountMax);
2708 // ProgressBar.Visible := True;
2709 if csDestroying in Self.ComponentState then
2712 ProgressBar.Position := 0;
2713 ProgressBar.Max := AWorkCountMax;
2714 FDownloadTitle := AWorkTitle;
2715 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2716 FDownloadMax := AWorkCountMax;
2719 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2721 if csDestroying in Self.ComponentState then
2723 ProgressBar.Position := 0;
2724 if FDownloadMax <> 0 then
2725 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2728 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2730 if csDestroying in Self.ComponentState then
2732 ProgressBar.Position := AWorkCount;
2733 // SetProgressValue(Number, AWorkCount);
2734 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2737 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2739 ListItem: TListItem;
2741 MessageListView.Items.BeginUpdate;
2743 ListItem := MessageListView.Items.Add;
2744 ListItem.Caption := ACaption;
2745 ListItem.Data := AObject;
2746 ListItem.MakeVisible(False);
2748 gmiOK: ListItem.ImageIndex := 0;
2749 gmiSAD: ListItem.ImageIndex := 1;
2750 gmiNG: ListItem.ImageIndex := 2;
2751 gmiWhat: ListItem.ImageIndex := 3;
2754 MessageListView.Items.EndUpdate;
2758 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
2759 procedure TGikoForm.ReleaseOldestBrowser;
2763 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2764 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2765 TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2766 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2772 function TGikoForm.InsertBrowserTab(
2773 ThreadItem : TThreadItem;
2774 ActiveTab : Boolean = True
2777 i, j, idx : Integer;
2778 favItem : TFavoriteThreadItem;
2779 newBrowser : TBrowserRecord;
2784 if Threaditem = nil then Exit;
2786 if ThreadItem.IsLogFile then begin
2787 //
\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é
2788 //
\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é
2789 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2790 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2791 j := FBrowsers.IndexOf(FActiveContent.Browser);
2792 if j = BROWSER_COUNT - 1 then
2793 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2795 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2796 if not FHistoryList.AddHistory( favItem, TreeView, FTreeType ) then
2799 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2800 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2801 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2802 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2803 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2804 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2805 ReleaseOldestBrowser;
2806 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2807 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2808 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2810 if ActiveTab then begin
2811 BrowserTab.TabIndex := i;
2812 BrowserTab.OnChange(nil);
2819 idx := BrowserTab.TabIndex;
2820 newBrowser := TBrowserRecord.Create;
2821 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2822 ReleaseOldestBrowser;
2823 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2824 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2825 newBrowser.thread := ThreadItem;
2826 newBrowser.Repaint := true;
2828 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2829 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2830 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2831 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2835 if ActiveTab then begin
2836 BrowserTab.TabIndex := 0;
2838 end else if GikoSys.Setting.BrowserTabAppend = gtaLast then begin
2839 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2840 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2841 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2845 if ActiveTab then begin
2846 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2847 BrowserTab.TabIndex := 0
2849 BrowserTab.TabIndex := i;
2852 //
\83^
\83u
\88Ê
\92u
\82ð
\8eæ
\93¾
2854 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2855 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2856 TWebBrowser(FBrowsers[1]) then begin
2861 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2864 //
\83^
\83u
\82ª
\96³
\82¢
\82Æ
\82«
\82È
\82Ç
\91Î
\8dô
2865 if (ins < 0) then begin
2868 BrowserTab.Tabs.InsertObject(ins, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2869 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2870 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2871 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2873 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2878 if ActiveTab then begin
2879 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2880 BrowserTab.TabIndex := 0
2882 BrowserTab.TabIndex := ins;
2885 Result := newBrowser;
2886 if(ActiveTab) or (idx = -1) then begin
2887 BrowserTab.OnChange(nil);
2890 if BrowserNullTab = nil then begin
2891 BrowserNullTab := TBrowserRecord.Create;
2892 BrowserNullTab.Browser := Browser;
2894 // if BrowserNullTab.thread <> ThreadItem then begin
2895 // BrowserNullTab.Movement := '';
2897 BrowserNullTab.thread := ThreadItem;
2898 Result := BrowserNullTab;
2899 BrowserTab.TabIndex := -1;
2900 SetContent(BrowserNullTab);
2903 if GikoSys.Setting.URLDisplay then
2904 AddressComboBox.Text := ThreadItem.URL;
2908 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2916 ThreadItem: TThreadItem;
2917 Thread: TBrowserRecord;
2918 ThreadTitle, ThreadPTitle: string;
2919 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2922 idx := BrowserTab.TabIndex;
2923 if (not FStartUp) and
2924 (FActiveContent <> nil) and
2925 (FActiveContent.Thread <> Thread.Thread) and
2926 (FActiveContent.Browser <> nil) and
2927 (Assigned(FActiveContent.Browser.ControlInterface.Document)) then begin
2930 FActiveContent.Thread.ScrollTop := FActiveContent.Browser.OleObject.Document.Body.ScrollTop;
2933 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2938 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2939 Thread.Browser.Navigate(BLANK_HTML);
2940 BrowserBoardNameLabel.Caption := '';
2941 ItemBoardImage.Picture := nil;
2942 BrowserNameLabel.Caption := '';
2943 ItemImage.Picture := nil;
2944 BrowserNullTab.Thread := nil;
2945 //TOleControl(BrowserNullTab.Browser).Visible := true;
2946 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2947 FActiveContent := nil;
2949 end else if Thread.Browser = nil then begin
2950 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2951 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2952 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2953 ReleaseOldestBrowser;
2954 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2955 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2958 ThreadTitle := Thread.Thread.Title;
2959 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2960 //ThreadScrollTop := Thread.Thread.ScrollTop;
2961 if Thread.Thread.IsLogFile then begin
2962 if not FileExists(Thread.Thread.GetThreadFileName) then begin
2963 Thread.Thread.DeleteLogFile;
2967 ThreadIsLog := Thread.Thread.IsLogFile;
2968 ThreadItem := Thread.Thread;
2969 ThreadNewArraical := Thread.Thread.NewArrival;
2970 //ThreadUnRead := Thread.Thread.UnRead;
2971 BBSID := ThreadItem.ParentBoard.BBSID;
2972 FileName := ThreadItem.FileName;
2974 if GetCapture = ListView.Handle then
2977 Screen.Cursor := crHourGlass;
2981 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2982 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2983 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2985 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2986 if (not Assigned(Thread.Browser.ControlInterface.Document)) then begin
2987 Thread.Browser.Navigate('about:blank');
2989 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2990 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2991 Application.ProcessMessages;
2992 if idx <> BrowserTab.TabIndex then begin
2997 if (Thread <> nil) and (ThreadItem <>nil) then begin
2998 BrowserBoardNameLabel.Caption := ThreadPTitle;
2999 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
3000 BrowserNameLabel.Caption := ThreadTitle;
3001 ItemImage.Picture := nil;
3003 if ThreadNewArraical then
3004 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
3006 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
3008 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
3010 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
3011 BrowserNameLabel.Left := ItemImage.Left + 20;
3014 //ActiveContent
\81@
\82Ì
\8dX
\90V
3015 FActiveContent := Thread;
3017 if not ThreadIsLog then begin
3018 Self.Caption := GikoDataModule.CAPTION_NAME ;
3019 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\8fÁ
\8b\8e
3020 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
3022 Thread.Browser.BringToFront;
3023 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
3024 doc := Thread.Browser.OleObject.Document;
3026 doc.charset := 'Shift_JIS';
3033 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
3034 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\95\
\8e¦
3035 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
3036 StatusBar.Panels[THREADSIZE_PANEL].Width :=
3037 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
3038 //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«
3039 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
3040 if Thread.Repaint then begin
3041 Thread.Repaint := false;
3043 Thread.Browser.OnStatusTextChange := nil;
3044 LockWindowUpdate(Thread.Browser.ParentWindow);
3045 HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
3046 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
3047 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
3051 RefreshListView(ThreadItem);
3053 Screen.Cursor := crDefault;
3057 function TGikoForm.GetActiveContent(popup :Boolean = false): TThreadItem;
3060 if FActiveContent <> nil then begin
3061 Result := FActiveContent.Thread;
3063 (FResPopupBrowser <> nil) and (FResPopupBrowser.CurrentBrowser.Visible = True) then
3064 if (FResPopupBrowser.CurrentBrowser.Thread <> nil) then begin
3065 Result := FResPopupBrowser.CurrentBrowser.Thread;
3075 procedure TGikoForm.SetActiveList(Obj: TObject);
3079 // if FActiveList <> Obj then begin
3082 if ListView.Selected <> nil then
3083 idx := ListView.Selected.Index
3089 ListView.Items.Count := 0;
3090 ListView.Items.Clear;
3091 ListView.Selected := nil;
3092 // ListView.Columns.Clear;
3093 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
3094 and (FActiveContent.Thread.IsLogFile) then begin
3096 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
3098 on E: Exception do begin
3099 //
\83X
\83\8c\88ê
\97\97DL
\8cã
\82È
\82Ç
\82ÉFActiveContent
\82Ì
\8e\9d\82ÂThread
\82ª
3100 //
\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é
3101 ReleaseBrowser(FActiveContent);
3102 FActiveContent.Thread := nil;
3103 Self.Caption := GikoDataModule.CAPTION_NAME;
3107 Self.Caption := GikoDataModule.CAPTION_NAME;
3108 //Application.Title := CAPTION_NAME;
3110 // ActiveListColumnSave;
3112 Screen.Cursor := crHourGlass;
3114 if Obj is TBBS then begin
3115 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3116 end else if Obj is TCategory then begin
3117 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3118 end else if Obj is TBoard then begin
3119 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3122 Screen.Cursor := crDefault;
3125 if idx >= 0 then begin
3126 if idx >= ListView.Items.Count then
3127 idx := ListView.Items.Count - 1;
3128 ListView.ItemIndex := idx;
3129 ListView.ItemFocused := ListView.Items.Item[ idx ];
3135 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
3136 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
3137 function TGikoForm.GetActiveList: TObject;
3139 Result := FActiveList;
3142 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
3144 SetListViewType(AViewType, '', False);
3147 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
3152 for i := Length( BBSs ) - 1 downto 0 do begin
3153 BBSs[i].SelectText := SelectText;
3154 BBSs[i].KubetsuChk := KubetsuChk;
3156 BoardGroup.SpecialBBS.SelectText := SelectText;
3157 BoardGroup.SpecialBBS.KubetsuChk := KubetsuChk;
3159 ViewType := AViewType;
3160 if ActiveList is TBoard then begin
3161 Board := TBoard(ActiveList);
3163 //gvtAll: ListView.Items.Count := Board.Count;
3164 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
3165 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
3166 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
3167 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
3168 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
3172 SetActiveList(Board);
3176 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
3177 const ARect: TRect; var DefaultDraw: Boolean);
3183 if ListView.Items.Count = 0 then begin
3184 DefaultDraw := true;
3185 ListView.Canvas.Brush.Color := ListView.Color;
3186 ListView.Canvas.FillRect(ARect);
3190 ListView.Canvas.Font.Color := clWindowText;
3191 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3194 ListView.Canvas.Font.Color := clBlue;
3195 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';
3198 ListView.Canvas.Font.Color := clGreen;
3199 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3202 ListView.Canvas.Font.Color := clFuchsia;
3203 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';
3206 ListView.Canvas.Font.Color := clMaroon;
3207 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90¶
\91¶
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3210 ListView.Canvas.Font.Color := clNavy;
3211 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';
3212 if GetActiveList is TBoard then
3213 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
3221 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
3222 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
3223 ListView.Canvas.TextOut(p.X, p.Y, s);
3225 DefaultDraw := True;
3229 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
3231 Item: TDownloadItem;
3233 if not Board.IsThreadDatRead then
3234 GikoSys.ReadSubjectFile(Board);
3235 Item := TDownloadItem.Create;
3237 Item.Board := Board;
3238 Item.DownType := gdtBoard;
3239 Item.ForceDownload := ForceDownload;
3240 FControlThread.AddItem(Item);
3241 if FWorkCount = 0 then begin
3243 Animate.Active := True;
3246 Screen.Cursor := crAppStart;
3254 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
3256 Item: TDownloadItem;
3258 Item := TDownloadItem.Create;
3260 Item.ThreadItem := ThreadItem;
3261 Item.DownType := gdtThread;
3262 Item.ForceDownload := ForceDownload;
3263 FControlThread.AddItem(Item);
3264 if FWorkCount = 0 then begin
3266 Animate.Active := True;
3269 Screen.Cursor := crAppStart;
3277 procedure TGikoForm.PlaySound(SoundEventName: string);
3281 if not GikoSys.Setting.Mute then begin
3282 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
3283 if FileExists(FileName) then begin
3284 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
3285 sndPlaySound(nil, SND_SYNC);
3286 Application.ProcessMessages;
3288 sndPlaySound(PChar(FileName), SND_ASYNC);
3294 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
3295 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3297 FHistoryList.DeleteHistory( threadItem, TreeView, TreeType );
3300 procedure TGikoForm.ShowBBSTreeOld(
3308 FavoriteTreeView.Visible := False;
3309 FavoriteToolBar.Hide;
3310 TreeView.Visible := True;
3312 b := CabinetSelectPopupMenu.Items.Count - 1;
3313 for i := 0 to b do begin
3314 item := CabinetSelectPopupMenu.Items[ i ];
3315 if item is TBBSMenuItem then begin
3316 if TBBSMenuItem( item ).Data = inBBS then begin
3317 item.Checked := True;
3318 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3319 CabinetMenu.Items[ i ].Checked := True;
3320 GikoSys.Setting.CabinetIndex := i;
3324 item.Checked := False;
3325 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3326 CabinetMenu.Items[ i ].Checked := False;
3328 CabinetSelectToolButton.Caption := inBBS.Title;
3330 GikoDM.CabinetHistoryAction.Checked := False;
3331 GikoDM.CabinetFavoriteAction.Checked := False;
3333 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3334 FTreeType := gtt2ch;
3335 HistoryToolBar.Hide;
3336 FActiveBBS := inBBS;
3337 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3338 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3339 //?c???[??g?b?v?????I????
3340 if GetActiveList = nil then
3341 TreeView.Selected := TreeView.Items[0]
3343 for i := 0 to TreeView.Items.Count - 1 do begin
3344 if TreeView.Items[i].Data = GetActiveList then begin
3345 TreeView.Selected := TreeView.Items[i];
3349 TreeView.Selected := TreeView.Items[0]
3357 procedure TGikoForm.ShowBBSTree(
3366 FavoriteTreeView.Visible := False;
3367 FavoriteToolBar.Hide;
3368 TreeView.Visible := True;
3370 b := CabinetSelectPopupMenu.Items.Count - 1;
3371 for i := 0 to b do begin
3372 item := CabinetSelectPopupMenu.Items[ i ];
3373 if item is TBBSMenuItem then begin
3374 if TBBSMenuItem( item ).Data = inBBS then begin
3375 item.Checked := True;
3376 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3377 CabinetMenu.Items[ i ].Checked := True;
3378 GikoSys.Setting.CabinetIndex := i;
3382 item.Checked := False;
3383 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3384 CabinetMenu.Items[ i ].Checked := False;
3386 CabinetSelectToolButton.Caption := inBBS.Title;
3388 GikoDM.CabinetHistoryAction.Checked := False;
3389 GikoDM.CabinetFavoriteAction.Checked := False;
3391 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3392 or (not (CabinetPanel.Visible)) then begin
3393 FTreeType := gtt2ch;
3394 HistoryToolBar.Hide;
3395 FActiveBBS := inBBS;
3396 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3397 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3398 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3399 if GetActiveList = nil then begin
3401 TreeClick( TreeView.Items[0] );
3405 for i := 0 to TreeView.Items.Count - 1 do begin
3406 if TreeView.Items[i].Data = GetActiveList then begin
3407 TreeClick( TreeView.Items[i] );
3411 TreeClick( TreeView.Items[0] );
3419 procedure TGikoForm.ShowHistoryTree;
3424 if CabinetPanel.Visible then begin
3425 if FTreeType = gttHistory then begin
3426 CabinetVisible( False );
3427 GikoDM.CabinetHistoryAction.Checked := False;
3429 GikoDM.CabinetHistoryAction.Checked := True;
3432 CabinetVisible( True );
3433 GikoDM.CabinetHistoryAction.Checked := True;
3436 // BBS...BBS, History, Favorite
3437 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3439 FavoriteTreeView.Visible := False;
3440 TreeView.Visible := True;
3442 GikoDM.CabinetBBSAction.Checked := False;
3443 GikoDM.CabinetFavoriteAction.Checked := False;
3445 if FTreeType <> gttHistory then begin
3446 b := CabinetSelectPopupMenu.Items.Count - 1;
3447 for i := 0 to b do begin
3448 item := CabinetSelectPopupMenu.Items[ i ];
3449 if item is TBBSMenuItem then begin
3450 item.Checked := False;
3451 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3452 CabinetMenu.Items[ i ].Checked := False;
3456 FTreeType := gttHistory;
3457 HistoryToolBar.Show;
3458 FavoriteToolBar.Hide;
3459 FHistoryList.SetTreeNode( TreeView );
3460 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3464 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3466 ChangeEvent: TTVChangedEvent;
3467 ChangingEvent: TTVChangingEvent;
3471 if Item is TCategory then
3472 bbs := TCategory( Item ).ParenTBBS
3473 else if Item is TBoard then
3474 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3478 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3479 if Item <> FActiveList then begin
3481 ChangingEvent := nil;
3483 if not CallEvent then begin
3484 ChangeEvent := TreeView.OnChange;
3485 ChangingEvent := TreeView.OnChanging;
3488 if not CallEvent then begin
3489 TreeView.OnChange := nil;
3490 TreeView.OnChanging := nil;
3492 //Application.ProcessMessages;
3493 for i := 0 to TreeView.Items.Count - 1 do begin
3494 if TreeView.Items[i].Data = Item then begin
3495 TreeView.Items[i].Selected := True;
3497 TreeClick(TreeView.Items[i]);
3501 //Application.ProcessMessages;
3503 if not CallEvent then begin
3504 TreeView.OnChange := ChangeEvent;
3505 TreeView.OnChanging := ChangingEvent;
3510 if Item <> FActiveList then begin
3511 ActiveListColumnSave;
3512 if (Item is TBBS) or (Item is TCategory) then begin
3513 ListView.Columns.Clear;
3514 SetActiveList( Item );
3515 end else if Item is TBoard then begin
3516 if not TBoard( Item ).IsThreadDatRead then begin
3517 Screen.Cursor := crHourGlass;
3519 if not TBoard( Item ).IsThreadDatRead then
3520 GikoSys.ReadSubjectFile(TBoard( Item ));
3522 Screen.Cursor := crDefault;
3525 Sort.SetSortDate(Now());
3526 SetActiveList( Item );
3531 if Item is TBoard then begin // not TCategory
3532 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3533 if GikoSys.Setting.ListWidthState = glsMax then begin
3534 GikoDM.BrowserMinAction.Execute;
3535 if GikoForm.Visible then
3539 if GikoSys.Setting.ListHeightState = glsMax then begin
3540 GikoDM.BrowserMinAction.Execute;
3541 if GikoForm.Visible then
3548 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3549 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3551 listItem : TListItem;
3552 threadItem : TThreadItem;
3559 if not (GetActiveList is TBoard) then Exit;
3560 listItem := ListView.GetItemAt( X, Y );
3561 if listItem = nil then Exit;
3562 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3564 threadItem := TThreadItem(ListItem.Data);
3565 InsertBrowserTab(threadItem, False);
3566 if threadItem.IsLogFile then
3567 ListView.UpdateItems(listItem.Index, listItem.Index);
3571 //
\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Å
3572 if (ssDouble in Shift) then
3573 ListDoubleClick(Shift)
3581 Windows.ClientToScreen( ListView.Handle, pos );
3582 ListPopupMenu.Popup( pos.X, pos.Y );
3588 procedure TGikoForm.ListClick;
3590 ListItem: TListItem;
3591 ThreadItem: TThreadItem;
3593 if ListView.SelCount <> 1 then Exit;
3594 ListItem := ListView.Selected;
3595 if ListItem = nil then Exit;
3596 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3598 ThreadItem := TThreadItem(ListItem.Data);
3599 if ThreadItem.IsLogFile then begin
3600 InsertBrowserTab(ThreadItem);
3601 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3603 InsertBrowserTab(ThreadItem);
3606 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3607 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3608 if GikoSys.Setting.ListWidthState = glsMin then begin
3609 GikoDM.BrowserMaxAndFocusAction.Execute;
3612 if GikoSys.Setting.ListHeightState = glsMin then begin
3613 GikoDM.BrowserMaxAndFocusAction.Execute;
3619 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3621 ThreadItem: TThreadItem;
3624 shiftDown := (ssShift in Shift);
3626 if ListView.Selected = nil then Exit;
3628 if TObject(ListView.Selected.Data) is TCategory then begin
3629 SelectTreeNode(ListView.Selected.Data, True);
3630 end else if TObject(ListView.Selected.Data) is TBoard then begin
3631 SelectTreeNode(ListView.Selected.Data, True)
3632 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3633 Application.ProcessMessages;
3634 ThreadItem := TThreadItem(ListView.Selected.Data);
3635 DownloadContent(ThreadItem, shiftDown);
3637 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3638 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3639 if GikoSys.Setting.ListWidthState = glsMin then begin
3640 GikoDM.BrowserMaxAction.Execute;
3641 GikoDM.SetFocusForBrowserAction.Execute;
3644 if GikoSys.Setting.ListHeightState = glsMin then begin
3645 GikoDM.BrowserMaxAction.Execute;
3646 GikoDM.SetFocusForBrowserAction.Execute;
3653 procedure TGikoForm.BrowserMovement(const AName: string);
3655 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3656 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3657 and (FActiveContent <> nil) then begin
3658 FActiveContent.Move(AName);
3661 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
3662 procedure TGikoForm.BrowserMovement(scroll: Integer);
3664 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3665 and (FActiveContent <> nil) then begin
3666 FActiveContent.Move(scroll);
3669 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3671 if TObject(Node.Data) is TBBS then begin
3672 TBBS(Node.Data).NodeExpand := False;
3673 end else if TObject(Node.Data) is TCategory then begin
3674 TCategory(Node.Data).NodeExpand := False;
3675 end else if TObject(Node.Data) is TBoard then begin
3676 TBoard(Node.Data).NodeExpand := False;
3678 if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3679 TreeClick(TreeView.Selected);
3683 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3685 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3687 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3689 TreeSplitter.Visible := isVisible;
3690 CabinetPanel.Visible := isVisible;
3691 GikoDM.CabinetVisibleAction.Checked := isVisible;
3694 procedure TGikoForm.SelectListItem(List: TList);
3696 TmpListItem: TListItem;
3700 TmpListItem := ListView.Selected;
3701 while TmpListItem <> nil do begin
3702 List.Add(TmpListItem.Data);
3703 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3708 procedure TGikoForm.FormResize(Sender: TObject);
3711 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3712 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3714 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3715 if GikoSys.Setting.ListWidthState = glsMin then begin
3716 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3717 ViewPanel.Width := ThreadMainPanel.Width - 80;
3720 if GikoSys.Setting.ListHeightState = glsMin then begin
3721 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3722 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3726 FIsIgnoreResize := rtResizing;
3727 PostMessage( Handle, USER_RESIZED, 0, 0 );
3732 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3736 FTabHintIndex := -1;
3737 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3738 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3739 DeleteTab(i, BrowserTab.TabIndex);
3744 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3748 FTabHintIndex := -1;
3749 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3750 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3751 DeleteTab(i, BrowserTab.TabIndex);
3756 procedure TGikoForm.DeleteTab(index, selectIndex: Integer);
3758 browserRec : TBrowserRecord;
3762 browserRec := TBrowserRecord(BrowserTab.Tabs.Objects[index]);
3764 if browserRec.Browser <> nil then begin
3765 doc := browserRec.Browser.OleObject.Document;
3766 browserRec.Thread.ScrollTop := doc.Body.ScrollTop;
3769 browserRec.Thread.ScrollTop := 0;
3772 if(FActiveContent = browserRec) then
3773 FActiveContent := nil;
3774 if browserRec.Browser <> nil then begin
3775 j := FBrowsers.IndexOf(browserRec.Browser);
3777 FBrowsers.Move(j, BROWSER_COUNT - 1);
3780 BrowserTab.Tabs.BeginUpdate;
3782 GikoSys.Setting.LastCloseTabURL := browserRec.Thread.URL;
3784 if ( BrowserTab.Tabs.Count - 1 = index ) and
3785 ( BrowserTab.TabRect(index).Left
3786 <= BrowserTab.DisplayRect.Left ) then begin
3787 BrowserTab.ScrollTabs(-1);
3789 BrowserTab.Tabs.Delete(index);
3790 if selectIndex > index then begin
3791 BrowserTab.TabIndex := selectIndex - 1;
3793 if BrowserTab.Tabs.Count -1 >= selectIndex then
3794 BrowserTab.TabIndex := selectIndex
3796 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3799 BrowserTab.Tabs.EndUpdate;
3801 if BrowserTab.Tabs.Count = 0 then begin
3802 BrowserNullTab.Thread := nil;
3805 if(BrowserTab.TabIndex <> -1) and
3806 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3807 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
3808 ReleaseOldestBrowser;
3810 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3811 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3812 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3813 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3816 if( FActiveContent = nil) then
3817 BrowserTab.OnChange(nil);
3819 function TGikoForm.Hook(var Message: TMessage): Boolean;
3821 //
\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Ì
3822 //
\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ð
3826 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3828 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3832 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3834 bBoard, bCategory : Boolean;
3836 bBoard := (GetActiveList is TBoard);
3837 bCategory := (GetActiveList is TCategory);
3838 ItemRoundPMenu.Visible := bBoard;
3839 ItemReservPMenu.Visible := bBoard;
3840 LPMSep01.Visible := bBoard;
3841 ListRoundPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3842 ListReservPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3843 LPMSep02.Visible := bCategory or bBoard;
3844 KidokuPMenu.Visible := bBoard;
3845 MidokuPMenu.Visible := bBoard;
3846 UrlCopyPMenu.Visible := bCategory or bBoard;
3847 NameUrlCopyPMenu.Visible := bCategory or bBoard;
3848 AllSelectPMenu.Visible := bCategory or bBoard;
3849 LPMSep05.Visible := bCategory or bBoard;
3850 DeletePMenu.Visible := bBoard;
3851 LPMSep06.Visible := bCategory or bBoard;
3852 BoardFavoriteAddMenu.Visible := bCategory;
3853 ThreadFavoriteAddMenu.Visible := bBoard;
3854 SaveThreadFile.Visible := bBoard;
3855 AddRoundNameMenu(ItemReservPMenu);
3856 AddRoundNameMenu(ListReservPMenu);
3859 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3861 FClickNode := TreeView.Selected;
3862 if FClickNode = nil then begin
3863 TreeSelectThreadPupupMenu.Visible := False;
3864 TreeSelectBoardPupupMenu.Visible := False;
3865 TPMSep01.Visible := False;
3866 TreeSelectURLPupupMenu.Visible := False;
3867 TreeSelectNamePupupMenu.Visible := False;
3868 TreeSelectNameURLPupupMenu.Visible := False;
3869 TreeSelectFavoriteAddPupupMenu.Visible := False;
3870 TreeSelectLogDeleteSeparator.Visible := False;
3871 TreeSelectLogDeletePopupMenu.Visible := False;
3872 end else if TObject(FClickNode.Data) is TBoard then begin
3873 TreeSelectThreadPupupMenu.Visible := False;
3874 TreeSelectBoardPupupMenu.Visible := True;
3875 TPMSep01.Visible := True;
3876 TreeSelectURLPupupMenu.Visible := True;
3877 TreeSelectNamePupupMenu.Visible := True;
3878 TreeSelectNameURLPupupMenu.Visible := True;
3879 TreeSelectFavoriteAddPupupMenu.Visible := True;
3880 TreeSelectLogDeleteSeparator.Visible := False;
3881 TreeSelectLogDeletePopupMenu.Visible := False;
3882 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3883 TreeSelectThreadPupupMenu.Visible := False;
3884 TreeSelectBoardPupupMenu.Visible := True;
3885 TPMSep01.Visible := True;
3886 TreeSelectURLPupupMenu.Visible := True;
3887 TreeSelectNamePupupMenu.Visible := True;
3888 TreeSelectNameURLPupupMenu.Visible := True;
3889 TreeSelectFavoriteAddPupupMenu.Visible := True;
3890 TreeSelectLogDeleteSeparator.Visible := False;
3891 TreeSelectLogDeletePopupMenu.Visible := False;
3892 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3893 TreeSelectThreadPupupMenu.Visible := True;
3894 TreeSelectBoardPupupMenu.Visible := False;
3895 TPMSep01.Visible := True;
3896 TreeSelectURLPupupMenu.Visible := True;
3897 TreeSelectNamePupupMenu.Visible := True;
3898 TreeSelectNameURLPupupMenu.Visible := True;
3899 TreeSelectFavoriteAddPupupMenu.Visible := True;
3900 TreeSelectLogDeleteSeparator.Visible := True;
3901 TreeSelectLogDeletePopupMenu.Visible := True;
3902 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3903 TreeSelectThreadPupupMenu.Visible := True;
3904 TreeSelectBoardPupupMenu.Visible := False;
3905 TPMSep01.Visible := True;
3906 TreeSelectURLPupupMenu.Visible := True;
3907 TreeSelectNamePupupMenu.Visible := True;
3908 TreeSelectNameURLPupupMenu.Visible := True;
3909 TreeSelectFavoriteAddPupupMenu.Visible := True;
3910 TreeSelectLogDeleteSeparator.Visible := True;
3911 TreeSelectLogDeletePopupMenu.Visible := True;
3912 end else if (TObject(FClickNode.Data) is TCategory) then begin
3913 TreeSelectThreadPupupMenu.Visible := False;
3914 TreeSelectBoardPupupMenu.Visible := False;
3915 TPMSep01.Visible := False;
3916 TreeSelectURLPupupMenu.Visible := False;
3917 TreeSelectNamePupupMenu.Visible := True;
3918 TreeSelectNameURLPupupMenu.Visible := False;
3919 TreeSelectFavoriteAddPupupMenu.Visible := False;
3920 TreeSelectLogDeleteSeparator.Visible := False;
3921 TreeSelectLogDeletePopupMenu.Visible := False;
3922 end else if FClickNode.IsFirstNode then begin
3923 TreeSelectThreadPupupMenu.Visible := False;
3924 TreeSelectBoardPupupMenu.Visible := False;
3925 TPMSep01.Visible := False;
3926 TreeSelectURLPupupMenu.Visible := False;
3927 TreeSelectNamePupupMenu.Visible := True;
3928 TreeSelectNameURLPupupMenu.Visible := False;
3929 TreeSelectFavoriteAddPupupMenu.Visible := False;
3930 TreeSelectLogDeleteSeparator.Visible := False;
3931 TreeSelectLogDeletePopupMenu.Visible := False;
3933 TreeSelectThreadPupupMenu.Visible := False;
3934 TreeSelectBoardPupupMenu.Visible := False;
3935 TPMSep01.Visible := False;
3936 TreeSelectURLPupupMenu.Visible := False;
3937 TreeSelectNamePupupMenu.Visible := False;
3938 TreeSelectNameURLPupupMenu.Visible := False;
3939 TreeSelectFavoriteAddPupupMenu.Visible := False;
3940 TreeSelectLogDeleteSeparator.Visible := False;
3941 TreeSelectLogDeletePopupMenu.Visible := False;
3945 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
3946 var ppDisp: IDispatch; var Cancel: WordBool);
3955 threadItem: TThreadItem;
3956 aElement : IHTMLElement;
3957 senderBrowser : TWebBrowser;
3958 doc : IHTMLDocument2;
3961 Writeln(IntToStr(Integer(ppDisp)));
3965 if not( TObject(Sender) is TWebBrowser )then
3968 senderBrowser := TWebBrowser(Sender);
3969 doc := senderBrowser.ControlInterface.Document as IHTMLDocument2;
3970 if not Assigned(doc) then
3973 aElement := doc.activeElement;
3974 if not Assigned(aElement) then
3977 Text := aElement.Get_outerText;
3978 Html := aElement.Get_outerHTML;
3980 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
3981 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
3982 if GikoSys.Setting.ResAnchorJamp then begin
3984 Text := ZenToHan(Trim(Text));
3986 if(AnsiPos('>>', Text) = 1) then begin
3987 //Text := Copy(Text, 3, Length(Text) - 2);
3990 //Text := Copy(Text, 2, Length(Text) - 1);
3994 if AnsiPos('-', Text) <> 0 then begin
3995 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
3996 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
3997 wkIntTo := StrToIntDef(Text, 0);
3998 if wkIntTo < wkIntSt then
4001 wkIntSt := StrToIntDef(Text, 0);
4004 if wkIntSt <> 0 then begin
4005 FActiveContent.IDAnchorPopup('');
4006 MoveHisotryManager.pushItem(FActiveContent);
4007 if (Sender is TResPopupBrowser) then begin
4008 TResPopupBrowser(Sender).ChildClear;
4010 GetActiveContent(true),
4011 GetActiveContent(true).URL + '&st=' +
4012 IntToStr(wkIntSt) + '&to=' + IntToStr(wkIntSt));
4014 BrowserMovement(IntToStr(wkIntSt));
4019 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
4021 URL := GikoSys.GetHRefText(Html);
4022 URL := GikoSys.HTMLDecode(URL);
4023 if AnsiPos('BE:', URL) = 1 then begin
4024 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
4025 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
4026 threadItem := FActiveContent.Thread;
4027 if threadItem = nil then Exit;
4028 URL := BE_PHP_URL + BNum + '&u=d'
4029 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
4032 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
4033 ( AnsiPos('ftp://', URL) = 1) then begin
4034 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
4035 if GikoSys.Setting.LinkAddAddressBar then begin
4036 idx := AddressComboBox.Items.IndexOf(URL);
4037 if idx = -1 then begin
4038 AddressComboBox.Items.Insert(0, URL);
4039 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
4040 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
4042 AddressComboBox.Items.Delete(idx);
4043 AddressComboBox.Items.Insert(0, URL);
4046 if (Sender is TResPopupBrowser) then begin
4047 TResPopupBrowser(Sender).ChildClear
4050 MoveHisotryManager.pushItem(FActiveContent);
4057 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
4059 if Mouse.Capture <> 0 then
4061 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4062 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
4063 FBrowserSizeWidth := ViewPanel.Width;
4065 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
4066 FBrowserSizeHeight := ViewPanel.Height;
4068 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4069 if ViewPanel.Width < 2 then begin
4070 ViewPanel.Width := 1;
4071 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
4072 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
4073 GikoSys.Setting.ListWidthState := glsMax;
4074 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
4075 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
4076 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
4077 GikoSys.Setting.ListWidthState := glsMin;
4079 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
4080 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
4081 GikoSys.Setting.ListWidthState := glsNormal;
4084 if ViewPanel.Height < 2 then begin
4085 ViewPanel.Height := 1;
4086 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4087 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4088 GikoSys.Setting.ListHeightState := glsMax;
4089 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
4090 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4091 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4092 GikoSys.Setting.ListHeightState := glsMin;
4094 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4095 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4096 GikoSys.Setting.ListHeightState := glsNormal;
4099 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
4100 FBrowserSizeHeight := ViewPanel.Height
4101 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
4102 FBrowserSizeWidth := ViewPanel.Width;}
4105 procedure TGikoForm.BrowserTabChange(Sender: TObject);
4110 BrowserTab.Tabs.BeginUpdate;
4112 if not BrowserTab.Dragging then begin
4113 FTabHintIndex := -1;
4114 BrowserTab.Hint := '';
4115 idx := BrowserTab.TabIndex;
4116 if idx = -1 then begin
4117 SetContent(BrowserNullTab);
4119 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
4120 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
4121 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
4123 FBrowsers.Move(j ,0);
4125 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
4126 (FActiveContent.Browser <> BrowserNullTab.Browser) and
4127 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
4128 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4130 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
4131 ReleaseOldestBrowser;
4133 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
4134 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
4135 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4137 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
4138 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
4139 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4141 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
4142 AddressComboBox.Text := GetActiveContent.URL;
4144 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
4145 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
4148 GikoDM.SetFocusForBrowserAction.Execute;
4152 BrowserTab.Tabs.EndUpdate;
4157 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
4158 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
4164 if Button = mbMiddle then begin
4165 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
4168 p := BrowserTab.ScreenToClient(p);
4169 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
4171 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4172 end else if Button = mbLeft then begin
4173 FDragWFirst := true;
4174 FMouseDownPos.X := X;
4175 FMouseDownPos.Y := Y;
4180 procedure TGikoForm.SetBrowserTabState;
4182 CoolBand: TCoolBand;
4184 BrowserBottomPanel.AutoSize := False;
4185 if GikoSys.Setting.BrowserTabVisible then begin
4187 BrowserTab.Tabs.BeginUpdate;
4189 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
4190 BrowserTab.Style := tsTabs;
4191 if GikoSys.Setting.BrowserTabPosition = gtpTop then
4192 BrowserTab.TabPosition := tpTop
4194 BrowserTab.TabPosition := tpBottom;
4195 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
4196 BrowserTab.TabPosition := tpTop;
4197 BrowserTab.Style := tsButtons;
4199 BrowserTab.TabPosition := tpTop;
4200 BrowserTab.Style := tsFlatButtons
4203 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
4204 BrowserTab.Parent := BrowserTabToolBar;
4205 BrowserBottomPanel.Hide;
4206 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4207 if CoolBand <> nil then
4208 CoolBand.Visible := True;
4210 BrowserTab.Parent := BrowserBottomPanel;
4211 BrowserTab.Top := 0;
4212 BrowserTab.Left := 0;
4213 BrowserBottomPanel.Show;
4214 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4215 if CoolBand <> nil then
4216 CoolBand.Visible := False;
4219 BrowserTab.Tabs.EndUpdate;
4223 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4224 if CoolBand <> nil then
4225 CoolBand.Visible := False;
4226 BrowserBottomPanel.Visible := False;
4227 GikoDM.AllTabCloseAction.Execute;
4231 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
4232 Y: Integer; State: TDragState; var Accept: Boolean);
4236 idx := BrowserTab.IndexOfTabAt(X, Y);
4237 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
4240 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
4245 FDragWFirst := False;
4246 idx := BrowserTab.IndexOfTabAt(X, Y);
4248 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
4251 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
4252 Shift: TShiftState; X, Y: Integer);
4255 ThreadItem: TThreadItem;
4258 TabIdx := BrowserTab.IndexOfTabAt(x, y);
4260 if ( ssLeft in Shift ) then begin
4261 if (FDragWFirst) then begin
4262 BrowserTab.EndDrag(false);
4263 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
4266 BrowserTab.EndDrag(false);
4267 FDragWFirst := false;
4270 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
4271 Application.CancelHint;
4272 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
4273 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
4274 BrowserTab.Hint := ThreadItem.Title;
4275 Application.ShowHint := True;
4277 BrowserTab.Hint := '';
4278 Application.ShowHint := True;
4280 FTabHintIndex := TabIdx;
4285 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
4286 const pDisp: IDispatch; var URL: OleVariant);
4288 BrowserRecord :TBrowserRecord;
4290 doc : IHTMLDocument2;
4291 threadItem : TThreadItem;
4293 if TObject(Sender) is TWebBrowser then begin
4294 BrowserRecord := nil;
4295 if TWebBrowser(Sender) <> Browser then begin
4296 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4297 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
4298 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
4302 if BrowserRecord <> nil then begin
4303 if BrowserRecord.Event <> nil then
4304 BrowserRecord.Event.Free;
4305 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, BrowserRecord.Browser.ControlInterface.Document, HTMLDocumentEvents2);
4306 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4307 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4310 if GetActiveContent <> nil then begin
4311 if FEvent <> nil then
4313 FEvent := THTMLDocumentEventSink.Create(Self, Browser.ControlInterface.Document, HTMLDocumentEvents2);
4314 FEvent.OnContextMenu := OnDocumentContextMenu;
4315 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4317 if FEvent <> nil then begin
4325 if (BrowserRecord <> nil) and
4326 Assigned( BrowserRecord.Thread ) then begin
4327 threadItem := BrowserRecord.Thread;
4329 if (threadItem.JumpAddress > 0) then begin
4330 if threadItem.UnRead then begin
4331 threadItem.UnRead := False;
4333 RefreshListView(threadItem);
4335 //
\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®
4336 //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4337 if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4338 BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4339 threadItem.JumpAddress := 0;
4341 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4344 end else if threadItem.UnRead then begin
4345 threadItem.UnRead := False;
4347 BrowserRecord.Move('new');
4348 RefreshListView(threadItem);
4349 end else if threadItem.ScrollTop <> 0 then begin
4351 doc := BrowserRecord.Browser.ControlInterface.Document as IHTMLDocument2;
4352 (doc.body as IHTMLElement2).ScrollTop := threadItem.ScrollTop;
4355 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4360 LockWindowUpdate(0);
4363 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4365 AddRoundNameMenu(RoundNamePopupMenu.Items);
4368 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4374 Item := TMenuItem.Create(Self);
4375 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4376 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4378 Item := TMenuItem.Create(Self);
4379 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4380 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4382 Item := TMenuItem.Create(Self);
4383 Item.Caption := '-';
4385 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4386 Item := TMenuItem.Create(Self);
4387 Item.Caption := RoundList.RoundNameList[i];
4388 Item.OnClick := SetSelectRoundName;
4393 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4395 threadItem : TThreadItem;
4397 if ParentName <> 'RoundItem' then begin
4398 SetSelectItemRound(RoundFlag, RoundName);
4400 threadItem := GetActiveContent;
4401 if threadItem <> nil then begin
4402 threadItem.RoundName := RoundName;
4404 RoundList.RoundNameList.Add(RoundName);
4405 threadItem.Round := RoundFlag;
4410 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4415 List := TList.Create;
4417 SelectListItem(List);
4418 for i := 0 to List.Count - 1 do begin
4419 if TObject(List[i]) is TBoard then begin
4420 TBoard(List[i]).RoundName := RoundName;
4422 RoundList.RoundNameList.Add(RoundName);
4423 TBoard(List[i]).Round := RoundFlag;
4424 end else if TObject(List[i]) is TThreadItem then begin
4425 if TThreadItem(List[i]).IsLogFile then begin
4426 TThreadItem(List[i]).RoundName := RoundName;
4428 RoundList.RoundNameList.Add(RoundName);
4429 TThreadItem(List[i]).Round := RoundFlag;
4438 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4440 MenuItem: TMenuItem;
4442 if Sender is TMenuItem then begin
4443 MenuItem := TMenuItem(Sender);
4444 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4449 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4454 if CoolBar = nil then
4456 for i := 0 to CoolBar.Bands.Count - 1 do begin
4457 if CoolBar.Bands[i].Control = Control then begin
4458 Result := CoolBar.Bands[i];
4464 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4466 if BrowserTab.Parent = BrowserTabToolBar then
4467 BrowserTab.Width := BrowserTabToolBar.Width;
4470 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4475 procedure TGikoForm.SetMenuFont;
4477 // GikoSys.MenuFont(MenuToolBar.Font);
4478 // MenuToolBar.Buttons[0].AutoSize := False;
4479 // MenuToolBar.Buttons[0].AutoSize := True;
4480 // MenuToolBar.Font.Color := clMenuText;
4481 GikoSys.MenuFont(MainCoolBar.Font);
4482 MenuToolBar.Buttons[0].AutoSize := False;
4483 MenuToolBar.Buttons[0].AutoSize := True;
4484 MainCoolBar.AutoSize := False;
4485 MainCoolBar.AutoSize := True;
4486 GikoSys.MenuFont(ListCoolBar.Font);
4487 GikoSys.MenuFont(BrowserCoolBar.Font);
4488 // MenuToolBar.Font.Color := clMenuText;
4491 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4495 if FavoriteDM.Modified then begin
4498 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4499 NewMenu := TMenuItem.Create(MainMenu);
4500 NewMenu.Action := GikoDM.FavoriteAddAction;
4501 FavoriteMenu.Add(NewMenu);
4502 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4503 NewMenu := TMenuItem.Create(FavoriteMenu);
4504 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4505 FavoriteMenu.Add(NewMenu);
4506 //
\83Z
\83p
\83\8c\81[
\83^
4507 FavoriteMenu.InsertNewLineAfter(NewMenu);
4508 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4509 FavoriteDM.Modified := false;
4513 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4516 NewMenu: array of TMenuItem;
4518 SetLength(NewMenu, Node.Count);
4519 Node := Node.getFirstChild;
4521 while ( Node <> nil ) do begin
4522 NewMenu[i] := TFavoriteMenuItem.Create(nil);
4523 NewMenu[i].AutoHotkeys := maAutomatic;
4524 NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4525 TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4527 if TObject(Node.Data) is TFavoriteFolder then begin
4528 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4529 CreateFavMenu(Node, NewMenu[i]);
4530 end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4531 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4532 NewMenu[i].OnClick := FavoriteClick;
4533 end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4534 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4535 NewMenu[i].OnClick := FavoriteClick;
4538 Node := Node.getNextSibling;
4540 MenuItem.Add(NewMenu);
4543 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4545 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';
4546 TitleAdd: String = '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á';
4548 Dlg : TFavoriteAddDialog;
4554 if Item is TFavoriteBoardItem then
4555 Item := TFavoriteBoardItem( Item ).Item
4556 else if Item is TFavoriteThreadItem then
4557 Item := TFavoriteThreadItem( Item ).Item;
4559 Node := FavoriteTreeView.Items.GetFirstNode;
4560 if Item is TBoard then begin
4561 ItemURL := TBoard( Item ).URL;
4562 while Node <> nil do begin
4564 if TObject( Data ) is TFavoriteBoardItem then begin
4565 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4566 if Application.MessageBox(PChar(MsgAdd) , PChar(TitleAdd), MB_YESNO ) = IDNO then
4571 Node := Node.GetNext;
4573 Dlg := TFavoriteAddDialog.Create(Self);
4575 Dlg.SetBoard( TBoard( Item ) );
4580 end else if Item is TThreadItem then begin
4581 ItemURL := TThreadItem( Item ).URL;
4582 while Node <> nil do begin
4584 if TObject( Data ) is TFavoriteThreadItem then begin
4585 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
4586 if Application.MessageBox( PChar(MsgAdd), PChar(TitleAdd), MB_YESNO ) = IDNO then
4591 Node := Node.GetNext;
4593 Dlg := TFavoriteAddDialog.Create(Self);
4595 Dlg.SetThreadItem( TThreadItem( Item ) );
4605 procedure TGikoForm.FavoriteClick(Sender: TObject);
4607 FavoriteClick( Sender, True );
4610 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4613 ThreadItem: TThreadItem;
4614 FavBoard: TFavoriteBoardItem;
4615 FavThread: TFavoriteThreadItem;
4619 if Sender is TFavoriteMenuItem then
4620 Item := TFavoriteMenuItem(Sender).Data
4621 else if Sender is TLinkToolButton then
4622 Item := TLinkToolButton(Sender).Data
4623 else if Sender is TTreeNode then
4624 Item := TTreeNode( Sender ).Data
4628 if TObject(Item) is TFavoriteBoardItem then begin
4629 FavBoard := TFavoriteBoardItem(Item);
4630 Board := FavBoard.Item;
4631 if Board <> nil then begin
4632 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4633 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4634 SelectTreeNode(Board, True);
4636 end else if TObject(Item) is TFavoriteThreadItem then begin
4637 FavThread := TFavoriteThreadItem(Item);
4638 ThreadItem := FavThread.Item;
4639 if ThreadItem = nil then
4642 InsertBrowserTab(ThreadItem, ActiveTab);
4644 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4645 if GikoSys.Setting.ListWidthState = glsMin then begin
4646 GikoDM.BrowserMaxAndFocusAction.Execute;
4649 if GikoSys.Setting.ListHeightState = glsMin then begin
4650 GikoDM.BrowserMaxAndFocusAction.Execute;
4656 procedure TGikoForm.BBSMenuItemOnClick(
4661 if Sender is TBBSMenuItem then
4662 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4666 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4668 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4671 //!
\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é)
4672 procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4674 stRes, edRes : Int64;
4675 browserRec : TBrowserRecord;
4676 threadNumber : String;
4677 doc : IHTMLDocument2;
4681 Thread.JumpAddress := 0;
4682 //
\83^
\83u
\82ð
\90¶
\90¬
4683 browserRec := InsertBrowserTab(Thread);
4684 if (browserRec <> nil) then begin
4685 // JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N
\82·
\82é
4686 threadNumber := ChangeFileExt(Thread.FileName, '');
4687 GikoSys.GetPopupResNumber( URL, stRes, edRes );
4688 //
\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
4689 if (StrToInt64(threadNumber) = stRes) then begin
4690 if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4691 and (Pos('&st=' + threadNumber , URL) = 0) then begin
4695 if ( stRes > 0 ) then begin
4696 Thread.JumpAddress := stRes;
4698 //
\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é
4699 if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4700 DownloadContent(Thread);
4701 end else if (not browserRec.Repaint) and (stRes > 0) then begin
4702 browserRec.Move(IntToStr(stRes));
4703 Thread.JumpAddress := 0;
4705 doc := browserRec.Browser.ControlInterface.Document as IHTMLDocument2;
4706 if Assigned(doc) then
4707 Thread.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
4714 procedure TGikoForm.MoveToURL(const inURL: string; KeyMask: Boolean = False);
4716 protocol, host, path, document, port, bookmark : string;
4717 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4719 BBSID, BBSKey: string;
4720 {tmpBoard,} Board: TBoard;
4721 ThreadItem: TThreadItem;
4724 tmpThread : TThreadItem;
4725 shiftDown : Boolean;
4729 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4730 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4731 //
\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é
4732 if not KeyMask then begin
4733 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4734 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4735 if shiftDown then begin
4736 GikoSys.OpenBrowser(inURL, gbtUserApp);
4738 end else if ctrlDown then begin
4739 GikoSys.OpenBrowser(inURL, gbtIE);
4744 //=====
\83v
\83\89\83O
\83C
\83\93
4747 bi := Length(BoardGroups) - 1;
4748 for i := 1 to bi do begin
4749 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4750 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4753 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4754 Board := BBSsFindBoardFromURL( boardURL );
4757 if Board = nil then begin
4759 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4760 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4763 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4764 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4765 ShowBBSTree( BBSs[ 1 ] );
4768 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4769 if not Board.IsThreadDatRead then begin
4770 GikoSys.ReadSubjectFile( Board );
4774 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4775 if ThreadItem = nil then begin
4776 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4777 ThreadItem := tmpThread;
4778 Board.Insert( 0, ThreadItem );
4779 if ActiveList is TBoard then begin
4780 if TBoard(ActiveList) = Board then
4781 ListView.Items.Count := ListView.Items.Count + 1;
4786 OpenThreadItem(ThreadItem, inURL);
4793 Board := BBSsFindBoardFromURL(
4794 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4796 if Board <> nil then begin
4797 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4798 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4799 SelectTreeNode( Board, True );
4807 // 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¢
4811 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4812 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4813 Board := BBSsFindBoardFromURL( boardURL );
4814 if Board = nil then begin
4815 //
\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
4816 GikoSys.OpenBrowser(inURL, gbtUserApp);
4819 //
\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é
4821 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4822 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4823 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4824 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4825 GikoSys.OpenBrowser(inURL, gbtUserApp);
4830 if not Board.IsThreadDatRead then
4831 GikoSys.ReadSubjectFile(Board);
4832 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4833 ThreadItem := Board.FindThreadFromURL( URL );
4834 //
\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)
4835 if ThreadItem = nil then begin
4836 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4839 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ª
\82È
\82¢
\82È
\82ç
\90¶
\90¬
\82·
\82é
\81B
4840 if ThreadItem = nil then begin
4841 ThreadItem := TThreadItem.Create( nil, Board, URL );
4842 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4843 Board.Insert(0, ThreadItem);
4844 if ActiveList is TBoard then begin
4845 if TBoard(ActiveList) = Board then
4846 ListView.Items.Count := ListView.Items.Count + 1;
4849 //
\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é
4850 if (not ThreadItem.IsLogFile) then begin
4851 if AnsiPos(Host, Board.URL) = 0 then
4852 ThreadItem.DownloadHost := Host
4854 ThreadItem.DownloadHost := '';
4856 OpenThreadItem(ThreadItem, inURL);
4860 Board := BBSsFindBoardFromURL( inURL );
4861 if Board = nil then begin
4862 GikoSys.OpenBrowser(inURL, gbtAuto);
4864 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4865 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4866 SelectTreeNode( Board, True );
4871 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4873 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4874 CoolBarResized( Sender, MainCoolBar );
4877 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4878 Shift: TShiftState);
4880 if Key = VK_RETURN then
4881 GikoDM.MoveToAction.Execute;
4884 procedure TGikoForm.BrowserEnter(Sender: TObject);
4886 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4889 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4891 CDS:PCopyDataStruct;
4895 CDS := Message.CopyDataStruct;
4896 GetMem(PC, CDS^.cbData);
4898 lstrcpy(PC,CDS^.lpData);
4899 SetString(sURL, PC,lstrlen(PC));
4904 Message.Result := 1;
4907 procedure TGikoForm.WndProc(var Message: TMessage);
4909 senderBrowser : TWebBrowser;
4915 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4918 if Message.WParam = SC_MINIMIZE then begin
4920 PostMessage(Handle, USER_MINIMIZED, 0, 0);
4923 TreeClick( TreeView.Selected );
4928 if (GikoSys.Setting.StoredTaskTray) then begin
4935 USER_DOCUMENTCOMPLETE:
4936 if (Message.WParam <> 0) and
4937 (TObject(Message.WParam) is TWebBrowser) then begin
4938 senderBrowser := TWebBrowser( Message.WParam );
4939 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
4942 if (TObject(Message.WParam) is TResPopupBrowser) then begin
4944 TResPopupBrowser( Message.WParam ).Clear;
4947 end else if (TObject(Message.WParam) is TPreviewBrowser) then begin
4948 if FPreviewBrowser <> nil then begin
4949 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
4959 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
4964 //
\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Í
4965 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
4966 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
4967 if Msg.CharCode in [VK_BACK] then begin
4968 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4969 if Msg.KeyData > 0 then begin
4972 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4976 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
4977 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
4980 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4983 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
4984 if Msg.CharCode in [VK_BACK] then begin
4985 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4986 if Msg.KeyData > 0 then begin
4989 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4992 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
4995 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4999 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
5003 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
5008 PreviewTimer.Enabled := False;
5012 ARect := FPreviewBrowser.GetWindowRect(p);
5014 FPreviewBrowser.PreviewImage(FPreviewURL);
5016 if ARect.Bottom > Screen.DesktopHeight then begin
5017 OffsetRect(ARect, 0, -(ARect.Bottom - Screen.DesktopHeight));
5019 if (ARect.Right > Screen.DesktopWidth) then begin
5020 OffsetRect(ARect, -(ARect.Right - Screen.DesktopWidth), 0);
5022 if (ARect.Left < Screen.DesktopLeft) then begin
5023 OffsetRect(ARect, +(Screen.DesktopLeft - ARect.Left), 0);
5025 if (ARect.Top < Screen.DesktopTop) then begin
5026 OffsetRect(ARect, 0, (Screen.DesktopTop - ARect.Top));
5029 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST,
5030 ARect.Left, ARect.Top,
5031 (ARect.Right - ARect.Left), (ARect.Bottom - ARect.Top),
5032 SWP_NOACTIVATE or SWP_HIDEWINDOW);
5034 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
5035 FPreviewBrowserRect := ARect;
5038 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
5042 if PreviewTimer.Enabled then
5043 PreviewTimer.Enabled := False;
5045 //Window
\8aO
\82É
\88Ú
\93®
\82µ
\82½
\82Æ
\82«
\82Í
\8fÁ
\82¦
\82é
\82æ
\82¤
\82É
\82·
\82é
\82½
\82ß
\95\9c\8a\88
5046 if (FResPopupBrowser <> nil) and (IsWindowVisible(FResPopupBrowser.Handle)) then begin
5047 //
\89E
\83N
\83\8a\83b
\83N
\82Ì
\8e\9e\82Í
\8fÁ
\82³
\82È
\82¢
\82æ
\82¤
\82É
\8fð
\8c\8f\92Ç
\89Á
5048 if (Message.MouseMsg <> WM_RBUTTONUP) then begin
5049 FResPopupBrowser.Clear;
5053 if (FPreviewBrowser <> nil)
5054 and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
5055 //
\82±
\82±
\82Å
\8fÁ
\82³
\82ê
\82é
\82Ì
\82ª
\96â
\91è
5056 //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Å
\95\
\8e¦
\94Í
\88Í
\94»
\92è
\82Å
\82«
\82Ä
\82¢
\82é
\82Í
\82¸
5057 Pos := Mouse.CursorPos;
5058 Pos.X := Pos.X + Left;
5059 Pos.Y := Pos.Y + Top;
5060 if (FPreviewBrowserRect.Left > Pos.X) or
5061 (FPreviewBrowserRect.Right < Pos.X) or
5062 (FPreviewBrowserRect.Top > Pos.Y) or
5063 (FPreviewBrowserRect.Bottom < Pos.Y) then begin
5064 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
5068 Message.Result := 1;
5071 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
5073 GikoDM.MsgBarCloseAction.Execute;
5076 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
5078 doc: IHtmlDocument2;
5079 Range: IHTMLTxtRange;
5082 ThreadItem: TThreadItem;
5085 FactiveContent.IDAnchorPopup('');
5087 doc := FactiveContent.Browser.ControlInterface.Document as IHtmlDocument2;
5088 if not Assigned(doc) then
5091 Range := doc.selection.createRange as IHTMLTxtRange;
5092 if not Assigned(Range) then
5095 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
5096 s := ZenToHan(Trim(s));
5097 if GikoSys.IsNumeric(s) then begin
5098 Num := StrToInt64Def(s, -1);
5099 ThreadItem := GetActiveContent(true);
5100 if (ThreadItem <> nil) and (Num <= ThreadItem.Count)
5101 and (Num > 0)then begin
5102 CreateResPopupBrowser;
5103 FResPopupBrowser.CreateNewBrowser.PopupType := gptThread;
5104 HTMLCreater.SetResPopupText(FResPopupBrowser.CreateNewBrowser, ThreadItem, Num, Num, False, False);
5105 FResPopupBrowser.Popup;
5114 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
5116 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
5117 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
5119 if FTreeType = gttHistory then begin
5120 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
5121 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
5124 TreeView.Items.Clear;
5128 procedure TGikoForm.SetLinkBar;
5132 ToolButton: TLinkToolButton;
5133 MenuItem: TMenuItem;
5134 oldIgnoreResize : TResizeType;
5136 oldIgnoreResize := FIsIgnoreResize;
5137 FIsIgnoreResize := rtResizing;
5138 MainCoolBar.Bands.BeginUpdate;
5140 LinkBarPopupMenu.Items.Clear;
5141 for i := LinkToolBar.ButtonCount - 1 downto 0 do
5142 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
5143 LinkToolBar.Buttons[i].Free;
5144 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5145 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5146 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5147 ToolButton := TLinkToolButton.Create(LinkToolBar);
5148 // ToolButton.Parent := LinkToolBar;
5149 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
5150 MenuItem := TMenuItem.Create(Self);
5151 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
5152 LinkBarPopupMenu.Items.Add(MenuItem);
5153 ToolButton.MenuItem := MenuItem;
5154 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
5155 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
5156 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
5157 ToolButton.OnClick := FavoriteClick;
5158 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
5159 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
5160 ToolButton.OnClick := FavoriteClick;
5162 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
5163 ToolButton.Left := 10000;
5164 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
5165 ToolButton.AutoSize := True;
5166 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
5167 ToolButton.OnDragOver := FavoriteDragOver;
5168 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
5169 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
5170 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
5171 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
5172 //ToolButton.DragMode := dmAutomatic;
5173 ToolButton.DragMode := dmManual;
5174 ToolButton.PopupMenu := FavoriteTreePopupMenu;
5176 LinkToolBar.InsertControl(ToolButton);
5181 { if LinkToolBar.ButtonCount = 0 then begin
5182 ToolButton := TLinkToolButton.Create(LinkToolBar);
5183 ToolButton.Style := tbsButton;
5184 ToolButton.ImageIndex := -1;
5185 ToolButton.Caption := '';
5186 LinkToolBar.InsertControl(ToolButton);
5189 MainCoolBar.Bands.EndUpdate;
5190 LoadCoolBarSettings;
5191 FIsIgnoreResize := oldIgnoreResize;
5195 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5203 if Sender = FavoriteTreeView then begin
5204 Node := FavoriteTreeView.GetNodeAt(X, Y);
5209 bound := Node.DisplayRect( False );
5210 height := bound.Bottom - bound.Top;
5211 if (bound.Top + height / 2) <= Y then
5212 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
5217 if Node.IsFirstNode then
5222 if FDropSpaceNode <> nil then
5223 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
5226 if Change then begin
5227 if FDropSpaceNode <> nil then
5228 FDropSpaceNode.Free;
5230 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
5231 FDropSpaceNode.MoveTo( Node, naInsert );
5232 FDropSpaceNode.ImageIndex := -1;
5233 FDropSpaceNode.SelectedIndex := -1;
5237 if Source = FavoriteTreeView then begin
5238 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
5243 end else if Source = BrowserTab then
5245 else if Source = ListView then
5247 else if Source is TLinkToolButton then
5249 else if Source = TreeView then
5255 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5258 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
5261 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
5263 // FDragging := true;
5266 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
5268 SenderNode: TTreeNode;
5269 LinkToolButton: TLinkToolButton;
5272 LinkToolButton := TLinkToolButton( Sender );
5273 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5274 SenderNode.Selected := False;
5275 FavoriteDragDrop( SenderNode, Source );
5281 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5283 favButton : TLinkToolButton;
5284 favThreadItem : TFavoriteThreadItem;
5290 if Sender is TLinkToolButton then begin
5291 favButton := TLinkToolButton( Sender );
5292 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5293 favThreadItem := TFavoriteThreadItem( favButton.Data );
5294 if favThreadItem.Item <> nil then
5295 InsertBrowserTab( favThreadItem.Item, False );
5303 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5307 TToolButton( Sender ).DragMode := dmManual;
5308 if ssLeft in Shift then begin
5309 // 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)
5310 if FDragTime = 0 then begin
5311 FDragTime := GetTickCount();
5313 Now := GetTickCount();
5314 if (Now - FDragTime) > 500 then begin
5315 if FDragButton <> TToolButton( Sender ) then begin
5317 FDragButton := TToolButton( Sender );
5318 TToolButton(Sender).BeginDrag(false ,5);
5321 {$IF Defined(debug)}
5322 ShowMessage('Error');
5333 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5338 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5343 for i := 0 to ToolBar.ButtonCount - 1 do
5344 if ToolBar.Buttons[i].Visible then
5345 Result := Result + ToolBar.Buttons[i].Width;
5348 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5350 Control : TWinControl;
5353 Control := FindControl(BandInfo^.hwndChild);
5354 if Control = nil then
5357 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5358 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5359 idx := MainCoolBar.Bands[ i ].ID;
5363 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5364 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
5365 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5366 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5367 BandInfo^.cxMinChild := 0;
5368 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
5369 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5370 end else if Control = LinkToolBar then begin
5371 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5372 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5373 BandInfo^.cxMinChild := 0;
5374 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5375 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5376 end else begin // AddressToolBar
5377 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5378 BandInfo^.cxMinChild := 0;
5379 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5383 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5389 ChevronPopupMenu.Items.Clear;
5391 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5392 if MainCoolBar.Bands[ i ].Visible then begin
5393 if Idx = Int64(RebarChevron^.uBand) then begin
5400 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5401 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5403 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5404 ToolBarChevronMenu(StdToolBar);
5405 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5409 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5410 ChevronPopupMenu.Popup(p.x, p.y);
5414 procedure TGikoForm.MenuBarChevronMenu;
5415 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5421 for i := 0 to MenuItem.Count - 1 do begin
5423 if MenuItem[i] is TFavoriteMenuItem then begin
5424 Item := TFavoriteMenuItem.Create(Self);
5425 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5427 Item := TMenuItem.Create(Self);
5428 Item.Caption := MenuItem[i].Caption;
5429 Item.Action := MenuItem[i].Action;
5430 Item.ImageIndex := MenuItem[i].ImageIndex;
5431 Item.OnClick := MenuItem[i].OnClick;
5432 PopupItem.Add(Item);
5433 if MenuItem[i].Count > 0 then
5434 SetSubMenu(MenuItem[i], Item);
5443 ChevronPopupMenu.Items.Clear;
5444 ChevronPopupMenu.Images := MainMenu.Images;
5445 bw := GetWidthAllToolButton(MenuToolBar);
5446 if MenuToolBar.Width < bw then begin
5448 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5449 w := w + MenuToolBar.Buttons[i].Width;
5450 if MenuToolBar.Width <= w then begin
5451 Item := TMenuItem.Create(Self);
5452 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5453 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5454 ChevronPopupMenu.Items.Add(Item);
5455 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5461 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5462 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5467 if Assigned(PopupMenu.OnPopup) then
5468 PopupMenu.OnPopup(nil);
5469 for i := 0 to PopupMenu.Items.Count - 1 do begin
5471 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5472 Item := TFavoriteMenuItem.Create(Self);
5473 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5475 Item := TMenuItem.Create(Self);
5476 Item.Caption := PopupMenu.Items[i].Caption;
5477 Item.Action := PopupMenu.Items[i].Action;
5478 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5479 Item.OnClick := PopupMenu.Items[i].OnClick;
5480 PopupItem.Add(Item);
5489 ChevronPopupMenu.Items.Clear;
5490 ChevronPopupMenu.Images := ToolBar.HotImages;
5491 bw := GetWidthAllToolButton(ToolBar);
5492 if ToolBar.Width < bw then begin
5494 for i := 0 to ToolBar.ButtonCount - 1 do begin
5495 if ToolBar.Buttons[i].Visible then
5496 w := w + ToolBar.Buttons[i].Width;
5497 if ToolBar.Width <= w then begin
5498 if ToolBar.Buttons[i].Tag = 0 then begin
5499 Item := TMenuItem.Create(Self);
5500 if ToolBar.Buttons[i].Style = tbsSeparator then
5503 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5504 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5507 Item.Caption := ToolBar.Buttons[i].Caption;
5508 Item.Action := ToolBar.Buttons[i].Action;
5510 //Item.Visible := True;
5512 ChevronPopupMenu.Items.Add(Item);
5513 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5515 Item.OnClick := nil;
5516 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5524 procedure TGikoForm.LinkBarChevronMenu;
5529 Item: TFavoriteMenuItem;
5531 Button: TLinkToolButton;
5533 ChevronPopupMenu.Items.Clear;
5534 ChevronPopupMenu.Images := LinkToolBar.Images;
5535 bw := GetWidthAllToolButton(LinkToolBar);
5536 if LinkToolBar.Width < bw then begin
5538 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5539 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5540 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5541 w := w + LinkToolBar.Buttons[j].Width;
5542 if LinkToolBar.Width <= w then begin
5543 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5544 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5545 Item := TFavoriteMenuItem.Create(Self);
5546 if TObject(Button.Data) is TFavoriteFolder then begin
5547 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5548 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5549 Item.OnClick := FavoriteClick;
5550 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5551 Item.OnClick := FavoriteClick;
5553 Item.Data := Button.Data;
5554 Item.Caption := LinkToolBar.Buttons[j].Caption;
5555 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5556 ChevronPopupMenu.Items.Add(Item);
5567 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5568 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5569 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5571 \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É
5572 \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
5574 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5576 bandInfo : tagREBARBANDINFOA;
5577 pBandInfo : PReBarBandInfoA;
5584 pBandInfo := @bandInfo;
5585 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5586 bandInfo.cbSize := sizeof( bandInfo );
5587 bandInfo.hwndChild := h;
5588 bandInfo.cyMinChild := bar.Height;
5589 bar.OnBandInfo( nil, pBandInfo );
5590 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5592 for i := bar.Bands.Count - 1 downto 0 do begin
5593 if bar.Bands[ i ].Control.Handle = h then begin
5599 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5603 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5605 Control: TWinControl;
5608 Control := FindControl(BandInfo^.hwndChild);
5609 if Control = nil then
5612 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5613 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5614 idx := ListCoolBar.Bands[ i ].ID;
5618 if Control = ListToolBar then begin
5619 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5620 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5621 BandInfo^.cxMinChild := 0;
5622 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5623 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5625 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5626 BandInfo^.cxMinChild := 0;
5627 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5631 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5636 ChevronPopupMenu.Items.Clear;
5637 Idx := RebarChevron^.uBand;
5638 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5639 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5640 ToolBarChevronMenu(ListToolBar);
5643 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5644 ChevronPopupMenu.Popup(p.x, p.y);
5648 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5650 Control: TWinControl;
5653 Control := FindControl(BandInfo^.hwndChild);
5654 if Control = nil then
5657 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5658 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5659 idx := BrowserCoolBar.Bands[ i ].ID;
5663 if Control = BrowserToolBar then begin
5664 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5665 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5666 BandInfo^.cxMinChild := 0;
5667 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5668 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5670 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5671 BandInfo^.cxMinChild := 0;
5672 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5676 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5681 ChevronPopupMenu.Items.Clear;
5682 Idx := RebarChevron^.uBand;
5683 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5684 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5685 ToolBarChevronMenu(BrowserToolBar)
5688 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5689 ChevronPopupMenu.Popup(p.x, p.y);
5693 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5695 if Column^.iImage = -1 then begin
5696 Column^.mask := Column^.mask or LVCF_FMT;
5698 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5699 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5703 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5708 for i := bar.ButtonCount - 1 downto 0 do begin
5709 if bar.Buttons[ i ].Action = action then begin
5710 Result := bar.Buttons[ i ];
5716 procedure TGikoForm.SetToolBarPopup;
5719 aIEButton : TToolButton;
5720 aCabinetBBSButton : TToolButton;
5721 aResRangeButton : TToolButton;
5722 aThreadRangeButton: TToolButton;
5724 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5726 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5727 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5728 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5729 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5730 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5732 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5733 if aIEButton <> nil then
5734 aIEButton.DropdownMenu := BrowserPopupMenu;
5735 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5736 if aCabinetBBSButton <> nil then
5737 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5738 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5739 if aResRangeButton <> nil then
5740 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5741 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5742 if aThreadRangeButton <> nil then
5743 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5746 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5747 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5751 // browserPos : TPoint;
5755 Wnd := WindowFromPoint(Mouse.CursorPos);
5757 if WheelDelta > 0 then
5762 if (Wnd = BrowserTab.Handle) or
5763 (Wnd = BrowserTab.Parent.Handle) then begin
5764 BrowserTab.ScrollTabs(Delta);
5766 if FIsHandledWheel then begin
5767 FIsHandledWheel := False;
5770 FIsHandledWheel := True;
5771 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5772 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5774 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5782 procedure TGikoForm.SetSelectWord( const text : string );
5784 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5785 ClearThreadRengeAction;
5787 if Length( text ) = 0 then
5789 GikoDM.AllItemAction.Checked := True;
5790 SetListViewType( gvtAll )
5792 SetListViewType( gvtUser, text, false );
5796 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5799 SetSelectWord( SelectComboBox.Text );
5803 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5804 Shift: TShiftState);
5812 if Key = VK_Return then
5815 end else if Key = 229 then begin
5816 if GikoSys.Setting.UseUndecided then begin
5817 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5818 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5819 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5820 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5821 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5822 SetLength(Str, Len);
5823 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5824 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5825 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5827 Str := SelectComboBox.Text + Str;
5829 if (Length(Str) > 0) then begin
5833 end else if (Key = Windows.VK_DELETE) and (ssCtrl in Shift) then begin
5834 // Ctrl + DEL
\82Å
\8dí
\8f\9c\82·
\82é
5835 Str := SelectComboBox.Text;
5836 idx := GikoSys.Setting.SelectTextList.IndexOf( Str );
5837 if idx <> -1 then begin
5838 GikoSys.Setting.SelectTextList.Delete( idx );
5840 idx := SelectComboBox.Items.IndexOf( Str );
5841 if idx <> -1 then begin
5842 SelectComboBox.Items.Delete( idx );
5844 SelectComboBox.Text := '';
5845 //
\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·
5846 SelectComboBox.OnChange(Sender);
5847 end else if Length( SelectComboBox.Text ) = 0 then
5849 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5850 *
\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
5851 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5854 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5855 ClearThreadRengeAction;
5859 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
5860 procedure TGikoForm.ClearThreadRengeAction;
5862 //
\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é
5863 if GikoDM.AllItemAction.Checked then
5864 GikoDM.AllItemAction.Checked := False;
5865 if GikoDM.LogItemAction.Checked then
5866 GikoDM.LogItemAction.Checked := False;
5867 if GikoDM.NewItemAction.Checked then
5868 GikoDM.NewItemaction.Checked := False;
5869 if GikoDM.LiveItemAction.Checked then
5870 GikoDM.LiveItemAction.Checked := False;
5871 if GikoDM.ArchiveItemAction.Checked then
5872 GikoDM.ArchiveItemAction.Checked := False;
5876 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5881 if Length( SelectComboBox.Text ) = 0 then
5883 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5884 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5889 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5890 procedure TGikoForm.ModifySelectList;
5897 if not SelectComboBoxPanel.Visible then
5900 if Length( SelectComboBox.Text ) > 0 then
5902 oldText := SelectComboBox.Text;
5903 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5905 GikoSys.Setting.SelectTextList.Delete( idx );
5906 idx := SelectComboBox.Items.IndexOf( oldText );
5908 SelectComboBox.Items.Delete( idx );
5909 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5910 SelectComboBox.Items.Insert( 0, oldText );
5911 SelectComboBox.Text := oldText;
5919 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5920 Shift: TShiftState; X, Y: Integer);
5925 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5928 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5929 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5930 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5932 If w <= 50 Then Begin
5933 //
\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
5934 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
5935 pos.X := pos.X + (50 - w);
5937 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
5941 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
5942 //If SelectComboBox.Width <> w Then Begin
5943 If SelectComboBoxPanel.Width <> w Then Begin
5944 SelectComboBoxPanel.Width := w;
5945 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
5946 GikoSys.Setting.SelectComboBoxWidth := w;
5947 DraggingSelectComboBoxPosition := pos;
5949 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
5950 ResetBandInfo( ListCoolBar, ListToolBar );
5956 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
5957 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5961 IsDraggingSelectComboBox := True;
5964 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
5968 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
5969 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5971 IsDraggingSelectComboBox := False;
5975 procedure TGikoForm.StatusBarResize(Sender: TObject);
5977 StatusBar.Panels[1].Width := StatusBar.Width -
5978 StatusBar.Panels[0].Width -
5979 StatusBar.Panels[THREADSIZE_PANEL].Width -
5980 StatusBar.Panels[NGWORDNAME_PANEL].Width;
5982 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
5985 if (Length( SelectComboBox.Text ) = 0) or
5986 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
5988 SelectComboBox.Text := '';
5989 SelectComboBox.Color := clWindow;
5994 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
5997 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
6000 if TObject(SenderNode.Data) is TFavoriteFolder then
6001 SourceNode.MoveTo(SenderNode, naAddChild)
6003 SourceNode.MoveTo(SenderNode, naInsert);
6007 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
6011 FavoBoardItem: TFavoriteBoardItem;
6012 FavoThreadItem: TFavoriteThreadItem;
6014 ThreadItem: TThreadItem;
6017 if (SenderNode = nil) or (Source = nil) then
6020 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
6021 FavNode := SenderNode.Parent
6023 FavNode := SenderNode;
6027 if Source is TBoard then begin
6028 Board := TBoard( Source );
6029 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
6030 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
6031 Node.ImageIndex := 15;
6032 Node.SelectedIndex := 15;
6033 end else if Source is TFavoriteBoardItem then begin
6034 FavoBoardItem := TFavoriteBoardItem( Source );
6035 Board := FavoBoardItem.Item;
6036 if Board <> nil then
6037 if not Board.IsThreadDatRead then
6038 GikoSys.ReadSubjectFile(Board);
6039 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
6040 Node.ImageIndex := 15;
6041 Node.SelectedIndex := 15;
6042 end else if Source is TThreadItem then begin
6043 ThreadItem := TThreadItem( Source );
6044 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
6045 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
6046 Node.ImageIndex := 16;
6047 Node.SelectedIndex := 16;
6048 end else if Source is TBrowserRecord then begin
6049 ThreadItem := TBrowserRecord( Source ).Thread;
6050 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
6051 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
6052 Node.ImageIndex := 16;
6053 Node.SelectedIndex := 16;
6054 end else if Source is TFavoriteThreadItem then begin
6055 FavoThreadItem := TFavoriteThreadItem( Source );
6056 ThreadItem := FavoThreadItem.Item;
6057 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
6058 Node.ImageIndex := 16;
6059 Node.SelectedIndex := 16;
6062 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
6064 FavoriteMoveTo( SenderNode, Node );
6068 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
6071 SourceNode: TTreeNode;
6072 LinkToolButton: TLinkToolButton;
6075 if SenderNode = nil then
6078 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
6079 if FDropSpaceNode <> nil then
6080 SenderNode := FDropSpaceNode;
6082 if Source = FavoriteTreeView then begin
6083 SourceNode := FavoriteTreeView.Selected;
6084 FavoriteMoveTo( SenderNode, SourceNode );
6085 end else if Source is TLinkToolButton then begin
6086 LinkToolButton := TLinkToolButton( Source );
6087 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
6088 FavoriteMoveTo( SenderNode, SourceNode );
6089 end else if Source = BrowserTab then begin
6090 idx := BrowserTab.TabIndex;
6091 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
6092 end else if Source = ListView then begin
6093 FavoriteAddTo( SenderNode, ListView.Selected.Data );
6094 end else if Source = TreeView then begin
6095 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
6099 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
6102 SenderNode: TTreeNode;
6105 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
6106 if SenderNode <> nil then begin
6107 FavoriteDragDrop( SenderNode, Source );
6110 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
6111 if FDropSpaceNode <> nil then begin
6113 FDropSpaceNode.Delete;
6115 FDropSpaceNode := nil;
6118 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6119 FavoriteDM.Modified := true;
6125 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
6126 Node: TTreeNode; var S: String);
6128 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6129 FavoriteDM.Modified := true;
6131 FavoriteTreeView.ReadOnly := True;
6136 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
6137 Shift: TShiftState);
6139 if not TTreeView(Sender).IsEditing then begin
6143 FClickNode := FavoriteTreeView.Selected;
6144 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
6148 FClickNode := FavoriteTreeView.Selected;
6149 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
6153 FavoriteClick( FavoriteTreeView.Selected );
6154 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
6158 FClickNode := FavoriteTreeView.Selected;
6159 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
6163 //
\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·
6164 if Key = VK_ESCAPE then begin
6165 if (TTreeView(Sender).Selected <> nil) then begin
6166 TTreeView(Sender).Selected.Text := FOrigenCaption;
6168 TTreeView(Sender).Selected.Focused := False;
6174 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
6177 LinkToolButton: TLinkToolButton;
6180 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
6182 FClickNode := FavoriteTreeView.Selected;
6184 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
6186 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
6187 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6188 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6189 FClickNode := FavoriteTreeView.Items[i];
6193 for i := 0 to FClickNode.Count - 1 do begin
6194 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
6195 FClickNode := FClickNode.Item[i];
6202 if FClickNode = nil then begin
6203 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6204 FavoriteTreeDeletePopupMenu.Visible := False;
6205 FavoriteTreeRenamePopupMenu.Visible := False;
6206 FavoriteTreeNewFolderPopupMenu.Visible := False;
6207 FavoriteTreeURLCopyPopupMenu.Visible := False;
6208 FavoriteTreeNameCopyPopupMenu.Visible := False;
6209 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6210 FavoriteTreeReloadPopupMenu.Visible := False;
6211 FavoriteTreeLogDeletePopupMenu.Visible := False;
6212 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6213 end else if FClickNode.IsFirstNode then begin
6214 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6215 FavoriteTreeDeletePopupMenu.Visible := False;
6216 FavoriteTreeRenamePopupMenu.Visible := False;
6217 FavoriteTreeNewFolderPopupMenu.Visible := True;
6218 FavoriteTreeURLCopyPopupMenu.Visible := False;
6219 FavoriteTreeNameCopyPopupMenu.Visible := False;
6220 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6221 FavoriteTreeReloadPopupMenu.Visible := False;
6222 FavoriteTreeLogDeletePopupMenu.Visible := False;
6223 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6224 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
6225 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6226 FavoriteTreeDeletePopupMenu.Visible := True;
6227 FavoriteTreeRenamePopupMenu.Visible := False;
6228 FavoriteTreeNewFolderPopupMenu.Visible := True;
6229 FavoriteTreeURLCopyPopupMenu.Visible := False;
6230 FavoriteTreeNameCopyPopupMenu.Visible := False;
6231 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6232 FavoriteTreeReloadPopupMenu.Visible := False;
6233 FavoriteTreeLogDeletePopupMenu.Visible := False;
6234 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6235 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
6236 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6237 FavoriteTreeDeletePopupMenu.Visible := True;
6238 FavoriteTreeRenamePopupMenu.Visible := True;
6239 FavoriteTreeNewFolderPopupMenu.Visible := True;
6240 FavoriteTreeURLCopyPopupMenu.Visible := False;
6241 FavoriteTreeNameCopyPopupMenu.Visible := True;
6242 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6243 FavoriteTreeReloadPopupMenu.Visible := False;
6244 FavoriteTreeLogDeletePopupMenu.Visible := False;
6245 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6246 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
6247 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6248 FavoriteTreeDeletePopupMenu.Visible := True;
6249 FavoriteTreeRenamePopupMenu.Visible := True;
6250 FavoriteTreeNewFolderPopupMenu.Visible := True;
6251 FavoriteTreeURLCopyPopupMenu.Visible := True;
6252 FavoriteTreeNameCopyPopupMenu.Visible := True;
6253 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6254 FavoriteTreeReloadPopupMenu.Visible := True;
6255 FavoriteTreeLogDeletePopupMenu.Visible := True;
6256 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6257 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
6258 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6259 FavoriteTreeDeletePopupMenu.Visible := True;
6260 FavoriteTreeRenamePopupMenu.Visible := True;
6261 FavoriteTreeNewFolderPopupMenu.Visible := True;
6262 FavoriteTreeURLCopyPopupMenu.Visible := True;
6263 FavoriteTreeNameCopyPopupMenu.Visible := True;
6264 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6265 FavoriteTreeReloadPopupMenu.Visible := True;
6266 FavoriteTreeLogDeletePopupMenu.Visible := False;
6267 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6269 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6270 FavoriteTreeDeletePopupMenu.Visible := False;
6271 FavoriteTreeRenamePopupMenu.Visible := False;
6272 FavoriteTreeNewFolderPopupMenu.Visible := False;
6273 FavoriteTreeURLCopyPopupMenu.Visible := False;
6274 FavoriteTreeNameCopyPopupMenu.Visible := False;
6275 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6276 FavoriteTreeReloadPopupMenu.Visible := False;
6277 FavoriteTreeLogDeletePopupMenu.Visible := False;
6278 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6283 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
6288 if not (TObject(node.Data) is TFavoriteFolder) then
6291 for i := 0 to node.Count - 1 do
6293 if TObject(node.Item[i].Data) is TFavoriteFolder then
6294 FavoriteBrowseFolder( node.Item[i] )
6295 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
6296 FavoriteClick( node.Item[i], False );
6300 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6306 for i := 0 to Node.Count - 1 do begin
6307 if Node.Item[i].Data = FindPointer then begin
6308 Result := Node.Item[i];
6310 end else if Node.Item[i].Count > 0 then begin
6311 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6312 if Found <> nil then begin
6323 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6327 SenderNode: TTreeNode;
6331 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6332 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6333 SenderNode := FavoriteTreeView.Items[i];
6337 SenderNode.Selected := False;
6339 FavoriteDragDrop( SenderNode, Source );
6344 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6345 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6347 if FDragWFirst = true then
6348 FDragWFirst := false;
6350 //
\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@
6351 if Button <> mbMiddle then begin
6352 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6353 if GikoSys.Setting.ListWidthState = glsMin then begin
6354 GikoDM.BrowserMaxAndFocusAction.Execute;
6357 if GikoSys.Setting.ListHeightState = glsMin then begin
6358 GikoDM.BrowserMaxAndFocusAction.Execute;
6364 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6365 Y: Integer; State: TDragState; var Accept: Boolean);
6368 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6372 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6376 if FDropSpaceNode <> nil then begin
6378 FDropSpaceNode.Delete;
6380 FDropSpaceNode := nil;
6382 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6383 FavoriteDM.Modified := true;
6389 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6391 if FListViewBackGroundColor <> value then begin
6392 FListViewBackGroundColor := value;
6393 ListView.Color := FListViewBackGroundColor;
6396 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6398 threadItem : TThreadItem;
6402 if FClickNode = nil then Exit;
6404 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6406 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6407 if threadItem = nil then
6409 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6411 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6413 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6414 if boardItem = nil then
6416 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6422 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6423 MousePos: TPoint; var Handled: Boolean);
6427 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6428 if BrowserTab.TabIndex <> idx then begin
6429 BrowserTab.TabIndex := idx;
6430 BrowserTab.OnChange(nil);
6434 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6436 ThreadItem: TThreadItem;
6442 boardPlugIn : TBoardPlugIn;
6444 if Number = 0 then Exit;
6445 ThreadItem := GetActiveContent(True);
6447 if ThreadItem <> nil then begin
6448 //if ThreadItem.IsBoardPlugInAvailable then begin
6449 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6450 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6451 //boardPlugIn := ThreadItem.BoardPlugIn;
6452 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6454 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6455 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6456 //
\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
6457 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6459 FileName := ThreadItem.FilePath;
6460 tmp := GikoSys.ReadThreadFile(FileName, Number);
6462 if tmp <> '' then begin
6463 THTMLCreate.DivideStrLine(tmp, @Res);
6465 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6466 if ReplaceTag then begin
6467 Header := CustomStringReplace(Header, '</b>', '',true);
6468 Header := CustomStringReplace(Header, '<b>', '',true);
6469 Header := CustomStringReplace(Header, '<br>', '',true);
6470 Header := DeleteFontTag(Header);
6472 //if ThreadItem.IsBoardPlugInAvailable then begin
6473 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6474 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6475 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6477 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6478 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6479 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6480 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6483 Body := CustomStringReplace(Body, '</a>', '',true);
6485 Body := HTMLCreater.DeleteLink(Body);
6486 if ReplaceTag then begin
6487 Body := CustomStringReplace(Body, '<', '<');
6488 Body := CustomStringReplace(Body, '>', '>');
6489 Body := CustomStringReplace(Body, '"', '"');
6490 Body := CustomStringReplace(Body, '&', '&');
6491 //Body := CustomStringReplace(Body, ' ', ' ');
6494 Header := Header + Body;
6496 Clipboard.SetTextBuf( PChar(Header) );
6502 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6506 for i := 0 to BrowserTabPopupMenu.Items.Count - 1 do begin
6507 if (BrowserTabPopupMenu.Items[i].Name='RoundItem') then begin
6508 AddRoundNameMenu(BrowserTabPopupMenu.Items[i]);
6509 end else if (BrowserTabPopupMenu.Items[i].Name='BoardThreadItem') then begin
6510 AddMenuSameBoardThread(BrowserTabPopupMenu.Items[i])
6514 //!
\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Á
6515 procedure TGikoForm.AddMenuSameBoardThread(MenuItem: TMenuItem);
6521 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6522 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6523 if (FActiveContent.Thread.ParentBoard =
6524 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6525 //
\8e©
\95ª
\82Í
\8aO
\82·
6526 if FActiveContent.Thread <>
6527 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6528 Item := TMenuItem.Create(Self);
6529 Item.Caption := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.Title;
6530 Item.Hint := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.URL;
6531 Item.OnClick := SameBoardThreadSubItemOnClick;
6536 //
\89½
\82à
\96³
\82¢
\82È
\82ç
\8eg
\97p
\82Å
\82«
\82È
\82¢
\82æ
\82¤
\82É
\82·
\82é
6537 MenuItem.Enabled := MenuItem.Count > 0;
6539 //!
\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
6540 procedure TGikoForm.SameBoardThreadSubItemOnClick(Sender: TObject);
6543 MenuItem: TMenuItem;
6545 if Sender is TMenuItem then begin
6547 MenuItem := TMenuItem(Sender);
6548 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6549 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6550 if (FActiveContent.Thread.ParentBoard =
6551 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6552 if FActiveContent.Thread <>
6553 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6554 if (MenuItem.Hint = TBrowserRecord(BrowserTab.Tabs.Objects[i])
6555 .Thread.URL) then begin
6556 MoveToURL( MenuItem.Hint);
6566 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6568 FavoriteDM.URLReplace(oldURLs, newURLs);
6571 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6573 RoundList.URLReplace(oldURLs, newURLs);
6576 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6578 Filename = 'tab.sav';
6579 bFilename = '~tab.sav';
6585 oldBoardName: string;
6587 newBoardName: string;
6588 TabList: TStringList;
6591 if oldURLs.Count <> newURLs.Count then begin
6594 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6595 TabList := TStringList.Create;
6597 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6599 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6600 //
\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
6601 for i := 0 to oldURLs.Count - 1 do begin
6602 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6603 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6604 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6605 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6606 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6607 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6609 for j := 0 to TabList.Count - 1 do begin
6610 tempString := TabList[j];
6611 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6612 tempString := StringReplace(tempString, oldHost, newHost,[]);
6613 TabList[j] := tempString;
6617 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6619 if FileExists( GikoSys.GetAppDir + Filename) then begin
6620 if FileExists( GikoSys.GetAppDir + bFilename) then
6621 DeleteFile(GikoSys.GetAppDir + bFilename);
6623 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6624 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6627 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6635 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6636 procedure TGikoForm.OnMinimize;
6638 doc: IHTMLDocument2;
6640 if FActiveContent <> nil then begin
6641 FIsMinimize := mtMinimizing;
6642 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6643 if Assigned(doc) then begin
6644 FActiveContent.Thread.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
6649 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6650 procedure TGikoForm.OnMinimized;
6652 FIsMinimize := mtMinimized;
6656 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6658 CoolBarResized( Sender, BrowserCoolBar );
6661 // *************************************************************************
6662 // ExternalBoardPlugInMain
6663 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6664 // *************************************************************************
6665 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6668 boardPlugIn : TBoardPlugIn;
6671 if not (Sender is TMenuItem) then
6674 item := TMenuItem( Sender );
6675 if not Assigned( Pointer( item.Tag ) ) then
6678 //
\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·
6679 boardPlugIn := TBoardPlugIn( item.Tag );
6680 boardPlugIn.PlugInMenu( item.Handle );
6683 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6684 procedure TGikoForm.TreeClick( Node : TTreeNode );
6690 if FTreeType = gttHistory then begin
6692 if TObject( Node.Data ) is TFavoriteThreadItem then
6693 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6694 FavoriteClick( Node );
6697 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6698 if ActiveList = Node.Data then
6701 ActiveListColumnSave;
6703 if TObject(Node.Data) is TBBS then begin
6704 SetActiveList(Node.data);
6705 end else if TObject(Node.Data) is TCategory then begin
6706 SetActiveList(Node.data);
6707 end else if TObject(Node.Data) is TBoard then begin
6708 if not TBoard(Node.Data).IsThreadDatRead then begin
6709 Screen.Cursor := crHourGlass;
6711 if not TBoard(Node.Data).IsThreadDatRead then
6712 GikoSys.ReadSubjectFile(Node.Data);
6714 Screen.Cursor := crDefault;
6717 Sort.SetSortDate(Now());
6718 SetActiveList(Node.data);
6721 if TObject( Node.Data ) is TBoard then begin // not TCategory
6722 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6723 if GikoSys.Setting.ListWidthState = glsMax then begin
6724 GikoDM.BrowserMinAction.Execute;
6725 if GikoForm.Visible then
6729 if GikoSys.Setting.ListHeightState = glsMax then begin
6730 GikoDM.BrowserMinAction.Execute;
6731 if GikoForm.Visible then
6739 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6740 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6743 ThreadItem : TThreadItem;
6744 shiftDown : Boolean;
6747 if Node = nil then Exit;
6749 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6751 if FTreeType = gtt2ch then begin
6752 if not (TObject(Node.Data) is TBoard) then Exit;
6753 Board := TBoard(Node.Data);
6754 DownloadList(Board, shiftDown);
6755 end else if FTreeType = gttHistory then begin
6756 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6757 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6758 DownloadContent(ThreadItem, shiftDown);
6762 // *************************************************************************
6763 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82ÌKeyDown
\83C
\83x
\83\93\83g
6764 // *************************************************************************
6765 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6766 Shift: TShiftState);
6768 if Key = VK_BACK then begin
6769 // UpFolderButtonClick(Sender);
6770 end else if Key = VK_SPACE then begin
6771 TreeDoubleClick( TreeView.Selected );
6772 end else if Key = VK_RETURN then begin
6773 TreeClick( TreeView.Selected );
6774 //
\97\9a\97ð
\82Ì
\8fê
\8d\87\81A
\8fÁ
\82³
\82ê
\82Ä
\82¢
\82é
\82Ì
\82Å
\83`
\83F
\83b
\83N
\82·
\82é
6775 if (TreeView.Selected <> nil) then begin
6776 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6780 //!
\82¨
\8bC
\82É
\93ü
\82è
\82ÌMouseDown
\83C
\83x
\83\93\83g
6781 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6782 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6784 favItem : TTreeNode;
6785 favThreadItem : TFavoriteThreadItem;
6791 if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6792 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6793 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6794 rect := FavoriteTreeView.Selected.DisplayRect(true);
6795 //
\83A
\83C
\83R
\83\93\95ª
\8d¶
\82É
\82¸
\82ç
\82·
6796 if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
6797 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6798 if ssDouble in Shift then begin
6799 FClickNode := FavoriteTreeView.Selected;
6800 GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6804 TObject(FavoriteTreeView.Selected));
6811 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6812 if favItem = nil then Exit;
6814 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6815 favThreadItem := TFavoriteThreadItem( favItem.Data );
6816 if favThreadItem.Item <> nil then
6817 InsertBrowserTab( favThreadItem.Item, False );
6824 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6827 if FIsIgnoreResize <> rtNone then
6830 if GikoSys.Setting.ListOrientation = gloVertical then begin
6831 if GikoSys.Setting.ListHeightState = glsMin then begin
6832 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6833 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6839 procedure TGikoForm.OnResized;
6841 doc : IHTMLDocument2;
6843 FOldFormWidth := Width;
6844 FIsIgnoreResize := rtNone;
6849 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6850 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6855 //
\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)
6856 if FActiveContent <> nil then begin
6857 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6858 (doc.body as IHTMLElement2).ScrollTop := FActiveContent.Thread.ScrollTop;
6860 FIsMinimize := mtNone;
6865 // *************************************************************************
6866 //!
\83X
\83\8c\83b
\83h
\83u
\83\89\83E
\83U
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6867 // *************************************************************************
6868 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6871 doc : IHTMLDocument2;
6872 FOleInPlaceActiveObject: IOleInPlaceActiveObject;
6877 if not Assigned(FActiveContent) then
6879 if not Assigned(FActiveContent.Browser) then
6883 FOleInPlaceActiveObject := FActiveContent.Browser.ControlInterface as IOleInPlaceActiveObject;
6884 FOleInPlaceActiveObject.OnFrameWindowActivate(True);
6887 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6888 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6890 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6891 if not Assigned(doc) then
6894 e := doc.elementFromPoint(p.x, p.y);
6895 if not Assigned(e) then
6898 if (e.className = 'date') or (e.id = 'date') then begin
6899 AID := GikoSys.ExtructResID(e.innerText);
6900 ShowSameIDAncher(AID);
6905 procedure TGikoForm.ShowSameIDAncher(const AID: String);
6909 numbers : TStringList;
6912 numbers := TStringList.Create;
6915 GikoSys.GetSameIDRes(AID, FActiveContent.Thread, numbers);
6917 if not (GikoSys.Setting.LimitResCountMessage) then begin
6919 end else if (numbers.Count > LIMIT) then begin
6920 if (GikoUtil.MsgBox(Handle,
6921 IntToStr(LIMIT) + '
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6922 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6923 MB_YESNO or MB_ICONQUESTION) = ID_YES) then begin
6927 FActiveContent.IDAnchorPopup(
6928 GikoSys.CreateResAnchor(numbers, FActiveContent.Thread, limited));
6933 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
6934 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
6936 SelectTimer.Interval := 0;
6937 if not (ListView.Selected = nil) then
6938 if( FActiveContent = nil) or
6939 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
6944 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
6945 procedure TGikoForm.ActiveListColumnSave;
6947 ActivListObj : TObject;
6948 i, id, idx : Integer;
6949 BBSOrder : TGikoBBSColumnList;
6950 CategoryOrder : TGikoCategoryColumnList;
6951 BoardOrder : TGikoBoardColumnList;
6954 ActivListObj := ActiveList;
6955 if ActivListObj is TBBS then begin
6956 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6957 BBSOrder := TGikoBBSColumnList.Create;
6959 for i := 0 to ListView.Columns.Count - 1 do begin
6960 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6961 idx := ListView.Column[ i ].Tag;
6962 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
6963 BBSOrder.Add( TGikoBBSColumnID( id ) );
6964 //
\95\9d\82Ì
\95Û
\91¶
6965 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
6967 for i := 0 to ListView.Columns.Count - 1 do
6968 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6969 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
6973 end else if ActivListObj is TCategory then begin
6974 //=====
\94Â
\83\8a\83X
\83g =====
6975 CategoryOrder := TGikoCategoryColumnList.Create;
6977 for i := 0 to ListView.Columns.Count - 1 do begin
6978 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6979 idx := ListView.Column[ i ].Tag;
6980 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
6981 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
6982 //
\95\9d\82Ì
\95Û
\91¶
6983 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
6985 for i := 0 to ListView.Columns.Count - 1 do
6986 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6987 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
6991 end else if ActivListObj is TBoard then begin
6992 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6993 BoardOrder := TGikoBoardColumnList.Create;
6995 for i := 0 to ListView.Columns.Count - 1 do begin
6996 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6997 idx := ListView.Column[ i ].Tag;
6998 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
6999 BoardOrder.Add( TGikoBoardColumnID( id ) );
7000 //
\95\9d\82Ì
\95Û
\91¶
7001 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
7003 for i := 0 to ListView.Columns.Count - 1 do
7004 //
\8f\87\8f\98\82Ì
\95Û
\91¶
7005 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
7013 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
7014 Column: TListColumn; Point: TPoint);
7020 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
7021 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
7022 ListColumnPopupMenu.Items.Items[ i ].Free;
7024 //
\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¢)
7025 if TObject( FActiveList ) is TBBS then begin
7027 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
7028 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
7029 item := TMenuItem.Create( ListColumnPopupMenu );
7030 item.Caption := GikoBBSColumnCaption[ i ];
7032 item.OnClick := ListColumnPopupMenuOnClick;
7033 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
7034 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
7035 item.Checked := True;
7039 ListColumnPopupMenu.Items.Add( item );
7042 end else if TObject( FActiveList ) is TCategory then begin
7044 //=====
\94Â
\83\8a\83X
\83g =====
7045 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
7046 item := TMenuItem.Create( ListColumnPopupMenu );
7047 item.Caption := GikoCategoryColumnCaption[ i ];
7049 item.OnClick := ListColumnPopupMenuOnClick;
7050 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
7051 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
7052 item.Checked := True;
7056 ListColumnPopupMenu.Items.Add( item );
7059 end else if TObject( FActiveList ) is TBoard then begin
7061 //=====
\83X
\83\8c\83\8a\83X
\83g =====
7062 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
7063 item := TMenuItem.Create( ListColumnPopupMenu );
7064 item.Caption := GikoBoardColumnCaption[ i ];
7066 item.OnClick := ListColumnPopupMenuOnClick;
7067 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
7068 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
7069 item.Checked := True;
7073 ListColumnPopupMenu.Items.Add( item );
7078 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
7079 Point := ListView.ClientToScreen( Point );
7080 if ListColumnPopupMenu.Items.Count > 0 then
7081 ListColumnPopupMenu.Popup( Point.X, Point.Y );
7085 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
7086 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
7093 if not (Sender is TMenuItem) then
7096 ActiveListColumnSave;
7097 item := TMenuItem( Sender );
7099 if TObject( FActiveList ) is TBBS then
7100 orderList := GikoSys.Setting.BBSColumnOrder
7101 else if TObject( FActiveList ) is TCategory then
7102 orderList := GikoSys.Setting.CategoryColumnOrder
7103 else if TObject( FActiveList ) is TBoard then
7104 orderList := GikoSys.Setting.BoardColumnOrder
7108 if item.Checked then begin
7109 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
7110 for i := orderList.Count - 1 downto 0 do begin
7111 if Integer( orderList[ i ] ) = item.Tag then begin
7112 orderList.Delete( i );
7117 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
7118 orderList.Add( Pointer( item.Tag ) );
7121 SetActiveList( FActiveList );
7125 procedure TGikoForm.OnGestureStart(Sender: TObject);
7130 procedure TGikoForm.OnGestureMove(Sender: TObject);
7137 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
7139 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
7140 s := MouseGesture.GetGestureStr;
7142 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7143 if Action <> nil then
7144 ActStr := '
\81i' + Action.Caption + '
\81j';
7145 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
7146 StatusBar.Panels[1].Text := s;
7149 procedure TGikoForm.OnGestureEnd(Sender: TObject);
7154 s := MouseGesture.GetGestureStr;
7156 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7157 if Action <> nil then
7159 StatusBar.Panels[1].Text := '';
7162 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
7163 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
7165 ThreadItem: TThreadItem;
7167 DefaultDraw := true;
7168 if TObject(Item.Data) is TThreadItem then begin
7169 ThreadItem := TThreadItem(Item.Data);
7170 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
7171 ListView.Canvas.Brush.Color := FOddColor;
7172 //
\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
7173 if (GikoSys.Setting.UnFocusedBold) and
7174 (Item.Selected) and (not ListView.Focused) then begin
7175 ListView.Canvas.Font.Style := [fsBold];
7178 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
7181 if ThreadItem.UnRead then
7182 ListView.Canvas.Font.Style := [fsBold];
7187 procedure TGikoForm.FormActivate(Sender: TObject);
7189 if GikoSys.Setting.GestureEnabled then begin
7190 GikoSys.Setting.Gestures.ClearGesture;
7191 GikoSys.Setting.Gestures.LoadGesture(
7192 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
7193 MouseGesture.UnHook;
7194 MouseGesture.OnGestureStart := OnGestureStart;
7195 MouseGesture.OnGestureMove := OnGestureMove;
7196 MouseGesture.OnGestureEnd := OnGestureEnd;
7197 MouseGesture.SetHook(Handle);
7199 //MouseGesture.UnHook;
7200 MouseGesture.OnGestureStart := nil;
7201 MouseGesture.OnGestureMove := nil;
7202 MouseGesture.OnGestureEnd := nil;
7206 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
7208 if (FIsMinimize <> mtMinimizing) then begin
7209 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
7210 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
7214 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
7219 affectedBand : TCoolBand;
7222 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
7223 FIsIgnoreResize := rtResizing;
7224 PostMessage( Handle, USER_RESIZED, 0, 0 );
7226 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
7227 if CoolBar = MainCoolBar then begin
7228 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
7229 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7230 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7231 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7232 GikoSys.Setting.MainCoolSet[i] := CoolSet;
7234 end else if CoolBar = ListCoolBar then begin
7235 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
7236 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7237 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7238 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7239 GikoSys.Setting.ListCoolSet[i] := CoolSet;
7241 end else if CoolBar = BrowserCoolBar then begin
7242 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
7243 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7244 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7245 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7246 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
7249 if not (Sender is TToolBar) or (CoolBar = nil) then
7251 toolbar := TToolBar( Sender );
7252 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
7253 affectedBand := nil;
7254 for i := CoolBar.Bands.Count - 1 downto 0 do begin
7255 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
7256 band := CoolBar.Bands[ i ];
7257 if band.Break or (i = 0) then begin
7258 if i + 1 < CoolBar.Bands.Count then
7259 if not CoolBar.Bands[ i + 1 ].Break then
7260 affectedBand := CoolBar.Bands[ i + 1 ];
7263 affectedBand := CoolBar.Bands[ i - 1 ];
7268 //
\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·
7269 if CoolBar = MainCoolBar then begin
7270 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
7271 coolSet.FCoolWidth := toolbar.Width + 25;
7272 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
7273 if affectedBand <> nil then begin
7274 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
7275 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7276 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
7278 end else if CoolBar = ListCoolBar then begin
7279 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
7280 coolSet.FCoolWidth := toolbar.Width + 25;
7281 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
7282 if affectedBand <> nil then begin
7283 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
7284 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7285 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
7287 end else if CoolBar = BrowserCoolBar then begin
7288 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
7289 coolSet.FCoolWidth := toolbar.Width + 25;
7290 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
7291 if affectedBand <> nil then begin
7292 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
7293 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7294 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
7301 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
7303 CoolBarResized( Sender, MainCoolBar );
7306 procedure TGikoForm.ListToolBarResize(Sender: TObject);
7308 CoolBarResized( Sender, ListCoolBar );
7311 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
7313 CoolBarResized( Sender, BrowserCoolBar );
7316 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
7317 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
7319 doc : IHTMLDocument2;
7320 ThreadItem : TThreadItem;
7321 ReadList : TStringList;
7322 wordCount : TWordCount;
7324 if not Assigned(FActiveContent) then
7326 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7327 if not Assigned(doc) then
7330 ThreadItem := GetActiveContent(True);
7331 ReadList := TStringList.Create;
7332 wordCount := TWordCount.Create;
7334 ThreadItem.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
7335 {$IFDEF SPAM_FILTER_ENABLED}
7336 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7337 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7338 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
7339 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7340 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7342 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7343 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7348 FActiveContent.Repaint := true;
7349 if ThreadItem <> nil then
7350 InsertBrowserTab( ThreadItem, True );
7352 //
\93¯
\88êID
\82ðNG
\83\8f\81[
\83h
\82É
\93o
\98^
7353 procedure TGikoForm.AddIDtoNGWord(invisible : boolean);
7355 doc : IHTMLDocument2;
7356 ThreadItem : TThreadItem;
7358 {$IFDEF SPAM_FILTER_ENABLED}
7360 ReadList : TStringList;
7361 wordCount : TWordCount;
7363 id, dateStr: String;
7365 No := KokoPopupMenu.Tag;
7366 if No = 0 then Exit;
7367 ThreadItem := GikoForm.KokoPopupThreadItem;
7368 if ThreadItem = nil then Exit;
7370 id := GikoSys.GetResID(No, ThreadItem);
7371 if (id <> '') and (not IsNoValidID(id)) then begin
7372 //
\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Á
7373 DateTimeToString(dateStr, 'yyyymmdd', Now);
7374 id := id + #9'>>add ' + dateStr + ',' + ThreadItem.Title;
7375 if (GikoSys.FAbon.AddToken(id, invisible)) then begin
7376 GikoSys.FAbon.ReLoadFromNGwordFile;
7377 FActiveContent.Repaint := True;
7380 ShowMessage('ID
\82ð
\8eæ
\93¾
\82Å
\82«
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B');
7382 {$IFDEF SPAM_FILTER_ENABLED}
7383 body := TStringList.Create;
7385 GikoSys.GetSameIDRes(id, ThreadItem, body);
7386 ReadList := TStringList.Create;
7387 wordCount := TWordCount.Create;
7389 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7390 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7391 for i := 0 to body.Count - 1 do begin
7392 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7393 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7394 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7404 if (FActiveContent.Repaint) then begin
7405 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7407 if not Assigned(doc) then
7409 ThreadItem.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
7410 if ThreadItem <> nil then
7411 InsertBrowserTab( ThreadItem, True );
7415 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
7416 procedure TGikoForm.IndividualAbonID(Atype : Integer);
7418 ThreadItem : TThreadItem;
7421 ReadList : TStringList;
7422 wordCount : TWordCount;
7424 No := KokoPopupMenu.Tag;
7425 if No = 0 then Exit;
7426 ThreadItem := GikoForm.KokoPopupThreadItem;
7427 if ThreadItem = nil then Exit;
7428 body := TStringList.Create;
7430 GikoSys.GetSameIDRes(No, ThreadItem, body);
7432 ReadList := TStringList.Create;
7433 wordCount := TWordCount.Create;
7435 ThreadItem.ScrollTop := FActiveContent.Browser.OleObject.Document.Body.ScrollTop;
7436 {$IFDEF SPAM_FILTER_ENABLED}
7437 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7438 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7440 for i := 0 to body.Count - 1 do begin
7441 {$IFDEF SPAM_FILTER_ENABLED}
7442 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7443 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7444 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7446 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7447 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7453 FActiveContent.Repaint := true;
7454 if ThreadItem <> nil then
7455 InsertBrowserTab( ThreadItem, True );
7462 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7464 firstElement: IHTMLElement;
7465 doc: IHTMLDocument2;
7468 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7469 if Assigned(doc) then
7470 firstElement := doc.all.item('idSearch', 0) as IHTMLElement;
7471 if Assigned(firstElement) then
7472 if firstElement.style.visibility <> 'hidden' then
7473 firstElement.style.visibility := 'hidden';
7478 procedure TGikoForm.RepaintAllTabsBrowser();
7481 ThreadItem: TThreadItem;
7483 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7484 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7486 ThreadItem := GetActiveContent;
7487 if ThreadItem <> nil then
7488 InsertBrowserTab( ThreadItem, True );
7492 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7493 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7494 Shift: TShiftState);
7496 //
\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Ì
7497 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7498 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7499 SelectTimer.Interval := 0;
7500 if not (GikoSys.Setting.BrowserTabVisible) then begin
7501 if (GetActiveList is TBoard) then begin
7502 //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
7503 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7504 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7505 (Key = VK_UP) or (Key = VK_DOWN)) then
7506 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7510 // *************************************************************************
7511 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7512 // *************************************************************************
7513 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7514 Node: TTreeNode; var AllowEdit: Boolean);
7516 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7517 FOrigenCaption := Node.Text;
7519 // *************************************************************************
7520 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7521 // *************************************************************************
7522 function TGikoForm.GetMainForm(): TComponent;
7524 Result := Application.MainForm;
7526 // *************************************************************************
7527 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7528 // *************************************************************************
7529 function TGikoForm.GetScreenCursor(): TCursor;
7531 Result := Screen.Cursor;
7533 // *************************************************************************
7534 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7535 // *************************************************************************
7536 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7538 if (Screen.Cursor <> Cursor) then
7539 Screen.Cursor := Cursor;
7541 // *************************************************************************
7542 //!
\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
7543 // *************************************************************************
7544 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7546 //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Ì
7547 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7548 if GikoDM.CabinetVisibleAction.Enabled then begin
7549 GikoDM.CabinetVisibleAction.Execute;
7552 // *************************************************************************
7553 //!
\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
7554 // *************************************************************************
7555 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7557 if GikoDM.FavoriteArrangeAction.Enabled then begin
7558 GikoDM.FavoriteArrangeAction.Execute;
7561 // *************************************************************************
7562 //!
\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
7563 // *************************************************************************
7564 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7565 var Handled: Boolean);
7569 //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ß
7570 if Self.Active then begin
7572 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7573 WM_KEYFIRST..WM_KEYLAST :
7575 //
\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ç
7576 if (Msg.message <> WM_KEYUP)
7577 and (Msg.message <> WM_CHAR)
7578 and (Msg.message <> WM_SYSKEYUP) then begin
7579 wmMsg.Msg := Msg.message;
7580 wmMsg.CharCode := Word(Msg.wParam);
7581 wmMsg.KeyData := Msg.lParam;
7582 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7583 Self.OnShortCut(wmMsg, Handled);
7588 // Explorer
\82ÌD&D
\82ð
\8eó
\82¯
\82é
\82Æ
\82Ì
\94ñ
\83A
\83N
\83e
\83B
\83u
7589 if Msg.message = WM_DROPFILES then begin
7590 AcceptDropFiles(Msg);
7595 // *************************************************************************
7596 //!
\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
7597 // *************************************************************************
7598 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7600 Application.ProcessMessages;
7601 if not Application.Terminated then begin
7602 if PreviewTimer.Enabled then
7603 PreviewTimer.Enabled := False;
7604 //
\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
7605 if (FResPopupBrowser <> nil) then
7606 FResPopupBrowser.Clear;
7608 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7609 if FPreviewBrowser <> nil then
7610 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7614 // *************************************************************************
7615 //!
\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
7616 // *************************************************************************
7617 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7622 if (Sender <> nil) then begin
7623 s := ' [' + Sender.ClassName + ']' + #13#10;
7625 s := ' [ Sender is nil ] ' + #13#10;
7628 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7630 // *************************************************************************
7631 //!
\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¬
7632 // *************************************************************************
7633 procedure TGikoForm.CreateControlThread();
7635 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7636 FControlThread := TThreadControl.Create(True);
7637 FControlThread.MaxThreadCount := 1;
7638 FControlThread.Resume;
7639 FControlThread.OnDownloadEnd := DownloadEnd;
7640 FControlThread.OnDownloadMsg := DownloadMsg;
7641 FControlThread.OnWork := Work;
7642 FControlThread.OnWorkBegin := WorkBegin;
7643 FControlThread.OnWorkEnd := WorkEnd;
7645 // *************************************************************************
7646 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7647 // *************************************************************************
7648 procedure TGikoForm.CreateBrowsers(count: Integer);
7651 newBrowser: TWebBrowser;
7653 BrowserNullTab := TBrowserRecord.Create;
7654 BrowserNullTab.Browser := Browser;
7655 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7657 FBrowsers := TList.Create;
7659 for i := 0 to count -1 do begin
7660 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7661 newBrowser := FBrowsers[FBrowsers.Count - 1];
7662 TOleControl(newBrowser).Parent := BrowserPanel;
7663 TOleControl(newBrowser).Align := alNone;
7664 TOleControl(newBrowser).Left := 0;
7665 TOleControl(newBrowser).Top := 0;
7666 newBrowser.RegisterAsDropTarget := False;
7667 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7668 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7669 newBrowser.OnEnter := BrowserEnter;
7670 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7671 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7672 newBrowser.Navigate(BLANK_HTML);
7673 ShowWindow(newBrowser.Handle, SW_HIDE);
7674 GikoSys.ShowRefCount('Browser' + IntToStr(i), newBrowser.ControlInterface);
7675 GikoSys.ShowRefCount('Document' + IntToStr(i), newBrowser.ControlInterface.Document);
7677 BrowserNullTab.Browser.BringToFront;
7678 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7680 //
\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Ì
7681 //
\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Å
7682 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7683 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7684 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7685 Application.ProcessMessages;
7688 // *************************************************************************
7689 //!
\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é
7690 // *************************************************************************
7691 procedure TGikoForm.SetSelectComboBox();
7693 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7696 ToolButton: TToolButton;
7698 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7699 SelectComboBoxPanel.Visible := False;
7701 for i := ListToolBar.ControlCount - 1 downto 0 do
7703 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7705 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7706 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7707 SelectComboBoxPanel.Parent := ListToolBar;
7708 SelectComboBoxPanel.Visible := True;
7710 SelectComboBox.Left := 0;
7711 SelectComboBox.Top := 0;
7712 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7713 SelectComboBox.Width := SelectComboBoxPanel.Width -
7714 SelectComboBoxSplitter.Width;
7716 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7717 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7718 if ToolButton = nil then begin
7719 ToolButton := TToolButton.Create(ListToolBar);
7720 ToolButton.Name := DUMMYCOMPNAME;
7722 ToolButton.Style := tbsSeparator;
7723 ToolButton.Width := 0;
7724 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7725 ListToolBar.InsertControl(ToolButton);
7726 ToolButton.Visible := False;
7728 //
\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·
7729 if (i + 1) < ListToolBar.ControlCount then
7730 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7731 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7732 ListToolBar.Controls[ i + 1 ].Visible := False;
7735 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7736 ListToolBar.Controls[ i ].Visible := False;
7744 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\83}
\83E
\83X
\83_
\83E
\83\93\83C
\83x
\83\93\83g
7745 procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7746 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7753 if (TreeView.Selected <> nil) and
7754 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7755 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
7756 rect := TreeView.Selected.DisplayRect(true);
7757 //
\83A
\83C
\83R
\83\93\95ª
\82¾
\82¯
\8d¶
\82É
\82¸
\82ç
\82·
7758 if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
7759 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7760 //
\83N
\83\8a\83b
\83N
\82Æ
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82ð
\83R
\83R
\82Å
\94»
\92è
7761 if ssDouble in Shift then begin
7762 TreeDoubleClick( TreeView.Selected );
7764 TreeClick(TreeView.Selected);
7771 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
7772 procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7776 if ActionList <> nil then begin
7777 SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7779 for i := 0 to ActionList.ActionCount - 1 do begin
7781 FActionListGroupIndexes[i] :=
7782 TCustomAction(ActionList.Actions[i]).GroupIndex;
7783 TCustomAction(ActionList.Actions[i]).GroupIndex
7786 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7792 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
7793 procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7797 if ActionList <> nil then begin
7798 if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7799 for i := 0 to ActionList.ActionCount - 1 do begin
7801 TCustomAction(ActionList.Actions[i]).GroupIndex
7802 := FActionListGroupIndexes[i];
7804 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7810 //!
\82±
\82Ì
\83\8c\83X
\82ÌURL
\8eæ
\93¾
7811 procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
7815 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
7816 procedure TGikoForm.RefreshListView(Thread: TThreadItem);
7818 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
7819 if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin
7824 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
7825 MousePos: TPoint; var Handled: Boolean);
7828 coolBar: TGikoCoolBar;
7831 if (Sender <> nil) and (Sender is TGikoCoolBar) then begin
7832 coolBar := TGikoCoolBar(Sender);
7833 if (coolBar = MainCoolBar) then begin
7834 FToolBarSettingSender := tssMain;
7835 end else if (coolBar = ListCoolBar) then begin
7836 FToolBarSettingSender := tssList;
7837 end else if (coolBar = BrowserCoolBar) then begin
7838 FToolBarSettingSender := tssBrowser;
7840 FToolBarSettingSender := tssNone;
7842 pos := coolBar.ClientToScreen( MousePos );
7843 MainCoolBarPopupMenu.Popup( pos.X, pos.Y );
7848 procedure TGikoForm.TaskTrayIconMessage(var Msg: TMsg);
7852 //
\8d¶
\83N
\83\8a\83b
\83N
\82È
\82ç
\95\9c\8c³
\82·
\82é
7853 if (Msg.wParam = WM_LBUTTONUP) then begin
7855 end else if (Msg.wParam=WM_RBUTTONUP) then begin
7856 //
\89E
\83N
\83\8a\83b
\83N
\82È
\82ç
\8fI
\97¹
\82·
\82é
7858 SetForegroundWindow ( Self.Handle );
7859 TaskTrayPopupMenu.Popup ( p.X, p.Y );
7862 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
7863 procedure TGikoForm.StoredTaskTray;
7866 if (FIconData.uID = 0) then begin
7867 FIconData.cbSize := SizeOf(TNotifyIconData);
7868 FIconData.uID := Self.Handle;
7869 FIconData.Wnd := Handle;
7870 FIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
7871 FIconData.uCallbackMessage := USER_TASKTRAY;
7872 FIconData.hIcon := Application.Icon.Handle; {
\83A
\83C
\83R
\83\93\8ew
\92è}
7873 FIconData.szTip := '
\83M
\83R
\83i
\83r'; {
\83q
\83\93\83g
\95¶
\8e\9a\97ñ}
7874 Shell_NotifyIcon(NIM_ADD, @FIconData);
7875 ShowEditors(SW_HIDE);
7876 ShowWindow(Self.Handle, SW_HIDE);
7881 //!
\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¦
7882 procedure TGikoForm.UnStoredTaskTray;
7886 Shell_NotifyIcon(NIM_DELETE, @FIconData);
7887 SetForegroundWindow(Application.Handle);
7892 // Action
\82©
\82ç
\8ai
\94[
\82µ
\82½
\82Æ
\82«
\82ÍTag
\82Ì
\92l
\82Í0
\88È
\8aO
7893 if (GikoDM.StoredTaskTrayAction.Tag = 0) then begin
7894 ShowWindow(Self.Handle, SW_RESTORE);
7896 ShowWindow(Self.Handle, SW_SHOW);
7898 ShowEditors(SW_SHOW);
7899 GikoDM.StoredTaskTrayAction.Tag := 0;
7903 \brief
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
7904 \param nCmdShow Windows.ShowWindow
\82É
\91\97\82é
\83p
\83\89\83\81\81[
\83^
\82Æ
\93¯
\82¶
7906 procedure TGikoForm.ShowEditors(nCmdShow: Integer);
7910 //
\83\8c\83X
\83G
\83f
\83B
\83^
\82ð
\92T
\82·
7911 for i := 0 to Screen.CustomFormCount - 1 do begin
7912 if TObject(Screen.CustomForms[i]) is TEditorForm then
7913 ShowWindow(Screen.CustomForms[i].Handle, nCmdShow);
7917 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83u
\83\89\83E
\83U
\8dì
\90¬
7918 procedure TGikoForm.CreateResPopupBrowser;
7920 if (FResPopupBrowser = nil) then begin
7921 FResPopupBrowser := TResPopupBrowser.Create(BrowserPanel);
7924 //! ListView
\82ÌD&D
\8eó
\82¯
\8eæ
\82è
7925 procedure TGikoForm.AcceptDropFiles(var Msg: TMsg);
7927 FileName: Array[0..MAX_PATH] of Char;
7931 datList: TStringList;
7933 //
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\94Â
\82Ì
\82Æ
\82«
\88È
\8aO
\82Í
\8b\91\94Û
7934 if GetActiveList is TBoard then begin
7935 Board := TBoard(GetActiveList);
7936 if MsgBox(Handle, Board.Title
7937 + '
\94Â
\82É
\93ü
\82ê
\82Ä
\82¢
\82¢
\82Å
\82·
\82©
\81H', '
\83M
\83R
\83i
\83r', MB_YESNO or MB_ICONQUESTION) = IDYES then begin
7938 //
\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
7939 datList := TStringList.Create;
7941 Cnt := DragQueryFile(Msg.WParam, $FFFFFFFF, FileName, SizeOf(FileName));
7942 for K := 0 to Cnt - 1 do begin
7943 DragQueryFile(Msg.WParam, K, FileName, SizeOf(FileName));
7944 // 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
7945 //
\83t
\83@
\83C
\83\8b\82Ì
\83`
\83F
\83b
\83N
7946 if (isValidFile(FileName)) then begin
7947 LogFolder := ExtractFilePath(Board.FilePath);
7948 if (FileExists( LogFolder + ExtractFileName(FileName))) then begin
7949 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);
7951 if (not DirectoryExists(LogFolder)) then begin
7952 if (not GikoSys.ForceDirectoriesEx(LogFolder) ) then begin
7953 GikoUtil.MsgBox(Handle, LogFolder + '
\82Ì
\90¶
\90¬
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7956 if (not Windows.CopyFile(FileName, PChar(LogFolder + ExtractFileName(FileName)), true)) then begin
7957 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);
7959 datList.Add(ExtractFileName(FileName));
7964 DragFinish(Msg.WParam);
7965 if (datList.Count > 0) then begin
7966 GikoSys.AddOutofIndexDat(Board, datList, False);
7967 ShowMessage(IntToStr(datList.Count) + '
\8cÂ
\82Ìdat
\83t
\83@
\83C
\83\8b\82ª
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82µ
\82½
\81B' );
7968 if GikoForm.TreeView.Visible then begin
7969 GikoForm.TreeView.Refresh;
7971 if GikoForm.ListView.Visible then begin
7975 ShowMessage('
\88ê
\82Â
\82à
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B' );
7983 ShowMessage('
\94Â
\82ð
\95\
\8e¦
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
7986 procedure TGikoForm.UpdateListView();
7988 //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
7989 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
7990 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
7991 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
7992 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
7993 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
7994 case GikoForm.ViewType of
7995 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
7996 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
7997 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
7998 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
7999 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
8000 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
8005 //!
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
8006 function TGikoForm.isValidFile(FileName: String) : boolean;
8011 //
\91¶
\8dÝ
\82·
\82é
\82©
\81A
\8ag
\92£
\8eqdat
\81A
\83t
\83@
\83C
\83\8b\96¼
8012 if ( not FileExists(FileName) ) then begin
8014 GikoUtil.MsgBox(Handle, FileName + '
\82Í
\91¶
\8dÝ
\82µ
\82Ü
\82¹
\82ñ
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
8015 end else if (ExtractFileExt(ExtractFileName(FileName)) <> '.dat' ) then begin
8017 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);
8019 //
\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
8021 dt := GikoSys.GetCreateDateFromName(ExtractFileName(FileName));
8022 if ((UnixToDateTime(ZERO_DATE) + OffsetFromUTC) = dt) then begin
8024 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);
8028 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);
8033 procedure TGikoForm.ResPopupClearTimerTimer(Sender: TObject);
8035 ResPopupClearTimer.Enabled := False;
8036 if ResPopupClearTimer.Tag = 0 then begin
8037 FResPopupBrowser.Clear;
8039 FResPopupBrowser.CurrentBrowser.ChildClear;
8042 //!
\83A
\83C
\83R
\83\93\93Ç
\82Ý
\8d\9e\82Ý
8043 procedure TGikoForm.LoadIcon();
8045 ICONI6 = 'icon16.bmp';
8046 ICON32 = 'icon32.bmp';
8047 ICONSTAT = 'state_icon.bmp';
8048 ICONMES = 'message_icon.bmp';
8049 ICONADD = 'address_icon.bmp';
8050 ICONITEM = 'item_icon.bmp';
8051 ICONTOOL = 'hottoolbar_icon.bmp';
8053 if FileExists(GikoSys.Setting.GetAppDir + ICONI6) then begin
8055 ItemIcon16.FileLoad(rtBitmap,
8056 GikoSys.Setting.GetAppDir + ICONI6, clPurple);
8058 if FileExists(GikoSys.Setting.GetAppDir + ICON32) then begin
8060 ItemIcon32.FileLoad(rtBitmap,
8061 GikoSys.Setting.GetAppDir + ICON32, clPurple);
8063 if FileExists(GikoSys.Setting.GetAppDir + ICONSTAT) then begin
8064 StateIconImageList.Clear;
8065 StateIconImageList.FileLoad(rtBitmap,
8066 GikoSys.Setting.GetAppDir + ICONSTAT, clPurple);
8068 if FileExists(GikoSys.Setting.GetAppDir + ICONMES) then begin
8069 MessageImageList.Clear;
8070 MessageImageList.FileLoad(rtBitmap,
8071 GikoSys.Setting.GetAppDir + ICONMES, clPurple);
8073 if FileExists(GikoSys.Setting.GetAppDir + ICONADD) then begin
8074 AddressImageList.Clear;
8075 AddressImageList.FileLoad(rtBitmap,
8076 GikoSys.Setting.GetAppDir + ICONADD, clPurple);
8078 if FileExists(GikoSys.Setting.GetAppDir + ICONITEM) then begin
8079 ItemImageList.Clear;
8080 ItemImageList.FileLoad(rtBitmap,
8081 GikoSys.Setting.GetAppDir + ICONITEM, clPurple);
8083 if FileExists(GikoSys.Setting.GetAppDir + ICONTOOL) then begin
8084 HotToobarImageList.Clear;
8085 HotToobarImageList.FileLoad(rtBitmap,
8086 GikoSys.Setting.GetAppDir + ICONTOOL, clPurple);
8089 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\93Ç
\82Ý
\8d\9e\82Ý
8090 procedure TGikoForm.LoadPopupMenu();