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;
27 USER_RESPOPUPCLEAR = WM_USER + 2005; ///< wParam : TWebBrowser
31 TToolBarSettingSenderType = (tssNone, tssMain, tssList, tssBrowser);
32 TMinimizeType = (mtNone, mtMinimizing, mtMinimized);
33 TResizeType = (rtNone, rtResizing);
35 // TBrowserRecord = class;
37 TGikoForm = class(TForm)
38 StatusBar: TStatusBar;
41 TreeSplitter: TSplitter;
44 ThreadMainPanel: TPanel;
45 ListSplitter: TSplitter;
47 ListView: TGikoListView;
51 MessageHideButton: TSpeedButton;
52 MessageListView: TListView;
53 MessageSplitter: TSplitter;
55 CabinetCloseSpeedButton: TSpeedButton;
57 CabinetSelectToolButton: TToolButton;
58 HistoryToolBar: TToolBar;
59 HistoryShowToolButton: TToolButton;
60 HistoryAllClearToolButton: TToolButton;
61 ItemIcon16: TImageList;
62 ItemIcon32: TImageList;
63 HotToobarImageList: TImageList;
64 ItemImageList: TImageList;
67 DeleteMenu: TMenuItem;
69 KidokuMenu: TMenuItem;
70 MidokuMenu: TMenuItem;
71 AllSelectMenu: TMenuItem;
73 StdToolBarMenu: TMenuItem;
74 CabinetMenu: TMenuItem;
77 CabinetVisibleMenu: TMenuItem;
78 MessageMenu: TMenuItem;
79 StatusBarMenu: TMenuItem;
81 LargeIconMenu: TMenuItem;
82 SmallIconMenu: TMenuItem;
84 DetailMenu: TMenuItem;
89 OptionMenu: TMenuItem;
94 BrowserPopupMenu: TPopupMenu;
95 ShowThreadMenu: TMenuItem;
96 ShowBoardMenu: TMenuItem;
97 ListIconPopupMenu: TPopupMenu;
98 LargeIconPMenu: TMenuItem;
99 SmallIconPMenu: TMenuItem;
100 ListPMenu: TMenuItem;
101 DetailPMenu: TMenuItem;
102 ClosePopupMenu: TPopupMenu;
103 CloseMenu: TMenuItem;
113 ListPopupMenu: TPopupMenu;
114 ListRoundPMenu: TMenuItem;
115 ListReservPMenu: TMenuItem;
117 ItemRoundPMenu: TMenuItem;
119 KidokuPMenu: TMenuItem;
120 MidokuPMenu: TMenuItem;
121 AllSelectPMenu: TMenuItem;
122 UrlCopyPMenu: TMenuItem;
124 DeletePMenu: TMenuItem;
126 ViewPMenu: TMenuItem;
127 LargeIconLPMenu: TMenuItem;
128 SmallIconLPMenu: TMenuItem;
129 ListLPMenu: TMenuItem;
130 DetailLPMenu: TMenuItem;
148 KokoPopupMenu: TPopupMenu;
149 KokomadePMenu: TMenuItem;
151 MenuItem1: TMenuItem;
152 MenuItem2: TMenuItem;
153 BrowserTabPopupMenu: TPopupMenu;
158 TreePopupMenu: TPopupMenu;
159 TreeSelectThreadPupupMenu: TMenuItem;
160 TreeSelectBoardPupupMenu: TMenuItem;
162 TreeSelectURLPupupMenu: TMenuItem;
166 BrowserBottomPanel: TGikoPanel;
167 CabinetSelectPopupMenu: TPopupMenu;
169 ItemReservPMenu: TMenuItem;
170 RoundNamePopupMenu: TPopupMenu;
182 MessageImageList: TImageList;
183 ProgressBar: TProgressBar;
185 NameUrlCopyPMenu: TMenuItem;
192 ListCoolBar: TGikoCoolBar;
193 ListToolBar: TToolBar;
194 BrowserCoolBar: TGikoCoolBar;
195 BrowserToolBar: TToolBar;
196 ToolButton3: TToolButton;
197 ToolButton9: TToolButton;
198 ToolButton11: TToolButton;
199 ToolButton5: TToolButton;
200 ListNameToolBar: TToolBar;
201 ListNameLabel: TLabel;
203 BrowserNameToolBar: TToolBar;
204 ItemBoardImage: TImage;
205 BrowserBoardNameLabel: TLabel;
207 BrowserNameLabel: TLabel;
214 TreeSelectNameURLPupupMenu: TMenuItem;
218 BrowserTabToolBar: TToolBar;
219 BrowserTab: TTabControl;
230 FavoriteMenu: TMenuItem;
232 BoardFavoriteAddMenu: TMenuItem;
233 ThreadFavoriteAddMenu: TMenuItem;
235 TreeSelectFavoriteAddPupupMenu: TMenuItem;
236 FavoriteTreeView: TTreeView;
237 StateIconImageList: TImageList;
239 TopRightPanel: TPanel;
242 TopCoolPanel: TPanel;
243 MainCoolBar: TGikoCoolBar;
244 MenuToolBar: TToolBar;
245 StdToolBar: TToolBar;
246 AddressToolBar: TToolBar;
247 AddressComboBox: TComboBox;
248 MoveToToolButton: TToolButton;
249 AddressImageList: TImageList;
250 AddressToolBarMenu: TMenuItem;
260 PreviewTimer: TTimer;
261 MonazillaWebPageAction1: TMenuItem;
268 ChevronPopupMenu: TPopupMenu;
272 LinkToolBar: TToolBar;
277 LinkBarPopupMenu: TPopupMenu;
279 ThreadPopupMenu: TPopupMenu;
280 MenuItem4: TMenuItem;
281 MenuItem5: TMenuItem;
282 MenuItem6: TMenuItem;
285 SelectItemNameCopyAction1: TMenuItem;
288 NameCopyPMenu: TMenuItem;
289 SelectComboBox: TComboBox;
290 MainCoolBarPopupMenu: TPopupMenu;
291 StdToolBarVisiblePMenu: TMenuItem;
292 AddressToolBarVisiblePMenu: TMenuItem;
293 LinkToolBarVisiblePMenu: TMenuItem;
314 ToolButton16: TToolButton;
321 IndividualAbon1: TMenuItem;
323 IndividualAbon2: TMenuItem;
324 AntiIndivAbonMenuItem: TMenuItem;
325 AntiIndividualAbon: TMenuItem;
329 SearchBoardName: TMenuItem;
330 TreeSelectLogDeleteSeparator: TMenuItem;
333 FavoriteTreePopupMenu: TPopupMenu;
334 FavoriteTreeRenamePopupMenu: TMenuItem;
335 FavoriteTreeNewFolderPopupMenu: TMenuItem;
337 FavoriteTreeDeletePopupMenu: TMenuItem;
338 FavoriteToolBar: TToolBar;
339 FavoriteAddToolButton: TToolButton;
340 FavoriteArrangeToolButton: TToolButton;
341 FavoriteTreeBrowseFolderPopupMenu: TMenuItem;
343 FavoriteTreeReloadPopupMenu: TMenuItem;
345 FavoriteTreeURLCopyPopupMenu: TMenuItem;
346 FavoriteTreeNameCopyPopupMenu: TMenuItem;
347 FavoriteTreeLogDeletePopupMenu: TMenuItem;
349 FavoriteTreeNameURLCopyPopupMenu: TMenuItem;
350 ToolButton20: TToolButton;
352 ExportFavoriteFileAction1: TMenuItem;
363 TreeSelectLogDeletePopupMenu: TMenuItem;
365 BBSSelectPopupMenu: TPopupMenu;
366 PlugInMenu: TMenuItem;
367 TreeSelectNamePupupMenu: TMenuItem;
368 BrowserPanel: TPanel;
370 SelectThreadSave: TMenuItem;
374 OpenLogFolder: TMenuItem;
375 Browser: TWebBrowser;
378 ResRangePopupMenu: TPopupMenu;
379 ResRangeHundPMenuItem: TMenuItem;
380 ResRangeKokoPMenuItem: TMenuItem;
381 ResRangeNewPMenuItem: TMenuItem;
382 ResRangeAllPMenuItem: TMenuItem;
383 BrowsBoradHeadAction1: TMenuItem;
384 ThreadRangePopupMenu: TPopupMenu;
391 ResRangeSelectPMenuItem: TMenuItem;
392 ListColumnPopupMenu: TPopupMenu;
401 SelectComboBoxPanel: TPanel;
402 SelectComboBoxSplitter: TImage;
403 ToolButton1: TToolButton;
406 GikoApplicationEvents: TApplicationEvents;
413 FavoriteTreeItemNameCopyPopupMenu: TMenuItem;
416 SaveThreadFile: TMenuItem;
421 SameBoardThreadItem: TMenuItem;
426 ResPopupClearTimer: TTimer;
427 procedure FormCreate(Sender: TObject);
428 procedure FormDestroy(Sender: TObject);
429 procedure BrowserStatusTextChange(Sender: TObject;
430 const Text: WideString);
431 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
432 procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
433 var AllowChange: Boolean);
434 procedure ListViewKeyDown(Sender: TObject; var Key: Word;
436 procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
437 procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
438 Button: TToolButton; State: TCustomDrawState;
439 var DefaultDraw: Boolean);
440 procedure BrowserBeforeNavigate2(Sender: TObject;
441 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
442 Headers: OleVariant; var Cancel: WordBool);
443 procedure TreeViewCustomDraw(Sender: TCustomTreeView;
444 const ARect: TRect; var DefaultDraw: Boolean);
445 procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
446 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
447 procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
448 procedure ListViewCustomDraw(Sender: TCustomListView;
449 const ARect: TRect; var DefaultDraw: Boolean);
450 procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
451 Shift: TShiftState; X, Y: Integer);
452 procedure TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
453 procedure MessageListViewResize(Sender: TObject);
454 procedure CabinetVisible( isVisible : Boolean );
455 procedure FormResize(Sender: TObject);
456 procedure ListPopupMenuPopup(Sender: TObject);
457 procedure TreePopupMenuPopup(Sender: TObject);
458 procedure BrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
459 var Cancel: WordBool);
460 procedure ListSplitterMoved(Sender: TObject);
461 procedure BrowserTabChange(Sender: TObject);
462 procedure BrowserTabMouseDown(Sender: TObject; Button: TMouseButton;
463 Shift: TShiftState; X, Y: Integer);
464 procedure BrowserTabDragOver(Sender, Source: TObject; X, Y: Integer;
465 State: TDragState; var Accept: Boolean);
466 procedure BrowserTabDragDrop(Sender, Source: TObject; X, Y: Integer);
467 procedure BrowserTabMouseMove(Sender: TObject; Shift: TShiftState; X,
469 procedure BrowserDocumentComplete(Sender: TObject;
470 const pDisp: IDispatch; var URL: OleVariant);
471 procedure RoundNamePopupMenuPopup(Sender: TObject);
472 procedure FormShow(Sender: TObject);
473 procedure BrowserTabToolBarResize(Sender: TObject);
474 procedure FavoriteMenuClick(Sender: TObject);
475 procedure MainCoolBarResize(Sender: TObject);
476 procedure AddressToolBarResize(Sender: TObject);
477 procedure AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
479 procedure BrowserEnter(Sender: TObject);
480 procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
481 procedure PreviewTimerTimer(Sender: TObject);
482 procedure MessageHideButtonClick(Sender: TObject);
483 procedure HistoryAllClearToolButtonClick(Sender: TObject);
484 procedure MainCoolBarBandInfo(Sender: TObject;
485 var BandInfo: PReBarBandInfoA);
486 procedure MainCoolBarChevronClick(Sender: TObject;
487 RebarChevron: PNMRebarChevron);
488 procedure ListCoolBarBandInfo(Sender: TObject;
489 var BandInfo: PReBarBandInfoA);
490 procedure ListCoolBarChevronClick(Sender: TObject;
491 RebarChevron: PNMRebarChevron);
492 procedure BrowserCoolBarBandInfo(Sender: TObject;
493 var BandInfo: PReBarBandInfoA);
494 procedure BrowserCoolBarChevronClick(Sender: TObject;
495 RebarChevron: PNMRebarChevron);
496 procedure ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
497 procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
498 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
499 procedure SelectComboBoxChange(Sender: TObject);
500 procedure SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
502 procedure SelectComboBoxExit(Sender: TObject);
503 procedure SelectComboBoxSplitterMouseMove(Sender: TObject;
504 Shift: TShiftState; X, Y: Integer);
505 procedure SelectComboBoxSplitterMouseDown(Sender: TObject;
506 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
507 procedure SelectComboBoxSplitterMouseUp(Sender: TObject;
508 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
509 procedure StatusBarResize(Sender: TObject);
510 procedure SelectComboBoxEnter(Sender: TObject);
511 procedure FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
513 procedure FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
514 procedure FavoriteTreeViewEdited(Sender: TObject; Node: TTreeNode;
516 procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
518 procedure FavoriteTreePopupMenuPopup(Sender: TObject);
519 procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
520 procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
521 Shift: TShiftState; X, Y: Integer);
522 procedure LinkToolBarDragOver(Sender, Source: TObject; X, Y: Integer;
523 State: TDragState; var Accept: Boolean);
524 procedure FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
526 procedure FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
527 procedure BrowserTabContextPopup(Sender: TObject; MousePos: TPoint;
528 var Handled: Boolean);
529 procedure BrowserTabPopupMenuPopup(Sender: TObject);
530 procedure BrowserTabResize(Sender: TObject);
531 procedure TreeViewKeyDown(Sender: TObject; var Key: Word;
533 procedure FavoriteTreeViewMouseDown(Sender: TObject;
534 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
535 procedure MessagePanelResize(Sender: TObject);
537 procedure SelectTimerTimer(Sender: TObject);
538 procedure ListViewColumnRightClick(Sender: TObject;
539 Column: TListColumn; Point: TPoint);
540 procedure ListViewCustomDrawItem(Sender: TCustomListView;
541 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
542 procedure FormActivate(Sender: TObject);
543 procedure BrowserPanelResize(Sender: TObject);
544 procedure MenuToolBarResize(Sender: TObject);
545 procedure ListToolBarResize(Sender: TObject);
546 procedure BrowserToolBarResize(Sender: TObject);
547 procedure KokoPopupMenuPopup(Sender: TObject);
548 procedure ListViewKeyUp(Sender: TObject; var Key: Word;
550 procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
551 var AllowEdit: Boolean);
552 procedure CabinetCloseSpeedButtonClick(Sender: TObject);
553 procedure FavoriteArrangeToolButtonClick(Sender: TObject);
554 procedure GikoApplicationEventsMessage(var Msg: tagMSG;
555 var Handled: Boolean);
556 procedure GikoApplicationEventsDeactivate(Sender: TObject);
557 procedure GikoApplicationEventsException(Sender: TObject; E: Exception);
558 procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
559 Shift: TShiftState; X, Y: Integer);
560 procedure GetResURLMenuClick(Sender: TObject);
561 procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
562 var Handled: Boolean);
563 procedure ResPopupClearTimerTimer(Sender: TObject);
566 FEnabledCloseButton: Boolean;
567 FClickNode: TTreeNode;
569 FPreviewBrowser: TPreviewBrowser;
571 FBrowserSizeHeight: Integer;
572 FBrowserSizeWidth: Integer;
573 FTabHintIndex: Integer;
574 FListStyle: TViewStyle; //
\83\8a\83X
\83g
\83A
\83C
\83R
\83\93\83X
\83^
\83C
\83\8b
575 FItemNoVisible: Boolean; //
\83\8a\83X
\83g
\94Ô
\8d\86\95\
\8e¦
\83t
\83\89\83O
576 FViewType: TGikoViewType; //
\83\8a\83X
\83g
\83A
\83C
\83e
\83\80\95\
\8e¦
\83^
\83C
\83v
577 FActiveList: TObject;
578 FActiveContent: TBrowserRecord; //
580 FHistoryList: THistoryList; //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
581 FTreeType: TGikoTreeType;
585 FDownloadTitle: string; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\83^
\83C
\83g
\83\8b\96¼
586 FDownloadMax: Integer; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\8dÅ
\91å
\83T
\83C
\83Y
587 FEvent: THTMLDocumentEventSink;//
\83u
\83\89\83E
\83U
\83h
\83L
\83\85\83\81\83\93\83g
\83C
\83x
\83\93\83g
588 IsDraggingSelectComboBox : Boolean;
589 DraggingSelectComboBoxPosition : TPoint;
590 FSearchDialog: TSearchDialog;
591 FDropSpaceNode: TTreeNode;
592 FDragTime : Cardinal; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
593 FDragButton : TToolButton; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
\82ÉDrag
\82µ
\82Ä
\82éButton
\95Û
\91¶
594 FDragWFirst : Boolean; ///< WebTab
\82ÌD&D
\97p
595 FListViewBackGroundColor : TColor; ///< ListView
\82ÌBackGroundColor
596 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¦
597 FOddColor : TColor; ///<
\82»
\82Ì
\90F
598 FSelectResWord : string; ///<
\83\8c\83X
\8di
\8d\9e\83\8f\81[
\83h
599 FIsIgnoreResize : TResizeType; ///<
\83\8a\83T
\83C
\83Y
\83C
\83x
\83\93\83g
\82ð
\96³
\8e\8b\82·
\82é
\82©
\82Ç
\82¤
\82©
600 FIsMinimize : TMinimizeType; ///<
\8dÅ
\8f¬
\89»
\82µ
\82Ä
\82¢
\82é
\8dÅ
\92\86\82©
601 FOldFormWidth : Integer; ///<
\92¼
\91O
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\95\9d
602 FToolBarSettingSender : TToolBarSettingSenderType; ///<
\83c
\81[
\83\8b\83o
\81[
\90Ý
\92è
\82ð
\83N
\83\8a\83b
\83N
\82µ
\82½
\83N
\81[
\83\8b\83o
\81[
603 FMouseDownPos : TPoint; ///<
\83u
\83\89\83E
\83U
\83^
\83u
\82Å
\83}
\83E
\83X
\82ð
\89\9f\82µ
\82½
\82Æ
\82«
\82Ì
\8dÀ
\95W
605 FResRangeMenuSelect : Longint; ///< ResRangeButton
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\8d\80\96Ú (
\83t
\83H
\81[
\83}
\83b
\83g
\82Í ResRange
\8cÝ
\8a·)
607 FIsHandledWheel : Boolean; ///<
\8aù
\82É
\8eó
\82¯
\8eæ
\82Á
\82½ WM_MOUSEWHEEL
\82©
\82Ç
\82¤
\82©
608 DiffComp: Boolean; //Add by Genyakun
\83X
\83\8c\82ª
\8dX
\90V
\82³
\82ê
\82½
\82Æ
\82«
\82ÉTrue
\82É
\82È
\82é
609 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ñ
610 FPreviewBrowserRect: TRect; ///<
\83v
\83\8c\83r
\83\85\81[
\82Ì
\95\
\8e¦
\88Ê
\92u
\82ð
\8bL
\89¯
\82·
\82é
611 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ñ
612 FResPopupBrowser: TResPopupBrowser;
613 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
614 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
615 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
616 procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
617 procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
619 procedure ListDoubleClick(Shift: TShiftState);
620 function Hook(var Message: TMessage): Boolean;
621 procedure AddRoundNameMenu(MenuItem: TMenuItem);
622 procedure SetMenuFont;
623 procedure CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
624 procedure FavoriteClick(Sender: TObject; ActiveTab: Boolean); overload;
625 procedure FavoriteClick(Sender: TObject); overload;
626 procedure FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
627 function OnDocumentContextMenu(Sender: TObject): WordBool;
628 function GetWidthAllToolButton(ToolBar: TToolBar): Integer;
629 procedure MenuBarChevronMenu;
630 procedure LinkBarChevronMenu;
631 procedure ToolBarChevronMenu(ToolBar: TToolBar);
632 procedure LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
633 procedure LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
634 procedure LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
635 procedure LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
636 procedure LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
637 function TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
638 procedure FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
639 procedure FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
640 procedure FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
642 procedure SetListViewBackGroundColor(value: TColor);
643 procedure BBSMenuItemOnClick( Sender : TObject );
644 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
645 procedure SaveCoolBarSettings;
646 procedure SaveMainCoolBarSettings;
647 procedure SaveBoardCoolBarSettings;
648 procedure SaveBrowserCoolBarSettings;
649 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
650 procedure LoadCoolBarSettings;
651 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
652 procedure OnMinimize;
653 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½
654 procedure OnMinimized;
655 /// TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
656 procedure TreeClick( Node : TTreeNode );
657 /// TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
658 procedure TreeDoubleClick( Node : TTreeNode );
659 ///
\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
660 procedure SetBBSMenu;
661 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
662 procedure ListColumnPopupMenuOnClick( Sender : TObject );
663 //!
\8di
\82è
\8d\9e\82Ý
\95¶
\8e\9a\97ñ
\90Ý
\92è
664 procedure SetSelectWord( const text : string );
665 //
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
666 function GetScreenCursor(): TCursor;
667 //
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
668 procedure SetScreenCursor(Cursor : TCursor);
669 //!
\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¬
670 procedure CreateControlThread();
671 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
672 procedure CreateBrowsers(count: Integer);
673 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
674 procedure GetGroupIndex(ActionList: TActionList);
675 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
676 procedure SetGroupIndex(ActionList: TActionList);
677 //!
\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é)
678 procedure OpenThreadItem(Thread: TThreadItem; URL: String);
679 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
680 procedure RefreshListView(Thread: TThreadItem);
681 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
682 procedure ClearThreadRengeAction;
683 //!
\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¦
684 procedure UnStoredTaskTray;
685 //!
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
686 procedure ShowEditors(nCmdShow: Integer);
687 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
688 procedure ReleaseOldestBrowser;
689 //!
\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Á
690 procedure AddMenuSameBoardThread;
691 //!
\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
692 procedure SameBoardThreadSubItemOnClick(Sender: TObject);
693 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83u
\83\89\83E
\83U
\8dì
\90¬
694 procedure CreateResPopupBrowser;
695 //!
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
696 function isValidFile(FileName: String) : boolean;
697 //! ListView
\82ÌD&D
\8eó
\82¯
\8eæ
\82è
698 procedure AcceptDropFiles(var Msg: TMsg);
700 procedure CreateParams(var Params: TCreateParams); override;
701 procedure WndProc(var Message: TMessage); override;
702 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
703 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
704 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
707 LastRoundTime: TDateTime;
708 BrowserNullTab: TBrowserRecord;
709 FControlThread: TThreadControl;
710 FIconData : TNotifyIconData;
711 procedure MoveToURL(const inURL: string);
712 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
714 function GetHttpState: Boolean;
715 procedure SetEnabledCloseButton(Enabled: Boolean);
716 function GetTreeNode(Data: TObject): TTreeNode;
717 procedure ListViewAllSelect;
718 property ListStyle: TViewStyle read FListStyle write FListStyle;
719 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
720 property ViewType: TGikoViewType read FViewType write FViewType;
721 property NameCookie: string read FNameCookie write FNameCookie;
722 property MailCookie: string read FMailCookie write FMailCookie;
723 property ClickNode: TTreeNode read FClickNode write FClickNode;
724 property TreeType: TGikoTreeType read FTreeType write FTreeType;
725 property ActiveContent: TBrowserRecord read FActiveContent write FActiveContent;
726 property ResRangeMenuSelect: Longint read FResRangeMenuSelect write FResRangeMenuSelect;
727 property SelectResWord : string read FSelectResWord write FSelectResWord;
728 property BrowserSizeWidth: Integer read FBrowserSizeWidth write FBrowserSizeWidth;
729 property BrowserSizeHeight: Integer read FBrowserSizeHeight write FBrowserSizeHeight;
730 property SearchDialog: TSearchDialog read FSearchDialog write FSearchDialog;
731 property ToolBarSettingSender : TToolBarSettingSenderType
732 read FToolBarSettingSender write FToolBarSettingSender;
733 property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
734 property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
735 property WorkCount: Integer read FWorkCount write FWorkCount;
736 procedure SetContent(inThread: TBrowserRecord);
737 function GetActiveContent(popup :Boolean = false): TThreadItem;
738 function GetActiveList: TObject;
740 procedure SetListViewType(AViewType: TGikoViewType); overload;
741 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
742 procedure PlaySound(SoundEventName: string);
743 procedure ShowBBSTree( inBBS : TBBS );
744 procedure ShowBBSTreeOld( inBBS : TBBS );
745 procedure ShowHistoryTree;
746 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
747 procedure SetBrowserTabState;
748 procedure SetToolBarPopup;
749 procedure ShowFavoriteAddDialog( Item : TObject );
750 procedure FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
751 procedure RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
752 property ListViewBackGroundColor: TColor read FListViewBackGroundColor write SetListViewBackGroundColor;
753 property UseOddResOddColor : Boolean read FUseOddResOddColor write FUseOddResOddColor;
754 property OddColor : TColor read FOddColor write FOddColor;
755 function FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
756 procedure OnPlugInMenuItem( Sender : TObject );
757 procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
758 /// 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Å
759 procedure ActiveListColumnSave;
760 procedure SetActiveList(Obj: TObject);
761 property ActiveList: TObject read GetActiveList write SetActiveList;
762 /// CoolBar
\82ª
\83T
\83C
\83Y
\95Ï
\8dX
\82³
\82ê
\82½
763 procedure CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
764 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
765 procedure IndividualAbonID(Atype : Integer);
766 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
767 procedure IndividualAbon(Atag, Atype : Integer);
768 //
\93¯
\88êID
\82ðNG
\83\8f\81[
\83h
\82É
\93o
\98^
769 procedure AddIDtoNGWord(invisible : boolean);
770 //
\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Ý
771 procedure RepaintAllTabsBrowser();
772 //
\83\8a\83\93\83N
\83o
\81[
\90Ý
\92è
773 procedure SetLinkBar;
774 procedure FavoriteBrowseFolder( node: TTreeNode );
775 //
\83X
\83\8c\83b
\83h
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
776 procedure DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
777 //
\94Â
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
778 procedure DownloadList(Board: TBoard; ForceDownload: Boolean = False);
779 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
780 procedure DeleteHistory( threadItem: TThreadItem );
781 //
\83^
\83u
\82ð
\8dí
\8f\9c \83X
\83\8c\83b
\83h
\8ew
\92è
782 procedure DeleteTab(ThreadItem: TThreadItem); overload;
783 //
\83^
\83u
\82ð
\8dí
\8f\9c \83u
\83\89\83E
\83U
\83\8c\83R
\81[
\83h
\81i
\83^
\83u
\81j
\8ew
\92è
784 procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
785 //
\83^
\83u
\8dí
\8f\9c\81i
\8eÀ
\91\95\95\94\81j
786 procedure DeleteTab(index, selectIndex: Integer); overload;
787 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
788 procedure BrowserMovement(const AName: string); overload;
789 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
790 procedure BrowserMovement(scroll: Integer); overload;
791 //Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
792 function GetMainForm(): TComponent;
793 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
794 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
795 procedure OnGestureStart(Sender: TObject);
796 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
797 procedure OnGestureMove(Sender: TObject);
798 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
799 procedure OnGestureEnd(Sender: TObject);
800 ///
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
801 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
802 //ListView
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\82ð
\8eæ
\93¾
\82·
\82é
803 procedure SelectListItem(List: TList);
804 //
\8ew
\92è
\82µ
\82½
\83\8c\83X
\82ð
\83R
\83s
\81[
\82·
\82é
805 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
807 procedure ModifySelectList;
809 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
811 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
813 procedure SetSelectRoundName(Sender: TObject);
815 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
817 function WebBrowserClick(Sender: TObject): WordBool;
818 //!
\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é
819 procedure SetSelectComboBox();
821 //!
\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
822 procedure TaskTrayIconMessage(var Msg : TMsg); message WM_USER + 2010;
823 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
824 procedure StoredTaskTray;
826 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
829 TFavoriteMenuItem = class(TMenuItem)
833 property Data: Pointer read FData write FData;
836 TBBSMenuItem = class(TMenuItem)
840 property Data: Pointer read FData write FData;
843 TLinkToolButton = class(TToolButton)
847 property Data: Pointer read FData write FData;
856 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
857 YofUtils, ToolBarUtil, ToolBarSetting,
858 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
859 FavoriteArrange, AddressHistory, Gesture,
860 About, Option, Round, Splash, Sort, ListSelect, Imm,
861 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
862 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
863 InputAssistDataModule, Types, ReplaceDataModule;
866 BLANK_HTML: string = 'about:blank';
867 BROWSER_COUNT = 5; //
\83u
\83\89\83E
\83U
\82Ì
\90\94
869 DandD_THRESHOLD = 5; //D&D
\82Ìè
\87\92l
\81ipixcel)
870 //
\83v
\83\8c\83r
\83\85\81[
\83t
\83@
\83C
\83\8b\96¼
871 HTML_FILE_NAME = 'temp_preview.html';
872 //
\83\81\83b
\83Z
\81[
\83WID
873 USER_TREECLICK = WM_USER + 2000;
874 USER_RESIZED = WM_USER + 2001;
875 USER_MINIMIZED = WM_USER + 2002;
876 USER_SETLINKBAR = WM_USER + 2003;
877 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
878 USER_TASKTRAY = WM_USER + 2010;
881 procedure TGikoForm.CreateParams(var Params: TCreateParams);
884 if FormStyle in [fsNormal, fsStayOnTop] then begin
885 if BorderStyle in [bsSingle, bsSizeable] then begin
886 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
887 Params.WndParent := 0;
892 procedure TGikoForm.FormCreate(Sender: TObject);
894 TVS_NOTOOLTIPS = $0080;
900 wp: TWindowPlacement;
904 Writeln('============================================================');
905 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
907 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
908 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¢');
909 Writeln('============================================================');
912 Sort.SetSortDate(Now());
914 FTreeType := gttNone;
915 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô
917 Application.HookMainWindow(Hook);
918 FIsIgnoreResize := rtResizing;
919 //ActionList
\82ÌGuoupIndex
\82ð
\95Û
\91¶
\82µ
\82Ä
\81A0
\82É
\83N
\83\8a\83A
\82·
\82é
\81B
920 //(
\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¢)
921 //
\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
922 GetGroupIndex(GikoDM.GikoFormActionList);
923 FSearchDialog := nil;
924 FResPopupBrowser := nil;
925 CreateBrowsers(BROWSER_COUNT);
928 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
931 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
932 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
934 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
935 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
937 EnabledCloseButton := True;
939 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
940 ListView.ViewStyle := GikoSys.Setting.ListStyle;
942 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
944 AnimePanel.Left := 0;
946 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
948 //
\83L
\83\83\83r
\83l
\83b
\83g
949 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
951 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
952 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
953 GikoDM.MsgBarVisibleActionExecute(nil);
954 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
956 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
957 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
958 GikoDM.StatusBarVisibleActionExecute(nil);
960 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
961 TreeView.Items.BeginUpdate;
962 FavoriteTreeView.Items.BeginUpdate;
963 ListView.Items.BeginUpdate;
965 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
966 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
967 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
968 TreeView.Color := GikoSys.Setting.CabinetBackColor;
969 FavoriteTreeView.Font.Assign(TreeView.Font);
970 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
972 ListView.Font.Name := GikoSys.Setting.ListFontName;
973 ListView.Font.Size := GikoSys.Setting.ListFontSize;
974 ListView.Font.Color := GikoSys.Setting.ListFontColor;
975 ListView.Font.Style := [];
976 if GikoSys.Setting.ListFontBold then
977 ListView.Font.Style := [fsbold];
978 if GikoSys.Setting.ListFontItalic then
979 ListView.Font.Style := ListView.Font.Style + [fsitalic];
981 ListViewBackGroundColor := clWhite; //
\83f
\83t
\83H
\83\8b\83g
\82É
\90Ý
\92è
\82µ
\82½
\82Ì
\82¿
982 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; //
\83\86\81[
\83U
\92è
\8b`
\82É
\95Ï
\8dX
983 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
984 FOddColor := GikoSys.Setting.OddColor;
987 TreeView.Items.EndUpdate;
988 FavoriteTreeView.Items.EndUpdate;
989 ListView.Items.EndUpdate;
991 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
992 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
994 //
\83~
\83\85\81[
\83g
\82Ì
\8fó
\91Ô
\82ð
\90Ý
\92è
995 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
997 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
998 FResRangeMenuSelect := GikoSys.ResRange;
999 case GikoSys.ResRange of
1002 GikoDM.AllResAction.Execute;
1006 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
1007 GikoDM.SelectResAction.Checked := True;
1010 case FResRangeMenuSelect of
1011 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
1012 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
1013 100: GikoDM.OnlyAHundredResAction.Checked := True;
1017 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\95\
\8e¦
\94Í
\88Í
1018 case GikoSys.Setting.ThreadRange of
1021 GikoDM.AllItemAction.Checked := True;
1026 GikoDM.LogItemAction.Checked := True;
1031 GikoDM.NewItemAction.Checked := True;
1036 GikoDM.LiveItemAction.Checked := True;
1037 ViewType := gvtLive;
1041 GikoDM.ArchiveItemAction.Checked := True;
1042 ViewType := gvtArch;
1047 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
1048 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1049 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1050 BrowserTab.Font.Style := [];
1051 if GikoSys.Setting.BrowserTabFontBold then
1052 BrowserTab.Font.Style := [fsBold];
1053 if GikoSys.Setting.BrowserTabFontItalic then
1054 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1055 BrowserTab.DoubleBuffered := True;
1056 FDragWFirst := false;
1057 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1059 //
\83u
\83\89\83E
\83U
\83^
\83u
1060 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1062 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1063 GikoDM.BrowserTabTopAction.Checked := True;
1065 GikoDM.BrowserTabBottomAction.Checked := True;
1068 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1069 GikoDM.BrowserTabTabStyleAction.Checked := True;
1070 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1071 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1073 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1076 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1077 ProgressBar.Parent := StatusBar;
1078 ProgressBar.Top := 2;
1079 ProgressBar.Left := 0;
1080 ProgressBar.Width := StatusBar.Panels[0].Width;
1081 ProgressBar.Height := StatusBar.Height - 2;
1082 ProgressBar.Position := 0;
1084 //
\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Æ)
1085 InitializeBoardPlugIns;
1087 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1088 GikoSys.ListBoardFile;
1089 //
\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É
1091 //
\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è
1092 if (SplashWindow <> nil) then begin
1093 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1097 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1098 for i := Length(BBSs) - 1 downto 0 do begin
1099 if not BBSs[i].IsBoardFileRead then
1100 GikoSys.ReadBoardFile(BBSs[i]);
1102 if SplashWindow <> nil then begin
1103 SplashWindow.ProgressBar.StepBy(20);
1104 SplashWindow.Update;
1108 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1109 RoundList := TRoundList.Create;
1110 RoundList.LoadRoundBoardFile;
1111 RoundList.LoadRoundThreadFile;
1113 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1114 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1115 Style := Style or TVS_NOTOOLTIPS;
1116 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1118 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1119 TreeView.Align := alClient;
1120 FavoriteTreeView.Align := alClient;
1121 FavoriteTreeView.Visible := False;
1123 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1126 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1127 wp.length := sizeof(wp);
1128 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1129 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1130 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1131 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1132 wp.showCmd := SW_HIDE;
1133 SetWindowPlacement(Handle, @wp);
1136 if GikoSys.Setting.WindowMax then
1137 WindowState := wsMaximized;
1139 //
\83M
\83R
\83A
\83j
\83\81
1141 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1142 if FileExists(FileName) then
1143 Animate.FileName := FileName;
1151 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1152 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1153 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1156 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1157 FHistoryList := THistoryList.Create;
1159 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1160 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1161 TreeView, FTreeType);
1163 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1164 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1165 FavoriteDM.ReadFavorite;
1167 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1168 GikoDM.ArrangeAction.Execute;
1170 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1171 case GikoSys.Setting.ListWidthState of
1173 ViewPanel.Width := 1;
1174 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1175 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1178 ViewPanel.Width := GikoSys.Setting.ListWidth;
1179 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1180 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1183 ViewPanel.Width := GikoSys.Setting.ListWidth;
1184 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1185 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1189 case GikoSys.Setting.ListHeightState of
1191 ViewPanel.Height := 1;
1192 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1193 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1196 ViewPanel.Height := GikoSys.Setting.ListHeight;
1197 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1198 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1201 ViewPanel.Height := GikoSys.Setting.ListHeight;
1202 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1203 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1208 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1209 CreateControlThread();
1211 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1212 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1214 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1217 BrowserBoardNameLabel.Caption := '';
1218 BrowserNameLabel.Caption := '';
1221 FTabHintIndex := -1;
1223 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1224 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1225 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1227 MakeDefaultINIFile();
1228 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1229 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1230 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1231 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1234 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1235 SetSelectComboBox();
1237 //
\83A
\83h
\83\8c\83X
\83o
\81[
1238 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1240 //
\83\8a\83\93\83N
\83o
\81[
1242 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1244 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1245 if not FileExists(GikoSys.GetBoardFileName) then begin
1246 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
1247 + '
\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
1248 + '
\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';
1249 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1250 GikoDM.NewBoardAction.Execute;
1253 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1254 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1256 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1257 // FLastRoundTime := 0;
1259 ListView.OnData := TListViewUtils.ListViewData;
1261 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1262 CabinetVisible( False );
1263 if GikoSys.Setting.CabinetVisible then begin
1264 i := CabinetSelectPopupMenu.Items.Count - 1;
1265 if GikoSys.Setting.CabinetIndex = i - 1 then
1266 GikoDM.CabinetHistoryAction.Execute
1267 else if GikoSys.Setting.CabinetIndex = i then
1268 GikoDM.CabinetFavoriteAction.Execute
1270 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1271 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1272 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1273 FIsIgnoreResize := rtResizing;
1274 GikoDM.CabinetBBSAction.Execute;
1277 ShowBBSTreeOld( BBSs[ 0 ] );
1278 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1281 //
\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
1282 for i := 1 to ParamCount do begin
1283 MoveToURL(ParamStr(i));
1286 GikoDM.RepaintStatusBar;
1287 StatusBarResize(Sender);
1289 dummy1.Caption := ItemReservPMenu.Caption;
1290 dummy1.Hint := ItemReservPMenu.Hint;
1292 {$IFDEF SPAM_FILTER_ENABLED}
1293 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1294 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1297 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1298 MouseGesture := TMouseGesture.Create;
1299 GikoSys.Setting.Gestures.LoadGesture(
1300 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
1301 MouseGesture.Margin := GikoSys.Setting.Gestures.Margin;
1302 MouseGesture.OnGestureStart := OnGestureStart;
1303 MouseGesture.OnGestureMove := OnGestureMove;
1304 MouseGesture.OnGestureEnd := OnGestureEnd;
1305 if GikoSys.Setting.GestureEnabled then
1306 MouseGesture.SetHook( Handle );
1308 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1309 GikoSys.SetGikoMessage;
1311 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1312 if GikoSys.Setting.AutoLogin then
1313 GikoDM.LoginAction.Execute;
1315 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1317 //
\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è
1318 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1319 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1321 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\8f\89\8aú
\89»
1322 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1324 //
\92u
\8a·
\90Ý
\92è
\83t
\83@
\83C
\83\8b\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1325 ReplaceDM.LoadFromFile(GikoSys.GetReplaceFileName);
1327 //
\83\8c\83X
\83|
\83b
\83v
\83A
\83b
\83v
\8fÁ
\8b\8e\83^
\83C
\83}
\81[
1328 ResPopupClearTimer.Interval := GikoSys.Setting.RespopupWait;
1330 // D&D
\82ð
\8eó
\82¯
\8eæ
\82é
1331 DragAcceptFiles(ListView.Handle, True);
1333 //
\8f\89\8aú
\89»
\82É
\8e¸
\94s
\82µ
\82½
\83\82\83W
\83\85\81[
\83\8b\83`
\83F
\83b
\83N
1334 if (FavoriteDM.AbEnd) then begin
1335 GikoUtil.MsgBox(Self.Handle, '
\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',
1336 '
\8f\89\8aú
\89»
\88Ù
\8fí');
1342 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1343 procedure TGikoForm.SaveCoolBarSettings;
1346 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1348 SaveMainCoolBarSettings;
1349 SaveBoardCoolBarSettings;
1350 SaveBrowserCoolBarSettings;
1353 procedure TGikoForm.SaveMainCoolBarSettings;
1358 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1359 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1360 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1361 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1362 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1363 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1366 procedure TGikoForm.SaveBoardCoolBarSettings;
1371 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1372 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1373 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1374 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1375 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1376 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1379 procedure TGikoForm.SaveBrowserCoolBarSettings;
1384 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1385 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1386 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1387 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1388 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1389 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1392 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1393 procedure TGikoForm.LoadCoolBarSettings;
1399 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1400 MainCoolBar.Bands.BeginUpdate;
1402 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1403 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1404 CoolSet := GikoSys.Setting.MainCoolSet[i];
1405 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1406 FIsIgnoreResize := rtNone;
1407 SaveCoolBarSettings;
1410 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1411 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1412 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1415 MainCoolBar.Bands.EndUpdate;
1418 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1419 ListCoolBar.Bands.BeginUpdate;
1421 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1422 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1423 CoolSet := GikoSys.Setting.ListCoolSet[i];
1424 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1425 FIsIgnoreResize := rtNone;
1426 SaveCoolBarSettings;
1429 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1430 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1431 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1434 ListCoolBar.Bands.EndUpdate;
1437 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1438 BrowserCoolBar.Bands.BeginUpdate;
1440 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1441 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1442 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1443 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1444 FIsIgnoreResize := rtNone;
1445 SaveCoolBarSettings;
1448 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1449 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1450 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1453 BrowserCoolBar.Bands.EndUpdate;
1458 procedure TGikoForm.FormShow(Sender: TObject);
1462 if FStartUp then begin
1463 ShowWindow(Application.Handle, SW_HIDE);
1465 //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½
1466 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1467 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1468 GikoDM.StdToolBarVisibleActionExecute( nil );
1469 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1470 GikoDM.AddressBarVisibleActionExecute( nil );
1471 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1472 GikoDM.LinkBarVisibleActionExecute( nil );
1473 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1474 GikoDM.ListToolBarVisibleActionExecute( nil );
1475 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1476 GikoDM.ListNameBarVisibleActionExecute( nil );
1477 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1478 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1479 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1480 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1482 // CoolBar
\95\9c\8c³
1483 LoadCoolBarSettings;
1485 //
\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é
1486 // ResetBandInfo( ListCoolBar, ListToolBar );
1487 FIsIgnoreResize := rtNone;
1489 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1490 if GikoSys.Setting.TabAutoLoadSave then begin
1491 GikoDM.TabsOpenAction.Tag := 1;
1492 GikoDM.TabsOpenAction.Execute;
1493 GikoDM.TabsOpenAction.Tag := 0;
1494 if (GikoSys.Setting.LastCloseTabURL <> '') then begin
1495 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( FActiveContent.Browser ), 0 );
1496 if ( FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
1497 while (FActiveContent.Browser.ReadyState <> READYSTATE_COMPLETE) and
1498 (FActiveContent.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
1499 Application.ProcessMessages;
1502 item := BBSsFindThreadFromURL( GikoSys.Setting.LastCloseTabURL );
1503 if (item <> nil) and (item.IsLogFile) then begin
1504 OpenThreadItem(item, item.URL);
1506 GikoSys.Setting.LastCloseTabURL := '';
1510 //ActionList
\82ÌGroupIndex
\82ð
\8c³
\82É
\96ß
\82·
1511 SetGroupIndex(GikoDM.GikoFormActionList);
1517 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1519 // if GikoForm.WindowState <> wsMinimized then
1520 // SaveCoolBarSettings;
1522 if ( GikoSys.Setting.ShowDialogForEnd ) and
1523 (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
1528 GikoSys.Setting.LastCloseTabURL := '';
1529 if GikoSys.Setting.TabAutoLoadSave then begin
1530 GikoDM.TabsSaveAction.Execute;
1531 if (GetActiveContent <> nil) and
1532 (GetActiveContent.IsLogFile) then begin
1533 GikoSys.Setting.LastCloseTabURL := GetActiveContent.URL;
1537 if (SearchDialog <> nil) then begin
1538 if (SearchDialog.Visible) then begin
1541 SearchDialog.Release;
1544 SearchDialog := nil;
1548 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82Ì
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81AEditorForm
\82ð
\95Â
\82¶
\82é
1549 GikoDM.CloseAllEditorAction.Execute;
1551 Application.UnhookMainWindow(Hook);
1552 Application.Terminate;
1555 procedure TGikoForm.FormDestroy(Sender: TObject);
1558 wp : TWindowPlacement;
1561 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1564 MouseGesture.UnHook;
1566 MouseGesture := nil;
1570 ActiveListColumnSave;
1574 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1575 wp.length := sizeof(wp);
1576 GetWindowPlacement(Handle, @wp);
1577 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1578 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1579 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1580 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1581 GikoSys.Setting.WindowMax := WindowState = wsMaximized;
1583 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1584 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1585 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1586 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1587 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1588 if GikoDM.ArrangeAction.Checked then
1589 GikoSys.Setting.ListOrientation := gloVertical
1591 GikoSys.Setting.ListOrientation := gloHorizontal;
1592 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1597 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1598 if not GikoSys.Setting.ResRangeHold then
1599 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1602 if WindowState <> wsNormal then
1603 WindowState := wsNormal;
1604 SaveCoolBarSettings;
1606 GikoSys.Setting.WriteWindowSettingFile;
1607 GikoSys.Setting.WriteNameMailSettingFile;
1610 //
\83\8a\83A
\83\8b\83^
\83C
\83\80\82É
\95Û
\91¶
\82³
\82ê
\82é
\82Ì
\82Å
\81A
\82Ü
\82½
\81A
\83E
\83B
\83\93\83h
\83E
\83T
\83C
\83Y
\82ª CoolBar
\82æ
\82è
1611 //
\8f¬
\82³
\82
\82È
\82Á
\82Ä
\82¢
\82é
\82Æ
\82«
\82É
\95Û
\91¶
\82·
\82é
\82Æ
\92l
\82ª
\8fã
\8f\91\82«
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\82Ì
\82Å
\82±
\82±
\82Å
\82Í
\95Û
\91¶
\82µ
\82È
\82¢
1613 //
\81ªFormDestroy
\92\86\82É
\88Ú
\93®
\82µ
\82½
\82Ì
\82Å
\81A
\82±
\82±
\82Å
\95Û
\91¶
\82µ
\82È
\82¢
\82Æ
\82¢
\82¯
\82È
\82¢
\82Æ
\8ev
\82¤
\81B
\81i
\82à
\82¶
\82ã
\81@2004/04/09
\81j
1615 //if (GikoForm.WindowState <> wsMinimized) and (GikoForm.WindowState <> wsMaximized) then
1617 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\90Ý
\92è
\82Ì
\95Û
\91¶
1618 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1620 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1622 //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é
1623 //
\8f\89\8aú
\89»
\88Ù
\8fí
\8e\9e\82©
\82ç
\82Ì
\8fI
\97¹
\82Å
\82Í
\95Û
\91¶
\82µ
\82È
\82¢
1624 if not (FavoriteDM.AbEnd) then begin
1625 FavoriteDM.WriteFavorite;
1630 //LockWindowUpdate(Self.Handle);
1632 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1633 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1634 GikoSys.Setting.ShowDialogForAllTabClose := false;
1635 GikoDM.AllTabCloseAction.Execute;
1636 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1640 for i := FBrowsers.Count - 1 downto 0 do begin
1641 TWebBrowser(FBrowsers[i]).Free;
1644 FBrowsers.Capacity := 0;
1649 if BrowserNullTab <> nil then begin
1650 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
1651 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
1653 BrowserNullTab.Free;
1659 TreeView.Items.BeginUpdate;
1660 TreeView.Items.GetFirstNode.Free;
1661 TreeView.Items.Clear;
1662 TreeView.Items.EndUpdate;
1666 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1668 //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
1669 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1673 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
1675 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1687 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶&
\94j
\8aü
1689 RoundList.SaveRoundFile;
1703 FControlThread.Terminate;
1704 FControlThread.WaitFor;
1708 FControlThread.Free;
1710 //
\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é
1711 for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
1712 GikoForm.PlugInMenu.items[i].Free;
1714 GikoForm.PlugInMenu.Clear;
1717 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
1718 // 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Å
1719 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
1720 for i := Length(BoardGroups) - 1 downto 0 do begin
1721 //BoardGroups[i].Clear;
1722 BoardGroups[i].Free;
1726 for i := Length( BBSs ) - 1 downto 0 do begin
1727 if BBSs[ i ] <> nil then
1735 if FEvent <> nil then
1739 if FResPopupBrowser <> nil then begin
1740 TOleControl(FResPopupBrowser).Parent := nil;
1741 FResPopupBrowser.Free;
1747 if FPreviewBrowser <> nil then begin
1748 FPreviewBrowser.Free;
1749 FPreviewBrowser := nil;
1753 //LockWindowUpdate(0);
1756 //
\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
1757 procedure TGikoForm.SetBBSMenu;
1760 item : TBBSMenuItem;
1763 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
1764 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1766 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1767 CabinetSelectPopupMenu.Items[ i ].Free;
1768 CabinetMenu.Items[ i ].Free;
1769 BBSSelectPopupMenu.Items[ i ].Free;
1775 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
1776 for i := Length( BBSs ) - 1 downto 0 do begin
1778 item := TBBSMenuItem.Create( PopupMenu );
1779 item.Caption := BBSs[ i ].Title;
1780 item.Data := BBSs[ i ];
1781 item.OnClick := BBSMenuItemOnClick;
1782 CabinetSelectPopupMenu.Items.Insert( 0, item );
1783 item := TBBSMenuItem.Create( PopupMenu );
1784 item.Caption := BBSs[ i ].Title;
1785 item.Data := BBSs[ i ];
1786 item.OnClick := BBSMenuItemOnClick;
1787 CabinetMenu.Insert( 0, item );
1788 item := TBBSMenuItem.Create( PopupMenu );
1789 item.Caption := BBSs[ i ].Title;
1790 item.Data := BBSs[ i ];
1791 item.OnClick := BBSMenuItemOnClick;
1792 BBSSelectPopupMenu.Items.Insert( 0, Item );
1799 procedure TGikoForm.ReloadBBS;
1804 LockWindowUpdate(Self.Handle);
1806 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1807 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1808 GikoSys.Setting.ShowDialogForAllTabClose := false;
1809 GikoDM.AllTabCloseAction.Execute;
1810 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1811 SetContent(BrowserNullTab);
1812 //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
1813 TreeView.Items.Clear;
1815 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1817 RoundList.SaveRoundFile;
1820 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
1826 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1828 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1833 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1835 FavoriteDM.WriteFavorite;
1840 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
1841 for i := Length(BoardGroups) - 1 downto 0 do begin
1843 BoardGroups[i].Free;
1849 for i := Length( BBSs ) - 1 downto 0 do begin
1850 if BBSs[ i ] <> nil then
1859 FTreeType := gttNone;
1861 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
1863 //
\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Æ)
1864 InitializeBoardPlugIns;
1866 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1868 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1869 for i := Length(BBSs) - 1 downto 0 do begin
1870 if not BBSs[i].IsBoardFileRead then
1871 GikoSys.ReadBoardFile(BBSs[i]);
1874 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
1877 ShowBBSTree( BBSs[ 0 ] );
1879 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1880 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1881 TreeView, FTreeType);
1883 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1884 FavoriteDM.ReadFavorite;
1888 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1889 RoundList.LoadRoundBoardFile;
1890 RoundList.LoadRoundThreadFile;
1892 LockWindowUpdate(0);
1896 \todo
\89½
\8cÌ IE 7
\82Å
\82Í about:..
\82É
\82È
\82é
\82Ì
\82©
1897 (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©)
1898 \92²
\8d¸
\82·
\82é
\82±
\82Æ
1900 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1908 threadItem : TThreadItem;
1910 Protocol, Host, Path, Document, Port, Bookmark: string;
1915 ActiveFileName: string;
1920 cResPopup: TResPopupBrowser;
1922 //
\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ª
1923 // 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è)
1924 if Pos('about:..', Text) = 1 then
1925 Text2 := 'about:blank..' + Copy( Text, Length('about:..')+1, Length(Text) )
1928 if not( TObject(Sender) is TWebBrowser )then
1932 if (TWebBrowser(Sender) <> nil) and (not TWebBrowser(Sender).Busy) and (Assigned(TWebBrowser(Sender).Document)) then begin
1933 if LowerCase(OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset) <> 'shift_jis' then begin
1934 OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset := 'shift_jis';
1941 if PreviewTimer.Enabled then
1942 PreviewTimer.Enabled := False;
1943 Application.CancelHint;
1945 if GetActiveContent <> nil then
1946 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
1948 ActiveFileName := '';
1950 FActiveContent := nil;
1953 //
\91O
\89ñ
\82Æ
\93¯
\82¶
\8fê
\8d\87\8fI
\97¹
1954 if (StatusBar.Panels[1].Text = Text2) then begin
1955 if Text2 = '' then begin
1956 if FResPopupBrowser <> nil then begin
1957 if not(Sender is TResPopupBrowser) then
1958 FResPopupBrowser.Clear
1960 TResPopupBrowser(Sender).ChildClear;
1966 StatusBar.Panels[1].Text := Text2;
1969 if FPreviewBrowser <> nil then
1970 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1972 if FResPopupBrowser <> nil then begin
1973 if not(Sender is TResPopupBrowser) then begin
1974 if (FResPopupBrowser.Visible) then begin
1975 if ResPopupClearTimer.Interval > 0 then begin
1976 ResPopupClearTimer.Enabled := True;
1977 ResPopupClearTimer.Tag := 0;
1979 FResPopupBrowser.Clear;
1983 if ResPopupClearTimer.Interval > 0 then begin
1984 ResPopupClearTimer.Enabled := True;
1985 ResPopupClearTimer.Tag := 1;
1987 TResPopupBrowser(Sender).ChildClear;
1993 if not(Sender is TResPopupBrowser) then
1994 if not GikoSys.Setting.UnActivePopup then
1995 if not GikoForm.Active then
2000 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
2001 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
2004 Ext := AnsiLowerCase(ExtractFileExt(Text2));
2005 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
2006 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) then begin
2007 if FPreviewBrowser = nil then begin
2008 FPreviewBrowser := TPreviewBrowser.Create(Self);
2009 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2010 TOleControl(FPreviewBrowser).Parent := nil;
2012 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
2013 FPreviewURL := Text2;
2014 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
2015 PreviewTimer.Enabled := True;
2016 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
2017 if (Pos('mailto:', Text2) = 1) and (GikoSys.Setting.RespopupMailTo) then begin
2018 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
2019 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
2021 p.x := p.x - TWebBrowser(Sender).ClientOrigin.x;
2022 p.y := p.y - TWebBrowser(Sender).ClientOrigin.y;
2023 e := IHTMLDocument2(TWebBrowser(Sender).Document).elementFromPoint(p.x, p.y);
2024 if (Assigned(e)) then begin
2025 CreateResPopupBrowser;
2027 if not(Sender is TResPopupBrowser) then begin
2028 if (FResPopupBrowser.Visible) then begin
2029 FResPopupBrowser.Clear;
2032 TResPopupBrowser(Sender).ChildClear;
2035 cResPopup := FResPopupBrowser.CreateNewBrowser;
2036 tmp2 := ZenToHan(e.Get_outerText);
2037 if (GikoSys.IsNumeric(tmp2)) then begin
2038 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
2039 wkIntSt := StrToInt64(tmp2);
2040 wkIntTo := StrToInt64(tmp2);
2041 cResPopup.PopupType := gptThread;
2042 HTMLCreater.SetResPopupText(cResPopup, GetActiveContent(true), wkIntSt, wkIntTo, False, False);
2044 cResPopup.PopupType := gptRaw;
2045 cResPopup.Title := s;
2049 CreateResPopupBrowser;
2051 if not(Sender is TResPopupBrowser) then begin
2052 if (FResPopupBrowser.Visible) then begin
2053 FResPopupBrowser.Clear;
2056 TResPopupBrowser(Sender).ChildClear;
2059 threadItem := GetActiveContent(true);
2060 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
2061 PathRec := Gikosys.Parse2chURL2(URL);
2062 if (PathRec.FNoParam) then begin
2066 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
2068 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
2070 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
2072 URL := GikoSys.GetBrowsableThreadURL( URL );
2073 wkIntSt := PathRec.FSt;
2074 wkIntTo := PathRec.FTo;
2076 if (wkIntSt = 0) and (wkIntTo = 0) then begin
2079 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
2081 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
2083 end else if wkIntSt > wkIntTo then begin
2088 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
2093 threadItem := BBSsFindThreadFromURL( URL );
2095 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
2096 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
2097 if board <> nil then begin
2098 if not board.IsThreadDatRead then
2099 GikoSys.ReadSubjectFile( board );
2100 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
2104 if threadItem <> nil then begin
2105 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
2106 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
2107 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
2111 cResPopup := FResPopupBrowser.CreateNewBrowser;
2112 cResPopup.PopupType := gptThread;
2113 HTMLCreater.SetResPopupText(cResPopup, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
2117 if (cResPopup <> nil) then begin
2118 ResPopupClearTimer.Enabled := False;
2120 if cResPopup.PopupType = gptRaw then begin
2121 if cResPopup.Title <> '' then begin
2122 cResPopup.TitlePopup;
2125 if cResPopup.RawDocument <> '' then begin
2127 end else if cResPopup.Title <> '' then begin
2128 cResPopup.TitlePopup;
2135 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2139 FEnabledCloseButton := Enabled;
2140 SysMenu := GetSystemMenu(Handle, False);
2142 if Enabled then begin
2143 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2145 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2148 DrawMenuBar(Handle);
2151 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2152 var AllowChange: Boolean);
2154 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
2155 // if FTreeType = gtt2ch then
2156 // FSortIndex := -1;
2159 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2160 Shift: TShiftState);
2164 if GetActiveList is TBoard then begin
2166 VK_BACK:; // UpFolderButtonClick(Sender);
2167 VK_SPACE: ListDoubleClick(Shift);
2168 VK_RETURN: ListClick;
2171 if ListView.Selected <> nil then begin
2172 pos.X := ListView.Column[ 0 ].Width;
2173 pos.Y := ListView.Selected.Top;
2175 pos.X := ListView.Left;
2176 pos.Y := ListView.Top;
2178 Windows.ClientToScreen( ListView.Handle, pos );
2179 ListPopupMenu.Popup( pos.X, pos.Y );
2182 end else begin // TBBS, TCategory
2184 VK_BACK:; // UpFolderButtonClick(Sender);
2185 VK_SPACE: ListClick;
2186 VK_RETURN: ListDoubleClick(Shift);
2189 if ListView.Selected <> nil then begin
2190 pos.X := ListView.Column[ 0 ].Width;
2191 pos.Y := ListView.Selected.Top;
2193 pos.X := ListView.Left;
2194 pos.Y := ListView.Top;
2196 Windows.ClientToScreen( ListView.Handle, pos );
2197 ListPopupMenu.Popup( pos.X, pos.Y );
2203 function TGikoForm.GetHttpState: Boolean;
2205 Result := FHttpState;
2208 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2209 Column: TListColumn);
2213 vSortIndex : Integer;
2214 vSortOrder : Boolean;
2216 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2217 if TObject( FActiveList ) is TBBS then begin
2218 orderList := GikoSys.Setting.BBSColumnOrder;
2219 vSortIndex := GikoSys.Setting.BBSSortIndex;
2220 vSortOrder := GikoSys.Setting.BBSSortOrder;
2221 end else if TObject( FActiveList ) is TCategory then begin
2222 orderList := GikoSys.Setting.CategoryColumnOrder;
2223 vSortIndex := GikoSys.Setting.CategorySortIndex;
2224 vSortOrder := GikoSys.Setting.CategorySortOrder;
2225 end else if TObject( FActiveList ) is TBoard then begin
2226 orderList := GikoSys.Setting.BoardColumnOrder;
2227 vSortIndex := GikoSys.Setting.BoardSortIndex;
2228 vSortOrder := GikoSys.Setting.BoardSortOrder;
2232 id := Integer( orderList[ idx ] );
2235 if vSortIndex = id then
2236 vSortOrder := not vSortOrder
2238 vSortOrder := id = 0;
2241 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2244 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2245 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2249 DefaultDraw := True;
2250 //
\82È
\82º
\82©
\96³
\8fð
\8c\8f\82ÅExit
\82µ
\82Ä
\82¢
\82é
2252 DefaultDraw := False;
2253 if (cdsSelected in State) or (cdsHot in State) then begin
2254 Sender.Canvas.Brush.Color := clHighlight;
2255 Sender.Canvas.Font.Color := clHighlightText;
2257 Sender.Canvas.Brush.Color := clBtnFace;
2258 Sender.Canvas.Font.Color := clBtnText;
2260 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2261 Sender.Canvas.FillRect(ARect);
2262 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2265 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2270 Nodes := TreeView.Items;
2272 for i := 0 to Nodes.Count - 1 do begin
2273 if Nodes.Item[i].Data = Data then begin
2274 Result := Nodes.Item[i];
2281 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2282 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2283 Headers: OleVariant; var Cancel: WordBool);
2288 kMenuName: string = 'menu:';
2293 if Pos(kMenuName, URL) <> 0 then begin
2294 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2296 if not GikoSys.IsNumeric(sNo) then Exit;
2300 KokoPopupMenu.PopupComponent := nil;
2301 if (Sender is TComponent) then
2302 KokoPopupMenu.PopupComponent := TComponent(Sender);
2303 KokoPopupMenu.Tag := StrToInt(sNo);
2304 KokoPopupMenu.Popup(p.x, p.y);
2305 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2306 Cancel := not GikoSys.Setting.OpenMailer;
2311 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2312 const ARect: TRect; var DefaultDraw: Boolean);
2316 IsBoardNode: Boolean;
2322 Category: TCategory;
2326 DefaultDraw := True;
2328 if FTreeType = gttHistory then Exit;
2330 TreeView.Canvas.Font.Color := clBlue;
2331 IsBoardNode := False;
2332 for i := 0 to TreeView.Items.Count - 1 do begin
2334 if not TreeView.Items[i].IsVisible then
2337 if TObject(TreeView.Items[i].Data) is TCategory then begin
2338 if TreeView.Items[i].Expanded then
2341 IsBoardNode := False;
2342 Category := TCategory(TreeView.Items[i].Data);
2343 for j := 0 to Category.Count - 1 do begin
2344 Board := Category.Items[j];
2345 if Board <> nil then begin
2346 if Board.UnRead > 0 then begin
2354 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2355 IsBoardNode := True;
2356 Board := TBoard(TreeView.Items[i].Data);
2358 Cnt := Board.UnRead;
2364 Bitmap := TBitmap.Create;
2366 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2367 Bitmap.Canvas.Font.Style := [fsBold];
2368 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2373 NodeRect := TreeView.Items[i].DisplayRect(True);
2376 CntText := '(' + IntToStr(Cnt) + ')'
2377 else if Cnt = 1 then
2381 TextWidth := TreeView.Canvas.TextWidth(CntText);
2383 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2385 NodeRect.Left + NodeWidth + TextWidth + 8,
2387 DrawText(TreeView.Canvas.Handle,
2391 DT_SINGLELINE or DT_VCENTER);
2393 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2396 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2397 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2400 Category: TCategory;
2403 DefaultDraw := True;
2405 if FTreeType = gttHistory then Exit;
2407 TreeView.Canvas.Font.Style := [];
2408 if Node <> nil then begin
2409 if TObject(Node.Data) is TCategory then begin
2410 Category := TCategory(Node.Data);
2411 for i := 0 to Category.Count - 1 do begin
2412 Board := Category.Items[i];
2413 if Board <> nil then begin
2414 if Board.UnRead > 0 then begin
2415 TreeView.Canvas.Font.Style := [fsBold];
2420 end else if TObject(Node.Data) is TBoard then begin
2421 Board := TBoard(Node.Data);
2422 if Board.UnRead > 0 then
2423 TreeView.Canvas.Font.Style := [fsBold];
2428 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2430 TreeView.Invalidate;
2432 if TObject(Node.Data) is TBBS then begin
2433 TBBS(Node.Data).NodeExpand := True;
2434 end else if TObject(Node.Data) is TCategory then begin
2435 TCategory(Node.Data).NodeExpand := True;
2436 end else if TObject(Node.Data) is TBoard then begin
2437 TBoard(Node.Data).NodeExpand := True;
2441 procedure TGikoForm.ListViewAllSelect;
2446 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2448 AddMessageList(Msg, nil, Icon);
2450 // *************************************************************************
2451 //!
\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
2452 // *************************************************************************
2453 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2457 boardPlugIn : TBoardPlugIn;
2462 if Item.DownType = gdtBoard then
2463 ATitle := Item.Board.Title
2465 ATitle := Item.ThreadItem.Title;
2467 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2469 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2471 if Item.DownType = gdtBoard then begin
2474 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2475 if GetActiveList = Item.Board then begin
2477 //
\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é
2478 if (GikoSys.Setting.AutoSortThreadList) then begin
2479 GikoSys.Setting.BoardSortIndex := 0;
2480 GikoSys.Setting.BoardSortOrder := True;
2482 Sort.SetSortDate(Now());
2483 SetActiveList(Item.Board);
2485 Item.Board.Modified := True;
2486 Item.Board.IsThreadDatRead := True;
2489 end else if Item.DownType = gdtThread then begin
2492 Item.ThreadItem.NewArrival := True;
2493 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2494 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2495 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2496 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2497 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2498 Item.ThreadItem.Title := Res.FTitle;
2499 ATitle := Item.ThreadItem.Title;
2500 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2501 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2502 ATitle := Res.FTitle;
2504 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2505 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2506 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2510 if GikoSys.Setting.BrowserTabVisible then begin
2511 if GetActiveContent = Item.ThreadItem then
2512 InsertBrowserTab(Item.ThreadItem)
2513 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2514 InsertBrowserTab(Item.ThreadItem, True)
2516 InsertBrowserTab(Item.ThreadItem, False);
2519 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2520 InsertBrowserTab(Item.ThreadItem);
2523 Application.ProcessMessages;
2525 if Item.State = gdsComplete then begin
2527 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2531 PlaySound('NewDiff');
2532 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2537 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2538 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2539 Item.ThreadItem.Round := False;
2540 //Item.ThreadItem.RoundName := '';
2541 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);
2544 //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
2545 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
2546 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
2547 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
2548 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
2549 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
2550 case GikoForm.ViewType of
2551 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
2552 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
2553 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
2554 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
2555 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
2556 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
2559 RefreshListView(Item.ThreadItem);
2562 end else if Item.State = gdsNotModify then begin
2564 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2565 //SetContent(Item.ThreadItem);
2566 InsertBrowserTab(Item.ThreadItem);
2568 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2569 PlaySound('NoChange');
2570 Screen.Cursor := crDefault;
2571 end else if Item.State = gdsAbort then begin
2573 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2574 end else if Item.State = gdsError then begin
2579 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2580 // if Item.ResponseCode = 302 then
2581 // 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);
2587 if FWorkCount < 0 then FWorkCount := 0;
2588 if FWorkCount = 0 then begin
2590 Animate.Active := False;
2592 Screen.Cursor := crDefault;
2599 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2601 // SetProgressValue(Number, 0, AWorkCountMax);
2602 // ProgressBar.Visible := True;
2603 ProgressBar.Position := 0;
2604 ProgressBar.Max := AWorkCountMax;
2605 FDownloadTitle := AWorkTitle;
2606 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2607 FDownloadMax := AWorkCountMax;
2610 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2612 ProgressBar.Position := 0;
2613 if FDownloadMax <> 0 then
2614 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2617 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2619 ProgressBar.Position := AWorkCount;
2620 // SetProgressValue(Number, AWorkCount);
2621 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2624 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2626 ListItem: TListItem;
2628 MessageListView.Items.BeginUpdate;
2630 ListItem := MessageListView.Items.Add;
2631 ListItem.Caption := ACaption;
2632 ListItem.Data := AObject;
2633 ListItem.MakeVisible(False);
2635 gmiOK: ListItem.ImageIndex := 0;
2636 gmiSAD: ListItem.ImageIndex := 1;
2637 gmiNG: ListItem.ImageIndex := 2;
2638 gmiWhat: ListItem.ImageIndex := 3;
2641 MessageListView.Items.EndUpdate;
2645 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
2646 procedure TGikoForm.ReleaseOldestBrowser;
2650 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2651 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2652 TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2653 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2659 function TGikoForm.InsertBrowserTab(
2660 ThreadItem : TThreadItem;
2661 ActiveTab : Boolean = True
2664 i, j, idx : Integer;
2665 favItem : TFavoriteThreadItem;
2666 newBrowser : TBrowserRecord;
2671 if Threaditem = nil then Exit;
2673 if ThreadItem.IsLogFile then begin
2674 //
\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é
2675 //
\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é
2676 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2677 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2678 j := FBrowsers.IndexOf(FActiveContent.Browser);
2679 if j = BROWSER_COUNT - 1 then
2680 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2682 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2683 if not FHistoryList.AddHistory( favItem, TreeView, FTreeType ) then
2686 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2687 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2688 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2689 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2690 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2691 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2692 ReleaseOldestBrowser;
2693 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2694 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2695 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2697 if ActiveTab then begin
2698 BrowserTab.TabIndex := i;
2699 BrowserTab.OnChange(nil);
2706 idx := BrowserTab.TabIndex;
2707 newBrowser := TBrowserRecord.Create;
2708 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2709 ReleaseOldestBrowser;
2710 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2711 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2712 newBrowser.thread := ThreadItem;
2713 newBrowser.Repaint := true;
2715 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2716 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2717 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2718 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2722 if ActiveTab then begin
2723 BrowserTab.TabIndex := 0;
2725 end else if GikoSys.Setting.BrowserTabAppend = gtaLast then begin
2726 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2727 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2728 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2732 if ActiveTab then begin
2733 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2734 BrowserTab.TabIndex := 0
2736 BrowserTab.TabIndex := i;
2739 //
\83^
\83u
\88Ê
\92u
\82ð
\8eæ
\93¾
2741 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2742 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2743 TWebBrowser(FBrowsers[1]) then begin
2748 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2751 //
\83^
\83u
\82ª
\96³
\82¢
\82Æ
\82«
\82È
\82Ç
\91Î
\8dô
2752 if (ins < 0) then begin
2755 BrowserTab.Tabs.InsertObject(ins, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2756 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2757 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2758 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2760 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2765 if ActiveTab then begin
2766 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2767 BrowserTab.TabIndex := 0
2769 BrowserTab.TabIndex := ins;
2772 Result := newBrowser;
2773 if(ActiveTab) or (idx = -1) then begin
2774 BrowserTab.OnChange(nil);
2777 if BrowserNullTab = nil then begin
2778 BrowserNullTab := TBrowserRecord.Create;
2779 BrowserNullTab.Browser := Browser;
2781 // if BrowserNullTab.thread <> ThreadItem then begin
2782 // BrowserNullTab.Movement := '';
2784 BrowserNullTab.thread := ThreadItem;
2785 Result := BrowserNullTab;
2786 BrowserTab.TabIndex := -1;
2787 SetContent(BrowserNullTab);
2790 if GikoSys.Setting.URLDisplay then
2791 AddressComboBox.Text := ThreadItem.URL;
2795 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2803 ThreadItem: TThreadItem;
2804 Thread: TBrowserRecord;
2805 ThreadTitle, ThreadPTitle: string;
2806 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2809 idx := BrowserTab.TabIndex;
2810 if (not FStartUp) and
2811 (FActiveContent <> nil) and
2812 (FActiveContent.Thread <> Thread.Thread) and
2813 (FActiveContent.Browser <> nil) and
2814 (Assigned(FActiveContent.Browser.Document)) then begin
2817 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document).Body).ScrollTop;
2820 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2825 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2826 Thread.Browser.Navigate(BLANK_HTML);
2827 BrowserBoardNameLabel.Caption := '';
2828 ItemBoardImage.Picture := nil;
2829 BrowserNameLabel.Caption := '';
2830 ItemImage.Picture := nil;
2831 BrowserNullTab.Thread := nil;
2832 //TOleControl(BrowserNullTab.Browser).Visible := true;
2833 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2834 FActiveContent := nil;
2836 end else if Thread.Browser = nil then begin
2837 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2838 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2839 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2840 ReleaseOldestBrowser;
2841 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2842 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2845 ThreadTitle := Thread.Thread.Title;
2846 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2847 //ThreadScrollTop := Thread.Thread.ScrollTop;
2848 if Thread.Thread.IsLogFile then begin
2849 if not FileExists(Thread.Thread.GetThreadFileName) then begin
2850 Thread.Thread.DeleteLogFile;
2854 ThreadIsLog := Thread.Thread.IsLogFile;
2855 ThreadItem := Thread.Thread;
2856 ThreadNewArraical := Thread.Thread.NewArrival;
2857 //ThreadUnRead := Thread.Thread.UnRead;
2858 BBSID := ThreadItem.ParentBoard.BBSID;
2859 FileName := ThreadItem.FileName;
2861 if GetCapture = ListView.Handle then
2864 Screen.Cursor := crHourGlass;
2868 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2869 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2870 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2872 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2873 if (not Assigned(Thread.Browser.Document)) then begin
2874 Thread.Browser.Navigate('about:blank');
2876 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2877 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2878 Application.ProcessMessages;
2879 if idx <> BrowserTab.TabIndex then begin
2884 if (Thread <> nil) and (ThreadItem <>nil) then begin
2885 BrowserBoardNameLabel.Caption := ThreadPTitle;
2886 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2887 BrowserNameLabel.Caption := ThreadTitle;
2888 ItemImage.Picture := nil;
2890 if ThreadNewArraical then
2891 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
2893 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
2895 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
2897 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
2898 BrowserNameLabel.Left := ItemImage.Left + 20;
2901 //ActiveContent
\81@
\82Ì
\8dX
\90V
2902 FActiveContent := Thread;
2904 if not ThreadIsLog then begin
2905 Self.Caption := GikoDataModule.CAPTION_NAME ;
2906 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\8fÁ
\8b\8e
2907 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
2909 Thread.Browser.BringToFront;
2910 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
2911 doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
2913 doc.charset := 'Shift_JIS';
2920 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
2921 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\95\
\8e¦
2922 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
2923 StatusBar.Panels[THREADSIZE_PANEL].Width :=
2924 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
2925 //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«
2926 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
2927 if Thread.Repaint then begin
2928 Thread.Repaint := false;
2930 Thread.Browser.OnStatusTextChange := nil;
2931 LockWindowUpdate(Thread.Browser.ParentWindow);
2932 HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
2933 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
2934 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
2938 RefreshListView(ThreadItem);
2940 Screen.Cursor := crDefault;
2944 function TGikoForm.GetActiveContent(popup :Boolean = false): TThreadItem;
2947 if FActiveContent <> nil then begin
2948 Result := FActiveContent.Thread;
2950 (FResPopupBrowser <> nil) and (FResPopupBrowser.CurrentBrowser.Visible = True) then
2951 if (FResPopupBrowser.CurrentBrowser.Thread <> nil) then begin
2952 Result := FResPopupBrowser.CurrentBrowser.Thread;
2962 procedure TGikoForm.SetActiveList(Obj: TObject);
2966 // if FActiveList <> Obj then begin
2969 if ListView.Selected <> nil then
2970 idx := ListView.Selected.Index
2976 ListView.Items.Count := 0;
2977 ListView.Items.Clear;
2978 ListView.Selected := nil;
2979 // ListView.Columns.Clear;
2980 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
2981 and (FActiveContent.Thread.IsLogFile) then begin
2983 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
2985 on E: Exception do begin
2986 //
\83X
\83\8c\88ê
\97\97DL
\8cã
\82È
\82Ç
\82ÉFActiveContent
\82Ì
\8e\9d\82ÂThread
\82ª
2987 //
\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é
2988 ReleaseBrowser(FActiveContent);
2989 FActiveContent.Thread := nil;
2990 Self.Caption := GikoDataModule.CAPTION_NAME;
2994 Self.Caption := GikoDataModule.CAPTION_NAME;
2995 //Application.Title := CAPTION_NAME;
2997 // ActiveListColumnSave;
2999 Screen.Cursor := crHourGlass;
3001 if Obj is TBBS then begin
3002 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3003 end else if Obj is TCategory then begin
3004 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3005 end else if Obj is TBoard then begin
3006 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3009 Screen.Cursor := crDefault;
3012 if idx >= 0 then begin
3013 if idx >= ListView.Items.Count then
3014 idx := ListView.Items.Count - 1;
3015 ListView.ItemIndex := idx;
3016 ListView.ItemFocused := ListView.Items.Item[ idx ];
3022 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
3023 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
3024 function TGikoForm.GetActiveList: TObject;
3026 Result := FActiveList;
3029 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
3031 SetListViewType(AViewType, '', False);
3034 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
3039 for i := Length( BBSs ) - 1 downto 0 do begin
3040 BBSs[i].SelectText := SelectText;
3041 BBSs[i].KubetsuChk := KubetsuChk;
3043 ViewType := AViewType;
3044 if ActiveList is TBoard then begin
3045 Board := TBoard(ActiveList);
3047 //gvtAll: ListView.Items.Count := Board.Count;
3048 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
3049 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
3050 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
3051 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
3052 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
3056 SetActiveList(Board);
3060 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
3061 const ARect: TRect; var DefaultDraw: Boolean);
3067 if ListView.Items.Count = 0 then begin
3068 DefaultDraw := true;
3069 ListView.Canvas.Brush.Color := ListView.Color;
3070 ListView.Canvas.FillRect(ARect);
3074 ListView.Canvas.Font.Color := clWindowText;
3075 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3078 ListView.Canvas.Font.Color := clBlue;
3079 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';
3082 ListView.Canvas.Font.Color := clGreen;
3083 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3086 ListView.Canvas.Font.Color := clFuchsia;
3087 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';
3090 ListView.Canvas.Font.Color := clMaroon;
3091 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90¶
\91¶
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3094 ListView.Canvas.Font.Color := clNavy;
3095 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';
3096 if GetActiveList is TBoard then
3097 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
3105 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
3106 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
3107 ListView.Canvas.TextOut(p.X, p.Y, s);
3109 DefaultDraw := True;
3113 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
3115 Item: TDownloadItem;
3117 if not Board.IsThreadDatRead then
3118 GikoSys.ReadSubjectFile(Board);
3119 Item := TDownloadItem.Create;
3121 Item.Board := Board;
3122 Item.DownType := gdtBoard;
3123 Item.ForceDownload := ForceDownload;
3124 FControlThread.AddItem(Item);
3125 if FWorkCount = 0 then begin
3127 Animate.Active := True;
3130 Screen.Cursor := crAppStart;
3138 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
3140 Item: TDownloadItem;
3142 Item := TDownloadItem.Create;
3144 Item.ThreadItem := ThreadItem;
3145 Item.DownType := gdtThread;
3146 Item.ForceDownload := ForceDownload;
3147 FControlThread.AddItem(Item);
3148 if FWorkCount = 0 then begin
3150 Animate.Active := True;
3153 Screen.Cursor := crAppStart;
3161 procedure TGikoForm.PlaySound(SoundEventName: string);
3165 if not GikoSys.Setting.Mute then begin
3166 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
3167 if FileExists(FileName) then begin
3168 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
3169 sndPlaySound(nil, SND_SYNC);
3170 Application.ProcessMessages;
3172 sndPlaySound(PChar(FileName), SND_ASYNC);
3178 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
3179 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3181 FHistoryList.DeleteHistory( threadItem, TreeView, TreeType );
3184 procedure TGikoForm.ShowBBSTreeOld(
3192 FavoriteTreeView.Visible := False;
3193 FavoriteToolBar.Hide;
3194 TreeView.Visible := True;
3196 b := CabinetSelectPopupMenu.Items.Count - 1;
3197 for i := 0 to b do begin
3198 item := CabinetSelectPopupMenu.Items[ i ];
3199 if item is TBBSMenuItem then begin
3200 if TBBSMenuItem( item ).Data = inBBS then begin
3201 item.Checked := True;
3202 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3203 CabinetMenu.Items[ i ].Checked := True;
3204 GikoSys.Setting.CabinetIndex := i;
3208 item.Checked := False;
3209 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3210 CabinetMenu.Items[ i ].Checked := False;
3212 CabinetSelectToolButton.Caption := inBBS.Title;
3214 GikoDM.CabinetHistoryAction.Checked := False;
3215 GikoDM.CabinetFavoriteAction.Checked := False;
3217 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3218 FTreeType := gtt2ch;
3219 HistoryToolBar.Hide;
3220 FActiveBBS := inBBS;
3221 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3222 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3223 //?c???[??g?b?v?????I????
3224 if GetActiveList = nil then
3225 TreeView.Selected := TreeView.Items[0]
3227 for i := 0 to TreeView.Items.Count - 1 do begin
3228 if TreeView.Items[i].Data = GetActiveList then begin
3229 TreeView.Selected := TreeView.Items[i];
3233 TreeView.Selected := TreeView.Items[0]
3241 procedure TGikoForm.ShowBBSTree(
3250 FavoriteTreeView.Visible := False;
3251 FavoriteToolBar.Hide;
3252 TreeView.Visible := True;
3254 b := CabinetSelectPopupMenu.Items.Count - 1;
3255 for i := 0 to b do begin
3256 item := CabinetSelectPopupMenu.Items[ i ];
3257 if item is TBBSMenuItem then begin
3258 if TBBSMenuItem( item ).Data = inBBS then begin
3259 item.Checked := True;
3260 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3261 CabinetMenu.Items[ i ].Checked := True;
3262 GikoSys.Setting.CabinetIndex := i;
3266 item.Checked := False;
3267 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3268 CabinetMenu.Items[ i ].Checked := False;
3270 CabinetSelectToolButton.Caption := inBBS.Title;
3272 GikoDM.CabinetHistoryAction.Checked := False;
3273 GikoDM.CabinetFavoriteAction.Checked := False;
3275 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3276 or (not (CabinetPanel.Visible)) then begin
3277 FTreeType := gtt2ch;
3278 HistoryToolBar.Hide;
3279 FActiveBBS := inBBS;
3280 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3281 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3282 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3283 if GetActiveList = nil then begin
3285 TreeClick( TreeView.Items[0] );
3289 for i := 0 to TreeView.Items.Count - 1 do begin
3290 if TreeView.Items[i].Data = GetActiveList then begin
3291 TreeClick( TreeView.Items[i] );
3295 TreeClick( TreeView.Items[0] );
3303 procedure TGikoForm.ShowHistoryTree;
3308 if CabinetPanel.Visible then begin
3309 if FTreeType = gttHistory then begin
3310 CabinetVisible( False );
3311 GikoDM.CabinetHistoryAction.Checked := False;
3313 GikoDM.CabinetHistoryAction.Checked := True;
3316 CabinetVisible( True );
3317 GikoDM.CabinetHistoryAction.Checked := True;
3320 // BBS...BBS, History, Favorite
3321 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3323 FavoriteTreeView.Visible := False;
3324 TreeView.Visible := True;
3326 GikoDM.CabinetBBSAction.Checked := False;
3327 GikoDM.CabinetFavoriteAction.Checked := False;
3329 if FTreeType <> gttHistory then begin
3330 b := CabinetSelectPopupMenu.Items.Count - 1;
3331 for i := 0 to b do begin
3332 item := CabinetSelectPopupMenu.Items[ i ];
3333 if item is TBBSMenuItem then begin
3334 item.Checked := False;
3335 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3336 CabinetMenu.Items[ i ].Checked := False;
3340 FTreeType := gttHistory;
3341 HistoryToolBar.Show;
3342 FavoriteToolBar.Hide;
3343 FHistoryList.SetTreeNode( TreeView );
3344 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3348 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3350 ChangeEvent: TTVChangedEvent;
3351 ChangingEvent: TTVChangingEvent;
3355 if Item is TCategory then
3356 bbs := TCategory( Item ).ParenTBBS
3357 else if Item is TBoard then
3358 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3362 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3363 if Item <> FActiveList then begin
3365 ChangingEvent := nil;
3367 if not CallEvent then begin
3368 ChangeEvent := TreeView.OnChange;
3369 ChangingEvent := TreeView.OnChanging;
3372 if not CallEvent then begin
3373 TreeView.OnChange := nil;
3374 TreeView.OnChanging := nil;
3376 //Application.ProcessMessages;
3377 for i := 0 to TreeView.Items.Count - 1 do begin
3378 if TreeView.Items[i].Data = Item then begin
3379 TreeView.Items[i].Selected := True;
3381 TreeClick(TreeView.Items[i]);
3385 //Application.ProcessMessages;
3387 if not CallEvent then begin
3388 TreeView.OnChange := ChangeEvent;
3389 TreeView.OnChanging := ChangingEvent;
3394 if Item <> FActiveList then begin
3395 ActiveListColumnSave;
3396 if (Item is TBBS) or (Item is TCategory) then begin
3397 ListView.Columns.Clear;
3398 SetActiveList( Item );
3399 end else if Item is TBoard then begin
3400 if not TBoard( Item ).IsThreadDatRead then begin
3401 Screen.Cursor := crHourGlass;
3403 if not TBoard( Item ).IsThreadDatRead then
3404 GikoSys.ReadSubjectFile(TBoard( Item ));
3406 Screen.Cursor := crDefault;
3409 Sort.SetSortDate(Now());
3410 SetActiveList( Item );
3415 if Item is TBoard then begin // not TCategory
3416 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3417 if GikoSys.Setting.ListWidthState = glsMax then begin
3418 GikoDM.BrowserMinAction.Execute;
3419 if GikoForm.Visible then
3423 if GikoSys.Setting.ListHeightState = glsMax then begin
3424 GikoDM.BrowserMinAction.Execute;
3425 if GikoForm.Visible then
3432 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3433 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3435 listItem : TListItem;
3436 threadItem : TThreadItem;
3443 if not (GetActiveList is TBoard) then Exit;
3444 listItem := ListView.GetItemAt( X, Y );
3445 if listItem = nil then Exit;
3446 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3448 threadItem := TThreadItem(ListItem.Data);
3449 InsertBrowserTab(threadItem, False);
3450 if threadItem.IsLogFile then
3451 ListView.UpdateItems(listItem.Index, listItem.Index);
3455 //
\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Å
3456 if (ssDouble in Shift) then
3457 ListDoubleClick(Shift)
3465 Windows.ClientToScreen( ListView.Handle, pos );
3466 ListPopupMenu.Popup( pos.X, pos.Y );
3472 procedure TGikoForm.ListClick;
3474 ListItem: TListItem;
3475 ThreadItem: TThreadItem;
3477 if ListView.SelCount <> 1 then Exit;
3478 ListItem := ListView.Selected;
3479 if ListItem = nil then Exit;
3480 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3482 ThreadItem := TThreadItem(ListItem.Data);
3483 if ThreadItem.IsLogFile then begin
3484 InsertBrowserTab(ThreadItem);
3485 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3487 InsertBrowserTab(ThreadItem);
3490 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3491 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3492 if GikoSys.Setting.ListWidthState = glsMin then begin
3493 GikoDM.BrowserMaxAndFocusAction.Execute;
3496 if GikoSys.Setting.ListHeightState = glsMin then begin
3497 GikoDM.BrowserMaxAndFocusAction.Execute;
3503 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3505 ThreadItem: TThreadItem;
3508 shiftDown := (ssShift in Shift);
3510 if ListView.Selected = nil then Exit;
3512 if TObject(ListView.Selected.Data) is TCategory then begin
3513 SelectTreeNode(ListView.Selected.Data, True);
3514 end else if TObject(ListView.Selected.Data) is TBoard then begin
3515 SelectTreeNode(ListView.Selected.Data, True)
3516 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3517 Application.ProcessMessages;
3518 ThreadItem := TThreadItem(ListView.Selected.Data);
3519 DownloadContent(ThreadItem, shiftDown);
3521 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3522 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3523 if GikoSys.Setting.ListWidthState = glsMin then begin
3524 GikoDM.BrowserMaxAction.Execute;
3525 GikoDM.SetFocusForBrowserAction.Execute;
3528 if GikoSys.Setting.ListHeightState = glsMin then begin
3529 GikoDM.BrowserMaxAction.Execute;
3530 GikoDM.SetFocusForBrowserAction.Execute;
3537 procedure TGikoForm.BrowserMovement(const AName: string);
3539 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3540 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3541 and (FActiveContent <> nil) then begin
3542 FActiveContent.Move(AName);
3545 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
3546 procedure TGikoForm.BrowserMovement(scroll: Integer);
3548 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3549 and (FActiveContent <> nil) then begin
3550 FActiveContent.Move(scroll);
3553 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3555 if TObject(Node.Data) is TBBS then begin
3556 TBBS(Node.Data).NodeExpand := False;
3557 end else if TObject(Node.Data) is TCategory then begin
3558 TCategory(Node.Data).NodeExpand := False;
3559 end else if TObject(Node.Data) is TBoard then begin
3560 TBoard(Node.Data).NodeExpand := False;
3562 if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3563 TreeClick(TreeView.Selected);
3567 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3569 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3571 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3573 TreeSplitter.Visible := isVisible;
3574 CabinetPanel.Visible := isVisible;
3575 GikoDM.CabinetVisibleAction.Checked := isVisible;
3578 procedure TGikoForm.SelectListItem(List: TList);
3580 TmpListItem: TListItem;
3584 TmpListItem := ListView.Selected;
3585 while TmpListItem <> nil do begin
3586 List.Add(TmpListItem.Data);
3587 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3592 procedure TGikoForm.FormResize(Sender: TObject);
3595 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3596 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3598 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3599 if GikoSys.Setting.ListWidthState = glsMin then begin
3600 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3601 ViewPanel.Width := ThreadMainPanel.Width - 80;
3604 if GikoSys.Setting.ListHeightState = glsMin then begin
3605 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3606 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3610 FIsIgnoreResize := rtResizing;
3611 PostMessage( Handle, USER_RESIZED, 0, 0 );
3616 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3620 FTabHintIndex := -1;
3621 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3622 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3623 DeleteTab(i, BrowserTab.TabIndex);
3628 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3632 FTabHintIndex := -1;
3633 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3634 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3635 DeleteTab(i, BrowserTab.TabIndex);
3640 procedure TGikoForm.DeleteTab(index, selectIndex: Integer);
3646 if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
3647 doc := TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser.Document;
3648 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := doc.Body.ScrollTop;
3651 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := 0;
3653 if(FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[index])) then
3654 FActiveContent := nil;
3655 if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
3656 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser);
3658 FBrowsers.Move(j, BROWSER_COUNT - 1);
3660 BrowserTab.Tabs.BeginUpdate;
3662 GikoSys.Setting.LastCloseTabURL :=
3663 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.URL;
3664 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Free;
3665 if ( BrowserTab.Tabs.Count - 1 = index ) and
3666 ( BrowserTab.TabRect(index).Left
3667 <= BrowserTab.DisplayRect.Left ) then begin
3668 BrowserTab.ScrollTabs(-1);
3670 BrowserTab.Tabs.Delete(index);
3671 if selectIndex > index then begin
3672 BrowserTab.TabIndex := selectIndex - 1;
3674 if BrowserTab.Tabs.Count -1 >= selectIndex then
3675 BrowserTab.TabIndex := selectIndex
3677 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3680 BrowserTab.Tabs.EndUpdate;
3682 if BrowserTab.Tabs.Count = 0 then begin
3683 BrowserNullTab.Thread := nil;
3685 if(BrowserTab.TabIndex <> -1) and
3686 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3687 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
3688 ReleaseOldestBrowser;
3690 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3691 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3692 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3693 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3696 if( FActiveContent = nil) then
3697 BrowserTab.OnChange(nil);
3699 function TGikoForm.Hook(var Message: TMessage): Boolean;
3701 //
\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Ì
3702 //
\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ð
3706 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3708 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3712 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3714 bBoard, bCategory : Boolean;
3716 bBoard := (GetActiveList is TBoard);
3717 bCategory := (GetActiveList is TCategory);
3718 ItemRoundPMenu.Visible := bBoard;
3719 ItemReservPMenu.Visible := bBoard;
3720 LPMSep01.Visible := bBoard;
3721 ListRoundPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3722 ListReservPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3723 LPMSep02.Visible := bCategory or bBoard;
3724 KidokuPMenu.Visible := bBoard;
3725 MidokuPMenu.Visible := bBoard;
3726 UrlCopyPMenu.Visible := bCategory or bBoard;
3727 NameUrlCopyPMenu.Visible := bCategory or bBoard;
3728 AllSelectPMenu.Visible := bCategory or bBoard;
3729 LPMSep05.Visible := bCategory or bBoard;
3730 DeletePMenu.Visible := bBoard;
3731 LPMSep06.Visible := bCategory or bBoard;
3732 BoardFavoriteAddMenu.Visible := bCategory;
3733 ThreadFavoriteAddMenu.Visible := bBoard;
3734 SaveThreadFile.Visible := bBoard;
3735 AddRoundNameMenu(ItemReservPMenu);
3736 AddRoundNameMenu(ListReservPMenu);
3739 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3741 FClickNode := TreeView.Selected;
3742 if FClickNode = nil then begin
3743 TreeSelectThreadPupupMenu.Visible := False;
3744 TreeSelectBoardPupupMenu.Visible := False;
3745 TPMSep01.Visible := False;
3746 TreeSelectURLPupupMenu.Visible := False;
3747 TreeSelectNamePupupMenu.Visible := False;
3748 TreeSelectNameURLPupupMenu.Visible := False;
3749 TreeSelectFavoriteAddPupupMenu.Visible := False;
3750 TreeSelectLogDeleteSeparator.Visible := False;
3751 TreeSelectLogDeletePopupMenu.Visible := False;
3752 end else if TObject(FClickNode.Data) is TBoard then begin
3753 TreeSelectThreadPupupMenu.Visible := False;
3754 TreeSelectBoardPupupMenu.Visible := True;
3755 TPMSep01.Visible := True;
3756 TreeSelectURLPupupMenu.Visible := True;
3757 TreeSelectNamePupupMenu.Visible := True;
3758 TreeSelectNameURLPupupMenu.Visible := True;
3759 TreeSelectFavoriteAddPupupMenu.Visible := True;
3760 TreeSelectLogDeleteSeparator.Visible := False;
3761 TreeSelectLogDeletePopupMenu.Visible := False;
3762 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3763 TreeSelectThreadPupupMenu.Visible := False;
3764 TreeSelectBoardPupupMenu.Visible := True;
3765 TPMSep01.Visible := True;
3766 TreeSelectURLPupupMenu.Visible := True;
3767 TreeSelectNamePupupMenu.Visible := True;
3768 TreeSelectNameURLPupupMenu.Visible := True;
3769 TreeSelectFavoriteAddPupupMenu.Visible := True;
3770 TreeSelectLogDeleteSeparator.Visible := False;
3771 TreeSelectLogDeletePopupMenu.Visible := False;
3772 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3773 TreeSelectThreadPupupMenu.Visible := True;
3774 TreeSelectBoardPupupMenu.Visible := False;
3775 TPMSep01.Visible := True;
3776 TreeSelectURLPupupMenu.Visible := True;
3777 TreeSelectNamePupupMenu.Visible := True;
3778 TreeSelectNameURLPupupMenu.Visible := True;
3779 TreeSelectFavoriteAddPupupMenu.Visible := True;
3780 TreeSelectLogDeleteSeparator.Visible := True;
3781 TreeSelectLogDeletePopupMenu.Visible := True;
3782 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3783 TreeSelectThreadPupupMenu.Visible := True;
3784 TreeSelectBoardPupupMenu.Visible := False;
3785 TPMSep01.Visible := True;
3786 TreeSelectURLPupupMenu.Visible := True;
3787 TreeSelectNamePupupMenu.Visible := True;
3788 TreeSelectNameURLPupupMenu.Visible := True;
3789 TreeSelectFavoriteAddPupupMenu.Visible := True;
3790 TreeSelectLogDeleteSeparator.Visible := True;
3791 TreeSelectLogDeletePopupMenu.Visible := True;
3792 end else if (TObject(FClickNode.Data) is TCategory) then begin
3793 TreeSelectThreadPupupMenu.Visible := False;
3794 TreeSelectBoardPupupMenu.Visible := False;
3795 TPMSep01.Visible := False;
3796 TreeSelectURLPupupMenu.Visible := False;
3797 TreeSelectNamePupupMenu.Visible := True;
3798 TreeSelectNameURLPupupMenu.Visible := False;
3799 TreeSelectFavoriteAddPupupMenu.Visible := False;
3800 TreeSelectLogDeleteSeparator.Visible := False;
3801 TreeSelectLogDeletePopupMenu.Visible := False;
3802 end else if FClickNode.IsFirstNode then begin
3803 TreeSelectThreadPupupMenu.Visible := False;
3804 TreeSelectBoardPupupMenu.Visible := False;
3805 TPMSep01.Visible := False;
3806 TreeSelectURLPupupMenu.Visible := False;
3807 TreeSelectNamePupupMenu.Visible := True;
3808 TreeSelectNameURLPupupMenu.Visible := False;
3809 TreeSelectFavoriteAddPupupMenu.Visible := False;
3810 TreeSelectLogDeleteSeparator.Visible := False;
3811 TreeSelectLogDeletePopupMenu.Visible := False;
3813 TreeSelectThreadPupupMenu.Visible := False;
3814 TreeSelectBoardPupupMenu.Visible := False;
3815 TPMSep01.Visible := False;
3816 TreeSelectURLPupupMenu.Visible := False;
3817 TreeSelectNamePupupMenu.Visible := False;
3818 TreeSelectNameURLPupupMenu.Visible := False;
3819 TreeSelectFavoriteAddPupupMenu.Visible := False;
3820 TreeSelectLogDeleteSeparator.Visible := False;
3821 TreeSelectLogDeletePopupMenu.Visible := False;
3825 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
3826 var ppDisp: IDispatch; var Cancel: WordBool);
3835 threadItem: TThreadItem;
3836 aElement : IHTMLElement;
3839 Writeln(IntToStr(Integer(ppDisp)));
3842 aElement := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement;
3843 if ( aElement <> nil) then begin
3844 Text := aElement.Get_outerText;
3845 Html := aElement.Get_outerHTML;
3846 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
3847 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
3848 if GikoSys.Setting.ResAnchorJamp then begin
3850 Text := ZenToHan(Trim(Text));
3852 if(AnsiPos('>>', Text) = 1) then begin
3853 //Text := Copy(Text, 3, Length(Text) - 2);
3856 //Text := Copy(Text, 2, Length(Text) - 1);
3860 if AnsiPos('-', Text) <> 0 then begin
3861 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
3862 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
3863 wkIntTo := StrToIntDef(Text, 0);
3864 if wkIntTo < wkIntSt then
3867 wkIntSt := StrToIntDef(Text, 0);
3870 if wkIntSt <> 0 then begin
3871 FActiveContent.IDAnchorPopup('');
3872 MoveHisotryManager.pushItem(FActiveContent);
3873 if (Sender is TResPopupBrowser) then begin
3874 TResPopupBrowser(Sender).ChildClear;
3876 GetActiveContent(true),
3877 GetActiveContent(true).URL + '&st=' +
3878 IntToStr(wkIntSt) + '&to=' + IntToStr(wkIntSt));
3880 BrowserMovement(IntToStr(wkIntSt));
3885 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
3887 URL := GikoSys.GetHRefText(Html);
3888 URL := GikoSys.HTMLDecode(URL);
3889 if AnsiPos('BE:', URL) = 1 then begin
3890 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
3891 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
3892 threadItem := FActiveContent.Thread;
3893 if threadItem = nil then Exit;
3894 URL := BE_PHP_URL + BNum + '&u=d'
3895 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
3898 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
3899 ( AnsiPos('ftp://', URL) = 1) then begin
3900 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
3901 if GikoSys.Setting.LinkAddAddressBar then begin
3902 idx := AddressComboBox.Items.IndexOf(URL);
3903 if idx = -1 then begin
3904 AddressComboBox.Items.Insert(0, URL);
3905 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
3906 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
3908 AddressComboBox.Items.Delete(idx);
3909 AddressComboBox.Items.Insert(0, URL);
3912 if (Sender is TResPopupBrowser) then begin
3913 TResPopupBrowser(Sender).ChildClear
3916 MoveHisotryManager.pushItem(FActiveContent);
3924 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
3926 if Mouse.Capture <> 0 then
3928 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3929 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
3930 FBrowserSizeWidth := ViewPanel.Width;
3932 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
3933 FBrowserSizeHeight := ViewPanel.Height;
3935 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3936 if ViewPanel.Width < 2 then begin
3937 ViewPanel.Width := 1;
3938 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3939 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3940 GikoSys.Setting.ListWidthState := glsMax;
3941 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
3942 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3943 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3944 GikoSys.Setting.ListWidthState := glsMin;
3946 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3947 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3948 GikoSys.Setting.ListWidthState := glsNormal;
3951 if ViewPanel.Height < 2 then begin
3952 ViewPanel.Height := 1;
3953 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
3954 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
3955 GikoSys.Setting.ListHeightState := glsMax;
3956 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
3957 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
3958 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
3959 GikoSys.Setting.ListHeightState := glsMin;
3961 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
3962 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
3963 GikoSys.Setting.ListHeightState := glsNormal;
3966 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
3967 FBrowserSizeHeight := ViewPanel.Height
3968 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
3969 FBrowserSizeWidth := ViewPanel.Width;}
3972 procedure TGikoForm.BrowserTabChange(Sender: TObject);
3977 BrowserTab.Tabs.BeginUpdate;
3979 if not BrowserTab.Dragging then begin
3980 FTabHintIndex := -1;
3981 BrowserTab.Hint := '';
3982 idx := BrowserTab.TabIndex;
3983 if idx = -1 then begin
3984 SetContent(BrowserNullTab);
3986 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
3987 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
3988 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
3990 FBrowsers.Move(j ,0);
3992 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
3993 (FActiveContent.Browser <> BrowserNullTab.Browser) and
3994 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
3995 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3997 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
3998 ReleaseOldestBrowser;
4000 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
4001 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
4002 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4004 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
4005 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
4006 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4008 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
4009 AddressComboBox.Text := GetActiveContent.URL;
4011 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
4012 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
4015 GikoDM.SetFocusForBrowserAction.Execute;
4019 BrowserTab.Tabs.EndUpdate;
4024 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
4025 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
4031 if Button = mbMiddle then begin
4032 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
4035 p := BrowserTab.ScreenToClient(p);
4036 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
4038 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4039 end else if Button = mbLeft then begin
4040 FDragWFirst := true;
4041 FMouseDownPos.X := X;
4042 FMouseDownPos.Y := Y;
4047 procedure TGikoForm.SetBrowserTabState;
4049 CoolBand: TCoolBand;
4051 BrowserBottomPanel.AutoSize := False;
4052 if GikoSys.Setting.BrowserTabVisible then begin
4054 BrowserTab.Tabs.BeginUpdate;
4056 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
4057 BrowserTab.Style := tsTabs;
4058 if GikoSys.Setting.BrowserTabPosition = gtpTop then
4059 BrowserTab.TabPosition := tpTop
4061 BrowserTab.TabPosition := tpBottom;
4062 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
4063 BrowserTab.TabPosition := tpTop;
4064 BrowserTab.Style := tsButtons;
4066 BrowserTab.TabPosition := tpTop;
4067 BrowserTab.Style := tsFlatButtons
4070 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
4071 BrowserTab.Parent := BrowserTabToolBar;
4072 BrowserBottomPanel.Hide;
4073 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4074 if CoolBand <> nil then
4075 CoolBand.Visible := True;
4077 BrowserTab.Parent := BrowserBottomPanel;
4078 BrowserTab.Top := 0;
4079 BrowserTab.Left := 0;
4080 BrowserBottomPanel.Show;
4081 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4082 if CoolBand <> nil then
4083 CoolBand.Visible := False;
4086 BrowserTab.Tabs.EndUpdate;
4090 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4091 if CoolBand <> nil then
4092 CoolBand.Visible := False;
4093 BrowserBottomPanel.Visible := False;
4094 GikoDM.AllTabCloseAction.Execute;
4098 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
4099 Y: Integer; State: TDragState; var Accept: Boolean);
4103 idx := BrowserTab.IndexOfTabAt(X, Y);
4104 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
4107 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
4112 FDragWFirst := False;
4113 idx := BrowserTab.IndexOfTabAt(X, Y);
4115 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
4118 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
4119 Shift: TShiftState; X, Y: Integer);
4122 ThreadItem: TThreadItem;
4125 TabIdx := BrowserTab.IndexOfTabAt(x, y);
4127 if ( ssLeft in Shift ) then begin
4128 if (FDragWFirst) then begin
4129 BrowserTab.EndDrag(false);
4130 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
4133 BrowserTab.EndDrag(false);
4134 FDragWFirst := false;
4137 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
4138 Application.CancelHint;
4139 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
4140 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
4141 BrowserTab.Hint := ThreadItem.Title;
4142 Application.ShowHint := True;
4144 BrowserTab.Hint := '';
4145 Application.ShowHint := True;
4147 FTabHintIndex := TabIdx;
4152 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
4153 const pDisp: IDispatch; var URL: OleVariant);
4155 FDispHtmlDocument: DispHTMLDocument;
4156 BrowserRecord :TBrowserRecord;
4159 threadItem : TThreadItem;
4161 if TObject(Sender) is TWebBrowser then begin
4162 BrowserRecord := nil;
4163 if TWebBrowser(Sender) <> Browser then begin
4164 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4165 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
4166 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
4170 if BrowserRecord <> nil then begin
4171 if BrowserRecord.Event <> nil then
4172 BrowserRecord.Event.Free;
4173 FDispHtmlDocument := Idispatch(OleVariant(BrowserRecord.Browser.ControlInterface).Document) as DispHTMLDocument;
4174 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4175 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4176 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4179 if GetActiveContent <> nil then begin
4180 FDispHtmlDocument := Idispatch(OleVariant(Browser.ControlInterface).Document) as DispHTMLDocument;
4181 if FEvent <> nil then
4183 FEvent := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4184 FEvent.OnContextMenu := OnDocumentContextMenu;
4185 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4187 if FEvent <> nil then begin
4195 if (BrowserRecord <> nil) and
4196 Assigned( BrowserRecord.Thread ) then begin
4197 threadItem := BrowserRecord.Thread;
4199 if (threadItem.JumpAddress > 0) then begin
4200 if threadItem.UnRead then begin
4201 threadItem.UnRead := False;
4203 RefreshListView(threadItem);
4205 //
\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®
4206 //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4207 if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4208 BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4209 threadItem.JumpAddress := 0;
4211 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4214 end else if threadItem.UnRead then begin
4215 threadItem.UnRead := False;
4217 BrowserRecord.Move('new');
4218 RefreshListView(threadItem);
4219 end else if threadItem.ScrollTop <> 0 then begin
4221 doc := Idispatch( OleVariant( BrowserRecord.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4222 doc.Body.ScrollTop := threadItem.ScrollTop;
4225 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4230 LockWindowUpdate(0);
4233 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4235 AddRoundNameMenu(RoundNamePopupMenu.Items);
4238 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4244 Item := TMenuItem.Create(Self);
4245 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4246 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4248 Item := TMenuItem.Create(Self);
4249 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4250 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4252 Item := TMenuItem.Create(Self);
4253 Item.Caption := '-';
4255 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4256 Item := TMenuItem.Create(Self);
4257 Item.Caption := RoundList.RoundNameList[i];
4258 Item.OnClick := SetSelectRoundName;
4263 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4265 threadItem : TThreadItem;
4267 if ParentName <> 'dummy1' then begin
4268 SetSelectItemRound(RoundFlag, RoundName);
4270 threadItem := GetActiveContent;
4271 if threadItem <> nil then begin
4272 threadItem.RoundName := RoundName;
4274 RoundList.RoundNameList.Add(RoundName);
4275 threadItem.Round := RoundFlag;
4280 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4285 List := TList.Create;
4287 SelectListItem(List);
4288 for i := 0 to List.Count - 1 do begin
4289 if TObject(List[i]) is TBoard then begin
4290 TBoard(List[i]).RoundName := RoundName;
4292 RoundList.RoundNameList.Add(RoundName);
4293 TBoard(List[i]).Round := RoundFlag;
4294 end else if TObject(List[i]) is TThreadItem then begin
4295 if TThreadItem(List[i]).IsLogFile then begin
4296 TThreadItem(List[i]).RoundName := RoundName;
4298 RoundList.RoundNameList.Add(RoundName);
4299 TThreadItem(List[i]).Round := RoundFlag;
4308 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4310 MenuItem: TMenuItem;
4312 if Sender is TMenuItem then begin
4313 MenuItem := TMenuItem(Sender);
4314 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4319 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4324 if CoolBar = nil then
4326 for i := 0 to CoolBar.Bands.Count - 1 do begin
4327 if CoolBar.Bands[i].Control = Control then begin
4328 Result := CoolBar.Bands[i];
4334 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4336 if BrowserTab.Parent = BrowserTabToolBar then
4337 BrowserTab.Width := BrowserTabToolBar.Width;
4340 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4345 procedure TGikoForm.SetMenuFont;
4347 // GikoSys.MenuFont(MenuToolBar.Font);
4348 // MenuToolBar.Buttons[0].AutoSize := False;
4349 // MenuToolBar.Buttons[0].AutoSize := True;
4350 // MenuToolBar.Font.Color := clMenuText;
4351 GikoSys.MenuFont(MainCoolBar.Font);
4352 MenuToolBar.Buttons[0].AutoSize := False;
4353 MenuToolBar.Buttons[0].AutoSize := True;
4354 MainCoolBar.AutoSize := False;
4355 MainCoolBar.AutoSize := True;
4356 GikoSys.MenuFont(ListCoolBar.Font);
4357 GikoSys.MenuFont(BrowserCoolBar.Font);
4358 // MenuToolBar.Font.Color := clMenuText;
4361 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4365 if FavoriteDM.Modified then begin
4368 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4369 NewMenu := TMenuItem.Create(MainMenu);
4370 NewMenu.Action := GikoDM.FavoriteAddAction;
4371 FavoriteMenu.Add(NewMenu);
4372 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4373 NewMenu := TMenuItem.Create(FavoriteMenu);
4374 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4375 FavoriteMenu.Add(NewMenu);
4376 //
\83Z
\83p
\83\8c\81[
\83^
4377 FavoriteMenu.InsertNewLineAfter(NewMenu);
4378 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4379 FavoriteDM.Modified := false;
4383 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4386 NewMenu: array of TMenuItem;
4388 SetLength(NewMenu, Node.Count);
4389 Node := Node.getFirstChild;
4391 while ( Node <> nil ) do begin
4392 NewMenu[i] := TFavoriteMenuItem.Create(nil);
4393 NewMenu[i].AutoHotkeys := maAutomatic;
4394 NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4395 TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4397 if TObject(Node.Data) is TFavoriteFolder then begin
4398 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4399 CreateFavMenu(Node, NewMenu[i]);
4400 end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4401 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4402 NewMenu[i].OnClick := FavoriteClick;
4403 end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4404 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4405 NewMenu[i].OnClick := FavoriteClick;
4408 Node := Node.getNextSibling;
4410 MenuItem.Add(NewMenu);
4413 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4415 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';
4416 TitleAdd: String = '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á';
4418 Dlg : TFavoriteAddDialog;
4424 if Item is TFavoriteBoardItem then
4425 Item := TFavoriteBoardItem( Item ).Item
4426 else if Item is TFavoriteThreadItem then
4427 Item := TFavoriteThreadItem( Item ).Item;
4429 Node := FavoriteTreeView.Items.GetFirstNode;
4430 if Item is TBoard then begin
4431 ItemURL := TBoard( Item ).URL;
4432 while Node <> nil do begin
4434 if TObject( Data ) is TFavoriteBoardItem then begin
4435 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4436 if Application.MessageBox(PChar(MsgAdd) , PChar(TitleAdd), MB_YESNO ) = IDNO then
4441 Node := Node.GetNext;
4443 Dlg := TFavoriteAddDialog.Create(Self);
4445 Dlg.SetBoard( TBoard( Item ) );
4450 end else if Item is TThreadItem then begin
4451 ItemURL := TThreadItem( Item ).URL;
4452 while Node <> nil do begin
4454 if TObject( Data ) is TFavoriteThreadItem then begin
4455 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
4456 if Application.MessageBox( PChar(MsgAdd), PChar(TitleAdd), MB_YESNO ) = IDNO then
4461 Node := Node.GetNext;
4463 Dlg := TFavoriteAddDialog.Create(Self);
4465 Dlg.SetThreadItem( TThreadItem( Item ) );
4475 procedure TGikoForm.FavoriteClick(Sender: TObject);
4477 FavoriteClick( Sender, True );
4480 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4483 ThreadItem: TThreadItem;
4484 FavBoard: TFavoriteBoardItem;
4485 FavThread: TFavoriteThreadItem;
4489 if Sender is TFavoriteMenuItem then
4490 Item := TFavoriteMenuItem(Sender).Data
4491 else if Sender is TLinkToolButton then
4492 Item := TLinkToolButton(Sender).Data
4493 else if Sender is TTreeNode then
4494 Item := TTreeNode( Sender ).Data
4498 if TObject(Item) is TFavoriteBoardItem then begin
4499 FavBoard := TFavoriteBoardItem(Item);
4500 Board := FavBoard.Item;
4501 if Board <> nil then begin
4502 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4503 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4504 SelectTreeNode(Board, True);
4506 end else if TObject(Item) is TFavoriteThreadItem then begin
4507 FavThread := TFavoriteThreadItem(Item);
4508 ThreadItem := FavThread.Item;
4509 if ThreadItem = nil then
4512 InsertBrowserTab(ThreadItem, ActiveTab);
4514 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4515 if GikoSys.Setting.ListWidthState = glsMin then begin
4516 GikoDM.BrowserMaxAndFocusAction.Execute;
4519 if GikoSys.Setting.ListHeightState = glsMin then begin
4520 GikoDM.BrowserMaxAndFocusAction.Execute;
4526 procedure TGikoForm.BBSMenuItemOnClick(
4531 if Sender is TBBSMenuItem then
4532 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4536 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4538 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4541 //!
\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é)
4542 procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4544 stRes, edRes : Int64;
4545 browserRec : TBrowserRecord;
4546 threadNumber : String;
4551 Thread.JumpAddress := 0;
4552 //
\83^
\83u
\82ð
\90¶
\90¬
4553 browserRec := InsertBrowserTab(Thread);
4554 if (browserRec <> nil) then begin
4555 // JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N
\82·
\82é
4556 threadNumber := ChangeFileExt(Thread.FileName, '');
4557 GikoSys.GetPopupResNumber( URL, stRes, edRes );
4558 //
\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
4559 if (StrToInt64(threadNumber) = stRes) then begin
4560 if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4561 and (Pos('&st=' + threadNumber , URL) = 0) then begin
4565 if ( stRes > 0 ) then begin
4566 Thread.JumpAddress := stRes;
4568 //
\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é
4569 if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4570 DownloadContent(Thread);
4571 end else if (not browserRec.Repaint) and (stRes > 0) then begin
4572 browserRec.Move(IntToStr(stRes));
4573 Thread.JumpAddress := 0;
4575 doc := Idispatch( OleVariant( browserRec.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4576 Thread.ScrollTop := doc.Body.ScrollTop;
4583 procedure TGikoForm.MoveToURL(const inURL: string);
4585 protocol, host, path, document, port, bookmark : string;
4586 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4588 BBSID, BBSKey: string;
4589 {tmpBoard,} Board: TBoard;
4590 ThreadItem: TThreadItem;
4593 tmpThread : TThreadItem;
4594 shiftDown : Boolean;
4598 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4599 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4602 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4603 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4604 if shiftDown then begin
4605 GikoSys.OpenBrowser(inURL, gbtUserApp);
4607 end else if ctrlDown then begin
4608 GikoSys.OpenBrowser(inURL, gbtIE);
4612 //=====
\83v
\83\89\83O
\83C
\83\93
4615 bi := Length(BoardGroups) - 1;
4616 for i := 1 to bi do begin
4617 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4618 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4621 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4622 Board := BBSsFindBoardFromURL( boardURL );
4625 if Board = nil then begin
4627 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4628 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4631 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4632 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4633 ShowBBSTree( BBSs[ 1 ] );
4636 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4637 if not Board.IsThreadDatRead then begin
4638 GikoSys.ReadSubjectFile( Board );
4642 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4643 if ThreadItem = nil then begin
4644 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4645 ThreadItem := tmpThread;
4646 Board.Insert( 0, ThreadItem );
4647 if ActiveList is TBoard then begin
4648 if TBoard(ActiveList) = Board then
4649 ListView.Items.Count := ListView.Items.Count + 1;
4654 OpenThreadItem(ThreadItem, inURL);
4661 Board := BBSsFindBoardFromURL(
4662 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4664 if Board <> nil then begin
4665 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4666 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4667 SelectTreeNode( Board, True );
4675 // 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¢
4679 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4680 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4681 Board := BBSsFindBoardFromURL( boardURL );
4682 if Board = nil then begin
4683 //
\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
4684 GikoSys.OpenBrowser(inURL, gbtUserApp);
4687 //
\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é
4689 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4690 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4691 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4692 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4693 GikoSys.OpenBrowser(inURL, gbtUserApp);
4698 if not Board.IsThreadDatRead then
4699 GikoSys.ReadSubjectFile(Board);
4700 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4701 ThreadItem := Board.FindThreadFromURL( URL );
4702 //
\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)
4703 if ThreadItem = nil then begin
4704 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4707 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ª
\82È
\82¢
\82È
\82ç
\90¶
\90¬
\82·
\82é
\81B
4708 if ThreadItem = nil then begin
4709 ThreadItem := TThreadItem.Create( nil, Board, URL );
4710 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4711 Board.Insert(0, ThreadItem);
4712 if ActiveList is TBoard then begin
4713 if TBoard(ActiveList) = Board then
4714 ListView.Items.Count := ListView.Items.Count + 1;
4717 //
\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é
4718 if (not ThreadItem.IsLogFile) then begin
4719 if AnsiPos(Host, Board.URL) = 0 then
4720 ThreadItem.DownloadHost := Host
4722 ThreadItem.DownloadHost := '';
4724 OpenThreadItem(ThreadItem, inURL);
4728 Board := BBSsFindBoardFromURL( inURL );
4729 if Board = nil then begin
4730 GikoSys.OpenBrowser(inURL, gbtAuto);
4732 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4733 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4734 SelectTreeNode( Board, True );
4739 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4741 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4742 CoolBarResized( Sender, MainCoolBar );
4745 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4746 Shift: TShiftState);
4748 if Key = VK_RETURN then
4749 GikoDM.MoveToAction.Execute;
4752 procedure TGikoForm.BrowserEnter(Sender: TObject);
4754 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4757 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4759 CDS:PCopyDataStruct;
4763 CDS := Message.CopyDataStruct;
4764 GetMem(PC, CDS^.cbData);
4766 lstrcpy(PC,CDS^.lpData);
4767 SetString(sURL, PC,lstrlen(PC));
4772 Message.Result := 1;
4775 procedure TGikoForm.WndProc(var Message: TMessage);
4777 senderBrowser : TWebBrowser;
4783 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4786 if Message.WParam = SC_MINIMIZE then begin
4788 PostMessage(Handle, USER_MINIMIZED, 0, 0);
4791 TreeClick( TreeView.Selected );
4796 if (GikoSys.Setting.StoredTaskTray) then begin
4803 USER_DOCUMENTCOMPLETE:
4804 if (Message.WParam <> 0) and
4805 (TObject(Message.WParam) is TWebBrowser) then begin
4806 senderBrowser := TWebBrowser( Message.WParam );
4807 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
4810 if (TObject(Message.WParam) is TResPopupBrowser) then begin
4812 TResPopupBrowser( Message.WParam ).Clear;
4823 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
4828 //
\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Í
4829 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
4830 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
4831 if Msg.CharCode in [VK_BACK] then begin
4832 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4833 if Msg.KeyData > 0 then begin
4836 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4840 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
4841 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
4844 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4847 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
4848 if Msg.CharCode in [VK_BACK] then begin
4849 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4850 if Msg.KeyData > 0 then begin
4853 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4856 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
4859 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4863 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
4867 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
4872 PreviewTimer.Enabled := False;
4876 ARect := FPreviewBrowser.GetWindowRect(p);
4878 FPreviewBrowser.PreviewImage(FPreviewURL);
4880 if ARect.Bottom > Screen.DesktopHeight then begin
4881 OffsetRect(ARect, 0, -(ARect.Bottom - Screen.DesktopHeight));
4883 if (ARect.Right > Screen.DesktopWidth) then begin
4884 OffsetRect(ARect, -(ARect.Right - Screen.DesktopWidth), 0);
4886 if (ARect.Left < Screen.DesktopLeft) then begin
4887 OffsetRect(ARect, +(Screen.DesktopLeft - ARect.Left), 0);
4889 if (ARect.Top < Screen.DesktopTop) then begin
4890 OffsetRect(ARect, 0, (Screen.DesktopTop - ARect.Top));
4893 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST,
4894 ARect.Left, ARect.Top,
4895 (ARect.Right - ARect.Left), (ARect.Bottom - ARect.Top),
4896 SWP_NOACTIVATE or SWP_HIDEWINDOW);
4898 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
4899 FPreviewBrowserRect := ARect;
4902 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
4906 if PreviewTimer.Enabled then
4907 PreviewTimer.Enabled := False;
4909 if (FResPopupBrowser <> nil) and (IsWindowVisible(FResPopupBrowser.Handle)) then begin
4910 FResPopupBrowser.Clear;
4913 if (FPreviewBrowser <> nil)
4914 and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
4915 //
\82±
\82±
\82Å
\8fÁ
\82³
\82ê
\82é
\82Ì
\82ª
\96â
\91è
4916 //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Å
\95\
\8e¦
\94Í
\88Í
\94»
\92è
\82Å
\82«
\82Ä
\82¢
\82é
\82Í
\82¸
4917 Pos := Mouse.CursorPos;
4918 Pos.X := Pos.X + Left;
4919 Pos.Y := Pos.Y + Top;
4920 if (FPreviewBrowserRect.Left > Pos.X) or
4921 (FPreviewBrowserRect.Right < Pos.X) or
4922 (FPreviewBrowserRect.Top > Pos.Y) or
4923 (FPreviewBrowserRect.Bottom < Pos.Y) then begin
4924 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
4928 Message.Result := 1;
4931 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
4933 GikoDM.MsgBarCloseAction.Execute;
4936 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
4938 Doc: IHtmlDocument2;
4939 Range: IHTMLTxtRange;
4942 ThreadItem: TThreadItem;
4945 FactiveContent.IDAnchorPopup('');
4946 Doc := FactiveContent.Browser.Document as IHtmlDocument2;
4947 if Assigned(Doc) then begin
4948 Range := Doc.selection.createRange as IHTMLTxtRange;
4949 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
4950 s := ZenToHan(Trim(s));
4951 if GikoSys.IsNumeric(s) then begin
4952 Num := StrToInt64Def(s, -1);
4953 ThreadItem := GetActiveContent(true);
4954 if (ThreadItem <> nil) and (Num <= ThreadItem.Count)
4955 and (Num > 0)then begin
4956 CreateResPopupBrowser;
4957 FResPopupBrowser.CreateNewBrowser.PopupType := gptThread;
4958 HTMLCreater.SetResPopupText(FResPopupBrowser.CreateNewBrowser, ThreadItem, Num, Num, False, False);
4959 FResPopupBrowser.Popup;
4969 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
4971 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
4972 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
4974 if FTreeType = gttHistory then begin
4975 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
4976 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
4979 TreeView.Items.Clear;
4983 procedure TGikoForm.SetLinkBar;
4987 ToolButton: TLinkToolButton;
4988 MenuItem: TMenuItem;
4989 oldIgnoreResize : TResizeType;
4991 oldIgnoreResize := FIsIgnoreResize;
4992 FIsIgnoreResize := rtResizing;
4993 MainCoolBar.Bands.BeginUpdate;
4995 LinkBarPopupMenu.Items.Clear;
4996 for i := LinkToolBar.ButtonCount - 1 downto 0 do
4997 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
4998 LinkToolBar.Buttons[i].Free;
4999 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5000 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5001 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5002 ToolButton := TLinkToolButton.Create(LinkToolBar);
5003 // ToolButton.Parent := LinkToolBar;
5004 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
5005 MenuItem := TMenuItem.Create(Self);
5006 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
5007 LinkBarPopupMenu.Items.Add(MenuItem);
5008 ToolButton.MenuItem := MenuItem;
5009 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
5010 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
5011 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
5012 ToolButton.OnClick := FavoriteClick;
5013 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
5014 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
5015 ToolButton.OnClick := FavoriteClick;
5017 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
5018 ToolButton.Left := 10000;
5019 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
5020 ToolButton.AutoSize := True;
5021 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
5022 ToolButton.OnDragOver := FavoriteDragOver;
5023 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
5024 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
5025 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
5026 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
5027 //ToolButton.DragMode := dmAutomatic;
5028 ToolButton.DragMode := dmManual;
5029 ToolButton.PopupMenu := FavoriteTreePopupMenu;
5031 LinkToolBar.InsertControl(ToolButton);
5036 { if LinkToolBar.ButtonCount = 0 then begin
5037 ToolButton := TLinkToolButton.Create(LinkToolBar);
5038 ToolButton.Style := tbsButton;
5039 ToolButton.ImageIndex := -1;
5040 ToolButton.Caption := '';
5041 LinkToolBar.InsertControl(ToolButton);
5044 MainCoolBar.Bands.EndUpdate;
5045 LoadCoolBarSettings;
5046 FIsIgnoreResize := oldIgnoreResize;
5050 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5058 if Sender = FavoriteTreeView then begin
5059 Node := FavoriteTreeView.GetNodeAt(X, Y);
5064 bound := Node.DisplayRect( False );
5065 height := bound.Bottom - bound.Top;
5066 if (bound.Top + height / 2) <= Y then
5067 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
5072 if Node.IsFirstNode then
5077 if FDropSpaceNode <> nil then
5078 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
5081 if Change then begin
5082 if FDropSpaceNode <> nil then
5083 FDropSpaceNode.Free;
5085 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
5086 FDropSpaceNode.MoveTo( Node, naInsert );
5087 FDropSpaceNode.ImageIndex := -1;
5088 FDropSpaceNode.SelectedIndex := -1;
5092 if Source = FavoriteTreeView then begin
5093 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
5098 end else if Source = BrowserTab then
5100 else if Source = ListView then
5102 else if Source is TLinkToolButton then
5104 else if Source = TreeView then
5110 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5113 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
5116 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
5118 // FDragging := true;
5121 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
5123 SenderNode: TTreeNode;
5124 LinkToolButton: TLinkToolButton;
5127 LinkToolButton := TLinkToolButton( Sender );
5128 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5129 SenderNode.Selected := False;
5130 FavoriteDragDrop( SenderNode, Source );
5136 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5138 favButton : TLinkToolButton;
5139 favThreadItem : TFavoriteThreadItem;
5145 if Sender is TLinkToolButton then begin
5146 favButton := TLinkToolButton( Sender );
5147 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5148 favThreadItem := TFavoriteThreadItem( favButton.Data );
5149 if favThreadItem.Item <> nil then
5150 InsertBrowserTab( favThreadItem.Item, False );
5158 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5162 TToolButton( Sender ).DragMode := dmManual;
5163 if ssLeft in Shift then begin
5164 // 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)
5165 if FDragTime = 0 then begin
5166 FDragTime := GetTickCount();
5168 Now := GetTickCount();
5169 if (Now - FDragTime) > 500 then begin
5170 if FDragButton <> TToolButton( Sender ) then begin
5172 FDragButton := TToolButton( Sender );
5173 TToolButton(Sender).BeginDrag(false ,5);
5176 {$IF Defined(debug)}
5177 ShowMessage('Error');
5188 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5193 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5198 for i := 0 to ToolBar.ButtonCount - 1 do
5199 if ToolBar.Buttons[i].Visible then
5200 Result := Result + ToolBar.Buttons[i].Width;
5203 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5205 Control : TWinControl;
5208 Control := FindControl(BandInfo^.hwndChild);
5209 if Control = nil then
5212 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5213 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5214 idx := MainCoolBar.Bands[ i ].ID;
5218 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5219 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
5220 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5221 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5222 BandInfo^.cxMinChild := 0;
5223 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
5224 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5225 end else if Control = LinkToolBar then begin
5226 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5227 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5228 BandInfo^.cxMinChild := 0;
5229 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5230 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5231 end else begin // AddressToolBar
5232 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5233 BandInfo^.cxMinChild := 0;
5234 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5238 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5244 ChevronPopupMenu.Items.Clear;
5246 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5247 if MainCoolBar.Bands[ i ].Visible then begin
5248 if Idx = Int64(RebarChevron^.uBand) then begin
5255 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5256 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5258 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5259 ToolBarChevronMenu(StdToolBar);
5260 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5264 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5265 ChevronPopupMenu.Popup(p.x, p.y);
5269 procedure TGikoForm.MenuBarChevronMenu;
5270 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5276 for i := 0 to MenuItem.Count - 1 do begin
5278 if MenuItem[i] is TFavoriteMenuItem then begin
5279 Item := TFavoriteMenuItem.Create(Self);
5280 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5282 Item := TMenuItem.Create(Self);
5283 Item.Caption := MenuItem[i].Caption;
5284 Item.Action := MenuItem[i].Action;
5285 Item.ImageIndex := MenuItem[i].ImageIndex;
5286 Item.OnClick := MenuItem[i].OnClick;
5287 PopupItem.Add(Item);
5288 if MenuItem[i].Count > 0 then
5289 SetSubMenu(MenuItem[i], Item);
5298 ChevronPopupMenu.Items.Clear;
5299 ChevronPopupMenu.Images := MainMenu.Images;
5300 bw := GetWidthAllToolButton(MenuToolBar);
5301 if MenuToolBar.Width < bw then begin
5303 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5304 w := w + MenuToolBar.Buttons[i].Width;
5305 if MenuToolBar.Width <= w then begin
5306 Item := TMenuItem.Create(Self);
5307 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5308 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5309 ChevronPopupMenu.Items.Add(Item);
5310 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5316 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5317 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5322 if Assigned(PopupMenu.OnPopup) then
5323 PopupMenu.OnPopup(nil);
5324 for i := 0 to PopupMenu.Items.Count - 1 do begin
5326 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5327 Item := TFavoriteMenuItem.Create(Self);
5328 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5330 Item := TMenuItem.Create(Self);
5331 Item.Caption := PopupMenu.Items[i].Caption;
5332 Item.Action := PopupMenu.Items[i].Action;
5333 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5334 Item.OnClick := PopupMenu.Items[i].OnClick;
5335 PopupItem.Add(Item);
5344 ChevronPopupMenu.Items.Clear;
5345 ChevronPopupMenu.Images := ToolBar.HotImages;
5346 bw := GetWidthAllToolButton(ToolBar);
5347 if ToolBar.Width < bw then begin
5349 for i := 0 to ToolBar.ButtonCount - 1 do begin
5350 if ToolBar.Buttons[i].Visible then
5351 w := w + ToolBar.Buttons[i].Width;
5352 if ToolBar.Width <= w then begin
5353 if ToolBar.Buttons[i].Tag = 0 then begin
5354 Item := TMenuItem.Create(Self);
5355 if ToolBar.Buttons[i].Style = tbsSeparator then
5358 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5359 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5362 Item.Caption := ToolBar.Buttons[i].Caption;
5363 Item.Action := ToolBar.Buttons[i].Action;
5365 //Item.Visible := True;
5367 ChevronPopupMenu.Items.Add(Item);
5368 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5370 Item.OnClick := nil;
5371 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5379 procedure TGikoForm.LinkBarChevronMenu;
5384 Item: TFavoriteMenuItem;
5386 Button: TLinkToolButton;
5388 ChevronPopupMenu.Items.Clear;
5389 ChevronPopupMenu.Images := LinkToolBar.Images;
5390 bw := GetWidthAllToolButton(LinkToolBar);
5391 if LinkToolBar.Width < bw then begin
5393 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5394 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5395 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5396 w := w + LinkToolBar.Buttons[j].Width;
5397 if LinkToolBar.Width <= w then begin
5398 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5399 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5400 Item := TFavoriteMenuItem.Create(Self);
5401 if TObject(Button.Data) is TFavoriteFolder then begin
5402 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5403 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5404 Item.OnClick := FavoriteClick;
5405 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5406 Item.OnClick := FavoriteClick;
5408 Item.Data := Button.Data;
5409 Item.Caption := LinkToolBar.Buttons[j].Caption;
5410 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5411 ChevronPopupMenu.Items.Add(Item);
5422 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5423 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5424 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5426 \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É
5427 \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
5429 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5431 bandInfo : tagREBARBANDINFOA;
5432 pBandInfo : PReBarBandInfoA;
5439 pBandInfo := @bandInfo;
5440 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5441 bandInfo.cbSize := sizeof( bandInfo );
5442 bandInfo.hwndChild := h;
5443 bandInfo.cyMinChild := bar.Height;
5444 bar.OnBandInfo( nil, pBandInfo );
5445 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5447 for i := bar.Bands.Count - 1 downto 0 do begin
5448 if bar.Bands[ i ].Control.Handle = h then begin
5454 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5458 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5460 Control: TWinControl;
5463 Control := FindControl(BandInfo^.hwndChild);
5464 if Control = nil then
5467 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5468 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5469 idx := ListCoolBar.Bands[ i ].ID;
5473 if Control = ListToolBar then begin
5474 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5475 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5476 BandInfo^.cxMinChild := 0;
5477 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5478 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5480 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5481 BandInfo^.cxMinChild := 0;
5482 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5486 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5491 ChevronPopupMenu.Items.Clear;
5492 Idx := RebarChevron^.uBand;
5493 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5494 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5495 ToolBarChevronMenu(ListToolBar);
5498 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5499 ChevronPopupMenu.Popup(p.x, p.y);
5503 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5505 Control: TWinControl;
5508 Control := FindControl(BandInfo^.hwndChild);
5509 if Control = nil then
5512 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5513 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5514 idx := BrowserCoolBar.Bands[ i ].ID;
5518 if Control = BrowserToolBar then begin
5519 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5520 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5521 BandInfo^.cxMinChild := 0;
5522 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5523 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5525 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5526 BandInfo^.cxMinChild := 0;
5527 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5531 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5536 ChevronPopupMenu.Items.Clear;
5537 Idx := RebarChevron^.uBand;
5538 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5539 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5540 ToolBarChevronMenu(BrowserToolBar)
5543 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5544 ChevronPopupMenu.Popup(p.x, p.y);
5548 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5550 if Column^.iImage = -1 then begin
5551 Column^.mask := Column^.mask or LVCF_FMT;
5553 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5554 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5558 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5563 for i := bar.ButtonCount - 1 downto 0 do begin
5564 if bar.Buttons[ i ].Action = action then begin
5565 Result := bar.Buttons[ i ];
5571 procedure TGikoForm.SetToolBarPopup;
5574 aIEButton : TToolButton;
5575 aCabinetBBSButton : TToolButton;
5576 aResRangeButton : TToolButton;
5577 aThreadRangeButton: TToolButton;
5579 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5581 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5582 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5583 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5584 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5585 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5587 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5588 if aIEButton <> nil then
5589 aIEButton.DropdownMenu := BrowserPopupMenu;
5590 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5591 if aCabinetBBSButton <> nil then
5592 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5593 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5594 if aResRangeButton <> nil then
5595 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5596 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5597 if aThreadRangeButton <> nil then
5598 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5601 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5602 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5606 // browserPos : TPoint;
5610 Wnd := WindowFromPoint(Mouse.CursorPos);
5612 if WheelDelta > 0 then
5617 if (Wnd = BrowserTab.Handle) or
5618 (Wnd = BrowserTab.Parent.Handle) then begin
5619 BrowserTab.ScrollTabs(Delta);
5621 if FIsHandledWheel then begin
5622 FIsHandledWheel := False;
5625 FIsHandledWheel := True;
5626 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5627 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5629 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5637 procedure TGikoForm.SetSelectWord( const text : string );
5639 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5640 ClearThreadRengeAction;
5642 if Length( text ) = 0 then
5644 GikoDM.AllItemAction.Checked := True;
5645 SetListViewType( gvtAll )
5647 SetListViewType( gvtUser, text, false );
5651 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5654 SetSelectWord( SelectComboBox.Text );
5658 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5659 Shift: TShiftState);
5667 if Key = VK_Return then
5670 end else if Key = 229 then begin
5671 if GikoSys.Setting.UseUndecided then begin
5672 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5673 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5674 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5675 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5676 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5677 SetLength(Str, Len);
5678 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5679 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5680 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5682 Str := SelectComboBox.Text + Str;
5684 if (Length(Str) > 0) then begin
5688 end else if Length( SelectComboBox.Text ) = 0 then
5690 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5691 *
\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
5692 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5695 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5696 ClearThreadRengeAction;
5700 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
5701 procedure TGikoForm.ClearThreadRengeAction;
5703 //
\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é
5704 if GikoDM.AllItemAction.Checked then
5705 GikoDM.AllItemAction.Checked := False;
5706 if GikoDM.LogItemAction.Checked then
5707 GikoDM.LogItemAction.Checked := False;
5708 if GikoDM.NewItemAction.Checked then
5709 GikoDM.NewItemaction.Checked := False;
5710 if GikoDM.LiveItemAction.Checked then
5711 GikoDM.LiveItemAction.Checked := False;
5712 if GikoDM.ArchiveItemAction.Checked then
5713 GikoDM.ArchiveItemAction.Checked := False;
5717 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5722 if Length( SelectComboBox.Text ) = 0 then
5724 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5725 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5730 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5731 procedure TGikoForm.ModifySelectList;
5738 if not SelectComboBoxPanel.Visible then
5741 if Length( SelectComboBox.Text ) > 0 then
5743 oldText := SelectComboBox.Text;
5744 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5746 GikoSys.Setting.SelectTextList.Delete( idx );
5747 idx := SelectComboBox.Items.IndexOf( oldText );
5749 SelectComboBox.Items.Delete( idx );
5750 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5751 SelectComboBox.Items.Insert( 0, oldText );
5752 SelectComboBox.Text := oldText;
5760 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5761 Shift: TShiftState; X, Y: Integer);
5766 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5769 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5770 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5771 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5773 If w <= 50 Then Begin
5774 //
\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
5775 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
5776 pos.X := pos.X + (50 - w);
5778 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
5782 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
5783 //If SelectComboBox.Width <> w Then Begin
5784 If SelectComboBoxPanel.Width <> w Then Begin
5785 SelectComboBoxPanel.Width := w;
5786 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
5787 GikoSys.Setting.SelectComboBoxWidth := w;
5788 DraggingSelectComboBoxPosition := pos;
5790 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
5791 ResetBandInfo( ListCoolBar, ListToolBar );
5797 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
5798 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5802 IsDraggingSelectComboBox := True;
5805 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
5809 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
5810 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5812 IsDraggingSelectComboBox := False;
5816 procedure TGikoForm.StatusBarResize(Sender: TObject);
5818 StatusBar.Panels[1].Width := StatusBar.Width -
5819 StatusBar.Panels[0].Width -
5820 StatusBar.Panels[THREADSIZE_PANEL].Width -
5821 StatusBar.Panels[NGWORDNAME_PANEL].Width;
5823 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
5826 if (Length( SelectComboBox.Text ) = 0) or
5827 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
5829 SelectComboBox.Text := '';
5830 SelectComboBox.Color := clWindow;
5835 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
5838 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
5841 if TObject(SenderNode.Data) is TFavoriteFolder then
5842 SourceNode.MoveTo(SenderNode, naAddChild)
5844 SourceNode.MoveTo(SenderNode, naInsert);
5848 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
5852 FavoBoardItem: TFavoriteBoardItem;
5853 FavoThreadItem: TFavoriteThreadItem;
5855 ThreadItem: TThreadItem;
5858 if (SenderNode = nil) or (Source = nil) then
5861 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5862 FavNode := SenderNode.Parent
5864 FavNode := SenderNode;
5868 if Source is TBoard then begin
5869 Board := TBoard( Source );
5870 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
5871 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
5872 Node.ImageIndex := 15;
5873 Node.SelectedIndex := 15;
5874 end else if Source is TFavoriteBoardItem then begin
5875 FavoBoardItem := TFavoriteBoardItem( Source );
5876 Board := FavoBoardItem.Item;
5877 if Board <> nil then
5878 if not Board.IsThreadDatRead then
5879 GikoSys.ReadSubjectFile(Board);
5880 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
5881 Node.ImageIndex := 15;
5882 Node.SelectedIndex := 15;
5883 end else if Source is TThreadItem then begin
5884 ThreadItem := TThreadItem( Source );
5885 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5886 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5887 Node.ImageIndex := 16;
5888 Node.SelectedIndex := 16;
5889 end else if Source is TBrowserRecord then begin
5890 ThreadItem := TBrowserRecord( Source ).Thread;
5891 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5892 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5893 Node.ImageIndex := 16;
5894 Node.SelectedIndex := 16;
5895 end else if Source is TFavoriteThreadItem then begin
5896 FavoThreadItem := TFavoriteThreadItem( Source );
5897 ThreadItem := FavoThreadItem.Item;
5898 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
5899 Node.ImageIndex := 16;
5900 Node.SelectedIndex := 16;
5903 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5905 FavoriteMoveTo( SenderNode, Node );
5909 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
5912 SourceNode: TTreeNode;
5913 LinkToolButton: TLinkToolButton;
5916 if SenderNode = nil then
5919 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
5920 if FDropSpaceNode <> nil then
5921 SenderNode := FDropSpaceNode;
5923 if Source = FavoriteTreeView then begin
5924 SourceNode := FavoriteTreeView.Selected;
5925 FavoriteMoveTo( SenderNode, SourceNode );
5926 end else if Source is TLinkToolButton then begin
5927 LinkToolButton := TLinkToolButton( Source );
5928 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5929 FavoriteMoveTo( SenderNode, SourceNode );
5930 end else if Source = BrowserTab then begin
5931 idx := BrowserTab.TabIndex;
5932 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
5933 end else if Source = ListView then begin
5934 FavoriteAddTo( SenderNode, ListView.Selected.Data );
5935 end else if Source = TreeView then begin
5936 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
5940 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
5943 SenderNode: TTreeNode;
5946 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
5947 if SenderNode <> nil then begin
5948 FavoriteDragDrop( SenderNode, Source );
5951 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
5952 if FDropSpaceNode <> nil then begin
5954 FDropSpaceNode.Delete;
5956 FDropSpaceNode := nil;
5959 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
5960 FavoriteDM.Modified := true;
5966 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
5967 Node: TTreeNode; var S: String);
5969 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
5970 FavoriteDM.Modified := true;
5972 FavoriteTreeView.ReadOnly := True;
5977 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
5978 Shift: TShiftState);
5980 if not TTreeView(Sender).IsEditing then begin
5984 FClickNode := FavoriteTreeView.Selected;
5985 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
5989 FClickNode := FavoriteTreeView.Selected;
5990 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
5994 FavoriteClick( FavoriteTreeView.Selected );
5995 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
5999 FClickNode := FavoriteTreeView.Selected;
6000 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
6004 //
\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·
6005 if Key = VK_ESCAPE then begin
6006 if (TTreeView(Sender).Selected <> nil) then begin
6007 TTreeView(Sender).Selected.Text := FOrigenCaption;
6009 TTreeView(Sender).Selected.Focused := False;
6015 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
6018 LinkToolButton: TLinkToolButton;
6021 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
6023 FClickNode := FavoriteTreeView.Selected;
6025 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
6027 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
6028 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6029 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6030 FClickNode := FavoriteTreeView.Items[i];
6034 for i := 0 to FClickNode.Count - 1 do begin
6035 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
6036 FClickNode := FClickNode.Item[i];
6043 if FClickNode = nil then begin
6044 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6045 FavoriteTreeDeletePopupMenu.Visible := False;
6046 FavoriteTreeRenamePopupMenu.Visible := False;
6047 FavoriteTreeNewFolderPopupMenu.Visible := False;
6048 FavoriteTreeURLCopyPopupMenu.Visible := False;
6049 FavoriteTreeNameCopyPopupMenu.Visible := False;
6050 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6051 FavoriteTreeReloadPopupMenu.Visible := False;
6052 FavoriteTreeLogDeletePopupMenu.Visible := False;
6053 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6054 end else if FClickNode.IsFirstNode then begin
6055 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6056 FavoriteTreeDeletePopupMenu.Visible := False;
6057 FavoriteTreeRenamePopupMenu.Visible := False;
6058 FavoriteTreeNewFolderPopupMenu.Visible := True;
6059 FavoriteTreeURLCopyPopupMenu.Visible := False;
6060 FavoriteTreeNameCopyPopupMenu.Visible := False;
6061 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6062 FavoriteTreeReloadPopupMenu.Visible := False;
6063 FavoriteTreeLogDeletePopupMenu.Visible := False;
6064 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6065 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
6066 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6067 FavoriteTreeDeletePopupMenu.Visible := True;
6068 FavoriteTreeRenamePopupMenu.Visible := False;
6069 FavoriteTreeNewFolderPopupMenu.Visible := True;
6070 FavoriteTreeURLCopyPopupMenu.Visible := False;
6071 FavoriteTreeNameCopyPopupMenu.Visible := False;
6072 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6073 FavoriteTreeReloadPopupMenu.Visible := False;
6074 FavoriteTreeLogDeletePopupMenu.Visible := False;
6075 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6076 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
6077 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6078 FavoriteTreeDeletePopupMenu.Visible := True;
6079 FavoriteTreeRenamePopupMenu.Visible := True;
6080 FavoriteTreeNewFolderPopupMenu.Visible := True;
6081 FavoriteTreeURLCopyPopupMenu.Visible := False;
6082 FavoriteTreeNameCopyPopupMenu.Visible := True;
6083 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6084 FavoriteTreeReloadPopupMenu.Visible := False;
6085 FavoriteTreeLogDeletePopupMenu.Visible := False;
6086 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6087 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
6088 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6089 FavoriteTreeDeletePopupMenu.Visible := True;
6090 FavoriteTreeRenamePopupMenu.Visible := True;
6091 FavoriteTreeNewFolderPopupMenu.Visible := True;
6092 FavoriteTreeURLCopyPopupMenu.Visible := True;
6093 FavoriteTreeNameCopyPopupMenu.Visible := True;
6094 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6095 FavoriteTreeReloadPopupMenu.Visible := True;
6096 FavoriteTreeLogDeletePopupMenu.Visible := True;
6097 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6098 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
6099 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6100 FavoriteTreeDeletePopupMenu.Visible := True;
6101 FavoriteTreeRenamePopupMenu.Visible := True;
6102 FavoriteTreeNewFolderPopupMenu.Visible := True;
6103 FavoriteTreeURLCopyPopupMenu.Visible := True;
6104 FavoriteTreeNameCopyPopupMenu.Visible := True;
6105 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6106 FavoriteTreeReloadPopupMenu.Visible := True;
6107 FavoriteTreeLogDeletePopupMenu.Visible := False;
6108 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6110 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6111 FavoriteTreeDeletePopupMenu.Visible := False;
6112 FavoriteTreeRenamePopupMenu.Visible := False;
6113 FavoriteTreeNewFolderPopupMenu.Visible := False;
6114 FavoriteTreeURLCopyPopupMenu.Visible := False;
6115 FavoriteTreeNameCopyPopupMenu.Visible := False;
6116 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6117 FavoriteTreeReloadPopupMenu.Visible := False;
6118 FavoriteTreeLogDeletePopupMenu.Visible := False;
6119 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6124 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
6129 if not (TObject(node.Data) is TFavoriteFolder) then
6132 for i := 0 to node.Count - 1 do
6134 if TObject(node.Item[i].Data) is TFavoriteFolder then
6135 FavoriteBrowseFolder( node.Item[i] )
6136 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
6137 FavoriteClick( node.Item[i], False );
6141 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6147 for i := 0 to Node.Count - 1 do begin
6148 if Node.Item[i].Data = FindPointer then begin
6149 Result := Node.Item[i];
6151 end else if Node.Item[i].Count > 0 then begin
6152 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6153 if Found <> nil then begin
6164 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6168 SenderNode: TTreeNode;
6172 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6173 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6174 SenderNode := FavoriteTreeView.Items[i];
6178 SenderNode.Selected := False;
6180 FavoriteDragDrop( SenderNode, Source );
6185 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6186 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6188 if FDragWFirst = true then
6189 FDragWFirst := false;
6191 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6192 if GikoSys.Setting.ListWidthState = glsMin then begin
6193 GikoDM.BrowserMaxAndFocusAction.Execute;
6196 if GikoSys.Setting.ListHeightState = glsMin then begin
6197 GikoDM.BrowserMaxAndFocusAction.Execute;
6202 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6203 Y: Integer; State: TDragState; var Accept: Boolean);
6206 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6210 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6214 if FDropSpaceNode <> nil then begin
6216 FDropSpaceNode.Delete;
6218 FDropSpaceNode := nil;
6220 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6221 FavoriteDM.Modified := true;
6227 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6229 if FListViewBackGroundColor <> value then begin
6230 FListViewBackGroundColor := value;
6231 ListView.Color := FListViewBackGroundColor;
6234 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6236 threadItem : TThreadItem;
6240 if FClickNode = nil then Exit;
6242 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6244 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6245 if threadItem = nil then
6247 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6249 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6251 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6252 if boardItem = nil then
6254 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6260 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6261 MousePos: TPoint; var Handled: Boolean);
6265 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6266 if BrowserTab.TabIndex <> idx then begin
6267 BrowserTab.TabIndex := idx;
6268 BrowserTab.OnChange(nil);
6272 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6274 ThreadItem: TThreadItem;
6280 boardPlugIn : TBoardPlugIn;
6282 if Number = 0 then Exit;
6283 ThreadItem := GetActiveContent(True);
6285 if ThreadItem <> nil then begin
6286 //if ThreadItem.IsBoardPlugInAvailable then begin
6287 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6288 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6289 //boardPlugIn := ThreadItem.BoardPlugIn;
6290 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6292 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6293 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6294 //
\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
6295 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6297 FileName := ThreadItem.FilePath;
6298 tmp := GikoSys.ReadThreadFile(FileName, Number);
6300 if tmp <> '' then begin
6301 THTMLCreate.DivideStrLine(tmp, @Res);
6303 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6304 if ReplaceTag then begin
6305 Header := CustomStringReplace(Header, '</b>', '',true);
6306 Header := CustomStringReplace(Header, '<b>', '',true);
6307 Header := CustomStringReplace(Header, '<br>', '',true);
6308 Header := DeleteFontTag(Header);
6310 //if ThreadItem.IsBoardPlugInAvailable then begin
6311 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6312 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6313 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6315 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6316 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6317 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6318 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6321 Body := CustomStringReplace(Body, '</a>', '',true);
6323 Body := HTMLCreater.DeleteLink(Body);
6324 if ReplaceTag then begin
6325 Body := CustomStringReplace(Body, '<', '<');
6326 Body := CustomStringReplace(Body, '>', '>');
6327 Body := CustomStringReplace(Body, '"', '"');
6328 Body := CustomStringReplace(Body, '&', '&');
6329 //Body := CustomStringReplace(Body, ' ', ' ');
6332 Header := Header + Body;
6334 Clipboard.SetTextBuf( PChar(Header) );
6340 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6342 AddRoundNameMenu(dummy1);
6343 AddMenuSameBoardThread;
6345 //!
\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Á
6346 procedure TGikoForm.AddMenuSameBoardThread;
6351 SameBoardThreadItem.Clear;
6352 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6353 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6354 if (FActiveContent.Thread.ParentBoard =
6355 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6356 //
\8e©
\95ª
\82Í
\8aO
\82·
6357 if FActiveContent.Thread <>
6358 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6359 Item := TMenuItem.Create(Self);
6360 Item.Caption := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.Title;
6361 Item.OnClick := SameBoardThreadSubItemOnClick;
6362 SameBoardThreadItem.Add(Item);
6366 //
\89½
\82à
\96³
\82¢
\82È
\82ç
\8eg
\97p
\82Å
\82«
\82È
\82¢
\82æ
\82¤
\82É
\82·
\82é
6367 SameBoardThreadItem.Enabled := SameBoardThreadItem.Count > 0;
6369 //!
\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
6370 procedure TGikoForm.SameBoardThreadSubItemOnClick(Sender: TObject);
6373 MenuItem: TMenuItem;
6375 if Sender is TMenuItem then begin
6378 MenuItem := TMenuItem(Sender);
6379 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6380 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6381 if (FActiveContent.Thread.ParentBoard =
6382 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6383 if FActiveContent.Thread <>
6384 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6385 if (SameBoardThreadItem.Items[j] = MenuItem) then begin
6386 MoveToURL( TBrowserRecord(BrowserTab.Tabs.Objects[i])
6398 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6400 FavoriteDM.URLReplace(oldURLs, newURLs);
6403 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6405 RoundList.URLReplace(oldURLs, newURLs);
6408 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6410 Filename = 'tab.sav';
6411 bFilename = '~tab.sav';
6417 oldBoardName: string;
6419 newBoardName: string;
6420 TabList: TStringList;
6423 if oldURLs.Count <> newURLs.Count then begin
6426 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6427 TabList := TStringList.Create;
6429 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6431 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6432 //
\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
6433 for i := 0 to oldURLs.Count - 1 do begin
6434 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6435 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6436 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6437 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6438 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6439 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6441 for j := 0 to TabList.Count - 1 do begin
6442 tempString := TabList[j];
6443 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6444 tempString := StringReplace(tempString, oldHost, newHost,[]);
6445 TabList[j] := tempString;
6449 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6451 if FileExists( GikoSys.GetAppDir + Filename) then begin
6452 if FileExists( GikoSys.GetAppDir + bFilename) then
6453 DeleteFile(GikoSys.GetAppDir + bFilename);
6455 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6456 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6459 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6467 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6468 procedure TGikoForm.OnMinimize;
6470 if FActiveContent <> nil then begin
6471 FIsMinimize := mtMinimizing;
6472 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
6476 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6477 procedure TGikoForm.OnMinimized;
6479 FIsMinimize := mtMinimized;
6483 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6485 CoolBarResized( Sender, BrowserCoolBar );
6488 // *************************************************************************
6489 // ExternalBoardPlugInMain
6490 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6491 // *************************************************************************
6492 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6495 boardPlugIn : TBoardPlugIn;
6498 if not (Sender is TMenuItem) then
6501 item := TMenuItem( Sender );
6502 if not Assigned( Pointer( item.Tag ) ) then
6505 //
\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·
6506 boardPlugIn := TBoardPlugIn( item.Tag );
6507 boardPlugIn.PlugInMenu( item.Handle );
6510 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6511 procedure TGikoForm.TreeClick( Node : TTreeNode );
6517 if FTreeType = gttHistory then begin
6519 if TObject( Node.Data ) is TFavoriteThreadItem then
6520 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6521 FavoriteClick( Node );
6524 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6525 if ActiveList = Node.Data then
6528 ActiveListColumnSave;
6530 if TObject(Node.Data) is TBBS then begin
6531 SetActiveList(Node.data);
6532 end else if TObject(Node.Data) is TCategory then begin
6533 SetActiveList(Node.data);
6534 end else if TObject(Node.Data) is TBoard then begin
6535 if not TBoard(Node.Data).IsThreadDatRead then begin
6536 Screen.Cursor := crHourGlass;
6538 if not TBoard(Node.Data).IsThreadDatRead then
6539 GikoSys.ReadSubjectFile(Node.Data);
6541 Screen.Cursor := crDefault;
6544 Sort.SetSortDate(Now());
6545 SetActiveList(Node.data);
6548 if TObject( Node.Data ) is TBoard then begin // not TCategory
6549 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6550 if GikoSys.Setting.ListWidthState = glsMax then begin
6551 GikoDM.BrowserMinAction.Execute;
6552 if GikoForm.Visible then
6556 if GikoSys.Setting.ListHeightState = glsMax then begin
6557 GikoDM.BrowserMinAction.Execute;
6558 if GikoForm.Visible then
6566 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6567 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6570 ThreadItem : TThreadItem;
6571 shiftDown : Boolean;
6574 if Node = nil then Exit;
6576 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6578 if FTreeType = gtt2ch then begin
6579 if not (TObject(Node.Data) is TBoard) then Exit;
6580 Board := TBoard(Node.Data);
6581 DownloadList(Board, shiftDown);
6582 end else if FTreeType = gttHistory then begin
6583 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6584 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6585 DownloadContent(ThreadItem, shiftDown);
6589 // *************************************************************************
6590 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82ÌKeyDown
\83C
\83x
\83\93\83g
6591 // *************************************************************************
6592 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6593 Shift: TShiftState);
6595 if Key = VK_BACK then begin
6596 // UpFolderButtonClick(Sender);
6597 end else if Key = VK_SPACE then begin
6598 TreeDoubleClick( TreeView.Selected );
6599 end else if Key = VK_RETURN then begin
6600 TreeClick( TreeView.Selected );
6601 //
\97\9a\97ð
\82Ì
\8fê
\8d\87\81A
\8fÁ
\82³
\82ê
\82Ä
\82¢
\82é
\82Ì
\82Å
\83`
\83F
\83b
\83N
\82·
\82é
6602 if (TreeView.Selected <> nil) then begin
6603 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6607 //!
\82¨
\8bC
\82É
\93ü
\82è
\82ÌMouseDown
\83C
\83x
\83\93\83g
6608 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6609 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6611 favItem : TTreeNode;
6612 favThreadItem : TFavoriteThreadItem;
6618 if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6619 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6620 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6621 rect := FavoriteTreeView.Selected.DisplayRect(true);
6622 //
\83A
\83C
\83R
\83\93\95ª
\8d¶
\82É
\82¸
\82ç
\82·
6623 if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
6624 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6625 if ssDouble in Shift then begin
6626 FClickNode := FavoriteTreeView.Selected;
6627 GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6631 TObject(FavoriteTreeView.Selected));
6638 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6639 if favItem = nil then Exit;
6641 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6642 favThreadItem := TFavoriteThreadItem( favItem.Data );
6643 if favThreadItem.Item <> nil then
6644 InsertBrowserTab( favThreadItem.Item, False );
6651 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6654 if FIsIgnoreResize <> rtNone then
6657 if GikoSys.Setting.ListOrientation = gloVertical then begin
6658 if GikoSys.Setting.ListHeightState = glsMin then begin
6659 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6660 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6666 procedure TGikoForm.OnResized;
6671 FOldFormWidth := Width;
6672 FIsIgnoreResize := rtNone;
6677 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6678 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6683 //
\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)
6684 if FActiveContent <> nil then begin
6685 doc := Idispatch( olevariant(FActiveContent.Browser.ControlInterface).Document) as IHTMLDocument2;
6686 doc.Body.ScrollTop := FActiveContent.Thread.ScrollTop;
6688 FIsMinimize := mtNone;
6693 // *************************************************************************
6694 //!
\83X
\83\8c\83b
\83h
\83u
\83\89\83E
\83U
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6695 // *************************************************************************
6696 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6703 stlist : TStringList;
6707 FOleInPlaceActiveObject: IOleInPlaceActiveObject;
6711 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then
6712 FOleInPlaceActiveObject := FActiveContent.Browser.ControlInterface as IOleInPlaceActiveObject;
6713 FOleInPlaceActiveObject.OnFrameWindowActivate(True);
6716 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6717 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6718 e := IHTMLDocument2(FActiveContent.Browser.Document).elementFromPoint(p.x, p.y);
6719 if (Assigned(e)) then begin
6720 if (e.className = 'date') or (e.id = 'date') then begin
6722 if AnsiPos('id', AnsiLowerCase(AID)) > 0 then begin
6723 AID := Copy(AID, AnsiPos('id', AnsiLowerCase(AID)) - 1, 11);
6724 if AnsiPos(' be:', AnsiLowerCase(AID)) > 0 then begin
6725 AID := Copy(AID, 1, AnsiPos(' BE:', AnsiLowerCase(AID)) - 1)
6728 stlist := TStringList.Create;
6730 stList.DelimitedText := AID;
6732 for i := 0 to stList.Count - 1 do
6733 if Length(WideString(stList[i])) = 8 then begin
6734 if GikoSys.NotDateorTimeString(stList[i]) then begin
6743 count := GikoSys.GetSameIDResCount(AID, FActiveContent.Thread);
6745 if not (GikoSys.Setting.LimitResCountMessage) then begin
6747 end else if (count > LIMIT) then begin
6748 if (GikoUtil.MsgBox(Handle,
6749 IntToStr(LIMIT) + '
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6750 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6751 MB_YESNO or MB_ICONQUESTION) = ID_YES) then begin
6755 body := GikoSys.GetSameIDResAnchor(AID, FActiveContent.Thread, limited);
6756 FActiveContent.IDAnchorPopup(body);
6765 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
6766 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
6768 SelectTimer.Interval := 0;
6769 if not (ListView.Selected = nil) then
6770 if( FActiveContent = nil) or
6771 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
6776 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
6777 procedure TGikoForm.ActiveListColumnSave;
6779 ActivListObj : TObject;
6780 i, id, idx : Integer;
6781 BBSOrder : TGikoBBSColumnList;
6782 CategoryOrder : TGikoCategoryColumnList;
6783 BoardOrder : TGikoBoardColumnList;
6786 ActivListObj := ActiveList;
6787 if ActivListObj is TBBS then begin
6788 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6789 BBSOrder := TGikoBBSColumnList.Create;
6791 for i := 0 to ListView.Columns.Count - 1 do begin
6792 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6793 idx := ListView.Column[ i ].Tag;
6794 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
6795 BBSOrder.Add( TGikoBBSColumnID( id ) );
6796 //
\95\9d\82Ì
\95Û
\91¶
6797 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
6799 for i := 0 to ListView.Columns.Count - 1 do
6800 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6801 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
6805 end else if ActivListObj is TCategory then begin
6806 //=====
\94Â
\83\8a\83X
\83g =====
6807 CategoryOrder := TGikoCategoryColumnList.Create;
6809 for i := 0 to ListView.Columns.Count - 1 do begin
6810 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6811 idx := ListView.Column[ i ].Tag;
6812 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
6813 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
6814 //
\95\9d\82Ì
\95Û
\91¶
6815 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
6817 for i := 0 to ListView.Columns.Count - 1 do
6818 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6819 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
6823 end else if ActivListObj is TBoard then begin
6824 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6825 BoardOrder := TGikoBoardColumnList.Create;
6827 for i := 0 to ListView.Columns.Count - 1 do begin
6828 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6829 idx := ListView.Column[ i ].Tag;
6830 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
6831 BoardOrder.Add( TGikoBoardColumnID( id ) );
6832 //
\95\9d\82Ì
\95Û
\91¶
6833 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
6835 for i := 0 to ListView.Columns.Count - 1 do
6836 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6837 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
6845 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
6846 Column: TListColumn; Point: TPoint);
6852 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
6853 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
6854 ListColumnPopupMenu.Items.Items[ i ].Free;
6856 //
\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¢)
6857 if TObject( FActiveList ) is TBBS then begin
6859 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6860 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
6861 item := TMenuItem.Create( ListColumnPopupMenu );
6862 item.Caption := GikoBBSColumnCaption[ i ];
6864 item.OnClick := ListColumnPopupMenuOnClick;
6865 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
6866 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
6867 item.Checked := True;
6871 ListColumnPopupMenu.Items.Add( item );
6874 end else if TObject( FActiveList ) is TCategory then begin
6876 //=====
\94Â
\83\8a\83X
\83g =====
6877 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
6878 item := TMenuItem.Create( ListColumnPopupMenu );
6879 item.Caption := GikoCategoryColumnCaption[ i ];
6881 item.OnClick := ListColumnPopupMenuOnClick;
6882 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
6883 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
6884 item.Checked := True;
6888 ListColumnPopupMenu.Items.Add( item );
6891 end else if TObject( FActiveList ) is TBoard then begin
6893 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6894 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
6895 item := TMenuItem.Create( ListColumnPopupMenu );
6896 item.Caption := GikoBoardColumnCaption[ i ];
6898 item.OnClick := ListColumnPopupMenuOnClick;
6899 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
6900 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
6901 item.Checked := True;
6905 ListColumnPopupMenu.Items.Add( item );
6910 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
6911 Point := ListView.ClientToScreen( Point );
6912 if ListColumnPopupMenu.Items.Count > 0 then
6913 ListColumnPopupMenu.Popup( Point.X, Point.Y );
6917 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6918 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
6925 if not (Sender is TMenuItem) then
6928 ActiveListColumnSave;
6929 item := TMenuItem( Sender );
6931 if TObject( FActiveList ) is TBBS then
6932 orderList := GikoSys.Setting.BBSColumnOrder
6933 else if TObject( FActiveList ) is TCategory then
6934 orderList := GikoSys.Setting.CategoryColumnOrder
6935 else if TObject( FActiveList ) is TBoard then
6936 orderList := GikoSys.Setting.BoardColumnOrder
6940 if item.Checked then begin
6941 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
6942 for i := orderList.Count - 1 downto 0 do begin
6943 if Integer( orderList[ i ] ) = item.Tag then begin
6944 orderList.Delete( i );
6949 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
6950 orderList.Add( Pointer( item.Tag ) );
6953 SetActiveList( FActiveList );
6957 procedure TGikoForm.OnGestureStart(Sender: TObject);
6962 procedure TGikoForm.OnGestureMove(Sender: TObject);
6969 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
6971 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
6972 s := MouseGesture.GetGestureStr;
6974 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
6975 if Action <> nil then
6976 ActStr := '
\81i' + Action.Caption + '
\81j';
6977 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
6978 StatusBar.Panels[1].Text := s;
6981 procedure TGikoForm.OnGestureEnd(Sender: TObject);
6986 s := MouseGesture.GetGestureStr;
6988 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
6989 if Action <> nil then
6991 StatusBar.Panels[1].Text := '';
6994 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
6995 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
6997 ThreadItem: TThreadItem;
6999 DefaultDraw := true;
7000 if TObject(Item.Data) is TThreadItem then begin
7001 ThreadItem := TThreadItem(Item.Data);
7002 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
7003 ListView.Canvas.Brush.Color := FOddColor;
7004 //
\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
7005 if (GikoSys.Setting.UnFocusedBold) and
7006 (Item.Selected) and (not ListView.Focused) then begin
7007 ListView.Canvas.Font.Style := [fsBold];
7010 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
7013 if ThreadItem.UnRead then
7014 ListView.Canvas.Font.Style := [fsBold];
7019 procedure TGikoForm.FormActivate(Sender: TObject);
7021 if GikoSys.Setting.GestureEnabled then begin
7022 GikoSys.Setting.Gestures.ClearGesture;
7023 GikoSys.Setting.Gestures.LoadGesture(
7024 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
7025 MouseGesture.UnHook;
7026 MouseGesture.OnGestureStart := OnGestureStart;
7027 MouseGesture.OnGestureMove := OnGestureMove;
7028 MouseGesture.OnGestureEnd := OnGestureEnd;
7029 MouseGesture.SetHook(Handle);
7031 //MouseGesture.UnHook;
7032 MouseGesture.OnGestureStart := nil;
7033 MouseGesture.OnGestureMove := nil;
7034 MouseGesture.OnGestureEnd := nil;
7038 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
7040 if (FIsMinimize <> mtMinimizing) then begin
7041 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
7042 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
7046 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
7051 affectedBand : TCoolBand;
7054 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
7055 FIsIgnoreResize := rtResizing;
7056 PostMessage( Handle, USER_RESIZED, 0, 0 );
7058 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
7059 if CoolBar = MainCoolBar then begin
7060 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
7061 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7062 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7063 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7064 GikoSys.Setting.MainCoolSet[i] := CoolSet;
7066 end else if CoolBar = ListCoolBar then begin
7067 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
7068 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7069 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7070 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7071 GikoSys.Setting.ListCoolSet[i] := CoolSet;
7073 end else if CoolBar = BrowserCoolBar then begin
7074 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
7075 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7076 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7077 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7078 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
7081 if not (Sender is TToolBar) or (CoolBar = nil) then
7083 toolbar := TToolBar( Sender );
7084 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
7085 affectedBand := nil;
7086 for i := CoolBar.Bands.Count - 1 downto 0 do begin
7087 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
7088 band := CoolBar.Bands[ i ];
7089 if band.Break or (i = 0) then begin
7090 if i + 1 < CoolBar.Bands.Count then
7091 if not CoolBar.Bands[ i + 1 ].Break then
7092 affectedBand := CoolBar.Bands[ i + 1 ];
7095 affectedBand := CoolBar.Bands[ i - 1 ];
7100 //
\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·
7101 if CoolBar = MainCoolBar then begin
7102 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
7103 coolSet.FCoolWidth := toolbar.Width + 25;
7104 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
7105 if affectedBand <> nil then begin
7106 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
7107 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7108 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
7110 end else if CoolBar = ListCoolBar then begin
7111 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
7112 coolSet.FCoolWidth := toolbar.Width + 25;
7113 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
7114 if affectedBand <> nil then begin
7115 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
7116 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7117 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
7119 end else if CoolBar = BrowserCoolBar then begin
7120 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
7121 coolSet.FCoolWidth := toolbar.Width + 25;
7122 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
7123 if affectedBand <> nil then begin
7124 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
7125 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7126 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
7133 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
7135 CoolBarResized( Sender, MainCoolBar );
7138 procedure TGikoForm.ListToolBarResize(Sender: TObject);
7140 CoolBarResized( Sender, ListCoolBar );
7143 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
7145 CoolBarResized( Sender, BrowserCoolBar );
7148 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
7149 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
7151 ThreadItem : TThreadItem;
7152 ReadList : TStringList;
7153 wordCount : TWordCount;
7155 ThreadItem := GetActiveContent(True);
7156 ReadList := TStringList.Create;
7157 wordCount := TWordCount.Create;
7159 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7160 {$IFDEF SPAM_FILTER_ENABLED}
7161 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7162 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7163 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
7164 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7165 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7167 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7168 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7173 FActiveContent.Repaint := true;
7174 if ThreadItem <> nil then
7175 InsertBrowserTab( ThreadItem, True );
7177 //
\93¯
\88êID
\82ðNG
\83\8f\81[
\83h
\82É
\93o
\98^
7178 procedure TGikoForm.AddIDtoNGWord(invisible : boolean);
7180 ThreadItem : TThreadItem;
7182 {$IFDEF SPAM_FILTER_ENABLED}
7184 ReadList : TStringList;
7185 wordCount : TWordCount;
7187 id, dateStr: String;
7189 No := KokoPopupMenu.Tag;
7190 if No = 0 then Exit;
7191 ThreadItem := GetActiveContent(True);
7192 if ThreadItem = nil then Exit;
7194 id := GikoSys.GetResID(No, ThreadItem);
7195 if (id <> '') and (not IsNoValidID(id)) then begin
7196 //
\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Á
7197 DateTimeToString(dateStr, 'yyyymmdd', Now);
7198 id := id + #9'>>add ' + dateStr + ',' + ThreadItem.Title;
7199 if (GikoSys.FAbon.AddToken(id, invisible)) then begin
7200 GikoSys.FAbon.ReLoadFromNGwordFile;
7201 FActiveContent.Repaint := True;
7204 ShowMessage('ID
\82ð
\8eæ
\93¾
\82Å
\82«
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B');
7206 {$IFDEF SPAM_FILTER_ENABLED}
7207 body := TStringList.Create;
7209 GikoSys.GetSameIDRes(id, ThreadItem, body);
7210 ReadList := TStringList.Create;
7211 wordCount := TWordCount.Create;
7213 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7214 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7215 for i := 0 to body.Count - 1 do begin
7216 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7217 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7218 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7228 if (FActiveContent.Repaint) then begin
7229 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7230 if ThreadItem <> nil then
7231 InsertBrowserTab( ThreadItem, True );
7235 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
7236 procedure TGikoForm.IndividualAbonID(Atype : Integer);
7238 ThreadItem : TThreadItem;
7241 ReadList : TStringList;
7242 wordCount : TWordCount;
7244 No := KokoPopupMenu.Tag;
7245 if No = 0 then Exit;
7246 ThreadItem := GetActiveContent(True);
7247 if ThreadItem = nil then Exit;
7248 body := TStringList.Create;
7250 GikoSys.GetSameIDRes(No, ThreadItem, body);
7252 ReadList := TStringList.Create;
7253 wordCount := TWordCount.Create;
7255 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7256 {$IFDEF SPAM_FILTER_ENABLED}
7257 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7258 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7260 for i := 0 to body.Count - 1 do begin
7261 {$IFDEF SPAM_FILTER_ENABLED}
7262 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7263 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7264 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7266 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7267 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7273 FActiveContent.Repaint := true;
7274 if ThreadItem <> nil then
7275 InsertBrowserTab( ThreadItem, True );
7282 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7284 firstElement: IHTMLElement;
7285 document: IHTMLDocument2;
7287 document := FActiveContent.Browser.Document as IHTMLDocument2;
7288 if Assigned(document) then
7289 firstElement := document.all.item('idSearch', 0) as IHTMLElement;
7290 if Assigned(firstElement) then
7291 if firstElement.style.visibility <> 'hidden' then
7292 firstElement.style.visibility := 'hidden';
7295 procedure TGikoForm.RepaintAllTabsBrowser();
7298 ThreadItem: TThreadItem;
7300 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7301 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7303 ThreadItem := GetActiveContent;
7304 if ThreadItem <> nil then
7305 InsertBrowserTab( ThreadItem, True );
7309 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7310 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7311 Shift: TShiftState);
7313 //
\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Ì
7314 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7315 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7316 SelectTimer.Interval := 0;
7317 if not (GikoSys.Setting.BrowserTabVisible) then begin
7318 if (GetActiveList is TBoard) then begin
7319 //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
7320 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7321 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7322 (Key = VK_UP) or (Key = VK_DOWN)) then
7323 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7327 // *************************************************************************
7328 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7329 // *************************************************************************
7330 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7331 Node: TTreeNode; var AllowEdit: Boolean);
7333 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7334 FOrigenCaption := Node.Text;
7336 // *************************************************************************
7337 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7338 // *************************************************************************
7339 function TGikoForm.GetMainForm(): TComponent;
7341 Result := Application.MainForm;
7343 // *************************************************************************
7344 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7345 // *************************************************************************
7346 function TGikoForm.GetScreenCursor(): TCursor;
7348 Result := Screen.Cursor;
7350 // *************************************************************************
7351 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7352 // *************************************************************************
7353 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7355 if (Screen.Cursor <> Cursor) then
7356 Screen.Cursor := Cursor;
7358 // *************************************************************************
7359 //!
\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
7360 // *************************************************************************
7361 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7363 //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Ì
7364 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7365 if GikoDM.CabinetVisibleAction.Enabled then begin
7366 GikoDM.CabinetVisibleAction.Execute;
7369 // *************************************************************************
7370 //!
\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
7371 // *************************************************************************
7372 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7374 if GikoDM.FavoriteArrangeAction.Enabled then begin
7375 GikoDM.FavoriteArrangeAction.Execute;
7378 // *************************************************************************
7379 //!
\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
7380 // *************************************************************************
7381 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7382 var Handled: Boolean);
7386 //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ß
7387 if Self.Active then begin
7389 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7390 WM_KEYFIRST..WM_KEYLAST :
7392 //
\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ç
7393 if (Msg.message <> WM_KEYUP)
7394 and (Msg.message <> WM_CHAR)
7395 and (Msg.message <> WM_SYSKEYUP) then begin
7396 wmMsg.Msg := Msg.message;
7397 wmMsg.CharCode := Word(Msg.wParam);
7398 wmMsg.KeyData := Msg.lParam;
7399 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7400 Self.OnShortCut(wmMsg, Handled);
7405 // Explorer
\82ÌD&D
\82ð
\8eó
\82¯
\82é
\82Æ
\82Ì
\94ñ
\83A
\83N
\83e
\83B
\83u
7406 if Msg.message = WM_DROPFILES then begin
7407 AcceptDropFiles(Msg);
7412 // *************************************************************************
7413 //!
\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
7414 // *************************************************************************
7415 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7417 Application.ProcessMessages;
7418 if not Application.Terminated then begin
7419 if PreviewTimer.Enabled then
7420 PreviewTimer.Enabled := False;
7421 //
\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
7422 if (FResPopupBrowser <> nil) then
7423 FResPopupBrowser.Clear;
7425 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7426 if FPreviewBrowser <> nil then
7427 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7431 // *************************************************************************
7432 //!
\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
7433 // *************************************************************************
7434 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7439 if (Sender <> nil) then begin
7440 s := ' [' + Sender.ClassName + ']' + #13#10;
7442 s := ' [ Sender is nil ] ' + #13#10;
7445 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7447 // *************************************************************************
7448 //!
\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¬
7449 // *************************************************************************
7450 procedure TGikoForm.CreateControlThread();
7452 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7453 FControlThread := TThreadControl.Create(True);
7454 FControlThread.MaxThreadCount := 1;
7455 FControlThread.Resume;
7456 FControlThread.OnDownloadEnd := DownloadEnd;
7457 FControlThread.OnDownloadMsg := DownloadMsg;
7458 FControlThread.OnWork := Work;
7459 FControlThread.OnWorkBegin := WorkBegin;
7460 FControlThread.OnWorkEnd := WorkEnd;
7462 // *************************************************************************
7463 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7464 // *************************************************************************
7465 procedure TGikoForm.CreateBrowsers(count: Integer);
7468 newBrowser: TWebBrowser;
7470 BrowserNullTab := TBrowserRecord.Create;
7471 BrowserNullTab.Browser := Browser;
7472 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7474 FBrowsers := TList.Create;
7475 for i := 0 to count -1 do begin
7476 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7477 newBrowser := FBrowsers[FBrowsers.Count - 1];
7478 TOleControl(newBrowser).Parent := BrowserPanel;
7479 TOleControl(newBrowser).Align := alNone;
7480 TOleControl(newBrowser).Left := 0;
7481 TOleControl(newBrowser).Top := 0;
7482 newBrowser.RegisterAsDropTarget := False;
7483 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7484 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7485 newBrowser.OnEnter := BrowserEnter;
7486 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7487 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7488 newBrowser.Navigate(BLANK_HTML);
7489 ShowWindow(newBrowser.Handle, SW_HIDE);
7491 BrowserNullTab.Browser.BringToFront;
7492 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7494 //
\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Ì
7495 //
\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Å
7496 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7497 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7498 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7499 Application.ProcessMessages;
7502 // *************************************************************************
7503 //!
\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é
7504 // *************************************************************************
7505 procedure TGikoForm.SetSelectComboBox();
7507 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7510 ToolButton: TToolButton;
7512 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7513 SelectComboBoxPanel.Visible := False;
7515 for i := ListToolBar.ControlCount - 1 downto 0 do
7517 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7519 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7520 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7521 SelectComboBoxPanel.Parent := ListToolBar;
7522 SelectComboBoxPanel.Visible := True;
7524 SelectComboBox.Left := 0;
7525 SelectComboBox.Top := 0;
7526 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7527 SelectComboBox.Width := SelectComboBoxPanel.Width -
7528 SelectComboBoxSplitter.Width;
7530 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7531 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7532 if ToolButton = nil then begin
7533 ToolButton := TToolButton.Create(ListToolBar);
7534 ToolButton.Name := DUMMYCOMPNAME;
7536 ToolButton.Style := tbsSeparator;
7537 ToolButton.Width := 0;
7538 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7539 ListToolBar.InsertControl(ToolButton);
7540 ToolButton.Visible := False;
7542 //
\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·
7543 if (i + 1) < ListToolBar.ControlCount then
7544 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7545 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7546 ListToolBar.Controls[ i + 1 ].Visible := False;
7549 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7550 ListToolBar.Controls[ i ].Visible := False;
7558 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\83}
\83E
\83X
\83_
\83E
\83\93\83C
\83x
\83\93\83g
7559 procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7560 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7567 if (TreeView.Selected <> nil) and
7568 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7569 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
7570 rect := TreeView.Selected.DisplayRect(true);
7571 //
\83A
\83C
\83R
\83\93\95ª
\82¾
\82¯
\8d¶
\82É
\82¸
\82ç
\82·
7572 if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
7573 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7574 //
\83N
\83\8a\83b
\83N
\82Æ
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82ð
\83R
\83R
\82Å
\94»
\92è
7575 if ssDouble in Shift then begin
7576 TreeDoubleClick( TreeView.Selected );
7578 TreeClick(TreeView.Selected);
7585 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
7586 procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7590 if ActionList <> nil then begin
7591 SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7593 for i := 0 to ActionList.ActionCount - 1 do begin
7595 FActionListGroupIndexes[i] :=
7596 TCustomAction(ActionList.Actions[i]).GroupIndex;
7597 TCustomAction(ActionList.Actions[i]).GroupIndex
7600 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7606 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
7607 procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7611 if ActionList <> nil then begin
7612 if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7613 for i := 0 to ActionList.ActionCount - 1 do begin
7615 TCustomAction(ActionList.Actions[i]).GroupIndex
7616 := FActionListGroupIndexes[i];
7618 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7624 //!
\82±
\82Ì
\83\8c\83X
\82ÌURL
\8eæ
\93¾
7625 procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
7629 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
7630 procedure TGikoForm.RefreshListView(Thread: TThreadItem);
7632 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
7633 if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin
7638 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
7639 MousePos: TPoint; var Handled: Boolean);
7642 coolBar: TGikoCoolBar;
7645 if (Sender <> nil) and (Sender is TGikoCoolBar) then begin
7646 coolBar := TGikoCoolBar(Sender);
7647 if (coolBar = MainCoolBar) then begin
7648 FToolBarSettingSender := tssMain;
7649 end else if (coolBar = ListCoolBar) then begin
7650 FToolBarSettingSender := tssList;
7651 end else if (coolBar = BrowserCoolBar) then begin
7652 FToolBarSettingSender := tssBrowser;
7654 FToolBarSettingSender := tssNone;
7656 pos := coolBar.ClientToScreen( MousePos );
7657 MainCoolBarPopupMenu.Popup( pos.X, pos.Y );
7662 procedure TGikoForm.TaskTrayIconMessage(var Msg: TMsg);
7664 //
\8d¶
\83N
\83\8a\83b
\83N
\82È
\82ç
\95\9c\8c³
\82·
\82é
7665 if (Msg.wParam = WM_LBUTTONUP) then begin
7669 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
7670 procedure TGikoForm.StoredTaskTray;
7673 if (FIconData.uID = 0) then begin
7674 FIconData.cbSize := SizeOf(TNotifyIconData);
7675 FIconData.uID := Self.Handle;
7676 FIconData.Wnd := Handle;
7677 FIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
7678 FIconData.uCallbackMessage := USER_TASKTRAY;
7679 FIconData.hIcon := Application.Icon.Handle; {
\83A
\83C
\83R
\83\93\8ew
\92è}
7680 FIconData.szTip := '
\83M
\83R
\83i
\83r'; {
\83q
\83\93\83g
\95¶
\8e\9a\97ñ}
7681 Shell_NotifyIcon(NIM_ADD, @FIconData);
7682 ShowEditors(SW_HIDE);
7683 ShowWindow(Self.Handle, SW_HIDE);
7688 //!
\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¦
7689 procedure TGikoForm.UnStoredTaskTray;
7693 Shell_NotifyIcon(NIM_DELETE, @FIconData);
7694 SetForegroundWindow(Application.Handle);
7699 // Action
\82©
\82ç
\8ai
\94[
\82µ
\82½
\82Æ
\82«
\82ÍTag
\82Ì
\92l
\82Í0
\88È
\8aO
7700 if (GikoDM.StoredTaskTrayAction.Tag = 0) then begin
7701 ShowWindow(Self.Handle, SW_RESTORE);
7703 ShowWindow(Self.Handle, SW_SHOW);
7705 ShowEditors(SW_SHOW);
7706 GikoDM.StoredTaskTrayAction.Tag := 0;
7710 \brief
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
7711 \param nCmdShow Windows.ShowWindow
\82É
\91\97\82é
\83p
\83\89\83\81\81[
\83^
\82Æ
\93¯
\82¶
7713 procedure TGikoForm.ShowEditors(nCmdShow: Integer);
7717 //
\83\8c\83X
\83G
\83f
\83B
\83^
\82ð
\92T
\82·
7718 for i := 0 to Screen.CustomFormCount - 1 do begin
7719 if TObject(Screen.CustomForms[i]) is TEditorForm then
7720 ShowWindow(Screen.CustomForms[i].Handle, nCmdShow);
7724 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83u
\83\89\83E
\83U
\8dì
\90¬
7725 procedure TGikoForm.CreateResPopupBrowser;
7727 if (FResPopupBrowser = nil) then begin
7728 FResPopupBrowser := TResPopupBrowser.Create(BrowserPanel);
7731 //! ListView
\82ÌD&D
\8eó
\82¯
\8eæ
\82è
7732 procedure TGikoForm.AcceptDropFiles(var Msg: TMsg);
7734 FileName: Array[0..MAX_PATH] of Char;
7738 datList: TStringList;
7741 //
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\94Â
\82Ì
\82Æ
\82«
\88È
\8aO
\82Í
\8b\91\94Û
7742 if GetActiveList is TBoard then begin
7743 Board := TBoard(GetActiveList);
7744 if MsgBox(Handle, Board.Title
7745 + '
\94Â
\82É
\93ü
\82ê
\82Ä
\82¢
\82¢
\82Å
\82·
\82©
\81H', '
\83M
\83R
\83i
\83r', MB_YESNO or MB_ICONQUESTION) = IDYES then begin
7746 //
\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
7747 datList := TStringList.Create;
7749 Cnt := DragQueryFile(Msg.WParam, $FFFFFFFF, FileName, SizeOf(FileName));
7750 for K := 0 to Cnt - 1 do begin
7751 DragQueryFile(Msg.WParam, K, FileName, SizeOf(FileName));
7752 // 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
7753 //
\83t
\83@
\83C
\83\8b\82Ì
\83`
\83F
\83b
\83N
7754 if (isValidFile(FileName)) then begin
7755 LogFolder := ExtractFilePath(Board.FilePath);
7756 if (FileExists( LogFolder + ExtractFileName(FileName))) then begin
7757 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);
7759 if (not DirectoryExists(LogFolder)) then begin
7760 if (not GikoSys.ForceDirectoriesEx(LogFolder) ) then begin
7761 GikoUtil.MsgBox(Handle, LogFolder + '
\82Ì
\90¶
\90¬
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7764 if (not Windows.CopyFile(FileName, PChar(LogFolder + ExtractFileName(FileName)), true)) then begin
7765 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);
7767 datList.Add(ExtractFileName(FileName));
7772 DragFinish(Msg.WParam);
7773 if (datList.Count > 0) then begin
7774 GikoSys.AddOutofIndexDat(Board, datList, False);
7775 ShowMessage(IntToStr(datList.Count) + '
\8cÂ
\82Ìdat
\83t
\83@
\83C
\83\8b\82ª
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82µ
\82½
\81B' );
7776 if GikoForm.TreeView.Visible then
7777 GikoForm.TreeView.Refresh;
7778 if GikoForm.ListView.Visible then
7779 GikoForm.ListView.Refresh;
7781 ShowMessage('
\88ê
\82Â
\82à
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B' );
7789 ShowMessage('
\94Â
\82ð
\95\
\8e¦
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
7793 //!
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
7794 function TGikoForm.isValidFile(FileName: String) : boolean;
7799 //
\91¶
\8dÝ
\82·
\82é
\82©
\81A
\8ag
\92£
\8eqdat
\81A
\83t
\83@
\83C
\83\8b\96¼
7800 if ( not FileExists(FileName) ) then begin
7802 GikoUtil.MsgBox(Handle, FileName + '
\82Í
\91¶
\8dÝ
\82µ
\82Ü
\82¹
\82ñ
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7803 end else if (ExtractFileExt(ExtractFileName(FileName)) <> '.dat' ) then begin
7805 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);
7807 //
\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
7809 dt := GikoSys.GetCreateDateFromName(FileName);
7810 if ((UnixToDateTime(ZERO_DATE) + OffsetFromUTC) = dt) then begin
7812 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);
7816 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);
7821 procedure TGikoForm.ResPopupClearTimerTimer(Sender: TObject);
7823 ResPopupClearTimer.Enabled := False;
7824 if ResPopupClearTimer.Tag = 0 then begin
7825 FResPopupBrowser.Clear;
7827 FResPopupBrowser.CurrentBrowser.ChildClear;