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 if GikoSys.Setting.BeAutoLogin then
1339 GikoDM.BeLogInOutAction.Execute;
1341 //
\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è
1342 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1343 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1345 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\8f\89\8aú
\89»
1346 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1348 //
\92u
\8a·
\90Ý
\92è
\83t
\83@
\83C
\83\8b\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1349 ReplaceDM.LoadFromFile(GikoSys.GetReplaceFileName);
1351 //
\83\8c\83X
\83|
\83b
\83v
\83A
\83b
\83v
\8fÁ
\8b\8e\83^
\83C
\83}
\81[
1352 ResPopupClearTimer.Interval := GikoSys.Setting.RespopupWait;
1354 // D&D
\82ð
\8eó
\82¯
\8eæ
\82é
1355 DragAcceptFiles(ListView.Handle, True);
1358 //
\8f\89\8aú
\89»
\82É
\8e¸
\94s
\82µ
\82½
\83\82\83W
\83\85\81[
\83\8b\83`
\83F
\83b
\83N
1359 if (FavoriteDM.AbEnd) then begin
1360 GikoUtil.MsgBox(Self.Handle,
1361 '
\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 +
1362 '
\83M
\83R
\83i
\83r
\83t
\83H
\83\8b\83_
\82ð
\8aJ
\82«
\82Ü
\82·
\81Aconfig/' + Favorite.FAVORITE_FILE_NAME +
1363 '
\82ð config/~' + Favorite.FAVORITE_FILE_NAME + '(
\91O
\89ñ
\8bN
\93®
\8e\9e\82Ì
\82¨
\8bC
\82É
\93ü
\82è)
\82Å'#13#10 +
1364 '
\92u
\82«
\8a·
\82¦
\82é
\8e\96\82Å
\92¼
\82é
\89Â
\94\
\90«
\82ª
\82 \82è
\82Ü
\82·
\81B',
1365 '
\8f\89\8aú
\89»
\88Ù
\8fí');
1366 GikoDM.GikoFolderOpenAction.Execute;
1372 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1373 procedure TGikoForm.SaveCoolBarSettings;
1376 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1378 SaveMainCoolBarSettings;
1379 SaveBoardCoolBarSettings;
1380 SaveBrowserCoolBarSettings;
1383 procedure TGikoForm.SaveMainCoolBarSettings;
1388 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1389 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1390 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1391 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1392 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1393 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1396 procedure TGikoForm.SaveBoardCoolBarSettings;
1401 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1402 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1403 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1404 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1405 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1406 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1409 procedure TGikoForm.SaveBrowserCoolBarSettings;
1414 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1415 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1416 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1417 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1418 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1419 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1422 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1423 procedure TGikoForm.LoadCoolBarSettings;
1429 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1430 MainCoolBar.Bands.BeginUpdate;
1432 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1433 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1434 CoolSet := GikoSys.Setting.MainCoolSet[i];
1435 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1436 FIsIgnoreResize := rtNone;
1437 SaveCoolBarSettings;
1440 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1441 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1442 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1445 MainCoolBar.Bands.EndUpdate;
1448 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1449 ListCoolBar.Bands.BeginUpdate;
1451 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1452 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1453 CoolSet := GikoSys.Setting.ListCoolSet[i];
1454 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1455 FIsIgnoreResize := rtNone;
1456 SaveCoolBarSettings;
1459 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1460 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1461 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1464 ListCoolBar.Bands.EndUpdate;
1467 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1468 BrowserCoolBar.Bands.BeginUpdate;
1470 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1471 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1472 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1473 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1474 FIsIgnoreResize := rtNone;
1475 SaveCoolBarSettings;
1478 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1479 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1480 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1483 BrowserCoolBar.Bands.EndUpdate;
1488 procedure TGikoForm.FormShow(Sender: TObject);
1492 if FStartUp then begin
1494 ShowWindow(Application.Handle, SW_HIDE);
1495 //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½
1496 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1497 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1498 GikoDM.StdToolBarVisibleActionExecute( nil );
1499 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1500 GikoDM.AddressBarVisibleActionExecute( nil );
1501 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1502 GikoDM.LinkBarVisibleActionExecute( nil );
1503 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1504 GikoDM.ListToolBarVisibleActionExecute( nil );
1505 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1506 GikoDM.ListNameBarVisibleActionExecute( nil );
1507 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1508 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1509 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1510 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1512 // CoolBar
\95\9c\8c³
1513 LoadCoolBarSettings;
1515 //
\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é
1516 // ResetBandInfo( ListCoolBar, ListToolBar );
1517 FIsIgnoreResize := rtNone;
1519 //ActionList
\82ÌGroupIndex
\82ð
\8c³
\82É
\96ß
\82·
1520 SetGroupIndex(GikoDM.GikoFormActionList);
1522 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1523 if GikoSys.Setting.TabAutoLoadSave then begin
1524 GikoDM.TabsOpenAction.Tag := 1;
1525 GikoDM.TabsOpenAction.Execute;
1526 GikoDM.TabsOpenAction.Tag := 0;
1527 if (GikoSys.Setting.LastCloseTabURL <> '') then begin
1528 if ( FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
1529 while (FActiveContent.Browser.ReadyState <> READYSTATE_COMPLETE) and
1530 (FActiveContent.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
1531 //
\83\81\83b
\83Z
\81[
\83W
\82ð
\8eó
\82¯
\8eæ
\82ç
\82È
\82¢
\82æ
\82¤
\82É
\83X
\83\8a\81[
\83v
\82É
\95Ï
\8dX
1535 item := BBSsFindThreadFromURL( GikoSys.Setting.LastCloseTabURL );
1536 GikoSys.Setting.LastCloseTabURL := '';
1537 if (item <> nil) and (item.IsLogFile) then begin
1538 OpenThreadItem(item, item.URL);
1540 //ShowWindow(Self.Handle, SW_SHOW);
1546 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1548 // if GikoForm.WindowState <> wsMinimized then
1549 // SaveCoolBarSettings;
1551 if ( GikoSys.Setting.ShowDialogForEnd ) and
1552 (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
1557 GikoSys.Setting.LastCloseTabURL := '';
1558 if GikoSys.Setting.TabAutoLoadSave then begin
1559 GikoDM.TabsSaveAction.Execute;
1560 if (GetActiveContent <> nil) and
1561 (GetActiveContent.IsLogFile) then begin
1562 GikoSys.Setting.LastCloseTabURL := GetActiveContent.URL;
1566 if (SearchDialog <> nil) then begin
1567 if (SearchDialog.Visible) then begin
1571 SearchDialog.Release;
1574 SearchDialog := nil;
1577 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82Ì
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81AEditorForm
\82ð
\95Â
\82¶
\82é
1578 GikoDM.CloseAllEditorAction.Execute;
1580 Application.UnhookMainWindow(Hook);
1581 //
\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·
1582 FControlThread.DownloadAbort;
1583 FControlThread.Terminate;
1585 //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¶
1588 Application.Terminate;
1591 procedure TGikoForm.SaveSettingAll();
1593 wp : TWindowPlacement;
1594 WindowPlacement: TWindowPlacement;
1597 ActiveListColumnSave;
1602 WindowPlacement.length := SizeOf(TWindowPlacement);
1603 GetWindowPlacement(Self.Handle, @WindowPlacement);
1605 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1606 wp.length := sizeof(wp);
1607 GetWindowPlacement(Handle, @wp);
1608 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1609 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1610 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1611 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1612 GikoSys.Setting.WindowMax := (WindowState = wsMaximized) or
1613 (WindowPlacement.flags = WPF_RESTORETOMAXIMIZED);
1614 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1615 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1616 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1617 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1618 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1619 if GikoDM.ArrangeAction.Checked then
1620 GikoSys.Setting.ListOrientation := gloVertical
1622 GikoSys.Setting.ListOrientation := gloHorizontal;
1623 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1628 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1629 if not GikoSys.Setting.ResRangeHold then
1630 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1633 //
\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¶
1634 SaveCoolBarSettings;
1635 GikoSys.Setting.WriteWindowSettingFile;
1636 //
\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¢
1637 GikoSys.Setting.WriteNameMailSettingFile;
1638 //
\96`
\8c¯
\82Ì
\8f\91\82Ì
\95Û
\91¶
1639 GikoSys.Setting.WriteBoukenSettingFile;
1640 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\90Ý
\92è
\82Ì
\95Û
\91¶
1641 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1643 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1645 //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é
1646 //
\8f\89\8aú
\89»
\88Ù
\8fí
\8e\9e\82©
\82ç
\82Ì
\8fI
\97¹
\82Å
\82Í
\95Û
\91¶
\82µ
\82È
\82¢
1647 if not (FavoriteDM.AbEnd) then begin
1648 FavoriteDM.WriteFavorite;
1653 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1655 //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
1656 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1660 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
1662 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1666 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1668 RoundList.SaveRoundFile;
1672 //
\83^
\83X
\83N
\83g
\83\8c\83C
\82Ì
\83A
\83C
\83R
\83\93\8dí
\8f\9c
1673 if (FIconData.uID <> 0) then begin
1674 Shell_NotifyIcon(NIM_DELETE, @FIconData);
1679 procedure TGikoForm.FormDestroy(Sender: TObject);
1684 //
\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¶
1685 //
\81¦
\92\8d\88Ó
\81FOnDestroy
\82Å
\8eg
\82¤
\82±
\82Æ
\82µ
\82©
\8dl
\97¶
\82³
\82ê
\82Ä
\82¢
\82È
\82¢
1686 //
\91¼
\82Å
\82â
\82é
\82Æ
\8dÄ
\95`
\89æ
\82ª
\94
\90¶
\82·
\82é
1687 if WindowState <> wsNormal then begin
1688 WindowState := wsNormal;
1690 SaveCoolBarSettings;
1691 GikoSys.Setting.WriteWindowSettingFile;
1696 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1698 if GikoSys.Setting.GestureEnabled then begin
1699 MouseGesture.OnGestureStart := nil;
1700 MouseGesture.OnGestureMove := nil;
1701 MouseGesture.OnGestureEnd := nil;
1704 MouseGesture.UnHook;
1709 //
\82¨
\8bC
\82É
\93ü
\82è
\94j
\8aü
1716 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1717 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1718 GikoSys.Setting.ShowDialogForAllTabClose := false;
1719 GikoDM.AllTabCloseAction.Execute;
1720 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1725 for i := FBrowsers.Count - 1 downto 0 do begin
1726 GikoSys.ShowRefCount('browser' + IntToStr(i), TWebBrowser(FBrowsers[i]).ControlInterface);
1727 GikoSys.ShowRefCount('document' + IntToStr(i), TWebBrowser(FBrowsers[i]).ControlInterface.Document);
1730 for i := FBrowsers.Count - 1 downto 0 do begin
1731 TWebBrowser(FBrowsers[i]).Free;
1734 FBrowsers.Capacity := 0;
1740 if BrowserNullTab <> nil then begin
1741 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
1742 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
1744 BrowserNullTab.Free;
1750 TreeView.Items.BeginUpdate;
1751 TreeView.Items.GetFirstNode.Free;
1752 TreeView.Items.Clear;
1753 TreeView.Items.EndUpdate;
1778 //FControlThread.DownloadAbort;
1779 FControlThread.Terminate;
1780 FControlThread.WaitFor;
1784 FControlThread.Free;
1786 //
\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é
1787 for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
1788 GikoForm.PlugInMenu.items[i].Free;
1790 GikoForm.PlugInMenu.Clear;
1793 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
1794 // 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Å
1795 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
1796 for i := Length(BoardGroups) - 1 downto 0 do begin
1797 //BoardGroups[i].Clear;
1798 BoardGroups[i].Free;
1802 for i := Length( BBSs ) - 1 downto 0 do begin
1803 if BBSs[ i ] <> nil then
1807 DestorySpecialBBS(BoardGroup.SpecialBBS);
1812 if FEvent <> nil then
1816 if FResPopupBrowser <> nil then begin
1817 TOleControl(FResPopupBrowser).Parent := nil;
1818 FResPopupBrowser.Free;
1824 if FPreviewBrowser <> nil then begin
1825 FPreviewBrowser.Free;
1826 FPreviewBrowser := nil;
1831 // Update
\82ª
\82¢
\82ê
\82Î
\8eÀ
\8ds
\82·
\82é
1832 if FileExists(FUpdateExePath) then begin
1833 //
\83A
\83b
\83v
\83f
\81[
\83g
\8eÀ
\8ds
1834 GikoSys.CreateProcess(FUpdateExePath, FUpdateExeArgs);
1838 //
\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
1839 procedure TGikoForm.SetBBSMenu;
1842 item : TBBSMenuItem;
1845 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
1846 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1848 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1849 CabinetSelectPopupMenu.Items[ i ].Free;
1850 CabinetMenu.Items[ i ].Free;
1851 BBSSelectPopupMenu.Items[ i ].Free;
1857 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
1858 for i := Length( BBSs ) - 1 downto 0 do begin
1860 item := TBBSMenuItem.Create( PopupMenu );
1861 item.Caption := BBSs[ i ].Title;
1862 item.Data := BBSs[ i ];
1863 item.OnClick := BBSMenuItemOnClick;
1864 CabinetSelectPopupMenu.Items.Insert( 0, item );
1865 item := TBBSMenuItem.Create( PopupMenu );
1866 item.Caption := BBSs[ i ].Title;
1867 item.Data := BBSs[ i ];
1868 item.OnClick := BBSMenuItemOnClick;
1869 CabinetMenu.Insert( 0, item );
1870 item := TBBSMenuItem.Create( PopupMenu );
1871 item.Caption := BBSs[ i ].Title;
1872 item.Data := BBSs[ i ];
1873 item.OnClick := BBSMenuItemOnClick;
1874 BBSSelectPopupMenu.Items.Insert( 0, Item );
1881 procedure TGikoForm.ReloadBBS;
1886 LockWindowUpdate(Self.Handle);
1888 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1889 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1890 GikoSys.Setting.ShowDialogForAllTabClose := false;
1891 GikoDM.AllTabCloseAction.Execute;
1892 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1893 SetContent(BrowserNullTab);
1894 //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
1895 TreeView.Items.Clear;
1897 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1899 RoundList.SaveRoundFile;
1902 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
1908 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1910 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1915 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1917 FavoriteDM.WriteFavorite;
1922 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
1923 for i := Length(BoardGroups) - 1 downto 0 do begin
1925 BoardGroups[i].Free;
1931 for i := Length( BBSs ) - 1 downto 0 do begin
1932 if BBSs[ i ] <> nil then
1941 FTreeType := gttNone;
1943 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
1945 //
\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Æ)
1946 InitializeBoardPlugIns;
1948 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1950 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1951 for i := Length(BBSs) - 1 downto 0 do begin
1952 if not BBSs[i].IsBoardFileRead then
1953 GikoSys.ReadBoardFile(BBSs[i]);
1956 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
1959 ShowBBSTree( BBSs[ 0 ] );
1961 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1962 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1963 TreeView, FTreeType);
1965 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1966 FavoriteDM.ReadFavorite;
1970 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1971 RoundList.LoadRoundBoardFile;
1972 RoundList.LoadRoundThreadFile;
1974 LockWindowUpdate(0);
1978 \todo
\89½
\8cÌ IE 7
\82Å
\82Í about:..
\82É
\82È
\82é
\82Ì
\82©
1979 (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©)
1980 \92²
\8d¸
\82·
\82é
\82±
\82Æ
1982 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1990 threadItem : TThreadItem;
1992 Protocol, Host, Path, Document, Port, Bookmark: string;
1997 ActiveFileName: string;
2002 cResPopup: TResPopupBrowser;
2003 senderBrowser :TWebBrowser;
2004 doc: IHTMLDocument2;
2006 //
\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ª
2007 // 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è)
2008 if Pos('about:..', Text) = 1 then
2009 Text2 := 'about:blank..' + Copy( Text, Length('about:..')+1, Length(Text) )
2013 if not( TObject(Sender) is TWebBrowser )then
2016 senderBrowser := TWebBrowser(Sender);
2017 doc := senderBrowser.ControlInterface.Document as IHTMLDocument2;
2021 if ((not senderBrowser.Busy) and Assigned(doc)) then begin
2022 if LowerCase(doc.charset) <> 'shift_jis' then begin
2023 doc.charset := 'shift_jis';
2031 if PreviewTimer.Enabled then
2032 PreviewTimer.Enabled := False;
2034 Application.CancelHint;
2037 if GetActiveContent <> nil then
2038 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
2040 ActiveFileName := '';
2042 FActiveContent := nil;
2046 //
\91O
\89ñ
\82Æ
\93¯
\82¶
\8fê
\8d\87\8fI
\97¹
2047 if (StatusBar.Panels[1].Text = Text2) then begin
2048 if Text2 = '' then begin
2049 if FResPopupBrowser <> nil then begin
2050 if not(Sender is TResPopupBrowser) then
2051 FResPopupBrowser.Clear
2053 TResPopupBrowser(Sender).ChildClear;
2059 StatusBar.Panels[1].Text := Text2;
2062 if FPreviewBrowser <> nil then
2063 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2065 if FResPopupBrowser <> nil then begin
2066 if not(Sender is TResPopupBrowser) then begin
2067 if (FResPopupBrowser.Visible) then begin
2068 if ResPopupClearTimer.Interval > 0 then begin
2069 ResPopupClearTimer.Enabled := True;
2070 ResPopupClearTimer.Tag := 0;
2072 FResPopupBrowser.Clear;
2076 if ResPopupClearTimer.Interval > 0 then begin
2077 ResPopupClearTimer.Enabled := True;
2078 ResPopupClearTimer.Tag := 1;
2080 TResPopupBrowser(Sender).ChildClear;
2086 if not(Sender is TResPopupBrowser) then
2087 if not GikoSys.Setting.UnActivePopup then
2088 if not GikoForm.Active then
2093 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
2094 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
2095 //
\91¼
\82Ì
\83A
\83v
\83\8a\82Å
\8f\88\97\9d\82·
\82éURL
\82©
\8am
\94F
2096 if (ExtPreviewDM.PreviewURL(Text2)) then begin
2100 Ext := AnsiLowerCase(ExtractFileExt(Text2));
2101 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
2102 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) or
2103 (Pos('http://www.nicovideo.jp/watch/', Text2) = 1) then begin
2104 if FPreviewBrowser = nil then begin
2105 FPreviewBrowser := TPreviewBrowser.Create(Self);
2106 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2107 TOleControl(FPreviewBrowser).Parent := nil;
2109 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
2110 FPreviewURL := Text2;
2111 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
2112 PreviewTimer.Enabled := True;
2113 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
2114 if (Pos('mailto:', Text2) = 1) and (GikoSys.Setting.RespopupMailTo) then begin
2115 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
2116 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
2118 p.x := p.x - senderBrowser.ClientOrigin.x;
2119 p.y := p.y - senderBrowser.ClientOrigin.y;
2120 e := doc.elementFromPoint(p.x, p.y);
2121 if (Assigned(e)) then begin
2122 CreateResPopupBrowser;
2124 if not(Sender is TResPopupBrowser) then begin
2125 if (FResPopupBrowser.Visible) then begin
2126 FResPopupBrowser.Clear;
2129 TResPopupBrowser(Sender).ChildClear;
2132 cResPopup := FResPopupBrowser.CreateNewBrowser;
2133 tmp2 := Trim(ZenToHan(e.Get_outerText));
2134 if (GikoSys.IsNumeric(tmp2)) then begin
2135 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
2136 wkIntSt := StrToInt64(tmp2);
2137 wkIntTo := StrToInt64(tmp2);
2138 cResPopup.PopupType := gptThread;
2139 HTMLCreater.SetResPopupText(cResPopup, GetActiveContent(true), wkIntSt, wkIntTo, False, False);
2141 cResPopup.PopupType := gptRaw;
2142 cResPopup.Title := s;
2146 CreateResPopupBrowser;
2148 if not(Sender is TResPopupBrowser) then begin
2149 if (FResPopupBrowser.Visible) then begin
2150 FResPopupBrowser.Clear;
2153 TResPopupBrowser(Sender).ChildClear;
2156 threadItem := GetActiveContent(true);
2157 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
2158 PathRec := Gikosys.Parse2chURL2(URL);
2159 if (PathRec.FNoParam) then begin
2163 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
2165 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
2167 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
2169 URL := GikoSys.GetBrowsableThreadURL( URL );
2170 wkIntSt := PathRec.FSt;
2171 wkIntTo := PathRec.FTo;
2173 if (wkIntSt = 0) and (wkIntTo = 0) then begin
2176 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
2178 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
2180 end else if wkIntSt > wkIntTo then begin
2185 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
2190 threadItem := BBSsFindThreadFromURL( URL );
2192 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
2193 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
2194 if board <> nil then begin
2195 if not board.IsThreadDatRead then
2196 GikoSys.ReadSubjectFile( board );
2197 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
2201 if threadItem <> nil then begin
2202 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
2203 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
2204 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
2208 cResPopup := FResPopupBrowser.CreateNewBrowser;
2209 cResPopup.PopupType := gptThread;
2210 HTMLCreater.SetResPopupText(cResPopup, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
2214 if (cResPopup <> nil) then begin
2215 ResPopupClearTimer.Enabled := False;
2217 if cResPopup.PopupType = gptRaw then begin
2218 if cResPopup.Title <> '' then begin
2219 cResPopup.TitlePopup;
2222 if cResPopup.RawDocument <> '' then begin
2224 end else if cResPopup.Title <> '' then begin
2225 cResPopup.TitlePopup;
2232 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2236 FEnabledCloseButton := Enabled;
2237 SysMenu := GetSystemMenu(Handle, False);
2239 if Enabled then begin
2240 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2242 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2245 DrawMenuBar(Handle);
2248 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2249 var AllowChange: Boolean);
2251 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
2252 // if FTreeType = gtt2ch then
2253 // FSortIndex := -1;
2256 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2257 Shift: TShiftState);
2261 if GetActiveList is TBoard then begin
2263 VK_BACK:; // UpFolderButtonClick(Sender);
2264 VK_SPACE: ListDoubleClick(Shift);
2265 VK_RETURN: ListClick;
2268 if ListView.Selected <> nil then begin
2269 pos.X := ListView.Column[ 0 ].Width;
2270 pos.Y := ListView.Selected.Top;
2272 pos.X := ListView.Left;
2273 pos.Y := ListView.Top;
2275 Windows.ClientToScreen( ListView.Handle, pos );
2276 ListPopupMenu.Popup( pos.X, pos.Y );
2279 end else begin // TBBS, TCategory
2281 VK_BACK:; // UpFolderButtonClick(Sender);
2282 VK_SPACE: ListClick;
2283 VK_RETURN: ListDoubleClick(Shift);
2286 if ListView.Selected <> nil then begin
2287 pos.X := ListView.Column[ 0 ].Width;
2288 pos.Y := ListView.Selected.Top;
2290 pos.X := ListView.Left;
2291 pos.Y := ListView.Top;
2293 Windows.ClientToScreen( ListView.Handle, pos );
2294 ListPopupMenu.Popup( pos.X, pos.Y );
2300 function TGikoForm.GetHttpState: Boolean;
2302 Result := FHttpState;
2305 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2306 Column: TListColumn);
2310 vSortIndex : Integer;
2311 vSortOrder : Boolean;
2313 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2314 if TObject( FActiveList ) is TBBS then begin
2315 orderList := GikoSys.Setting.BBSColumnOrder;
2316 vSortIndex := GikoSys.Setting.BBSSortIndex;
2317 vSortOrder := GikoSys.Setting.BBSSortOrder;
2318 end else if TObject( FActiveList ) is TCategory then begin
2319 orderList := GikoSys.Setting.CategoryColumnOrder;
2320 vSortIndex := GikoSys.Setting.CategorySortIndex;
2321 vSortOrder := GikoSys.Setting.CategorySortOrder;
2322 end else if TObject( FActiveList ) is TBoard then begin
2323 orderList := GikoSys.Setting.BoardColumnOrder;
2324 vSortIndex := GikoSys.Setting.BoardSortIndex;
2325 vSortOrder := GikoSys.Setting.BoardSortOrder;
2329 id := Integer( orderList[ idx ] );
2332 if vSortIndex = id then
2333 vSortOrder := not vSortOrder
2335 vSortOrder := id = 0;
2338 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2341 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2342 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2346 DefaultDraw := True;
2347 //
\82È
\82º
\82©
\96³
\8fð
\8c\8f\82ÅExit
\82µ
\82Ä
\82¢
\82é
2349 DefaultDraw := False;
2350 if (cdsSelected in State) or (cdsHot in State) then begin
2351 Sender.Canvas.Brush.Color := clHighlight;
2352 Sender.Canvas.Font.Color := clHighlightText;
2354 Sender.Canvas.Brush.Color := clBtnFace;
2355 Sender.Canvas.Font.Color := clBtnText;
2357 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2358 Sender.Canvas.FillRect(ARect);
2359 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2362 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2367 Nodes := TreeView.Items;
2369 for i := 0 to Nodes.Count - 1 do begin
2370 if Nodes.Item[i].Data = Data then begin
2371 Result := Nodes.Item[i];
2378 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2379 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2380 Headers: OleVariant; var Cancel: WordBool);
2385 kMenuName: string = 'menu:';
2390 FKokoPopupThreadItem := nil;
2391 if Pos(kMenuName, URL) <> 0 then begin
2392 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2394 if not GikoSys.IsNumeric(sNo) then Exit;
2398 KokoPopupMenu.PopupComponent := nil;
2399 if (Sender is TComponent) then
2400 KokoPopupMenu.PopupComponent := TComponent(Sender);
2401 //
\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Á
2402 if not (Sender is TResPopupBrowser) then begin
2403 if (FResPopupBrowser <> nil) and (FResPopupBrowser.CurrentBrowser.Visible = True) then begin
2404 FResPopupBrowser.Clear;
2407 if (Sender <> FResPopupBrowser.CurrentBrowser) then begin
2408 TResPopupBrowser(Sender).ChildClear;
2411 FKokoPopupThreadItem := GetActiveContent(true);
2412 KokoPopupMenu.Tag := StrToInt(sNo);
2413 KokoPopupMenu.Popup(p.x, p.y);
2414 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2415 Cancel := not GikoSys.Setting.OpenMailer;
2417 //@
\82Æ.
\82ð
\8aÜ
\82Ü
\82È
\82¢URL
\82Í
\83\81\81[
\83\8b\83A
\83h
\83\8c\83X
\82Æ
\82Ý
\82È
\82³
\82È
\82¢
2418 //
\8eå
\82Éage
\81Asage
\91Î
\8dô
2419 if (Pos('@', URL) = 0) or (Pos('.', URL) = 0) then begin
2426 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2427 const ARect: TRect; var DefaultDraw: Boolean);
2431 IsBoardNode: Boolean;
2437 Category: TCategory;
2441 DefaultDraw := True;
2443 if FTreeType = gttHistory then Exit;
2445 TreeView.Canvas.Font.Color := clBlue;
2446 IsBoardNode := False;
2447 for i := 0 to TreeView.Items.Count - 1 do begin
2449 if not TreeView.Items[i].IsVisible then
2452 if TObject(TreeView.Items[i].Data) is TCategory then begin
2453 if TreeView.Items[i].Expanded then
2456 IsBoardNode := False;
2457 Category := TCategory(TreeView.Items[i].Data);
2458 for j := 0 to Category.Count - 1 do begin
2459 Board := Category.Items[j];
2460 if Board <> nil then begin
2461 if Board.UnRead > 0 then begin
2469 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2470 IsBoardNode := True;
2471 Board := TBoard(TreeView.Items[i].Data);
2473 Cnt := Board.UnRead;
2479 Bitmap := TBitmap.Create;
2481 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2482 Bitmap.Canvas.Font.Style := [fsBold];
2483 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2488 NodeRect := TreeView.Items[i].DisplayRect(True);
2491 CntText := '(' + IntToStr(Cnt) + ')'
2492 else if Cnt = 1 then
2496 TextWidth := TreeView.Canvas.TextWidth(CntText);
2498 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2500 NodeRect.Left + NodeWidth + TextWidth + 8,
2502 DrawText(TreeView.Canvas.Handle,
2506 DT_SINGLELINE or DT_VCENTER);
2508 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2511 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2512 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2515 Category: TCategory;
2518 DefaultDraw := True;
2520 if FTreeType = gttHistory then Exit;
2522 TreeView.Canvas.Font.Style := [];
2523 if Node <> nil then begin
2524 if TObject(Node.Data) is TCategory then begin
2525 Category := TCategory(Node.Data);
2526 for i := 0 to Category.Count - 1 do begin
2527 Board := Category.Items[i];
2528 if Board <> nil then begin
2529 if Board.UnRead > 0 then begin
2530 TreeView.Canvas.Font.Style := [fsBold];
2535 end else if TObject(Node.Data) is TBoard then begin
2536 Board := TBoard(Node.Data);
2537 if Board.UnRead > 0 then
2538 TreeView.Canvas.Font.Style := [fsBold];
2543 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2545 TreeView.Invalidate;
2547 if TObject(Node.Data) is TBBS then begin
2548 TBBS(Node.Data).NodeExpand := True;
2549 end else if TObject(Node.Data) is TCategory then begin
2550 TCategory(Node.Data).NodeExpand := True;
2551 end else if TObject(Node.Data) is TBoard then begin
2552 TBoard(Node.Data).NodeExpand := True;
2556 procedure TGikoForm.ListViewAllSelect;
2561 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2563 if csDestroying in Self.ComponentState then
2565 AddMessageList(Msg, nil, Icon);
2567 // *************************************************************************
2568 //!
\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
2569 // *************************************************************************
2570 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2574 boardPlugIn : TBoardPlugIn;
2579 if csDestroying in Self.ComponentState then
2581 if Item.DownType = gdtBoard then
2582 ATitle := Item.Board.Title
2584 ATitle := Item.ThreadItem.Title;
2586 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2588 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2590 if Item.DownType = gdtBoard then begin
2593 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2594 if GetActiveList = Item.Board then begin
2596 //
\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é
2597 if (GikoSys.Setting.AutoSortThreadList) then begin
2598 GikoSys.Setting.BoardSortIndex := 0;
2599 GikoSys.Setting.BoardSortOrder := True;
2601 Sort.SetSortDate(Now());
2602 SetActiveList(Item.Board);
2604 Item.Board.Modified := True;
2605 Item.Board.IsThreadDatRead := True;
2608 end else if Item.DownType = gdtThread then begin
2611 Item.ThreadItem.NewArrival := True;
2612 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2613 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2614 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2615 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2616 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2617 Item.ThreadItem.Title := Res.FTitle;
2618 ATitle := Item.ThreadItem.Title;
2619 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2620 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2621 ATitle := Res.FTitle;
2623 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2624 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2625 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2629 if GikoSys.Setting.BrowserTabVisible then begin
2630 if GetActiveContent = Item.ThreadItem then
2631 InsertBrowserTab(Item.ThreadItem)
2632 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2633 InsertBrowserTab(Item.ThreadItem, True)
2635 InsertBrowserTab(Item.ThreadItem, False);
2638 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2639 InsertBrowserTab(Item.ThreadItem);
2642 Application.ProcessMessages;
2644 if Item.State = gdsComplete then begin
2646 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2650 PlaySound('NewDiff');
2651 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2656 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2657 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2658 // 2ch
\88È
\8aO
\82Í
\81A1000
\82ª
\8dÅ
\8d\82\82©
\95s
\96¾
\82È
\82Ì
\82Å
\81A2ch
\8cÀ
\92è
\82É
\82·
\82é
2659 if (Item.ThreadItem.ParentBoard.Is2ch) then begin
2660 Item.ThreadItem.Round := False;
2661 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);
2665 //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
2667 RefreshListView(Item.ThreadItem);
2670 end else if Item.State = gdsNotModify then begin
2672 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2673 //SetContent(Item.ThreadItem);
2674 InsertBrowserTab(Item.ThreadItem);
2676 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2677 PlaySound('NoChange');
2678 Screen.Cursor := crDefault;
2679 end else if Item.State = gdsAbort then begin
2681 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2682 end else if Item.State = gdsError then begin
2687 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2688 // if Item.ResponseCode = 302 then
2689 // 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);
2695 if FWorkCount < 0 then FWorkCount := 0;
2696 if FWorkCount = 0 then begin
2698 Animate.Active := False;
2700 Screen.Cursor := crDefault;
2707 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2709 // SetProgressValue(Number, 0, AWorkCountMax);
2710 // ProgressBar.Visible := True;
2711 if csDestroying in Self.ComponentState then
2714 ProgressBar.Position := 0;
2715 ProgressBar.Max := AWorkCountMax;
2716 FDownloadTitle := AWorkTitle;
2717 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2718 FDownloadMax := AWorkCountMax;
2721 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2723 if csDestroying in Self.ComponentState then
2725 ProgressBar.Position := 0;
2726 if FDownloadMax <> 0 then
2727 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2730 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2732 if csDestroying in Self.ComponentState then
2734 ProgressBar.Position := AWorkCount;
2735 // SetProgressValue(Number, AWorkCount);
2736 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2739 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2741 ListItem: TListItem;
2743 MessageListView.Items.BeginUpdate;
2745 ListItem := MessageListView.Items.Add;
2746 ListItem.Caption := ACaption;
2747 ListItem.Data := AObject;
2748 ListItem.MakeVisible(False);
2750 gmiOK: ListItem.ImageIndex := 0;
2751 gmiSAD: ListItem.ImageIndex := 1;
2752 gmiNG: ListItem.ImageIndex := 2;
2753 gmiWhat: ListItem.ImageIndex := 3;
2756 MessageListView.Items.EndUpdate;
2760 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
2761 procedure TGikoForm.ReleaseOldestBrowser;
2765 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2766 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2767 TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2768 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2774 function TGikoForm.InsertBrowserTab(
2775 ThreadItem : TThreadItem;
2776 ActiveTab : Boolean = True
2779 i, j, idx : Integer;
2780 favItem : TFavoriteThreadItem;
2781 newBrowser : TBrowserRecord;
2786 if Threaditem = nil then Exit;
2788 if ThreadItem.IsLogFile then begin
2789 //
\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é
2790 //
\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é
2791 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2792 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2793 j := FBrowsers.IndexOf(FActiveContent.Browser);
2794 if j = BROWSER_COUNT - 1 then
2795 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2797 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2798 if not FHistoryList.AddHistory( favItem, TreeView, FTreeType ) then
2801 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2802 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2803 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2804 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2805 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2806 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2807 ReleaseOldestBrowser;
2808 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2809 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2810 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2812 if ActiveTab then begin
2813 BrowserTab.TabIndex := i;
2814 BrowserTab.OnChange(nil);
2821 idx := BrowserTab.TabIndex;
2822 newBrowser := TBrowserRecord.Create;
2823 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2824 ReleaseOldestBrowser;
2825 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2826 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2827 newBrowser.thread := ThreadItem;
2828 newBrowser.Repaint := true;
2830 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2831 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2832 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2833 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2837 if ActiveTab then begin
2838 BrowserTab.TabIndex := 0;
2840 end else if GikoSys.Setting.BrowserTabAppend = gtaLast then begin
2841 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2842 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2843 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2847 if ActiveTab then begin
2848 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2849 BrowserTab.TabIndex := 0
2851 BrowserTab.TabIndex := i;
2854 //
\83^
\83u
\88Ê
\92u
\82ð
\8eæ
\93¾
2856 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2857 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2858 TWebBrowser(FBrowsers[1]) then begin
2863 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2866 //
\83^
\83u
\82ª
\96³
\82¢
\82Æ
\82«
\82È
\82Ç
\91Î
\8dô
2867 if (ins < 0) then begin
2870 BrowserTab.Tabs.InsertObject(ins, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2871 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2872 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2873 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2875 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2880 if ActiveTab then begin
2881 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2882 BrowserTab.TabIndex := 0
2884 BrowserTab.TabIndex := ins;
2887 Result := newBrowser;
2888 if(ActiveTab) or (idx = -1) then begin
2889 BrowserTab.OnChange(nil);
2892 if BrowserNullTab = nil then begin
2893 BrowserNullTab := TBrowserRecord.Create;
2894 BrowserNullTab.Browser := Browser;
2896 // if BrowserNullTab.thread <> ThreadItem then begin
2897 // BrowserNullTab.Movement := '';
2899 BrowserNullTab.thread := ThreadItem;
2900 Result := BrowserNullTab;
2901 BrowserTab.TabIndex := -1;
2902 SetContent(BrowserNullTab);
2905 if GikoSys.Setting.URLDisplay then
2906 AddressComboBox.Text := ThreadItem.URL;
2910 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2918 ThreadItem: TThreadItem;
2919 Thread: TBrowserRecord;
2920 ThreadTitle, ThreadPTitle: string;
2921 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2924 idx := BrowserTab.TabIndex;
2925 if (not FStartUp) and
2926 (FActiveContent <> nil) and
2927 (FActiveContent.Thread <> Thread.Thread) and
2928 (FActiveContent.Browser <> nil) and
2929 (Assigned(FActiveContent.Browser.ControlInterface.Document)) then begin
2932 FActiveContent.Thread.ScrollTop := FActiveContent.Browser.OleObject.Document.Body.ScrollTop;
2935 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2940 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2941 Thread.Browser.Navigate(BLANK_HTML);
2942 BrowserBoardNameLabel.Caption := '';
2943 ItemBoardImage.Picture := nil;
2944 BrowserNameLabel.Caption := '';
2945 ItemImage.Picture := nil;
2946 BrowserNullTab.Thread := nil;
2947 //TOleControl(BrowserNullTab.Browser).Visible := true;
2948 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2949 FActiveContent := nil;
2951 end else if Thread.Browser = nil then begin
2952 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2953 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2954 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2955 ReleaseOldestBrowser;
2956 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2957 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2960 ThreadTitle := Thread.Thread.Title;
2961 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2962 //ThreadScrollTop := Thread.Thread.ScrollTop;
2963 if Thread.Thread.IsLogFile then begin
2964 if not FileExists(Thread.Thread.GetThreadFileName) then begin
2965 Thread.Thread.DeleteLogFile;
2969 ThreadIsLog := Thread.Thread.IsLogFile;
2970 ThreadItem := Thread.Thread;
2971 ThreadNewArraical := Thread.Thread.NewArrival;
2972 //ThreadUnRead := Thread.Thread.UnRead;
2973 BBSID := ThreadItem.ParentBoard.BBSID;
2974 FileName := ThreadItem.FileName;
2976 if GetCapture = ListView.Handle then
2979 Screen.Cursor := crHourGlass;
2983 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2984 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2985 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2987 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2988 if (not Assigned(Thread.Browser.ControlInterface.Document)) then begin
2989 Thread.Browser.Navigate('about:blank');
2991 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2992 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2993 Application.ProcessMessages;
2994 if idx <> BrowserTab.TabIndex then begin
2999 if (Thread <> nil) and (ThreadItem <>nil) then begin
3000 BrowserBoardNameLabel.Caption := ThreadPTitle;
3001 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
3002 BrowserNameLabel.Caption := ThreadTitle;
3003 ItemImage.Picture := nil;
3005 if ThreadNewArraical then
3006 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
3008 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
3010 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
3012 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
3013 BrowserNameLabel.Left := ItemImage.Left + 20;
3016 //ActiveContent
\81@
\82Ì
\8dX
\90V
3017 FActiveContent := Thread;
3019 if not ThreadIsLog then begin
3020 Self.Caption := GikoDataModule.CAPTION_NAME ;
3021 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\8fÁ
\8b\8e
3022 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
3024 Thread.Browser.BringToFront;
3025 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
3026 doc := Thread.Browser.OleObject.Document;
3028 doc.charset := 'Shift_JIS';
3035 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
3036 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\95\
\8e¦
3037 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
3038 StatusBar.Panels[THREADSIZE_PANEL].Width :=
3039 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
3040 //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«
3041 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
3042 if Thread.Repaint then begin
3043 Thread.Repaint := false;
3045 Thread.Browser.OnStatusTextChange := nil;
3046 LockWindowUpdate(Thread.Browser.ParentWindow);
3047 HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
3048 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
3049 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
3053 RefreshListView(ThreadItem);
3055 Screen.Cursor := crDefault;
3059 function TGikoForm.GetActiveContent(popup :Boolean = false): TThreadItem;
3062 if FActiveContent <> nil then begin
3063 Result := FActiveContent.Thread;
3065 (FResPopupBrowser <> nil) and (FResPopupBrowser.CurrentBrowser.Visible = True) then
3066 if (FResPopupBrowser.CurrentBrowser.Thread <> nil) then begin
3067 Result := FResPopupBrowser.CurrentBrowser.Thread;
3077 procedure TGikoForm.SetActiveList(Obj: TObject);
3081 // if FActiveList <> Obj then begin
3084 if ListView.Selected <> nil then
3085 idx := ListView.Selected.Index
3091 ListView.Items.Count := 0;
3092 ListView.Items.Clear;
3093 ListView.Selected := nil;
3094 // ListView.Columns.Clear;
3095 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
3096 and (FActiveContent.Thread.IsLogFile) then begin
3098 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
3100 on E: Exception do begin
3101 //
\83X
\83\8c\88ê
\97\97DL
\8cã
\82È
\82Ç
\82ÉFActiveContent
\82Ì
\8e\9d\82ÂThread
\82ª
3102 //
\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é
3103 ReleaseBrowser(FActiveContent);
3104 FActiveContent.Thread := nil;
3105 Self.Caption := GikoDataModule.CAPTION_NAME;
3109 Self.Caption := GikoDataModule.CAPTION_NAME;
3110 //Application.Title := CAPTION_NAME;
3112 // ActiveListColumnSave;
3114 Screen.Cursor := crHourGlass;
3116 if Obj is TBBS then begin
3117 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3118 end else if Obj is TCategory then begin
3119 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3120 end else if Obj is TBoard then begin
3121 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3124 Screen.Cursor := crDefault;
3127 if idx >= 0 then begin
3128 if idx >= ListView.Items.Count then
3129 idx := ListView.Items.Count - 1;
3130 ListView.ItemIndex := idx;
3131 ListView.ItemFocused := ListView.Items.Item[ idx ];
3137 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
3138 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
3139 function TGikoForm.GetActiveList: TObject;
3141 Result := FActiveList;
3144 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
3146 SetListViewType(AViewType, '', False);
3149 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
3154 for i := Length( BBSs ) - 1 downto 0 do begin
3155 BBSs[i].SelectText := SelectText;
3156 BBSs[i].KubetsuChk := KubetsuChk;
3158 BoardGroup.SpecialBBS.SelectText := SelectText;
3159 BoardGroup.SpecialBBS.KubetsuChk := KubetsuChk;
3161 ViewType := AViewType;
3162 if ActiveList is TBoard then begin
3163 Board := TBoard(ActiveList);
3165 //gvtAll: ListView.Items.Count := Board.Count;
3166 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
3167 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
3168 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
3169 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
3170 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
3174 SetActiveList(Board);
3178 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
3179 const ARect: TRect; var DefaultDraw: Boolean);
3185 if ListView.Items.Count = 0 then begin
3186 DefaultDraw := true;
3187 ListView.Canvas.Brush.Color := ListView.Color;
3188 ListView.Canvas.FillRect(ARect);
3192 ListView.Canvas.Font.Color := clWindowText;
3193 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3196 ListView.Canvas.Font.Color := clBlue;
3197 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';
3200 ListView.Canvas.Font.Color := clGreen;
3201 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3204 ListView.Canvas.Font.Color := clFuchsia;
3205 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';
3208 ListView.Canvas.Font.Color := clMaroon;
3209 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90¶
\91¶
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3212 ListView.Canvas.Font.Color := clNavy;
3213 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';
3214 if GetActiveList is TBoard then
3215 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
3223 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
3224 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
3225 ListView.Canvas.TextOut(p.X, p.Y, s);
3227 DefaultDraw := True;
3231 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
3233 Item: TDownloadItem;
3235 if not Board.IsThreadDatRead then
3236 GikoSys.ReadSubjectFile(Board);
3237 Item := TDownloadItem.Create;
3239 Item.Board := Board;
3240 Item.DownType := gdtBoard;
3241 Item.ForceDownload := ForceDownload;
3242 FControlThread.AddItem(Item);
3243 if FWorkCount = 0 then begin
3245 Animate.Active := True;
3248 Screen.Cursor := crAppStart;
3256 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
3258 Item: TDownloadItem;
3260 Item := TDownloadItem.Create;
3262 Item.ThreadItem := ThreadItem;
3263 Item.DownType := gdtThread;
3264 Item.ForceDownload := ForceDownload;
3265 FControlThread.AddItem(Item);
3266 if FWorkCount = 0 then begin
3268 Animate.Active := True;
3271 Screen.Cursor := crAppStart;
3279 procedure TGikoForm.PlaySound(SoundEventName: string);
3283 if not GikoSys.Setting.Mute then begin
3284 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
3285 if FileExists(FileName) then begin
3286 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
3287 sndPlaySound(nil, SND_SYNC);
3288 Application.ProcessMessages;
3290 sndPlaySound(PChar(FileName), SND_ASYNC);
3296 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
3297 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3299 FHistoryList.DeleteHistory( threadItem, TreeView, TreeType );
3302 procedure TGikoForm.ShowBBSTreeOld(
3310 FavoriteTreeView.Visible := False;
3311 FavoriteToolBar.Hide;
3312 TreeView.Visible := True;
3314 b := CabinetSelectPopupMenu.Items.Count - 1;
3315 for i := 0 to b do begin
3316 item := CabinetSelectPopupMenu.Items[ i ];
3317 if item is TBBSMenuItem then begin
3318 if TBBSMenuItem( item ).Data = inBBS then begin
3319 item.Checked := True;
3320 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3321 CabinetMenu.Items[ i ].Checked := True;
3322 GikoSys.Setting.CabinetIndex := i;
3326 item.Checked := False;
3327 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3328 CabinetMenu.Items[ i ].Checked := False;
3330 CabinetSelectToolButton.Caption := inBBS.Title;
3332 GikoDM.CabinetHistoryAction.Checked := False;
3333 GikoDM.CabinetFavoriteAction.Checked := False;
3335 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3336 FTreeType := gtt2ch;
3337 HistoryToolBar.Hide;
3338 FActiveBBS := inBBS;
3339 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3340 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3341 //?c???[??g?b?v?????I????
3342 if GetActiveList = nil then
3343 TreeView.Selected := TreeView.Items[0]
3345 for i := 0 to TreeView.Items.Count - 1 do begin
3346 if TreeView.Items[i].Data = GetActiveList then begin
3347 TreeView.Selected := TreeView.Items[i];
3351 TreeView.Selected := TreeView.Items[0]
3359 procedure TGikoForm.ShowBBSTree(
3368 FavoriteTreeView.Visible := False;
3369 FavoriteToolBar.Hide;
3370 TreeView.Visible := True;
3372 b := CabinetSelectPopupMenu.Items.Count - 1;
3373 for i := 0 to b do begin
3374 item := CabinetSelectPopupMenu.Items[ i ];
3375 if item is TBBSMenuItem then begin
3376 if TBBSMenuItem( item ).Data = inBBS then begin
3377 item.Checked := True;
3378 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3379 CabinetMenu.Items[ i ].Checked := True;
3380 GikoSys.Setting.CabinetIndex := i;
3384 item.Checked := False;
3385 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3386 CabinetMenu.Items[ i ].Checked := False;
3388 CabinetSelectToolButton.Caption := inBBS.Title;
3390 GikoDM.CabinetHistoryAction.Checked := False;
3391 GikoDM.CabinetFavoriteAction.Checked := False;
3393 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3394 or (not (CabinetPanel.Visible)) then begin
3395 FTreeType := gtt2ch;
3396 HistoryToolBar.Hide;
3397 FActiveBBS := inBBS;
3398 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3399 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3400 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3401 if GetActiveList = nil then begin
3403 TreeClick( TreeView.Items[0] );
3407 for i := 0 to TreeView.Items.Count - 1 do begin
3408 if TreeView.Items[i].Data = GetActiveList then begin
3409 TreeClick( TreeView.Items[i] );
3413 TreeClick( TreeView.Items[0] );
3421 procedure TGikoForm.ShowHistoryTree;
3426 if CabinetPanel.Visible then begin
3427 if FTreeType = gttHistory then begin
3428 CabinetVisible( False );
3429 GikoDM.CabinetHistoryAction.Checked := False;
3431 GikoDM.CabinetHistoryAction.Checked := True;
3434 CabinetVisible( True );
3435 GikoDM.CabinetHistoryAction.Checked := True;
3438 // BBS...BBS, History, Favorite
3439 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3441 FavoriteTreeView.Visible := False;
3442 TreeView.Visible := True;
3444 GikoDM.CabinetBBSAction.Checked := False;
3445 GikoDM.CabinetFavoriteAction.Checked := False;
3447 if FTreeType <> gttHistory then begin
3448 b := CabinetSelectPopupMenu.Items.Count - 1;
3449 for i := 0 to b do begin
3450 item := CabinetSelectPopupMenu.Items[ i ];
3451 if item is TBBSMenuItem then begin
3452 item.Checked := False;
3453 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3454 CabinetMenu.Items[ i ].Checked := False;
3458 FTreeType := gttHistory;
3459 HistoryToolBar.Show;
3460 FavoriteToolBar.Hide;
3461 FHistoryList.SetTreeNode( TreeView );
3462 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3466 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3468 ChangeEvent: TTVChangedEvent;
3469 ChangingEvent: TTVChangingEvent;
3473 if Item is TCategory then
3474 bbs := TCategory( Item ).ParenTBBS
3475 else if Item is TBoard then
3476 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3480 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3481 if Item <> FActiveList then begin
3483 ChangingEvent := nil;
3485 if not CallEvent then begin
3486 ChangeEvent := TreeView.OnChange;
3487 ChangingEvent := TreeView.OnChanging;
3490 if not CallEvent then begin
3491 TreeView.OnChange := nil;
3492 TreeView.OnChanging := nil;
3494 //Application.ProcessMessages;
3495 for i := 0 to TreeView.Items.Count - 1 do begin
3496 if TreeView.Items[i].Data = Item then begin
3497 TreeView.Items[i].Selected := True;
3499 TreeClick(TreeView.Items[i]);
3503 //Application.ProcessMessages;
3505 if not CallEvent then begin
3506 TreeView.OnChange := ChangeEvent;
3507 TreeView.OnChanging := ChangingEvent;
3512 if Item <> FActiveList then begin
3513 ActiveListColumnSave;
3514 if (Item is TBBS) or (Item is TCategory) then begin
3515 ListView.Columns.Clear;
3516 SetActiveList( Item );
3517 end else if Item is TBoard then begin
3518 if not TBoard( Item ).IsThreadDatRead then begin
3519 Screen.Cursor := crHourGlass;
3521 if not TBoard( Item ).IsThreadDatRead then
3522 GikoSys.ReadSubjectFile(TBoard( Item ));
3524 Screen.Cursor := crDefault;
3527 Sort.SetSortDate(Now());
3528 SetActiveList( Item );
3533 if Item is TBoard then begin // not TCategory
3534 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3535 if GikoSys.Setting.ListWidthState = glsMax then begin
3536 GikoDM.BrowserMinAction.Execute;
3537 if GikoForm.Visible then
3541 if GikoSys.Setting.ListHeightState = glsMax then begin
3542 GikoDM.BrowserMinAction.Execute;
3543 if GikoForm.Visible then
3550 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3551 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3553 listItem : TListItem;
3554 threadItem : TThreadItem;
3561 if not (GetActiveList is TBoard) then Exit;
3562 listItem := ListView.GetItemAt( X, Y );
3563 if listItem = nil then Exit;
3564 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3566 threadItem := TThreadItem(ListItem.Data);
3567 InsertBrowserTab(threadItem, False);
3568 if threadItem.IsLogFile then
3569 ListView.UpdateItems(listItem.Index, listItem.Index);
3573 //
\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Å
3574 if (ssDouble in Shift) then
3575 ListDoubleClick(Shift)
3583 Windows.ClientToScreen( ListView.Handle, pos );
3584 ListPopupMenu.Popup( pos.X, pos.Y );
3590 procedure TGikoForm.ListClick;
3592 ListItem: TListItem;
3593 ThreadItem: TThreadItem;
3595 if ListView.SelCount <> 1 then Exit;
3596 ListItem := ListView.Selected;
3597 if ListItem = nil then Exit;
3598 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3600 ThreadItem := TThreadItem(ListItem.Data);
3601 if ThreadItem.IsLogFile then begin
3602 InsertBrowserTab(ThreadItem);
3603 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3605 InsertBrowserTab(ThreadItem);
3608 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3609 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3610 if GikoSys.Setting.ListWidthState = glsMin then begin
3611 GikoDM.BrowserMaxAndFocusAction.Execute;
3614 if GikoSys.Setting.ListHeightState = glsMin then begin
3615 GikoDM.BrowserMaxAndFocusAction.Execute;
3621 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3623 ThreadItem: TThreadItem;
3626 shiftDown := (ssShift in Shift);
3628 if ListView.Selected = nil then Exit;
3630 if TObject(ListView.Selected.Data) is TCategory then begin
3631 SelectTreeNode(ListView.Selected.Data, True);
3632 end else if TObject(ListView.Selected.Data) is TBoard then begin
3633 SelectTreeNode(ListView.Selected.Data, True)
3634 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3635 Application.ProcessMessages;
3636 ThreadItem := TThreadItem(ListView.Selected.Data);
3637 DownloadContent(ThreadItem, shiftDown);
3639 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3640 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3641 if GikoSys.Setting.ListWidthState = glsMin then begin
3642 GikoDM.BrowserMaxAction.Execute;
3643 GikoDM.SetFocusForBrowserAction.Execute;
3646 if GikoSys.Setting.ListHeightState = glsMin then begin
3647 GikoDM.BrowserMaxAction.Execute;
3648 GikoDM.SetFocusForBrowserAction.Execute;
3655 procedure TGikoForm.BrowserMovement(const AName: string);
3657 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3658 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3659 and (FActiveContent <> nil) then begin
3660 FActiveContent.Move(AName);
3663 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
3664 procedure TGikoForm.BrowserMovement(scroll: Integer);
3666 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3667 and (FActiveContent <> nil) then begin
3668 FActiveContent.Move(scroll);
3671 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3673 if TObject(Node.Data) is TBBS then begin
3674 TBBS(Node.Data).NodeExpand := False;
3675 end else if TObject(Node.Data) is TCategory then begin
3676 TCategory(Node.Data).NodeExpand := False;
3677 end else if TObject(Node.Data) is TBoard then begin
3678 TBoard(Node.Data).NodeExpand := False;
3680 if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3681 TreeClick(TreeView.Selected);
3685 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3687 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3689 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3691 TreeSplitter.Visible := isVisible;
3692 CabinetPanel.Visible := isVisible;
3693 GikoDM.CabinetVisibleAction.Checked := isVisible;
3696 procedure TGikoForm.SelectListItem(List: TList);
3698 TmpListItem: TListItem;
3702 TmpListItem := ListView.Selected;
3703 while TmpListItem <> nil do begin
3704 List.Add(TmpListItem.Data);
3705 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3710 procedure TGikoForm.FormResize(Sender: TObject);
3713 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3714 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3716 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3717 if GikoSys.Setting.ListWidthState = glsMin then begin
3718 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3719 ViewPanel.Width := ThreadMainPanel.Width - 80;
3722 if GikoSys.Setting.ListHeightState = glsMin then begin
3723 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3724 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3728 FIsIgnoreResize := rtResizing;
3729 PostMessage( Handle, USER_RESIZED, 0, 0 );
3734 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3738 FTabHintIndex := -1;
3739 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3740 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3741 DeleteTab(i, BrowserTab.TabIndex);
3746 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3750 FTabHintIndex := -1;
3751 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3752 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3753 DeleteTab(i, BrowserTab.TabIndex);
3758 procedure TGikoForm.DeleteTab(index, selectIndex: Integer);
3760 browserRec : TBrowserRecord;
3764 browserRec := TBrowserRecord(BrowserTab.Tabs.Objects[index]);
3766 if browserRec.Browser <> nil then begin
3767 doc := browserRec.Browser.OleObject.Document;
3768 browserRec.Thread.ScrollTop := doc.Body.ScrollTop;
3771 browserRec.Thread.ScrollTop := 0;
3774 if(FActiveContent = browserRec) then
3775 FActiveContent := nil;
3776 if browserRec.Browser <> nil then begin
3777 j := FBrowsers.IndexOf(browserRec.Browser);
3779 FBrowsers.Move(j, BROWSER_COUNT - 1);
3782 BrowserTab.Tabs.BeginUpdate;
3784 GikoSys.Setting.LastCloseTabURL := browserRec.Thread.URL;
3786 if ( BrowserTab.Tabs.Count - 1 = index ) and
3787 ( BrowserTab.TabRect(index).Left
3788 <= BrowserTab.DisplayRect.Left ) then begin
3789 BrowserTab.ScrollTabs(-1);
3791 BrowserTab.Tabs.Delete(index);
3792 if selectIndex > index then begin
3793 BrowserTab.TabIndex := selectIndex - 1;
3795 if BrowserTab.Tabs.Count -1 >= selectIndex then
3796 BrowserTab.TabIndex := selectIndex
3798 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3801 BrowserTab.Tabs.EndUpdate;
3803 if BrowserTab.Tabs.Count = 0 then begin
3804 BrowserNullTab.Thread := nil;
3807 if(BrowserTab.TabIndex <> -1) and
3808 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3809 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
3810 ReleaseOldestBrowser;
3812 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3813 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3814 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3815 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3818 if( FActiveContent = nil) then
3819 BrowserTab.OnChange(nil);
3821 function TGikoForm.Hook(var Message: TMessage): Boolean;
3823 //
\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Ì
3824 //
\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ð
3828 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3830 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3834 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3836 bBoard, bCategory : Boolean;
3838 bBoard := (GetActiveList is TBoard);
3839 bCategory := (GetActiveList is TCategory);
3840 ItemRoundPMenu.Visible := bBoard;
3841 ItemReservPMenu.Visible := bBoard;
3842 LPMSep01.Visible := bBoard;
3843 ListRoundPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3844 ListReservPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3845 LPMSep02.Visible := bCategory or bBoard;
3846 KidokuPMenu.Visible := bBoard;
3847 MidokuPMenu.Visible := bBoard;
3848 UrlCopyPMenu.Visible := bCategory or bBoard;
3849 NameUrlCopyPMenu.Visible := bCategory or bBoard;
3850 AllSelectPMenu.Visible := bCategory or bBoard;
3851 LPMSep05.Visible := bCategory or bBoard;
3852 DeletePMenu.Visible := bBoard;
3853 LPMSep06.Visible := bCategory or bBoard;
3854 BoardFavoriteAddMenu.Visible := bCategory;
3855 ThreadFavoriteAddMenu.Visible := bBoard;
3856 SaveThreadFile.Visible := bBoard;
3857 AddRoundNameMenu(ItemReservPMenu);
3858 AddRoundNameMenu(ListReservPMenu);
3861 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3863 FClickNode := TreeView.Selected;
3864 if FClickNode = nil then begin
3865 TreeSelectThreadPupupMenu.Visible := False;
3866 TreeSelectBoardPupupMenu.Visible := False;
3867 TPMSep01.Visible := False;
3868 TreeSelectURLPupupMenu.Visible := False;
3869 TreeSelectNamePupupMenu.Visible := False;
3870 TreeSelectNameURLPupupMenu.Visible := False;
3871 TreeSelectFavoriteAddPupupMenu.Visible := False;
3872 TreeSelectLogDeleteSeparator.Visible := False;
3873 TreeSelectLogDeletePopupMenu.Visible := False;
3874 SearchBoardName.Visible := False;
3875 end else if TObject(FClickNode.Data) is TBoard then begin
3876 TreeSelectThreadPupupMenu.Visible := False;
3877 TreeSelectBoardPupupMenu.Visible := True;
3878 TPMSep01.Visible := True;
3879 TreeSelectURLPupupMenu.Visible := True;
3880 TreeSelectNamePupupMenu.Visible := True;
3881 TreeSelectNameURLPupupMenu.Visible := True;
3882 TreeSelectFavoriteAddPupupMenu.Visible := True;
3883 TreeSelectLogDeleteSeparator.Visible := False;
3884 TreeSelectLogDeletePopupMenu.Visible := False;
3885 SearchBoardName.Visible := True;
3886 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3887 TreeSelectThreadPupupMenu.Visible := False;
3888 TreeSelectBoardPupupMenu.Visible := True;
3889 TPMSep01.Visible := True;
3890 TreeSelectURLPupupMenu.Visible := True;
3891 TreeSelectNamePupupMenu.Visible := True;
3892 TreeSelectNameURLPupupMenu.Visible := True;
3893 TreeSelectFavoriteAddPupupMenu.Visible := True;
3894 TreeSelectLogDeleteSeparator.Visible := False;
3895 TreeSelectLogDeletePopupMenu.Visible := False;
3896 SearchBoardName.Visible := False;
3897 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3898 TreeSelectThreadPupupMenu.Visible := True;
3899 TreeSelectBoardPupupMenu.Visible := False;
3900 TPMSep01.Visible := True;
3901 TreeSelectURLPupupMenu.Visible := True;
3902 TreeSelectNamePupupMenu.Visible := True;
3903 TreeSelectNameURLPupupMenu.Visible := True;
3904 TreeSelectFavoriteAddPupupMenu.Visible := True;
3905 TreeSelectLogDeleteSeparator.Visible := True;
3906 TreeSelectLogDeletePopupMenu.Visible := True;
3907 SearchBoardName.Visible := False;
3908 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3909 TreeSelectThreadPupupMenu.Visible := True;
3910 TreeSelectBoardPupupMenu.Visible := False;
3911 TPMSep01.Visible := True;
3912 TreeSelectURLPupupMenu.Visible := True;
3913 TreeSelectNamePupupMenu.Visible := True;
3914 TreeSelectNameURLPupupMenu.Visible := True;
3915 TreeSelectFavoriteAddPupupMenu.Visible := True;
3916 TreeSelectLogDeleteSeparator.Visible := True;
3917 TreeSelectLogDeletePopupMenu.Visible := True;
3918 SearchBoardName.Visible := False;
3919 end else if (TObject(FClickNode.Data) is TCategory) then begin
3920 TreeSelectThreadPupupMenu.Visible := False;
3921 TreeSelectBoardPupupMenu.Visible := False;
3922 TPMSep01.Visible := False;
3923 TreeSelectURLPupupMenu.Visible := False;
3924 TreeSelectNamePupupMenu.Visible := True;
3925 TreeSelectNameURLPupupMenu.Visible := False;
3926 TreeSelectFavoriteAddPupupMenu.Visible := False;
3927 TreeSelectLogDeleteSeparator.Visible := False;
3928 TreeSelectLogDeletePopupMenu.Visible := False;
3929 SearchBoardName.Visible := True;
3930 end else if FClickNode.IsFirstNode then begin
3931 TreeSelectThreadPupupMenu.Visible := False;
3932 TreeSelectBoardPupupMenu.Visible := False;
3933 TPMSep01.Visible := False;
3934 TreeSelectURLPupupMenu.Visible := False;
3935 TreeSelectNamePupupMenu.Visible := True;
3936 TreeSelectNameURLPupupMenu.Visible := False;
3937 TreeSelectFavoriteAddPupupMenu.Visible := False;
3938 TreeSelectLogDeleteSeparator.Visible := False;
3939 TreeSelectLogDeletePopupMenu.Visible := False;
3940 SearchBoardName.Visible := True;
3942 TreeSelectThreadPupupMenu.Visible := False;
3943 TreeSelectBoardPupupMenu.Visible := False;
3944 TPMSep01.Visible := False;
3945 TreeSelectURLPupupMenu.Visible := False;
3946 TreeSelectNamePupupMenu.Visible := False;
3947 TreeSelectNameURLPupupMenu.Visible := False;
3948 TreeSelectFavoriteAddPupupMenu.Visible := False;
3949 TreeSelectLogDeleteSeparator.Visible := False;
3950 TreeSelectLogDeletePopupMenu.Visible := False;
3951 SearchBoardName.Visible := False;
3955 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
3956 var ppDisp: IDispatch; var Cancel: WordBool);
3965 threadItem: TThreadItem;
3966 aElement : IHTMLElement;
3967 senderBrowser : TWebBrowser;
3968 doc : IHTMLDocument2;
3971 Writeln(IntToStr(Integer(ppDisp)));
3975 if not( TObject(Sender) is TWebBrowser )then
3978 senderBrowser := TWebBrowser(Sender);
3979 doc := senderBrowser.ControlInterface.Document as IHTMLDocument2;
3980 if not Assigned(doc) then
3983 aElement := doc.activeElement;
3984 if not Assigned(aElement) then
3987 Text := aElement.Get_outerText;
3988 Html := aElement.Get_outerHTML;
3990 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
3991 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
3992 if GikoSys.Setting.ResAnchorJamp then begin
3994 Text := ZenToHan(Trim(Text));
3996 if(AnsiPos('>>', Text) = 1) then begin
3997 //Text := Copy(Text, 3, Length(Text) - 2);
4000 //Text := Copy(Text, 2, Length(Text) - 1);
4004 if AnsiPos('-', Text) <> 0 then begin
4005 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
4006 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
4007 wkIntTo := StrToIntDef(Text, 0);
4008 if wkIntTo < wkIntSt then
4011 wkIntSt := StrToIntDef(Text, 0);
4014 if wkIntSt <> 0 then begin
4015 FActiveContent.IDAnchorPopup('');
4016 MoveHisotryManager.pushItem(FActiveContent);
4017 if (Sender is TResPopupBrowser) then begin
4018 TResPopupBrowser(Sender).ChildClear;
4020 GetActiveContent(true),
4021 GetActiveContent(true).URL + '&st=' +
4022 IntToStr(wkIntSt) + '&to=' + IntToStr(wkIntSt));
4024 BrowserMovement(IntToStr(wkIntSt));
4029 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
4031 URL := GikoSys.GetHRefText(Html);
4032 URL := GikoSys.HTMLDecode(URL);
4033 if AnsiPos('BE:', URL) = 1 then begin
4034 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
4035 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
4036 threadItem := FActiveContent.Thread;
4037 if threadItem = nil then Exit;
4038 URL := BE_PHP_URL + BNum + '&u=d'
4039 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
4042 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
4043 ( AnsiPos('ftp://', URL) = 1) then begin
4044 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
4045 if GikoSys.Setting.LinkAddAddressBar then begin
4046 idx := AddressComboBox.Items.IndexOf(URL);
4047 if idx = -1 then begin
4048 AddressComboBox.Items.Insert(0, URL);
4049 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
4050 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
4052 AddressComboBox.Items.Delete(idx);
4053 AddressComboBox.Items.Insert(0, URL);
4056 if (Sender is TResPopupBrowser) then begin
4057 TResPopupBrowser(Sender).ChildClear
4060 MoveHisotryManager.pushItem(FActiveContent);
4067 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
4069 if Mouse.Capture <> 0 then
4071 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4072 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
4073 FBrowserSizeWidth := ViewPanel.Width;
4075 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
4076 FBrowserSizeHeight := ViewPanel.Height;
4078 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4079 if ViewPanel.Width < 2 then begin
4080 ViewPanel.Width := 1;
4081 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
4082 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
4083 GikoSys.Setting.ListWidthState := glsMax;
4084 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
4085 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
4086 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
4087 GikoSys.Setting.ListWidthState := glsMin;
4089 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
4090 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
4091 GikoSys.Setting.ListWidthState := glsNormal;
4094 if ViewPanel.Height < 2 then begin
4095 ViewPanel.Height := 1;
4096 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4097 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4098 GikoSys.Setting.ListHeightState := glsMax;
4099 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
4100 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4101 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4102 GikoSys.Setting.ListHeightState := glsMin;
4104 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4105 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4106 GikoSys.Setting.ListHeightState := glsNormal;
4109 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
4110 FBrowserSizeHeight := ViewPanel.Height
4111 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
4112 FBrowserSizeWidth := ViewPanel.Width;}
4115 procedure TGikoForm.BrowserTabChange(Sender: TObject);
4120 BrowserTab.Tabs.BeginUpdate;
4122 if not BrowserTab.Dragging then begin
4123 FTabHintIndex := -1;
4124 BrowserTab.Hint := '';
4125 idx := BrowserTab.TabIndex;
4126 if idx = -1 then begin
4127 SetContent(BrowserNullTab);
4129 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
4130 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
4131 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
4133 FBrowsers.Move(j ,0);
4135 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
4136 (FActiveContent.Browser <> BrowserNullTab.Browser) and
4137 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
4138 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4140 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
4141 ReleaseOldestBrowser;
4143 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
4144 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
4145 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4147 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
4148 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
4149 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4151 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
4152 AddressComboBox.Text := GetActiveContent.URL;
4154 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
4155 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
4158 GikoDM.SetFocusForBrowserAction.Execute;
4162 BrowserTab.Tabs.EndUpdate;
4167 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
4168 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
4174 if Button = mbMiddle then begin
4175 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
4178 p := BrowserTab.ScreenToClient(p);
4179 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
4181 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4182 end else if Button = mbLeft then begin
4183 FDragWFirst := true;
4184 FMouseDownPos.X := X;
4185 FMouseDownPos.Y := Y;
4190 procedure TGikoForm.SetBrowserTabState;
4192 CoolBand: TCoolBand;
4194 BrowserBottomPanel.AutoSize := False;
4195 if GikoSys.Setting.BrowserTabVisible then begin
4197 BrowserTab.Tabs.BeginUpdate;
4199 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
4200 BrowserTab.Style := tsTabs;
4201 if GikoSys.Setting.BrowserTabPosition = gtpTop then
4202 BrowserTab.TabPosition := tpTop
4204 BrowserTab.TabPosition := tpBottom;
4205 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
4206 BrowserTab.TabPosition := tpTop;
4207 BrowserTab.Style := tsButtons;
4209 BrowserTab.TabPosition := tpTop;
4210 BrowserTab.Style := tsFlatButtons
4213 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
4214 BrowserTab.Parent := BrowserTabToolBar;
4215 BrowserBottomPanel.Hide;
4216 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4217 if CoolBand <> nil then
4218 CoolBand.Visible := True;
4220 BrowserTab.Parent := BrowserBottomPanel;
4221 BrowserTab.Top := 0;
4222 BrowserTab.Left := 0;
4223 BrowserBottomPanel.Show;
4224 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4225 if CoolBand <> nil then
4226 CoolBand.Visible := False;
4229 BrowserTab.Tabs.EndUpdate;
4233 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4234 if CoolBand <> nil then
4235 CoolBand.Visible := False;
4236 BrowserBottomPanel.Visible := False;
4237 GikoDM.AllTabCloseAction.Execute;
4241 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
4242 Y: Integer; State: TDragState; var Accept: Boolean);
4246 idx := BrowserTab.IndexOfTabAt(X, Y);
4247 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
4250 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
4255 FDragWFirst := False;
4256 idx := BrowserTab.IndexOfTabAt(X, Y);
4258 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
4261 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
4262 Shift: TShiftState; X, Y: Integer);
4265 ThreadItem: TThreadItem;
4268 TabIdx := BrowserTab.IndexOfTabAt(x, y);
4270 if ( ssLeft in Shift ) then begin
4271 if (FDragWFirst) then begin
4272 BrowserTab.EndDrag(false);
4273 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
4276 BrowserTab.EndDrag(false);
4277 FDragWFirst := false;
4280 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
4281 Application.CancelHint;
4282 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
4283 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
4284 BrowserTab.Hint := ThreadItem.Title;
4285 Application.ShowHint := True;
4287 BrowserTab.Hint := '';
4288 Application.ShowHint := True;
4290 FTabHintIndex := TabIdx;
4295 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
4296 const pDisp: IDispatch; var URL: OleVariant);
4298 BrowserRecord :TBrowserRecord;
4300 doc : IHTMLDocument2;
4301 threadItem : TThreadItem;
4303 if TObject(Sender) is TWebBrowser then begin
4304 BrowserRecord := nil;
4305 if TWebBrowser(Sender) <> Browser then begin
4306 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4307 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
4308 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
4312 if BrowserRecord <> nil then begin
4313 if BrowserRecord.Event <> nil then
4314 BrowserRecord.Event.Free;
4315 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, BrowserRecord.Browser.ControlInterface.Document, HTMLDocumentEvents2);
4316 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4317 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4320 if GetActiveContent <> nil then begin
4321 if FEvent <> nil then
4323 FEvent := THTMLDocumentEventSink.Create(Self, Browser.ControlInterface.Document, HTMLDocumentEvents2);
4324 FEvent.OnContextMenu := OnDocumentContextMenu;
4325 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4327 if FEvent <> nil then begin
4335 if (BrowserRecord <> nil) and
4336 Assigned( BrowserRecord.Thread ) then begin
4337 threadItem := BrowserRecord.Thread;
4339 if (threadItem.JumpAddress > 0) then begin
4340 if threadItem.UnRead then begin
4341 threadItem.UnRead := False;
4343 RefreshListView(threadItem);
4345 //
\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®
4346 //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4347 if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4348 BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4349 threadItem.JumpAddress := 0;
4351 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4354 end else if threadItem.UnRead then begin
4355 threadItem.UnRead := False;
4357 BrowserRecord.Move('new');
4358 RefreshListView(threadItem);
4359 end else if threadItem.ScrollTop <> 0 then begin
4361 doc := BrowserRecord.Browser.ControlInterface.Document as IHTMLDocument2;
4362 (doc.body as IHTMLElement2).ScrollTop := threadItem.ScrollTop;
4365 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4370 LockWindowUpdate(0);
4373 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4375 AddRoundNameMenu(RoundNamePopupMenu.Items);
4378 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4384 Item := TMenuItem.Create(Self);
4385 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4386 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4388 Item := TMenuItem.Create(Self);
4389 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4390 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4392 Item := TMenuItem.Create(Self);
4393 Item.Caption := '-';
4395 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4396 Item := TMenuItem.Create(Self);
4397 Item.Caption := RoundList.RoundNameList[i];
4398 Item.OnClick := SetSelectRoundName;
4403 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4405 threadItem : TThreadItem;
4407 if ParentName <> 'RoundItem' then begin
4408 SetSelectItemRound(RoundFlag, RoundName);
4410 threadItem := GetActiveContent;
4411 if threadItem <> nil then begin
4412 threadItem.RoundName := RoundName;
4414 RoundList.RoundNameList.Add(RoundName);
4415 threadItem.Round := RoundFlag;
4420 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4425 List := TList.Create;
4427 SelectListItem(List);
4428 for i := 0 to List.Count - 1 do begin
4429 if TObject(List[i]) is TBoard then begin
4430 TBoard(List[i]).RoundName := RoundName;
4432 RoundList.RoundNameList.Add(RoundName);
4433 TBoard(List[i]).Round := RoundFlag;
4434 end else if TObject(List[i]) is TThreadItem then begin
4435 if TThreadItem(List[i]).IsLogFile then begin
4436 TThreadItem(List[i]).RoundName := RoundName;
4438 RoundList.RoundNameList.Add(RoundName);
4439 TThreadItem(List[i]).Round := RoundFlag;
4448 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4450 MenuItem: TMenuItem;
4452 if Sender is TMenuItem then begin
4453 MenuItem := TMenuItem(Sender);
4454 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4459 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4464 if CoolBar = nil then
4466 for i := 0 to CoolBar.Bands.Count - 1 do begin
4467 if CoolBar.Bands[i].Control = Control then begin
4468 Result := CoolBar.Bands[i];
4474 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4476 if BrowserTab.Parent = BrowserTabToolBar then
4477 BrowserTab.Width := BrowserTabToolBar.Width;
4480 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4485 procedure TGikoForm.SetMenuFont;
4487 // GikoSys.MenuFont(MenuToolBar.Font);
4488 // MenuToolBar.Buttons[0].AutoSize := False;
4489 // MenuToolBar.Buttons[0].AutoSize := True;
4490 // MenuToolBar.Font.Color := clMenuText;
4491 GikoSys.MenuFont(MainCoolBar.Font);
4492 MenuToolBar.Buttons[0].AutoSize := False;
4493 MenuToolBar.Buttons[0].AutoSize := True;
4494 MainCoolBar.AutoSize := False;
4495 MainCoolBar.AutoSize := True;
4496 GikoSys.MenuFont(ListCoolBar.Font);
4497 GikoSys.MenuFont(BrowserCoolBar.Font);
4498 // MenuToolBar.Font.Color := clMenuText;
4501 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4505 if FavoriteDM.Modified then begin
4508 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4509 NewMenu := TMenuItem.Create(MainMenu);
4510 NewMenu.Action := GikoDM.FavoriteAddAction;
4511 FavoriteMenu.Add(NewMenu);
4512 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4513 NewMenu := TMenuItem.Create(FavoriteMenu);
4514 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4515 FavoriteMenu.Add(NewMenu);
4516 //
\83Z
\83p
\83\8c\81[
\83^
4517 FavoriteMenu.InsertNewLineAfter(NewMenu);
4518 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4519 FavoriteDM.Modified := false;
4523 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4526 NewMenu: array of TMenuItem;
4528 SetLength(NewMenu, Node.Count);
4529 Node := Node.getFirstChild;
4531 while ( Node <> nil ) do begin
4532 NewMenu[i] := TFavoriteMenuItem.Create(nil);
4533 NewMenu[i].AutoHotkeys := maAutomatic;
4534 NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4535 TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4537 if TObject(Node.Data) is TFavoriteFolder then begin
4538 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4539 CreateFavMenu(Node, NewMenu[i]);
4540 end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4541 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4542 NewMenu[i].OnClick := FavoriteClick;
4543 end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4544 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4545 NewMenu[i].OnClick := FavoriteClick;
4548 Node := Node.getNextSibling;
4550 MenuItem.Add(NewMenu);
4553 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4555 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';
4556 TitleAdd: String = '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á';
4558 Dlg : TFavoriteAddDialog;
4564 if Item is TFavoriteBoardItem then
4565 Item := TFavoriteBoardItem( Item ).Item
4566 else if Item is TFavoriteThreadItem then
4567 Item := TFavoriteThreadItem( Item ).Item;
4569 Node := FavoriteTreeView.Items.GetFirstNode;
4570 if Item is TBoard then begin
4571 ItemURL := TBoard( Item ).URL;
4572 while Node <> nil do begin
4574 if TObject( Data ) is TFavoriteBoardItem then begin
4575 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4576 if Application.MessageBox(PChar(MsgAdd) , PChar(TitleAdd), MB_YESNO ) = IDNO then
4581 Node := Node.GetNext;
4583 Dlg := TFavoriteAddDialog.Create(Self);
4585 Dlg.SetBoard( TBoard( Item ) );
4590 end else if Item is TThreadItem then begin
4591 ItemURL := TThreadItem( Item ).URL;
4592 while Node <> nil do begin
4594 if TObject( Data ) is TFavoriteThreadItem then begin
4595 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
4596 if Application.MessageBox( PChar(MsgAdd), PChar(TitleAdd), MB_YESNO ) = IDNO then
4601 Node := Node.GetNext;
4603 Dlg := TFavoriteAddDialog.Create(Self);
4605 Dlg.SetThreadItem( TThreadItem( Item ) );
4615 procedure TGikoForm.FavoriteClick(Sender: TObject);
4617 FavoriteClick( Sender, True );
4620 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4623 ThreadItem: TThreadItem;
4624 FavBoard: TFavoriteBoardItem;
4625 FavThread: TFavoriteThreadItem;
4629 if Sender is TFavoriteMenuItem then
4630 Item := TFavoriteMenuItem(Sender).Data
4631 else if Sender is TLinkToolButton then
4632 Item := TLinkToolButton(Sender).Data
4633 else if Sender is TTreeNode then
4634 Item := TTreeNode( Sender ).Data
4638 if TObject(Item) is TFavoriteBoardItem then begin
4639 FavBoard := TFavoriteBoardItem(Item);
4640 Board := FavBoard.Item;
4641 if Board <> nil then begin
4642 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4643 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4644 SelectTreeNode(Board, True);
4646 end else if TObject(Item) is TFavoriteThreadItem then begin
4647 FavThread := TFavoriteThreadItem(Item);
4648 ThreadItem := FavThread.Item;
4649 if ThreadItem = nil then
4652 InsertBrowserTab(ThreadItem, ActiveTab);
4654 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4655 if GikoSys.Setting.ListWidthState = glsMin then begin
4656 GikoDM.BrowserMaxAndFocusAction.Execute;
4659 if GikoSys.Setting.ListHeightState = glsMin then begin
4660 GikoDM.BrowserMaxAndFocusAction.Execute;
4666 procedure TGikoForm.BBSMenuItemOnClick(
4671 if Sender is TBBSMenuItem then
4672 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4676 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4678 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4681 //!
\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é)
4682 procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4684 stRes, edRes : Int64;
4685 browserRec : TBrowserRecord;
4686 threadNumber : String;
4687 doc : IHTMLDocument2;
4691 Thread.JumpAddress := 0;
4692 //
\83^
\83u
\82ð
\90¶
\90¬
4693 browserRec := InsertBrowserTab(Thread);
4694 if (browserRec <> nil) then begin
4695 // JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N
\82·
\82é
4696 threadNumber := ChangeFileExt(Thread.FileName, '');
4697 GikoSys.GetPopupResNumber( URL, stRes, edRes );
4698 //
\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
4699 if (StrToInt64(threadNumber) = stRes) then begin
4700 if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4701 and (Pos('&st=' + threadNumber , URL) = 0) then begin
4705 if ( stRes > 0 ) then begin
4706 Thread.JumpAddress := stRes;
4708 //
\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é
4709 if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4710 DownloadContent(Thread);
4711 end else if (not browserRec.Repaint) and (stRes > 0) then begin
4712 browserRec.Move(IntToStr(stRes));
4713 Thread.JumpAddress := 0;
4715 doc := browserRec.Browser.ControlInterface.Document as IHTMLDocument2;
4716 if Assigned(doc) then
4717 Thread.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
4724 procedure TGikoForm.MoveToURL(const inURL: string; KeyMask: Boolean = False);
4726 protocol, host, path, document, port, bookmark : string;
4727 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4729 BBSID, BBSKey: string;
4730 {tmpBoard,} Board: TBoard;
4731 ThreadItem: TThreadItem;
4734 tmpThread : TThreadItem;
4735 shiftDown : Boolean;
4739 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4740 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4741 //
\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é
4742 if not KeyMask then begin
4743 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4744 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4745 if shiftDown then begin
4746 GikoSys.OpenBrowser(inURL, gbtUserApp);
4748 end else if ctrlDown then begin
4749 GikoSys.OpenBrowser(inURL, gbtIE);
4754 //=====
\83v
\83\89\83O
\83C
\83\93
4757 bi := Length(BoardGroups) - 1;
4758 for i := 1 to bi do begin
4759 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4760 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4763 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4764 Board := BBSsFindBoardFromURL( boardURL );
4767 if Board = nil then begin
4769 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4770 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4773 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4774 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4775 ShowBBSTree( BBSs[ 1 ] );
4778 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4779 if not Board.IsThreadDatRead then begin
4780 GikoSys.ReadSubjectFile( Board );
4784 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4785 if ThreadItem = nil then begin
4786 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4787 ThreadItem := tmpThread;
4788 Board.Insert( 0, ThreadItem );
4789 if ActiveList is TBoard then begin
4790 if TBoard(ActiveList) = Board then
4791 ListView.Items.Count := ListView.Items.Count + 1;
4796 OpenThreadItem(ThreadItem, inURL);
4803 Board := BBSsFindBoardFromURL(
4804 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4806 if Board <> nil then begin
4807 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4808 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4809 SelectTreeNode( Board, True );
4817 // 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¢
4821 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4822 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4823 Board := BBSsFindBoardFromURL( boardURL );
4824 if Board = nil then begin
4825 //
\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
4826 GikoSys.OpenBrowser(inURL, gbtUserApp);
4829 //
\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é
4831 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4832 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4833 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4834 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4835 GikoSys.OpenBrowser(inURL, gbtUserApp);
4840 if not Board.IsThreadDatRead then
4841 GikoSys.ReadSubjectFile(Board);
4842 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4843 ThreadItem := Board.FindThreadFromURL( URL );
4844 //
\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)
4845 if ThreadItem = nil then begin
4846 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4849 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ª
\82È
\82¢
\82È
\82ç
\90¶
\90¬
\82·
\82é
\81B
4850 if ThreadItem = nil then begin
4851 ThreadItem := TThreadItem.Create( nil, Board, URL );
4852 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4853 Board.Insert(0, ThreadItem);
4854 if ActiveList is TBoard then begin
4855 if TBoard(ActiveList) = Board then
4856 ListView.Items.Count := ListView.Items.Count + 1;
4859 //
\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é
4860 if (not ThreadItem.IsLogFile) then begin
4861 if AnsiPos(Host, Board.URL) = 0 then
4862 ThreadItem.DownloadHost := Host
4864 ThreadItem.DownloadHost := '';
4866 OpenThreadItem(ThreadItem, inURL);
4870 Board := BBSsFindBoardFromURL( inURL );
4871 if Board = nil then begin
4872 GikoSys.OpenBrowser(inURL, gbtAuto);
4874 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4875 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4876 SelectTreeNode( Board, True );
4881 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4883 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4884 CoolBarResized( Sender, MainCoolBar );
4887 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4888 Shift: TShiftState);
4890 if Key = VK_RETURN then
4891 GikoDM.MoveToAction.Execute;
4894 procedure TGikoForm.BrowserEnter(Sender: TObject);
4896 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4899 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4901 CDS:PCopyDataStruct;
4905 CDS := Message.CopyDataStruct;
4906 GetMem(PC, CDS^.cbData);
4908 lstrcpy(PC,CDS^.lpData);
4909 SetString(sURL, PC,lstrlen(PC));
4914 Message.Result := 1;
4917 procedure TGikoForm.WndProc(var Message: TMessage);
4919 senderBrowser : TWebBrowser;
4925 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4928 if Message.WParam = SC_MINIMIZE then begin
4930 PostMessage(Handle, USER_MINIMIZED, 0, 0);
4933 TreeClick( TreeView.Selected );
4938 if (GikoSys.Setting.StoredTaskTray) then begin
4945 USER_DOCUMENTCOMPLETE:
4946 if (Message.WParam <> 0) and
4947 (TObject(Message.WParam) is TWebBrowser) then begin
4948 senderBrowser := TWebBrowser( Message.WParam );
4949 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
4952 if (TObject(Message.WParam) is TResPopupBrowser) then begin
4954 TResPopupBrowser( Message.WParam ).Clear;
4957 end else if (TObject(Message.WParam) is TPreviewBrowser) then begin
4958 if FPreviewBrowser <> nil then begin
4959 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
4969 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
4974 //
\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Í
4975 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
4976 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
4977 if Msg.CharCode in [VK_BACK] then begin
4978 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4979 if Msg.KeyData > 0 then begin
4982 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4986 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
4987 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
4990 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4993 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
4994 if Msg.CharCode in [VK_BACK] then begin
4995 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4996 if Msg.KeyData > 0 then begin
4999 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
5002 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
5005 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
5009 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
5013 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
5018 PreviewTimer.Enabled := False;
5022 ARect := FPreviewBrowser.GetWindowRect(p);
5024 FPreviewBrowser.PreviewImage(FPreviewURL);
5026 if ARect.Bottom > Screen.DesktopHeight then begin
5027 OffsetRect(ARect, 0, -(ARect.Bottom - Screen.DesktopHeight));
5029 if (ARect.Right > Screen.DesktopWidth) then begin
5030 OffsetRect(ARect, -(ARect.Right - Screen.DesktopWidth), 0);
5032 if (ARect.Left < Screen.DesktopLeft) then begin
5033 OffsetRect(ARect, +(Screen.DesktopLeft - ARect.Left), 0);
5035 if (ARect.Top < Screen.DesktopTop) then begin
5036 OffsetRect(ARect, 0, (Screen.DesktopTop - ARect.Top));
5039 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST,
5040 ARect.Left, ARect.Top,
5041 (ARect.Right - ARect.Left), (ARect.Bottom - ARect.Top),
5042 SWP_NOACTIVATE or SWP_HIDEWINDOW);
5044 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
5045 FPreviewBrowserRect := ARect;
5048 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
5052 if PreviewTimer.Enabled then
5053 PreviewTimer.Enabled := False;
5055 //Window
\8aO
\82É
\88Ú
\93®
\82µ
\82½
\82Æ
\82«
\82Í
\8fÁ
\82¦
\82é
\82æ
\82¤
\82É
\82·
\82é
\82½
\82ß
\95\9c\8a\88
5056 if (FResPopupBrowser <> nil) and (IsWindowVisible(FResPopupBrowser.Handle)) then begin
5057 //
\89E
\83N
\83\8a\83b
\83N
\82Ì
\8e\9e\82Í
\8fÁ
\82³
\82È
\82¢
\82æ
\82¤
\82É
\8fð
\8c\8f\92Ç
\89Á
5058 if (Message.MouseMsg <> WM_RBUTTONUP) then begin
5059 FResPopupBrowser.Clear;
5063 if (FPreviewBrowser <> nil)
5064 and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
5065 //
\82±
\82±
\82Å
\8fÁ
\82³
\82ê
\82é
\82Ì
\82ª
\96â
\91è
5066 //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Å
\95\
\8e¦
\94Í
\88Í
\94»
\92è
\82Å
\82«
\82Ä
\82¢
\82é
\82Í
\82¸
5067 Pos := Mouse.CursorPos;
5068 Pos.X := Pos.X + Left;
5069 Pos.Y := Pos.Y + Top;
5070 if (FPreviewBrowserRect.Left > Pos.X) or
5071 (FPreviewBrowserRect.Right < Pos.X) or
5072 (FPreviewBrowserRect.Top > Pos.Y) or
5073 (FPreviewBrowserRect.Bottom < Pos.Y) then begin
5074 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
5078 Message.Result := 1;
5081 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
5083 GikoDM.MsgBarCloseAction.Execute;
5086 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
5088 doc: IHtmlDocument2;
5089 Range: IHTMLTxtRange;
5092 ThreadItem: TThreadItem;
5095 FactiveContent.IDAnchorPopup('');
5097 doc := FactiveContent.Browser.ControlInterface.Document as IHtmlDocument2;
5098 if not Assigned(doc) then
5101 Range := doc.selection.createRange as IHTMLTxtRange;
5102 if not Assigned(Range) then
5105 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
5106 s := ZenToHan(Trim(s));
5107 if GikoSys.IsNumeric(s) then begin
5108 Num := StrToInt64Def(s, -1);
5109 ThreadItem := GetActiveContent(true);
5110 if (ThreadItem <> nil) and (Num <= ThreadItem.Count)
5111 and (Num > 0)then begin
5112 CreateResPopupBrowser;
5113 FResPopupBrowser.CreateNewBrowser.PopupType := gptThread;
5114 HTMLCreater.SetResPopupText(FResPopupBrowser.CreateNewBrowser, ThreadItem, Num, Num, False, False);
5115 FResPopupBrowser.Popup;
5124 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
5126 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
5127 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
5129 if FTreeType = gttHistory then begin
5130 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
5131 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
5134 TreeView.Items.Clear;
5138 procedure TGikoForm.SetLinkBar;
5142 ToolButton: TLinkToolButton;
5143 MenuItem: TMenuItem;
5144 oldIgnoreResize : TResizeType;
5146 oldIgnoreResize := FIsIgnoreResize;
5147 FIsIgnoreResize := rtResizing;
5148 MainCoolBar.Bands.BeginUpdate;
5150 LinkBarPopupMenu.Items.Clear;
5151 for i := LinkToolBar.ButtonCount - 1 downto 0 do
5152 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
5153 LinkToolBar.Buttons[i].Free;
5154 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5155 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5156 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5157 ToolButton := TLinkToolButton.Create(LinkToolBar);
5158 // ToolButton.Parent := LinkToolBar;
5159 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
5160 MenuItem := TMenuItem.Create(Self);
5161 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
5162 LinkBarPopupMenu.Items.Add(MenuItem);
5163 ToolButton.MenuItem := MenuItem;
5164 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
5165 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
5166 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
5167 ToolButton.OnClick := FavoriteClick;
5168 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
5169 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
5170 ToolButton.OnClick := FavoriteClick;
5172 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
5173 ToolButton.Left := 10000;
5174 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
5175 ToolButton.AutoSize := True;
5176 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
5177 ToolButton.OnDragOver := FavoriteDragOver;
5178 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
5179 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
5180 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
5181 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
5182 //ToolButton.DragMode := dmAutomatic;
5183 ToolButton.DragMode := dmManual;
5184 ToolButton.PopupMenu := FavoriteTreePopupMenu;
5186 LinkToolBar.InsertControl(ToolButton);
5191 { if LinkToolBar.ButtonCount = 0 then begin
5192 ToolButton := TLinkToolButton.Create(LinkToolBar);
5193 ToolButton.Style := tbsButton;
5194 ToolButton.ImageIndex := -1;
5195 ToolButton.Caption := '';
5196 LinkToolBar.InsertControl(ToolButton);
5199 MainCoolBar.Bands.EndUpdate;
5200 LoadCoolBarSettings;
5201 FIsIgnoreResize := oldIgnoreResize;
5205 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5213 if Sender = FavoriteTreeView then begin
5214 Node := FavoriteTreeView.GetNodeAt(X, Y);
5219 bound := Node.DisplayRect( False );
5220 height := bound.Bottom - bound.Top;
5221 if (bound.Top + height / 2) <= Y then
5222 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
5227 if Node.IsFirstNode then
5232 if FDropSpaceNode <> nil then
5233 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
5236 if Change then begin
5237 if FDropSpaceNode <> nil then
5238 FDropSpaceNode.Free;
5240 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
5241 FDropSpaceNode.MoveTo( Node, naInsert );
5242 FDropSpaceNode.ImageIndex := -1;
5243 FDropSpaceNode.SelectedIndex := -1;
5247 if Source = FavoriteTreeView then begin
5248 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
5253 end else if Source = BrowserTab then
5255 else if Source = ListView then
5257 else if Source is TLinkToolButton then
5259 else if Source = TreeView then
5265 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5268 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
5271 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
5273 // FDragging := true;
5276 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
5278 SenderNode: TTreeNode;
5279 LinkToolButton: TLinkToolButton;
5282 LinkToolButton := TLinkToolButton( Sender );
5283 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5284 SenderNode.Selected := False;
5285 FavoriteDragDrop( SenderNode, Source );
5291 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5293 favButton : TLinkToolButton;
5294 favThreadItem : TFavoriteThreadItem;
5300 if Sender is TLinkToolButton then begin
5301 favButton := TLinkToolButton( Sender );
5302 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5303 favThreadItem := TFavoriteThreadItem( favButton.Data );
5304 if favThreadItem.Item <> nil then
5305 InsertBrowserTab( favThreadItem.Item, False );
5313 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5317 TToolButton( Sender ).DragMode := dmManual;
5318 if ssLeft in Shift then begin
5319 // 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)
5320 if FDragTime = 0 then begin
5321 FDragTime := GetTickCount();
5323 Now := GetTickCount();
5324 if (Now - FDragTime) > 500 then begin
5325 if FDragButton <> TToolButton( Sender ) then begin
5327 FDragButton := TToolButton( Sender );
5328 TToolButton(Sender).BeginDrag(false ,5);
5331 {$IF Defined(debug)}
5332 ShowMessage('Error');
5343 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5348 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5353 for i := 0 to ToolBar.ButtonCount - 1 do
5354 if ToolBar.Buttons[i].Visible then
5355 Result := Result + ToolBar.Buttons[i].Width;
5358 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5360 Control : TWinControl;
5363 Control := FindControl(BandInfo^.hwndChild);
5364 if Control = nil then
5367 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5368 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5369 idx := MainCoolBar.Bands[ i ].ID;
5373 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5374 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
5375 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5376 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5377 BandInfo^.cxMinChild := 0;
5378 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
5379 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5380 end else if Control = LinkToolBar then begin
5381 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5382 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5383 BandInfo^.cxMinChild := 0;
5384 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5385 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5386 end else begin // AddressToolBar
5387 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5388 BandInfo^.cxMinChild := 0;
5389 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5393 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5399 ChevronPopupMenu.Items.Clear;
5401 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5402 if MainCoolBar.Bands[ i ].Visible then begin
5403 if Idx = Int64(RebarChevron^.uBand) then begin
5410 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5411 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5413 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5414 ToolBarChevronMenu(StdToolBar);
5415 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5419 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5420 ChevronPopupMenu.Popup(p.x, p.y);
5424 procedure TGikoForm.MenuBarChevronMenu;
5425 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5431 for i := 0 to MenuItem.Count - 1 do begin
5433 if MenuItem[i] is TFavoriteMenuItem then begin
5434 Item := TFavoriteMenuItem.Create(Self);
5435 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5437 Item := TMenuItem.Create(Self);
5438 Item.Caption := MenuItem[i].Caption;
5439 Item.Action := MenuItem[i].Action;
5440 Item.ImageIndex := MenuItem[i].ImageIndex;
5441 Item.OnClick := MenuItem[i].OnClick;
5442 PopupItem.Add(Item);
5443 if MenuItem[i].Count > 0 then
5444 SetSubMenu(MenuItem[i], Item);
5453 ChevronPopupMenu.Items.Clear;
5454 ChevronPopupMenu.Images := MainMenu.Images;
5455 bw := GetWidthAllToolButton(MenuToolBar);
5456 if MenuToolBar.Width < bw then begin
5458 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5459 w := w + MenuToolBar.Buttons[i].Width;
5460 if MenuToolBar.Width <= w then begin
5461 Item := TMenuItem.Create(Self);
5462 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5463 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5464 ChevronPopupMenu.Items.Add(Item);
5465 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5471 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5472 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5477 if Assigned(PopupMenu.OnPopup) then
5478 PopupMenu.OnPopup(nil);
5479 for i := 0 to PopupMenu.Items.Count - 1 do begin
5481 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5482 Item := TFavoriteMenuItem.Create(Self);
5483 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5485 Item := TMenuItem.Create(Self);
5486 Item.Caption := PopupMenu.Items[i].Caption;
5487 Item.Action := PopupMenu.Items[i].Action;
5488 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5489 Item.OnClick := PopupMenu.Items[i].OnClick;
5490 PopupItem.Add(Item);
5499 ChevronPopupMenu.Items.Clear;
5500 ChevronPopupMenu.Images := ToolBar.HotImages;
5501 bw := GetWidthAllToolButton(ToolBar);
5502 if ToolBar.Width < bw then begin
5504 for i := 0 to ToolBar.ButtonCount - 1 do begin
5505 if ToolBar.Buttons[i].Visible then
5506 w := w + ToolBar.Buttons[i].Width;
5507 if ToolBar.Width <= w then begin
5508 if ToolBar.Buttons[i].Tag = 0 then begin
5509 Item := TMenuItem.Create(Self);
5510 if ToolBar.Buttons[i].Style = tbsSeparator then
5513 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5514 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5517 Item.Caption := ToolBar.Buttons[i].Caption;
5518 Item.Action := ToolBar.Buttons[i].Action;
5520 //Item.Visible := True;
5522 ChevronPopupMenu.Items.Add(Item);
5523 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5525 Item.OnClick := nil;
5526 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5534 procedure TGikoForm.LinkBarChevronMenu;
5539 Item: TFavoriteMenuItem;
5541 Button: TLinkToolButton;
5543 ChevronPopupMenu.Items.Clear;
5544 ChevronPopupMenu.Images := LinkToolBar.Images;
5545 bw := GetWidthAllToolButton(LinkToolBar);
5546 if LinkToolBar.Width < bw then begin
5548 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5549 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5550 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5551 w := w + LinkToolBar.Buttons[j].Width;
5552 if LinkToolBar.Width <= w then begin
5553 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5554 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5555 Item := TFavoriteMenuItem.Create(Self);
5556 if TObject(Button.Data) is TFavoriteFolder then begin
5557 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5558 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5559 Item.OnClick := FavoriteClick;
5560 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5561 Item.OnClick := FavoriteClick;
5563 Item.Data := Button.Data;
5564 Item.Caption := LinkToolBar.Buttons[j].Caption;
5565 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5566 ChevronPopupMenu.Items.Add(Item);
5577 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5578 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5579 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5581 \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É
5582 \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
5584 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5586 bandInfo : tagREBARBANDINFOA;
5587 pBandInfo : PReBarBandInfoA;
5594 pBandInfo := @bandInfo;
5595 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5596 bandInfo.cbSize := sizeof( bandInfo );
5597 bandInfo.hwndChild := h;
5598 bandInfo.cyMinChild := bar.Height;
5599 bar.OnBandInfo( nil, pBandInfo );
5600 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5602 for i := bar.Bands.Count - 1 downto 0 do begin
5603 if bar.Bands[ i ].Control.Handle = h then begin
5609 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5613 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5615 Control: TWinControl;
5618 Control := FindControl(BandInfo^.hwndChild);
5619 if Control = nil then
5622 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5623 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5624 idx := ListCoolBar.Bands[ i ].ID;
5628 if Control = ListToolBar then begin
5629 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5630 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5631 BandInfo^.cxMinChild := 0;
5632 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5633 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5635 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5636 BandInfo^.cxMinChild := 0;
5637 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5641 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5646 ChevronPopupMenu.Items.Clear;
5647 Idx := RebarChevron^.uBand;
5648 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5649 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5650 ToolBarChevronMenu(ListToolBar);
5653 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5654 ChevronPopupMenu.Popup(p.x, p.y);
5658 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5660 Control: TWinControl;
5663 Control := FindControl(BandInfo^.hwndChild);
5664 if Control = nil then
5667 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5668 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5669 idx := BrowserCoolBar.Bands[ i ].ID;
5673 if Control = BrowserToolBar then begin
5674 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5675 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5676 BandInfo^.cxMinChild := 0;
5677 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5678 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5680 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5681 BandInfo^.cxMinChild := 0;
5682 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5686 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5691 ChevronPopupMenu.Items.Clear;
5692 Idx := RebarChevron^.uBand;
5693 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5694 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5695 ToolBarChevronMenu(BrowserToolBar)
5698 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5699 ChevronPopupMenu.Popup(p.x, p.y);
5703 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5705 if Column^.iImage = -1 then begin
5706 Column^.mask := Column^.mask or LVCF_FMT;
5708 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5709 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5713 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5718 for i := bar.ButtonCount - 1 downto 0 do begin
5719 if bar.Buttons[ i ].Action = action then begin
5720 Result := bar.Buttons[ i ];
5726 procedure TGikoForm.SetToolBarPopup;
5729 aIEButton : TToolButton;
5730 aCabinetBBSButton : TToolButton;
5731 aResRangeButton : TToolButton;
5732 aThreadRangeButton: TToolButton;
5734 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5736 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5737 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5738 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5739 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5740 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5742 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5743 if aIEButton <> nil then
5744 aIEButton.DropdownMenu := BrowserPopupMenu;
5745 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5746 if aCabinetBBSButton <> nil then
5747 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5748 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5749 if aResRangeButton <> nil then
5750 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5751 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5752 if aThreadRangeButton <> nil then
5753 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5756 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5757 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5761 // browserPos : TPoint;
5765 Wnd := WindowFromPoint(Mouse.CursorPos);
5767 if WheelDelta > 0 then
5772 if (Wnd = BrowserTab.Handle) or
5773 (Wnd = BrowserTab.Parent.Handle) then begin
5774 BrowserTab.ScrollTabs(Delta);
5776 if FIsHandledWheel then begin
5777 FIsHandledWheel := False;
5780 FIsHandledWheel := True;
5781 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5782 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5784 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5792 procedure TGikoForm.SetSelectWord( const text : string );
5794 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5795 ClearThreadRengeAction;
5797 if Length( text ) = 0 then
5799 GikoDM.AllItemAction.Checked := True;
5800 SetListViewType( gvtAll )
5802 SetListViewType( gvtUser, text, false );
5806 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5809 SetSelectWord( SelectComboBox.Text );
5813 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5814 Shift: TShiftState);
5822 if Key = VK_Return then
5825 end else if Key = 229 then begin
5826 if GikoSys.Setting.UseUndecided then begin
5827 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5828 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5829 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5830 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5831 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5832 SetLength(Str, Len);
5833 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5834 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5835 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5837 Str := SelectComboBox.Text + Str;
5839 if (Length(Str) > 0) then begin
5843 end else if (Key = Windows.VK_DELETE) and (ssCtrl in Shift) then begin
5844 // Ctrl + DEL
\82Å
\8dí
\8f\9c\82·
\82é
5845 Str := SelectComboBox.Text;
5846 idx := GikoSys.Setting.SelectTextList.IndexOf( Str );
5847 if idx <> -1 then begin
5848 GikoSys.Setting.SelectTextList.Delete( idx );
5850 idx := SelectComboBox.Items.IndexOf( Str );
5851 if idx <> -1 then begin
5852 SelectComboBox.Items.Delete( idx );
5854 SelectComboBox.Text := '';
5855 //
\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·
5856 SelectComboBox.OnChange(Sender);
5857 end else if Length( SelectComboBox.Text ) = 0 then
5859 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5860 *
\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
5861 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5864 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5865 ClearThreadRengeAction;
5869 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
5870 procedure TGikoForm.ClearThreadRengeAction;
5872 //
\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é
5873 if GikoDM.AllItemAction.Checked then
5874 GikoDM.AllItemAction.Checked := False;
5875 if GikoDM.LogItemAction.Checked then
5876 GikoDM.LogItemAction.Checked := False;
5877 if GikoDM.NewItemAction.Checked then
5878 GikoDM.NewItemaction.Checked := False;
5879 if GikoDM.LiveItemAction.Checked then
5880 GikoDM.LiveItemAction.Checked := False;
5881 if GikoDM.ArchiveItemAction.Checked then
5882 GikoDM.ArchiveItemAction.Checked := False;
5886 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5891 if Length( SelectComboBox.Text ) = 0 then
5893 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5894 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5899 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5900 procedure TGikoForm.ModifySelectList;
5907 if not SelectComboBoxPanel.Visible then
5910 if Length( SelectComboBox.Text ) > 0 then
5912 oldText := SelectComboBox.Text;
5913 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5915 GikoSys.Setting.SelectTextList.Delete( idx );
5916 idx := SelectComboBox.Items.IndexOf( oldText );
5918 SelectComboBox.Items.Delete( idx );
5919 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5920 SelectComboBox.Items.Insert( 0, oldText );
5921 SelectComboBox.Text := oldText;
5929 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5930 Shift: TShiftState; X, Y: Integer);
5935 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5938 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5939 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5940 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5942 If w <= 50 Then Begin
5943 //
\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
5944 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
5945 pos.X := pos.X + (50 - w);
5947 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
5951 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
5952 //If SelectComboBox.Width <> w Then Begin
5953 If SelectComboBoxPanel.Width <> w Then Begin
5954 SelectComboBoxPanel.Width := w;
5955 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
5956 GikoSys.Setting.SelectComboBoxWidth := w;
5957 DraggingSelectComboBoxPosition := pos;
5959 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
5960 ResetBandInfo( ListCoolBar, ListToolBar );
5966 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
5967 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5971 IsDraggingSelectComboBox := True;
5974 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
5978 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
5979 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5981 IsDraggingSelectComboBox := False;
5985 procedure TGikoForm.StatusBarResize(Sender: TObject);
5987 StatusBar.Panels[1].Width := StatusBar.Width -
5988 StatusBar.Panels[0].Width -
5989 StatusBar.Panels[THREADSIZE_PANEL].Width -
5990 StatusBar.Panels[NGWORDNAME_PANEL].Width;
5992 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
5995 if (Length( SelectComboBox.Text ) = 0) or
5996 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
5998 SelectComboBox.Text := '';
5999 SelectComboBox.Color := clWindow;
6004 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
6007 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
6010 if TObject(SenderNode.Data) is TFavoriteFolder then
6011 SourceNode.MoveTo(SenderNode, naAddChild)
6013 SourceNode.MoveTo(SenderNode, naInsert);
6017 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
6021 FavoBoardItem: TFavoriteBoardItem;
6022 FavoThreadItem: TFavoriteThreadItem;
6024 ThreadItem: TThreadItem;
6027 if (SenderNode = nil) or (Source = nil) then
6030 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
6031 FavNode := SenderNode.Parent
6033 FavNode := SenderNode;
6037 if Source is TBoard then begin
6038 Board := TBoard( Source );
6039 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
6040 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
6041 Node.ImageIndex := 15;
6042 Node.SelectedIndex := 15;
6043 end else if Source is TFavoriteBoardItem then begin
6044 FavoBoardItem := TFavoriteBoardItem( Source );
6045 Board := FavoBoardItem.Item;
6046 if Board <> nil then
6047 if not Board.IsThreadDatRead then
6048 GikoSys.ReadSubjectFile(Board);
6049 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
6050 Node.ImageIndex := 15;
6051 Node.SelectedIndex := 15;
6052 end else if Source is TThreadItem then begin
6053 ThreadItem := TThreadItem( Source );
6054 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
6055 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
6056 Node.ImageIndex := 16;
6057 Node.SelectedIndex := 16;
6058 end else if Source is TBrowserRecord then begin
6059 ThreadItem := TBrowserRecord( Source ).Thread;
6060 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
6061 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
6062 Node.ImageIndex := 16;
6063 Node.SelectedIndex := 16;
6064 end else if Source is TFavoriteThreadItem then begin
6065 FavoThreadItem := TFavoriteThreadItem( Source );
6066 ThreadItem := FavoThreadItem.Item;
6067 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
6068 Node.ImageIndex := 16;
6069 Node.SelectedIndex := 16;
6072 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
6074 FavoriteMoveTo( SenderNode, Node );
6078 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
6081 SourceNode: TTreeNode;
6082 LinkToolButton: TLinkToolButton;
6085 if SenderNode = nil then
6088 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
6089 if FDropSpaceNode <> nil then
6090 SenderNode := FDropSpaceNode;
6092 if Source = FavoriteTreeView then begin
6093 SourceNode := FavoriteTreeView.Selected;
6094 FavoriteMoveTo( SenderNode, SourceNode );
6095 end else if Source is TLinkToolButton then begin
6096 LinkToolButton := TLinkToolButton( Source );
6097 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
6098 FavoriteMoveTo( SenderNode, SourceNode );
6099 end else if Source = BrowserTab then begin
6100 idx := BrowserTab.TabIndex;
6101 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
6102 end else if Source = ListView then begin
6103 FavoriteAddTo( SenderNode, ListView.Selected.Data );
6104 end else if Source = TreeView then begin
6105 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
6109 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
6112 SenderNode: TTreeNode;
6115 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
6116 if SenderNode <> nil then begin
6117 FavoriteDragDrop( SenderNode, Source );
6120 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
6121 if FDropSpaceNode <> nil then begin
6123 FDropSpaceNode.Delete;
6125 FDropSpaceNode := nil;
6128 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6129 FavoriteDM.Modified := true;
6135 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
6136 Node: TTreeNode; var S: String);
6138 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6139 FavoriteDM.Modified := true;
6141 FavoriteTreeView.ReadOnly := True;
6146 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
6147 Shift: TShiftState);
6149 if not TTreeView(Sender).IsEditing then begin
6153 FClickNode := FavoriteTreeView.Selected;
6154 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
6158 FClickNode := FavoriteTreeView.Selected;
6159 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
6163 FavoriteClick( FavoriteTreeView.Selected );
6164 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
6168 FClickNode := FavoriteTreeView.Selected;
6169 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
6173 //
\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·
6174 if Key = VK_ESCAPE then begin
6175 if (TTreeView(Sender).Selected <> nil) then begin
6176 TTreeView(Sender).Selected.Text := FOrigenCaption;
6178 TTreeView(Sender).Selected.Focused := False;
6184 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
6187 LinkToolButton: TLinkToolButton;
6190 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
6192 FClickNode := FavoriteTreeView.Selected;
6194 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
6196 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
6197 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6198 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6199 FClickNode := FavoriteTreeView.Items[i];
6203 for i := 0 to FClickNode.Count - 1 do begin
6204 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
6205 FClickNode := FClickNode.Item[i];
6212 if FClickNode = nil then begin
6213 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6214 FavoriteTreeDeletePopupMenu.Visible := False;
6215 FavoriteTreeRenamePopupMenu.Visible := False;
6216 FavoriteTreeNewFolderPopupMenu.Visible := False;
6217 FavoriteTreeURLCopyPopupMenu.Visible := False;
6218 FavoriteTreeNameCopyPopupMenu.Visible := False;
6219 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6220 FavoriteTreeReloadPopupMenu.Visible := False;
6221 FavoriteTreeLogDeletePopupMenu.Visible := False;
6222 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6223 end else if FClickNode.IsFirstNode then begin
6224 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6225 FavoriteTreeDeletePopupMenu.Visible := False;
6226 FavoriteTreeRenamePopupMenu.Visible := False;
6227 FavoriteTreeNewFolderPopupMenu.Visible := True;
6228 FavoriteTreeURLCopyPopupMenu.Visible := False;
6229 FavoriteTreeNameCopyPopupMenu.Visible := False;
6230 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6231 FavoriteTreeReloadPopupMenu.Visible := False;
6232 FavoriteTreeLogDeletePopupMenu.Visible := False;
6233 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6234 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
6235 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6236 FavoriteTreeDeletePopupMenu.Visible := True;
6237 FavoriteTreeRenamePopupMenu.Visible := False;
6238 FavoriteTreeNewFolderPopupMenu.Visible := True;
6239 FavoriteTreeURLCopyPopupMenu.Visible := False;
6240 FavoriteTreeNameCopyPopupMenu.Visible := False;
6241 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6242 FavoriteTreeReloadPopupMenu.Visible := False;
6243 FavoriteTreeLogDeletePopupMenu.Visible := False;
6244 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6245 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
6246 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6247 FavoriteTreeDeletePopupMenu.Visible := True;
6248 FavoriteTreeRenamePopupMenu.Visible := True;
6249 FavoriteTreeNewFolderPopupMenu.Visible := True;
6250 FavoriteTreeURLCopyPopupMenu.Visible := False;
6251 FavoriteTreeNameCopyPopupMenu.Visible := True;
6252 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6253 FavoriteTreeReloadPopupMenu.Visible := False;
6254 FavoriteTreeLogDeletePopupMenu.Visible := False;
6255 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6256 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
6257 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6258 FavoriteTreeDeletePopupMenu.Visible := True;
6259 FavoriteTreeRenamePopupMenu.Visible := True;
6260 FavoriteTreeNewFolderPopupMenu.Visible := True;
6261 FavoriteTreeURLCopyPopupMenu.Visible := True;
6262 FavoriteTreeNameCopyPopupMenu.Visible := True;
6263 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6264 FavoriteTreeReloadPopupMenu.Visible := True;
6265 FavoriteTreeLogDeletePopupMenu.Visible := True;
6266 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6267 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
6268 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6269 FavoriteTreeDeletePopupMenu.Visible := True;
6270 FavoriteTreeRenamePopupMenu.Visible := True;
6271 FavoriteTreeNewFolderPopupMenu.Visible := True;
6272 FavoriteTreeURLCopyPopupMenu.Visible := True;
6273 FavoriteTreeNameCopyPopupMenu.Visible := True;
6274 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6275 FavoriteTreeReloadPopupMenu.Visible := True;
6276 FavoriteTreeLogDeletePopupMenu.Visible := False;
6277 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6279 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6280 FavoriteTreeDeletePopupMenu.Visible := False;
6281 FavoriteTreeRenamePopupMenu.Visible := False;
6282 FavoriteTreeNewFolderPopupMenu.Visible := False;
6283 FavoriteTreeURLCopyPopupMenu.Visible := False;
6284 FavoriteTreeNameCopyPopupMenu.Visible := False;
6285 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6286 FavoriteTreeReloadPopupMenu.Visible := False;
6287 FavoriteTreeLogDeletePopupMenu.Visible := False;
6288 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6293 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
6298 if not (TObject(node.Data) is TFavoriteFolder) then
6301 for i := 0 to node.Count - 1 do
6303 if TObject(node.Item[i].Data) is TFavoriteFolder then
6304 FavoriteBrowseFolder( node.Item[i] )
6305 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
6306 FavoriteClick( node.Item[i], False );
6310 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6316 for i := 0 to Node.Count - 1 do begin
6317 if Node.Item[i].Data = FindPointer then begin
6318 Result := Node.Item[i];
6320 end else if Node.Item[i].Count > 0 then begin
6321 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6322 if Found <> nil then begin
6333 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6337 SenderNode: TTreeNode;
6341 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6342 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6343 SenderNode := FavoriteTreeView.Items[i];
6347 SenderNode.Selected := False;
6349 FavoriteDragDrop( SenderNode, Source );
6354 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6355 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6357 if FDragWFirst = true then
6358 FDragWFirst := false;
6360 //
\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@
6361 if Button <> mbMiddle then begin
6362 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6363 if GikoSys.Setting.ListWidthState = glsMin then begin
6364 GikoDM.BrowserMaxAndFocusAction.Execute;
6367 if GikoSys.Setting.ListHeightState = glsMin then begin
6368 GikoDM.BrowserMaxAndFocusAction.Execute;
6374 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6375 Y: Integer; State: TDragState; var Accept: Boolean);
6378 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6382 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6386 if FDropSpaceNode <> nil then begin
6388 FDropSpaceNode.Delete;
6390 FDropSpaceNode := nil;
6392 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6393 FavoriteDM.Modified := true;
6399 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6401 if FListViewBackGroundColor <> value then begin
6402 FListViewBackGroundColor := value;
6403 ListView.Color := FListViewBackGroundColor;
6406 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6408 threadItem : TThreadItem;
6412 if FClickNode = nil then Exit;
6414 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6416 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6417 if threadItem = nil then
6419 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6421 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6423 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6424 if boardItem = nil then
6426 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6432 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6433 MousePos: TPoint; var Handled: Boolean);
6437 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6438 if BrowserTab.TabIndex <> idx then begin
6439 BrowserTab.TabIndex := idx;
6440 BrowserTab.OnChange(nil);
6444 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6446 ThreadItem: TThreadItem;
6452 boardPlugIn : TBoardPlugIn;
6454 if Number = 0 then Exit;
6455 ThreadItem := GetActiveContent(True);
6457 if ThreadItem <> nil then begin
6458 //if ThreadItem.IsBoardPlugInAvailable then begin
6459 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6460 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6461 //boardPlugIn := ThreadItem.BoardPlugIn;
6462 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6464 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6465 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6466 //
\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
6467 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6469 FileName := ThreadItem.FilePath;
6470 tmp := GikoSys.ReadThreadFile(FileName, Number);
6472 if tmp <> '' then begin
6473 THTMLCreate.DivideStrLine(tmp, @Res);
6475 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6476 if ReplaceTag then begin
6477 Header := CustomStringReplace(Header, '</b>', '',true);
6478 Header := CustomStringReplace(Header, '<b>', '',true);
6479 Header := CustomStringReplace(Header, '<br>', '',true);
6480 Header := DeleteFontTag(Header);
6482 //if ThreadItem.IsBoardPlugInAvailable then begin
6483 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6484 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6485 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6487 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6488 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6489 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6490 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6493 Body := CustomStringReplace(Body, '</a>', '',true);
6495 Body := HTMLCreater.DeleteLink(Body);
6496 if ReplaceTag then begin
6497 Body := CustomStringReplace(Body, '<', '<');
6498 Body := CustomStringReplace(Body, '>', '>');
6499 Body := CustomStringReplace(Body, '"', '"');
6500 Body := CustomStringReplace(Body, '&', '&');
6501 //Body := CustomStringReplace(Body, ' ', ' ');
6504 Header := Header + Body;
6506 Clipboard.SetTextBuf( PChar(Header) );
6512 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6516 for i := 0 to BrowserTabPopupMenu.Items.Count - 1 do begin
6517 if (BrowserTabPopupMenu.Items[i].Name='RoundItem') then begin
6518 AddRoundNameMenu(BrowserTabPopupMenu.Items[i]);
6519 end else if (BrowserTabPopupMenu.Items[i].Name='BoardThreadItem') then begin
6520 AddMenuSameBoardThread(BrowserTabPopupMenu.Items[i])
6524 //!
\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Á
6525 procedure TGikoForm.AddMenuSameBoardThread(MenuItem: TMenuItem);
6531 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6532 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6533 if (FActiveContent.Thread.ParentBoard =
6534 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6535 //
\8e©
\95ª
\82Í
\8aO
\82·
6536 if FActiveContent.Thread <>
6537 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6538 Item := TMenuItem.Create(Self);
6539 Item.Caption := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.Title;
6540 Item.Hint := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.URL;
6541 Item.OnClick := SameBoardThreadSubItemOnClick;
6546 //
\89½
\82à
\96³
\82¢
\82È
\82ç
\8eg
\97p
\82Å
\82«
\82È
\82¢
\82æ
\82¤
\82É
\82·
\82é
6547 MenuItem.Enabled := MenuItem.Count > 0;
6549 //!
\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
6550 procedure TGikoForm.SameBoardThreadSubItemOnClick(Sender: TObject);
6553 MenuItem: TMenuItem;
6555 if Sender is TMenuItem then begin
6557 MenuItem := TMenuItem(Sender);
6558 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6559 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6560 if (FActiveContent.Thread.ParentBoard =
6561 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6562 if FActiveContent.Thread <>
6563 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6564 if (MenuItem.Hint = TBrowserRecord(BrowserTab.Tabs.Objects[i])
6565 .Thread.URL) then begin
6566 MoveToURL( MenuItem.Hint);
6576 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6578 FavoriteDM.URLReplace(oldURLs, newURLs);
6581 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6583 RoundList.URLReplace(oldURLs, newURLs);
6586 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6588 Filename = 'tab.sav';
6589 bFilename = '~tab.sav';
6595 oldBoardName: string;
6597 newBoardName: string;
6598 TabList: TStringList;
6601 if oldURLs.Count <> newURLs.Count then begin
6604 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6605 TabList := TStringList.Create;
6607 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6609 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6610 //
\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
6611 for i := 0 to oldURLs.Count - 1 do begin
6612 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6613 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6614 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6615 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6616 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6617 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6619 for j := 0 to TabList.Count - 1 do begin
6620 tempString := TabList[j];
6621 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6622 tempString := StringReplace(tempString, oldHost, newHost,[]);
6623 TabList[j] := tempString;
6627 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6629 if FileExists( GikoSys.GetAppDir + Filename) then begin
6630 if FileExists( GikoSys.GetAppDir + bFilename) then
6631 DeleteFile(GikoSys.GetAppDir + bFilename);
6633 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6634 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6637 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6645 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6646 procedure TGikoForm.OnMinimize;
6648 doc: IHTMLDocument2;
6650 if FActiveContent <> nil then begin
6651 FIsMinimize := mtMinimizing;
6652 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6653 if Assigned(doc) then begin
6654 FActiveContent.Thread.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
6659 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6660 procedure TGikoForm.OnMinimized;
6662 FIsMinimize := mtMinimized;
6666 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6668 CoolBarResized( Sender, BrowserCoolBar );
6671 // *************************************************************************
6672 // ExternalBoardPlugInMain
6673 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6674 // *************************************************************************
6675 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6678 boardPlugIn : TBoardPlugIn;
6681 if not (Sender is TMenuItem) then
6684 item := TMenuItem( Sender );
6685 if not Assigned( Pointer( item.Tag ) ) then
6688 //
\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·
6689 boardPlugIn := TBoardPlugIn( item.Tag );
6690 boardPlugIn.PlugInMenu( item.Handle );
6693 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6694 procedure TGikoForm.TreeClick( Node : TTreeNode );
6700 if FTreeType = gttHistory then begin
6702 if TObject( Node.Data ) is TFavoriteThreadItem then
6703 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6704 FavoriteClick( Node );
6707 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6708 if ActiveList = Node.Data then
6711 ActiveListColumnSave;
6713 if TObject(Node.Data) is TBBS then begin
6714 SetActiveList(Node.data);
6715 end else if TObject(Node.Data) is TCategory then begin
6716 SetActiveList(Node.data);
6717 end else if TObject(Node.Data) is TBoard then begin
6718 if not TBoard(Node.Data).IsThreadDatRead then begin
6719 Screen.Cursor := crHourGlass;
6721 if not TBoard(Node.Data).IsThreadDatRead then
6722 GikoSys.ReadSubjectFile(Node.Data);
6724 Screen.Cursor := crDefault;
6727 Sort.SetSortDate(Now());
6728 SetActiveList(Node.data);
6731 if TObject( Node.Data ) is TBoard then begin // not TCategory
6732 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6733 if GikoSys.Setting.ListWidthState = glsMax then begin
6734 GikoDM.BrowserMinAction.Execute;
6735 if GikoForm.Visible then
6739 if GikoSys.Setting.ListHeightState = glsMax then begin
6740 GikoDM.BrowserMinAction.Execute;
6741 if GikoForm.Visible then
6749 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6750 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6753 ThreadItem : TThreadItem;
6754 shiftDown : Boolean;
6757 if Node = nil then Exit;
6759 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6761 if FTreeType = gtt2ch then begin
6762 if not (TObject(Node.Data) is TBoard) then Exit;
6763 Board := TBoard(Node.Data);
6764 DownloadList(Board, shiftDown);
6765 end else if FTreeType = gttHistory then begin
6766 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6767 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6768 DownloadContent(ThreadItem, shiftDown);
6772 // *************************************************************************
6773 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82ÌKeyDown
\83C
\83x
\83\93\83g
6774 // *************************************************************************
6775 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6776 Shift: TShiftState);
6778 if Key = VK_BACK then begin
6779 // UpFolderButtonClick(Sender);
6780 end else if Key = VK_SPACE then begin
6781 TreeDoubleClick( TreeView.Selected );
6782 end else if Key = VK_RETURN then begin
6783 TreeClick( TreeView.Selected );
6784 //
\97\9a\97ð
\82Ì
\8fê
\8d\87\81A
\8fÁ
\82³
\82ê
\82Ä
\82¢
\82é
\82Ì
\82Å
\83`
\83F
\83b
\83N
\82·
\82é
6785 if (TreeView.Selected <> nil) then begin
6786 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6790 //!
\82¨
\8bC
\82É
\93ü
\82è
\82ÌMouseDown
\83C
\83x
\83\93\83g
6791 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6792 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6794 favItem : TTreeNode;
6795 favThreadItem : TFavoriteThreadItem;
6801 if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6802 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6803 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6804 rect := FavoriteTreeView.Selected.DisplayRect(true);
6805 //
\83A
\83C
\83R
\83\93\95ª
\8d¶
\82É
\82¸
\82ç
\82·
6806 if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
6807 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6808 if ssDouble in Shift then begin
6809 FClickNode := FavoriteTreeView.Selected;
6810 GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6814 TObject(FavoriteTreeView.Selected));
6821 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6822 if favItem = nil then Exit;
6824 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6825 favThreadItem := TFavoriteThreadItem( favItem.Data );
6826 if favThreadItem.Item <> nil then
6827 InsertBrowserTab( favThreadItem.Item, False );
6834 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6837 if FIsIgnoreResize <> rtNone then
6840 if GikoSys.Setting.ListOrientation = gloVertical then begin
6841 if GikoSys.Setting.ListHeightState = glsMin then begin
6842 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6843 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6849 procedure TGikoForm.OnResized;
6851 doc : IHTMLDocument2;
6853 FOldFormWidth := Width;
6854 FIsIgnoreResize := rtNone;
6859 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6860 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6865 //
\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)
6866 if FActiveContent <> nil then begin
6867 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6868 (doc.body as IHTMLElement2).ScrollTop := FActiveContent.Thread.ScrollTop;
6870 FIsMinimize := mtNone;
6875 // *************************************************************************
6876 //!
\83X
\83\8c\83b
\83h
\83u
\83\89\83E
\83U
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6877 // *************************************************************************
6878 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6881 doc : IHTMLDocument2;
6882 FOleInPlaceActiveObject: IOleInPlaceActiveObject;
6887 if not Assigned(FActiveContent) then
6889 if not Assigned(FActiveContent.Browser) then
6893 FOleInPlaceActiveObject := FActiveContent.Browser.ControlInterface as IOleInPlaceActiveObject;
6894 FOleInPlaceActiveObject.OnFrameWindowActivate(True);
6897 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6898 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6900 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6901 if not Assigned(doc) then
6904 e := doc.elementFromPoint(p.x, p.y);
6905 if not Assigned(e) then
6908 if (e.className = 'date') or (e.id = 'date') then begin
6909 AID := GikoSys.ExtructResID(e.innerText);
6910 ShowSameIDAncher(AID);
6915 procedure TGikoForm.ShowSameIDAncher(const AID: String);
6919 numbers : TStringList;
6922 numbers := TStringList.Create;
6925 GikoSys.GetSameIDRes(AID, FActiveContent.Thread, numbers);
6927 if not (GikoSys.Setting.LimitResCountMessage) then begin
6929 end else if (numbers.Count > LIMIT) then begin
6930 if (GikoUtil.MsgBox(Handle,
6931 IntToStr(LIMIT) + '
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6932 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6933 MB_YESNO or MB_ICONQUESTION) = ID_YES) then begin
6937 FActiveContent.IDAnchorPopup(
6938 GikoSys.CreateResAnchor(numbers, FActiveContent.Thread, limited));
6943 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
6944 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
6946 SelectTimer.Interval := 0;
6947 if not (ListView.Selected = nil) then
6948 if( FActiveContent = nil) or
6949 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
6954 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
6955 procedure TGikoForm.ActiveListColumnSave;
6957 ActivListObj : TObject;
6958 i, id, idx : Integer;
6959 BBSOrder : TGikoBBSColumnList;
6960 CategoryOrder : TGikoCategoryColumnList;
6961 BoardOrder : TGikoBoardColumnList;
6964 ActivListObj := ActiveList;
6965 if ActivListObj is TBBS then begin
6966 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6967 BBSOrder := TGikoBBSColumnList.Create;
6969 for i := 0 to ListView.Columns.Count - 1 do begin
6970 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6971 idx := ListView.Column[ i ].Tag;
6972 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
6973 BBSOrder.Add( TGikoBBSColumnID( id ) );
6974 //
\95\9d\82Ì
\95Û
\91¶
6975 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
6977 for i := 0 to ListView.Columns.Count - 1 do
6978 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6979 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
6983 end else if ActivListObj is TCategory then begin
6984 //=====
\94Â
\83\8a\83X
\83g =====
6985 CategoryOrder := TGikoCategoryColumnList.Create;
6987 for i := 0 to ListView.Columns.Count - 1 do begin
6988 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6989 idx := ListView.Column[ i ].Tag;
6990 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
6991 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
6992 //
\95\9d\82Ì
\95Û
\91¶
6993 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
6995 for i := 0 to ListView.Columns.Count - 1 do
6996 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6997 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
7001 end else if ActivListObj is TBoard then begin
7002 //=====
\83X
\83\8c\83\8a\83X
\83g =====
7003 BoardOrder := TGikoBoardColumnList.Create;
7005 for i := 0 to ListView.Columns.Count - 1 do begin
7006 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
7007 idx := ListView.Column[ i ].Tag;
7008 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
7009 BoardOrder.Add( TGikoBoardColumnID( id ) );
7010 //
\95\9d\82Ì
\95Û
\91¶
7011 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
7013 for i := 0 to ListView.Columns.Count - 1 do
7014 //
\8f\87\8f\98\82Ì
\95Û
\91¶
7015 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
7023 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
7024 Column: TListColumn; Point: TPoint);
7030 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
7031 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
7032 ListColumnPopupMenu.Items.Items[ i ].Free;
7034 //
\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¢)
7035 if TObject( FActiveList ) is TBBS then begin
7037 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
7038 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
7039 item := TMenuItem.Create( ListColumnPopupMenu );
7040 item.Caption := GikoBBSColumnCaption[ i ];
7042 item.OnClick := ListColumnPopupMenuOnClick;
7043 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
7044 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
7045 item.Checked := True;
7049 ListColumnPopupMenu.Items.Add( item );
7052 end else if TObject( FActiveList ) is TCategory then begin
7054 //=====
\94Â
\83\8a\83X
\83g =====
7055 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
7056 item := TMenuItem.Create( ListColumnPopupMenu );
7057 item.Caption := GikoCategoryColumnCaption[ i ];
7059 item.OnClick := ListColumnPopupMenuOnClick;
7060 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
7061 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
7062 item.Checked := True;
7066 ListColumnPopupMenu.Items.Add( item );
7069 end else if TObject( FActiveList ) is TBoard then begin
7071 //=====
\83X
\83\8c\83\8a\83X
\83g =====
7072 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
7073 item := TMenuItem.Create( ListColumnPopupMenu );
7074 item.Caption := GikoBoardColumnCaption[ i ];
7076 item.OnClick := ListColumnPopupMenuOnClick;
7077 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
7078 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
7079 item.Checked := True;
7083 ListColumnPopupMenu.Items.Add( item );
7088 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
7089 Point := ListView.ClientToScreen( Point );
7090 if ListColumnPopupMenu.Items.Count > 0 then
7091 ListColumnPopupMenu.Popup( Point.X, Point.Y );
7095 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
7096 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
7103 if not (Sender is TMenuItem) then
7106 ActiveListColumnSave;
7107 item := TMenuItem( Sender );
7109 if TObject( FActiveList ) is TBBS then
7110 orderList := GikoSys.Setting.BBSColumnOrder
7111 else if TObject( FActiveList ) is TCategory then
7112 orderList := GikoSys.Setting.CategoryColumnOrder
7113 else if TObject( FActiveList ) is TBoard then
7114 orderList := GikoSys.Setting.BoardColumnOrder
7118 if item.Checked then begin
7119 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
7120 for i := orderList.Count - 1 downto 0 do begin
7121 if Integer( orderList[ i ] ) = item.Tag then begin
7122 orderList.Delete( i );
7127 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
7128 orderList.Add( Pointer( item.Tag ) );
7131 SetActiveList( FActiveList );
7135 procedure TGikoForm.OnGestureStart(Sender: TObject);
7140 procedure TGikoForm.OnGestureMove(Sender: TObject);
7147 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
7149 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
7150 s := MouseGesture.GetGestureStr;
7152 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7153 if Action <> nil then
7154 ActStr := '
\81i' + Action.Caption + '
\81j';
7155 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
7156 StatusBar.Panels[1].Text := s;
7159 procedure TGikoForm.OnGestureEnd(Sender: TObject);
7164 s := MouseGesture.GetGestureStr;
7166 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7167 if Action <> nil then
7169 StatusBar.Panels[1].Text := '';
7172 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
7173 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
7175 ThreadItem: TThreadItem;
7177 DefaultDraw := true;
7178 if TObject(Item.Data) is TThreadItem then begin
7179 ThreadItem := TThreadItem(Item.Data);
7180 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
7181 ListView.Canvas.Brush.Color := FOddColor;
7182 //
\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
7183 if (GikoSys.Setting.UnFocusedBold) and
7184 (Item.Selected) and (not ListView.Focused) then begin
7185 ListView.Canvas.Font.Style := [fsBold];
7188 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
7191 if ThreadItem.UnRead then
7192 ListView.Canvas.Font.Style := [fsBold];
7197 procedure TGikoForm.FormActivate(Sender: TObject);
7199 if GikoSys.Setting.GestureEnabled then begin
7200 GikoSys.Setting.Gestures.ClearGesture;
7201 GikoSys.Setting.Gestures.LoadGesture(
7202 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
7203 MouseGesture.UnHook;
7204 MouseGesture.OnGestureStart := OnGestureStart;
7205 MouseGesture.OnGestureMove := OnGestureMove;
7206 MouseGesture.OnGestureEnd := OnGestureEnd;
7207 MouseGesture.SetHook(Handle);
7209 //MouseGesture.UnHook;
7210 MouseGesture.OnGestureStart := nil;
7211 MouseGesture.OnGestureMove := nil;
7212 MouseGesture.OnGestureEnd := nil;
7216 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
7218 if (FIsMinimize <> mtMinimizing) then begin
7219 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
7220 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
7224 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
7229 affectedBand : TCoolBand;
7232 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
7233 FIsIgnoreResize := rtResizing;
7234 PostMessage( Handle, USER_RESIZED, 0, 0 );
7236 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
7237 if CoolBar = MainCoolBar then begin
7238 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
7239 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7240 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7241 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7242 GikoSys.Setting.MainCoolSet[i] := CoolSet;
7244 end else if CoolBar = ListCoolBar then begin
7245 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
7246 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7247 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7248 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7249 GikoSys.Setting.ListCoolSet[i] := CoolSet;
7251 end else if CoolBar = BrowserCoolBar then begin
7252 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
7253 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7254 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7255 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7256 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
7259 if not (Sender is TToolBar) or (CoolBar = nil) then
7261 toolbar := TToolBar( Sender );
7262 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
7263 affectedBand := nil;
7264 for i := CoolBar.Bands.Count - 1 downto 0 do begin
7265 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
7266 band := CoolBar.Bands[ i ];
7267 if band.Break or (i = 0) then begin
7268 if i + 1 < CoolBar.Bands.Count then
7269 if not CoolBar.Bands[ i + 1 ].Break then
7270 affectedBand := CoolBar.Bands[ i + 1 ];
7273 affectedBand := CoolBar.Bands[ i - 1 ];
7278 //
\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·
7279 if CoolBar = MainCoolBar then begin
7280 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
7281 coolSet.FCoolWidth := toolbar.Width + 25;
7282 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
7283 if affectedBand <> nil then begin
7284 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
7285 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7286 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
7288 end else if CoolBar = ListCoolBar then begin
7289 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
7290 coolSet.FCoolWidth := toolbar.Width + 25;
7291 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
7292 if affectedBand <> nil then begin
7293 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
7294 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7295 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
7297 end else if CoolBar = BrowserCoolBar then begin
7298 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
7299 coolSet.FCoolWidth := toolbar.Width + 25;
7300 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
7301 if affectedBand <> nil then begin
7302 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
7303 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7304 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
7311 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
7313 CoolBarResized( Sender, MainCoolBar );
7316 procedure TGikoForm.ListToolBarResize(Sender: TObject);
7318 CoolBarResized( Sender, ListCoolBar );
7321 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
7323 CoolBarResized( Sender, BrowserCoolBar );
7326 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
7327 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
7329 doc : IHTMLDocument2;
7330 ThreadItem : TThreadItem;
7331 ReadList : TStringList;
7332 wordCount : TWordCount;
7334 if not Assigned(FActiveContent) then
7336 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7337 if not Assigned(doc) then
7340 ThreadItem := GetActiveContent(True);
7341 ReadList := TStringList.Create;
7342 wordCount := TWordCount.Create;
7344 ThreadItem.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
7345 {$IFDEF SPAM_FILTER_ENABLED}
7346 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7347 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7348 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
7349 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7350 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7352 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7353 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7358 FActiveContent.Repaint := true;
7359 if ThreadItem <> nil then
7360 InsertBrowserTab( ThreadItem, True );
7362 //
\93¯
\88êID
\82ðNG
\83\8f\81[
\83h
\82É
\93o
\98^
7363 procedure TGikoForm.AddIDtoNGWord(invisible : boolean);
7365 doc : IHTMLDocument2;
7366 ThreadItem : TThreadItem;
7368 {$IFDEF SPAM_FILTER_ENABLED}
7370 ReadList : TStringList;
7371 wordCount : TWordCount;
7373 id, dateStr: String;
7375 No := KokoPopupMenu.Tag;
7376 if No = 0 then Exit;
7377 ThreadItem := GikoForm.KokoPopupThreadItem;
7378 if ThreadItem = nil then Exit;
7380 id := GikoSys.GetResID(No, ThreadItem);
7381 if (id <> '') and (not IsNoValidID(id)) then begin
7382 //
\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Á
7383 DateTimeToString(dateStr, 'yyyymmdd', Now);
7384 id := id + #9'>>add ' + dateStr + ',' + ThreadItem.Title;
7385 if (GikoSys.FAbon.AddToken(id, invisible)) then begin
7386 GikoSys.FAbon.ReLoadFromNGwordFile;
7387 FActiveContent.Repaint := True;
7390 ShowMessage('ID
\82ð
\8eæ
\93¾
\82Å
\82«
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B');
7392 {$IFDEF SPAM_FILTER_ENABLED}
7393 body := TStringList.Create;
7395 GikoSys.GetSameIDRes(id, ThreadItem, body);
7396 ReadList := TStringList.Create;
7397 wordCount := TWordCount.Create;
7399 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7400 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7401 for i := 0 to body.Count - 1 do begin
7402 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7403 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7404 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7414 if (FActiveContent.Repaint) then begin
7415 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7417 if not Assigned(doc) then
7419 ThreadItem.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
7420 if ThreadItem <> nil then
7421 InsertBrowserTab( ThreadItem, True );
7425 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
7426 procedure TGikoForm.IndividualAbonID(Atype : Integer);
7428 ThreadItem : TThreadItem;
7431 ReadList : TStringList;
7432 wordCount : TWordCount;
7434 No := KokoPopupMenu.Tag;
7435 if No = 0 then Exit;
7436 ThreadItem := GikoForm.KokoPopupThreadItem;
7437 if ThreadItem = nil then Exit;
7438 body := TStringList.Create;
7440 GikoSys.GetSameIDRes(No, ThreadItem, body);
7442 ReadList := TStringList.Create;
7443 wordCount := TWordCount.Create;
7445 ThreadItem.ScrollTop := FActiveContent.Browser.OleObject.Document.Body.ScrollTop;
7446 {$IFDEF SPAM_FILTER_ENABLED}
7447 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7448 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7450 for i := 0 to body.Count - 1 do begin
7451 {$IFDEF SPAM_FILTER_ENABLED}
7452 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7453 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7454 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7456 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7457 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7463 FActiveContent.Repaint := true;
7464 if ThreadItem <> nil then
7465 InsertBrowserTab( ThreadItem, True );
7472 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7474 firstElement: IHTMLElement;
7475 doc: IHTMLDocument2;
7478 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7479 if Assigned(doc) then
7480 firstElement := doc.all.item('idSearch', 0) as IHTMLElement;
7481 if Assigned(firstElement) then
7482 if firstElement.style.visibility <> 'hidden' then
7483 firstElement.style.visibility := 'hidden';
7488 procedure TGikoForm.RepaintAllTabsBrowser();
7491 ThreadItem: TThreadItem;
7493 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7494 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7496 ThreadItem := GetActiveContent;
7497 if ThreadItem <> nil then
7498 InsertBrowserTab( ThreadItem, True );
7502 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7503 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7504 Shift: TShiftState);
7506 //
\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Ì
7507 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7508 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7509 SelectTimer.Interval := 0;
7510 if not (GikoSys.Setting.BrowserTabVisible) then begin
7511 if (GetActiveList is TBoard) then begin
7512 //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
7513 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7514 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7515 (Key = VK_UP) or (Key = VK_DOWN)) then
7516 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7520 // *************************************************************************
7521 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7522 // *************************************************************************
7523 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7524 Node: TTreeNode; var AllowEdit: Boolean);
7526 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7527 FOrigenCaption := Node.Text;
7529 // *************************************************************************
7530 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7531 // *************************************************************************
7532 function TGikoForm.GetMainForm(): TComponent;
7534 Result := Application.MainForm;
7536 // *************************************************************************
7537 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7538 // *************************************************************************
7539 function TGikoForm.GetScreenCursor(): TCursor;
7541 Result := Screen.Cursor;
7543 // *************************************************************************
7544 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7545 // *************************************************************************
7546 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7548 if (Screen.Cursor <> Cursor) then
7549 Screen.Cursor := Cursor;
7551 // *************************************************************************
7552 //!
\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
7553 // *************************************************************************
7554 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7556 //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Ì
7557 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7558 if GikoDM.CabinetVisibleAction.Enabled then begin
7559 GikoDM.CabinetVisibleAction.Execute;
7562 // *************************************************************************
7563 //!
\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
7564 // *************************************************************************
7565 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7567 if GikoDM.FavoriteArrangeAction.Enabled then begin
7568 GikoDM.FavoriteArrangeAction.Execute;
7571 // *************************************************************************
7572 //!
\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
7573 // *************************************************************************
7574 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7575 var Handled: Boolean);
7579 //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ß
7580 if Self.Active then begin
7582 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7583 WM_KEYFIRST..WM_KEYLAST :
7585 //
\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ç
7586 if (Msg.message <> WM_KEYUP)
7587 and (Msg.message <> WM_CHAR)
7588 and (Msg.message <> WM_SYSKEYUP) then begin
7589 wmMsg.Msg := Msg.message;
7590 wmMsg.CharCode := Word(Msg.wParam);
7591 wmMsg.KeyData := Msg.lParam;
7592 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7593 Self.OnShortCut(wmMsg, Handled);
7598 // Explorer
\82ÌD&D
\82ð
\8eó
\82¯
\82é
\82Æ
\82Ì
\94ñ
\83A
\83N
\83e
\83B
\83u
7599 if Msg.message = WM_DROPFILES then begin
7600 AcceptDropFiles(Msg);
7605 // *************************************************************************
7606 //!
\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
7607 // *************************************************************************
7608 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7610 Application.ProcessMessages;
7611 if not Application.Terminated then begin
7612 if PreviewTimer.Enabled then
7613 PreviewTimer.Enabled := False;
7614 //
\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
7615 if (FResPopupBrowser <> nil) then
7616 FResPopupBrowser.Clear;
7618 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7619 if FPreviewBrowser <> nil then
7620 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7624 // *************************************************************************
7625 //!
\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
7626 // *************************************************************************
7627 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7632 if (Sender <> nil) then begin
7633 s := ' [' + Sender.ClassName + ']' + #13#10;
7635 s := ' [ Sender is nil ] ' + #13#10;
7638 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7640 // *************************************************************************
7641 //!
\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¬
7642 // *************************************************************************
7643 procedure TGikoForm.CreateControlThread();
7645 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7646 FControlThread := TThreadControl.Create(True);
7647 FControlThread.MaxThreadCount := 1;
7648 FControlThread.Resume;
7649 FControlThread.OnDownloadEnd := DownloadEnd;
7650 FControlThread.OnDownloadMsg := DownloadMsg;
7651 FControlThread.OnWork := Work;
7652 FControlThread.OnWorkBegin := WorkBegin;
7653 FControlThread.OnWorkEnd := WorkEnd;
7655 // *************************************************************************
7656 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7657 // *************************************************************************
7658 procedure TGikoForm.CreateBrowsers(count: Integer);
7661 newBrowser: TWebBrowser;
7663 BrowserNullTab := TBrowserRecord.Create;
7664 BrowserNullTab.Browser := Browser;
7665 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7667 FBrowsers := TList.Create;
7669 for i := 0 to count -1 do begin
7670 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7671 newBrowser := FBrowsers[FBrowsers.Count - 1];
7672 TOleControl(newBrowser).Parent := BrowserPanel;
7673 TOleControl(newBrowser).Align := alNone;
7674 TOleControl(newBrowser).Left := 0;
7675 TOleControl(newBrowser).Top := 0;
7676 newBrowser.RegisterAsDropTarget := False;
7677 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7678 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7679 newBrowser.OnEnter := BrowserEnter;
7680 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7681 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7682 newBrowser.Navigate(BLANK_HTML);
7683 ShowWindow(newBrowser.Handle, SW_HIDE);
7684 GikoSys.ShowRefCount('Browser' + IntToStr(i), newBrowser.ControlInterface);
7685 GikoSys.ShowRefCount('Document' + IntToStr(i), newBrowser.ControlInterface.Document);
7687 BrowserNullTab.Browser.BringToFront;
7688 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7690 //
\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Ì
7691 //
\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Å
7692 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7693 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7694 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7695 Application.ProcessMessages;
7698 // *************************************************************************
7699 //!
\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é
7700 // *************************************************************************
7701 procedure TGikoForm.SetSelectComboBox();
7703 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7706 ToolButton: TToolButton;
7708 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7709 SelectComboBoxPanel.Visible := False;
7711 for i := ListToolBar.ControlCount - 1 downto 0 do
7713 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7715 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7716 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7717 SelectComboBoxPanel.Parent := ListToolBar;
7718 SelectComboBoxPanel.Visible := True;
7720 SelectComboBox.Left := 0;
7721 SelectComboBox.Top := 0;
7722 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7723 SelectComboBox.Width := SelectComboBoxPanel.Width -
7724 SelectComboBoxSplitter.Width;
7726 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7727 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7728 if ToolButton = nil then begin
7729 ToolButton := TToolButton.Create(ListToolBar);
7730 ToolButton.Name := DUMMYCOMPNAME;
7732 ToolButton.Style := tbsSeparator;
7733 ToolButton.Width := 0;
7734 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7735 ListToolBar.InsertControl(ToolButton);
7736 ToolButton.Visible := False;
7738 //
\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·
7739 if (i + 1) < ListToolBar.ControlCount then
7740 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7741 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7742 ListToolBar.Controls[ i + 1 ].Visible := False;
7745 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7746 ListToolBar.Controls[ i ].Visible := False;
7754 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\83}
\83E
\83X
\83_
\83E
\83\93\83C
\83x
\83\93\83g
7755 procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7756 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7763 if (TreeView.Selected <> nil) and
7764 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7765 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
7766 rect := TreeView.Selected.DisplayRect(true);
7767 //
\83A
\83C
\83R
\83\93\95ª
\82¾
\82¯
\8d¶
\82É
\82¸
\82ç
\82·
7768 if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
7769 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7770 //
\83N
\83\8a\83b
\83N
\82Æ
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82ð
\83R
\83R
\82Å
\94»
\92è
7771 if ssDouble in Shift then begin
7772 TreeDoubleClick( TreeView.Selected );
7774 TreeClick(TreeView.Selected);
7781 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
7782 procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7786 if ActionList <> nil then begin
7787 SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7789 for i := 0 to ActionList.ActionCount - 1 do begin
7791 FActionListGroupIndexes[i] :=
7792 TCustomAction(ActionList.Actions[i]).GroupIndex;
7793 TCustomAction(ActionList.Actions[i]).GroupIndex
7796 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7802 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
7803 procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7807 if ActionList <> nil then begin
7808 if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7809 for i := 0 to ActionList.ActionCount - 1 do begin
7811 TCustomAction(ActionList.Actions[i]).GroupIndex
7812 := FActionListGroupIndexes[i];
7814 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7820 //!
\82±
\82Ì
\83\8c\83X
\82ÌURL
\8eæ
\93¾
7821 procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
7825 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
7826 procedure TGikoForm.RefreshListView(Thread: TThreadItem);
7828 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
7829 if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin
7834 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
7835 MousePos: TPoint; var Handled: Boolean);
7838 coolBar: TGikoCoolBar;
7841 if (Sender <> nil) and (Sender is TGikoCoolBar) then begin
7842 coolBar := TGikoCoolBar(Sender);
7843 if (coolBar = MainCoolBar) then begin
7844 FToolBarSettingSender := tssMain;
7845 end else if (coolBar = ListCoolBar) then begin
7846 FToolBarSettingSender := tssList;
7847 end else if (coolBar = BrowserCoolBar) then begin
7848 FToolBarSettingSender := tssBrowser;
7850 FToolBarSettingSender := tssNone;
7852 pos := coolBar.ClientToScreen( MousePos );
7853 MainCoolBarPopupMenu.Popup( pos.X, pos.Y );
7858 procedure TGikoForm.TaskTrayIconMessage(var Msg: TMsg);
7862 //
\8d¶
\83N
\83\8a\83b
\83N
\82È
\82ç
\95\9c\8c³
\82·
\82é
7863 if (Msg.wParam = WM_LBUTTONUP) then begin
7865 end else if (Msg.wParam=WM_RBUTTONUP) then begin
7866 //
\89E
\83N
\83\8a\83b
\83N
\82È
\82ç
\8fI
\97¹
\82·
\82é
7868 SetForegroundWindow ( Self.Handle );
7869 TaskTrayPopupMenu.Popup ( p.X, p.Y );
7872 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
7873 procedure TGikoForm.StoredTaskTray;
7876 if (FIconData.uID = 0) then begin
7877 FIconData.cbSize := SizeOf(TNotifyIconData);
7878 FIconData.uID := Self.Handle;
7879 FIconData.Wnd := Handle;
7880 FIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
7881 FIconData.uCallbackMessage := USER_TASKTRAY;
7882 FIconData.hIcon := Application.Icon.Handle; {
\83A
\83C
\83R
\83\93\8ew
\92è}
7883 FIconData.szTip := '
\83M
\83R
\83i
\83r'; {
\83q
\83\93\83g
\95¶
\8e\9a\97ñ}
7884 Shell_NotifyIcon(NIM_ADD, @FIconData);
7885 ShowEditors(SW_HIDE);
7886 ShowWindow(Self.Handle, SW_HIDE);
7891 //!
\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¦
7892 procedure TGikoForm.UnStoredTaskTray;
7896 Shell_NotifyIcon(NIM_DELETE, @FIconData);
7897 SetForegroundWindow(Application.Handle);
7902 // Action
\82©
\82ç
\8ai
\94[
\82µ
\82½
\82Æ
\82«
\82ÍTag
\82Ì
\92l
\82Í0
\88È
\8aO
7903 if (GikoDM.StoredTaskTrayAction.Tag = 0) then begin
7904 ShowWindow(Self.Handle, SW_RESTORE);
7906 ShowWindow(Self.Handle, SW_SHOW);
7908 ShowEditors(SW_SHOW);
7909 GikoDM.StoredTaskTrayAction.Tag := 0;
7913 \brief
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
7914 \param nCmdShow Windows.ShowWindow
\82É
\91\97\82é
\83p
\83\89\83\81\81[
\83^
\82Æ
\93¯
\82¶
7916 procedure TGikoForm.ShowEditors(nCmdShow: Integer);
7920 //
\83\8c\83X
\83G
\83f
\83B
\83^
\82ð
\92T
\82·
7921 for i := 0 to Screen.CustomFormCount - 1 do begin
7922 if TObject(Screen.CustomForms[i]) is TEditorForm then
7923 ShowWindow(Screen.CustomForms[i].Handle, nCmdShow);
7927 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83u
\83\89\83E
\83U
\8dì
\90¬
7928 procedure TGikoForm.CreateResPopupBrowser;
7930 if (FResPopupBrowser = nil) then begin
7931 FResPopupBrowser := TResPopupBrowser.Create(BrowserPanel);
7934 //! ListView
\82ÌD&D
\8eó
\82¯
\8eæ
\82è
7935 procedure TGikoForm.AcceptDropFiles(var Msg: TMsg);
7937 FileName: Array[0..MAX_PATH] of Char;
7941 datList: TStringList;
7943 //
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\94Â
\82Ì
\82Æ
\82«
\88È
\8aO
\82Í
\8b\91\94Û
7944 if GetActiveList is TBoard then begin
7945 Board := TBoard(GetActiveList);
7946 if MsgBox(Handle, Board.Title
7947 + '
\94Â
\82É
\93ü
\82ê
\82Ä
\82¢
\82¢
\82Å
\82·
\82©
\81H', '
\83M
\83R
\83i
\83r', MB_YESNO or MB_ICONQUESTION) = IDYES then begin
7948 //
\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
7949 datList := TStringList.Create;
7951 Cnt := DragQueryFile(Msg.WParam, $FFFFFFFF, FileName, SizeOf(FileName));
7952 for K := 0 to Cnt - 1 do begin
7953 DragQueryFile(Msg.WParam, K, FileName, SizeOf(FileName));
7954 // 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
7955 //
\83t
\83@
\83C
\83\8b\82Ì
\83`
\83F
\83b
\83N
7956 if (isValidFile(FileName)) then begin
7957 LogFolder := ExtractFilePath(Board.FilePath);
7958 if (FileExists( LogFolder + ExtractFileName(FileName))) then begin
7959 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);
7961 if (not DirectoryExists(LogFolder)) then begin
7962 if (not GikoSys.ForceDirectoriesEx(LogFolder) ) then begin
7963 GikoUtil.MsgBox(Handle, LogFolder + '
\82Ì
\90¶
\90¬
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7966 if (not Windows.CopyFile(FileName, PChar(LogFolder + ExtractFileName(FileName)), true)) then begin
7967 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);
7969 datList.Add(ExtractFileName(FileName));
7974 DragFinish(Msg.WParam);
7975 if (datList.Count > 0) then begin
7976 GikoSys.AddOutofIndexDat(Board, datList, False);
7977 ShowMessage(IntToStr(datList.Count) + '
\8cÂ
\82Ìdat
\83t
\83@
\83C
\83\8b\82ª
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82µ
\82½
\81B' );
7978 if GikoForm.TreeView.Visible then begin
7979 GikoForm.TreeView.Refresh;
7981 if GikoForm.ListView.Visible then begin
7985 ShowMessage('
\88ê
\82Â
\82à
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B' );
7993 ShowMessage('
\94Â
\82ð
\95\
\8e¦
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
7996 procedure TGikoForm.UpdateListView();
7998 //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
7999 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
8000 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
8001 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
8002 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
8003 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
8004 case GikoForm.ViewType of
8005 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
8006 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
8007 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
8008 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
8009 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
8010 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
8015 //!
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
8016 function TGikoForm.isValidFile(FileName: String) : boolean;
8021 //
\91¶
\8dÝ
\82·
\82é
\82©
\81A
\8ag
\92£
\8eqdat
\81A
\83t
\83@
\83C
\83\8b\96¼
8022 if ( not FileExists(FileName) ) then begin
8024 GikoUtil.MsgBox(Handle, FileName + '
\82Í
\91¶
\8dÝ
\82µ
\82Ü
\82¹
\82ñ
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
8025 end else if (ExtractFileExt(ExtractFileName(FileName)) <> '.dat' ) then begin
8027 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);
8029 //
\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
8031 dt := GikoSys.GetCreateDateFromName(ExtractFileName(FileName));
8032 if ((UnixToDateTime(ZERO_DATE) + OffsetFromUTC) = dt) then begin
8034 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);
8038 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);
8043 procedure TGikoForm.ResPopupClearTimerTimer(Sender: TObject);
8045 ResPopupClearTimer.Enabled := False;
8046 if ResPopupClearTimer.Tag = 0 then begin
8047 FResPopupBrowser.Clear;
8049 FResPopupBrowser.CurrentBrowser.ChildClear;
8052 //!
\83A
\83C
\83R
\83\93\93Ç
\82Ý
\8d\9e\82Ý
8053 procedure TGikoForm.LoadIcon();
8055 ICONI6 = 'icon16.bmp';
8056 ICON32 = 'icon32.bmp';
8057 ICONSTAT = 'state_icon.bmp';
8058 ICONMES = 'message_icon.bmp';
8059 ICONADD = 'address_icon.bmp';
8060 ICONITEM = 'item_icon.bmp';
8061 ICONTOOL = 'hottoolbar_icon.bmp';
8063 if FileExists(GikoSys.Setting.GetAppDir + ICONI6) then begin
8065 ItemIcon16.FileLoad(rtBitmap,
8066 GikoSys.Setting.GetAppDir + ICONI6, clPurple);
8068 if FileExists(GikoSys.Setting.GetAppDir + ICON32) then begin
8070 ItemIcon32.FileLoad(rtBitmap,
8071 GikoSys.Setting.GetAppDir + ICON32, clPurple);
8073 if FileExists(GikoSys.Setting.GetAppDir + ICONSTAT) then begin
8074 StateIconImageList.Clear;
8075 StateIconImageList.FileLoad(rtBitmap,
8076 GikoSys.Setting.GetAppDir + ICONSTAT, clPurple);
8078 if FileExists(GikoSys.Setting.GetAppDir + ICONMES) then begin
8079 MessageImageList.Clear;
8080 MessageImageList.FileLoad(rtBitmap,
8081 GikoSys.Setting.GetAppDir + ICONMES, clPurple);
8083 if FileExists(GikoSys.Setting.GetAppDir + ICONADD) then begin
8084 AddressImageList.Clear;
8085 AddressImageList.FileLoad(rtBitmap,
8086 GikoSys.Setting.GetAppDir + ICONADD, clPurple);
8088 if FileExists(GikoSys.Setting.GetAppDir + ICONITEM) then begin
8089 ItemImageList.Clear;
8090 ItemImageList.FileLoad(rtBitmap,
8091 GikoSys.Setting.GetAppDir + ICONITEM, clPurple);
8093 if FileExists(GikoSys.Setting.GetAppDir + ICONTOOL) then begin
8094 HotToobarImageList.Clear;
8095 HotToobarImageList.FileLoad(rtBitmap,
8096 GikoSys.Setting.GetAppDir + ICONTOOL, clPurple);
8099 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\93Ç
\82Ý
\8d\9e\82Ý
8100 procedure TGikoForm.LoadPopupMenu();