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];
1056 BrowserTab.DoubleBuffered := True;
1057 FDragWFirst := false;
1058 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1060 //
\83u
\83\89\83E
\83U
\83^
\83u
1061 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1063 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1064 GikoDM.BrowserTabTopAction.Checked := True;
1066 GikoDM.BrowserTabBottomAction.Checked := True;
1069 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1070 GikoDM.BrowserTabTabStyleAction.Checked := True;
1071 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1072 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1074 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1077 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1078 ProgressBar.Parent := StatusBar;
1079 ProgressBar.Top := 2;
1080 ProgressBar.Left := 0;
1081 ProgressBar.Width := StatusBar.Panels[0].Width;
1082 ProgressBar.Height := StatusBar.Height - 2;
1083 ProgressBar.Position := 0;
1085 //
\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Æ)
1086 InitializeBoardPlugIns;
1088 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1089 GikoSys.ListBoardFile;
1090 //
\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É
1092 //
\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è
1093 if (SplashWindow <> nil) then begin
1094 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1098 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1099 for i := Length(BBSs) - 1 downto 0 do begin
1100 if not BBSs[i].IsBoardFileRead then
1101 GikoSys.ReadBoardFile(BBSs[i]);
1103 if SplashWindow <> nil then begin
1104 SplashWindow.ProgressBar.StepBy(20);
1105 SplashWindow.Update;
1109 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1110 RoundList := TRoundList.Create;
1111 RoundList.LoadRoundBoardFile;
1112 RoundList.LoadRoundThreadFile;
1114 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1115 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1116 Style := Style or TVS_NOTOOLTIPS;
1117 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1119 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1120 TreeView.Align := alClient;
1121 FavoriteTreeView.Align := alClient;
1122 FavoriteTreeView.Visible := False;
1124 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1127 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1128 wp.length := sizeof(wp);
1129 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1130 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1131 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1132 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1133 wp.showCmd := SW_HIDE;
1134 SetWindowPlacement(Handle, @wp);
1137 if GikoSys.Setting.WindowMax then
1138 WindowState := wsMaximized;
1140 //
\83M
\83R
\83A
\83j
\83\81
1142 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1143 if FileExists(FileName) then
1144 Animate.FileName := FileName;
1152 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1153 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1154 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1157 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1158 FHistoryList := THistoryList.Create;
1160 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1161 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1162 TreeView, FTreeType);
1164 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1165 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1166 FavoriteDM.ReadFavorite;
1168 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1169 GikoDM.ArrangeAction.Execute;
1171 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1172 case GikoSys.Setting.ListWidthState of
1174 ViewPanel.Width := 1;
1175 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1176 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1179 ViewPanel.Width := GikoSys.Setting.ListWidth;
1180 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1181 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1184 ViewPanel.Width := GikoSys.Setting.ListWidth;
1185 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1186 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1190 case GikoSys.Setting.ListHeightState of
1192 ViewPanel.Height := 1;
1193 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1194 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1197 ViewPanel.Height := GikoSys.Setting.ListHeight;
1198 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1199 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1202 ViewPanel.Height := GikoSys.Setting.ListHeight;
1203 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1204 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1209 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1210 CreateControlThread();
1212 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1213 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1215 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1218 BrowserBoardNameLabel.Caption := '';
1219 BrowserNameLabel.Caption := '';
1222 FTabHintIndex := -1;
1224 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1225 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1226 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1228 MakeDefaultINIFile();
1229 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1230 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1231 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1232 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1235 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1236 SetSelectComboBox();
1238 //
\83A
\83h
\83\8c\83X
\83o
\81[
1239 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1241 //
\83\8a\83\93\83N
\83o
\81[
1243 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1245 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1246 if not FileExists(GikoSys.GetBoardFileName) then begin
1247 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
1248 + '
\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
1249 + '
\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';
1250 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1251 GikoDM.NewBoardAction.Execute;
1254 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1255 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1257 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1258 // FLastRoundTime := 0;
1260 ListView.OnData := TListViewUtils.ListViewData;
1262 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1263 CabinetVisible( False );
1264 if GikoSys.Setting.CabinetVisible then begin
1265 i := CabinetSelectPopupMenu.Items.Count - 1;
1266 if GikoSys.Setting.CabinetIndex = i - 1 then
1267 GikoDM.CabinetHistoryAction.Execute
1268 else if GikoSys.Setting.CabinetIndex = i then
1269 GikoDM.CabinetFavoriteAction.Execute
1271 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1272 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1273 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1274 FIsIgnoreResize := rtResizing;
1275 GikoDM.CabinetBBSAction.Execute;
1278 ShowBBSTreeOld( BBSs[ 0 ] );
1279 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1282 //
\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
1283 for i := 1 to ParamCount do begin
1284 MoveToURL(ParamStr(i));
1287 GikoDM.RepaintStatusBar;
1288 StatusBarResize(Sender);
1290 dummy1.Caption := ItemReservPMenu.Caption;
1291 dummy1.Hint := ItemReservPMenu.Hint;
1293 {$IFDEF SPAM_FILTER_ENABLED}
1294 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1295 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1298 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1299 MouseGesture := TMouseGesture.Create;
1300 GikoSys.Setting.Gestures.LoadGesture(
1301 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
1302 MouseGesture.Margin := GikoSys.Setting.Gestures.Margin;
1303 MouseGesture.OnGestureStart := OnGestureStart;
1304 MouseGesture.OnGestureMove := OnGestureMove;
1305 MouseGesture.OnGestureEnd := OnGestureEnd;
1306 if GikoSys.Setting.GestureEnabled then
1307 MouseGesture.SetHook( Handle );
1309 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1310 GikoSys.SetGikoMessage;
1312 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1313 if GikoSys.Setting.AutoLogin then
1314 GikoDM.LoginAction.Execute;
1316 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1318 //
\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è
1319 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1320 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1322 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\8f\89\8aú
\89»
1323 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1325 //
\92u
\8a·
\90Ý
\92è
\83t
\83@
\83C
\83\8b\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1326 ReplaceDM.LoadFromFile(GikoSys.GetReplaceFileName);
1328 //
\83\8c\83X
\83|
\83b
\83v
\83A
\83b
\83v
\8fÁ
\8b\8e\83^
\83C
\83}
\81[
1329 ResPopupClearTimer.Interval := GikoSys.Setting.RespopupWait;
1331 // D&D
\82ð
\8eó
\82¯
\8eæ
\82é
1332 DragAcceptFiles(ListView.Handle, True);
1334 //
\8f\89\8aú
\89»
\82É
\8e¸
\94s
\82µ
\82½
\83\82\83W
\83\85\81[
\83\8b\83`
\83F
\83b
\83N
1335 if (FavoriteDM.AbEnd) then begin
1336 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',
1337 '
\8f\89\8aú
\89»
\88Ù
\8fí');
1343 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1344 procedure TGikoForm.SaveCoolBarSettings;
1347 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1349 SaveMainCoolBarSettings;
1350 SaveBoardCoolBarSettings;
1351 SaveBrowserCoolBarSettings;
1354 procedure TGikoForm.SaveMainCoolBarSettings;
1359 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1360 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1361 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1362 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1363 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1364 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1367 procedure TGikoForm.SaveBoardCoolBarSettings;
1372 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1373 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1374 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1375 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1376 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1377 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1380 procedure TGikoForm.SaveBrowserCoolBarSettings;
1385 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1386 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1387 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1388 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1389 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1390 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1393 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1394 procedure TGikoForm.LoadCoolBarSettings;
1400 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1401 MainCoolBar.Bands.BeginUpdate;
1403 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1404 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1405 CoolSet := GikoSys.Setting.MainCoolSet[i];
1406 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1407 FIsIgnoreResize := rtNone;
1408 SaveCoolBarSettings;
1411 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1412 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1413 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1416 MainCoolBar.Bands.EndUpdate;
1419 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1420 ListCoolBar.Bands.BeginUpdate;
1422 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1423 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1424 CoolSet := GikoSys.Setting.ListCoolSet[i];
1425 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1426 FIsIgnoreResize := rtNone;
1427 SaveCoolBarSettings;
1430 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1431 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1432 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1435 ListCoolBar.Bands.EndUpdate;
1438 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1439 BrowserCoolBar.Bands.BeginUpdate;
1441 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1442 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1443 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1444 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1445 FIsIgnoreResize := rtNone;
1446 SaveCoolBarSettings;
1449 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1450 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1451 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1454 BrowserCoolBar.Bands.EndUpdate;
1459 procedure TGikoForm.FormShow(Sender: TObject);
1463 if FStartUp then begin
1464 ShowWindow(Application.Handle, SW_HIDE);
1466 //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½
1467 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1468 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1469 GikoDM.StdToolBarVisibleActionExecute( nil );
1470 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1471 GikoDM.AddressBarVisibleActionExecute( nil );
1472 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1473 GikoDM.LinkBarVisibleActionExecute( nil );
1474 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1475 GikoDM.ListToolBarVisibleActionExecute( nil );
1476 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1477 GikoDM.ListNameBarVisibleActionExecute( nil );
1478 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1479 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1480 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1481 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1483 // CoolBar
\95\9c\8c³
1484 LoadCoolBarSettings;
1486 //
\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é
1487 // ResetBandInfo( ListCoolBar, ListToolBar );
1488 FIsIgnoreResize := rtNone;
1490 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1491 if GikoSys.Setting.TabAutoLoadSave then begin
1492 GikoDM.TabsOpenAction.Tag := 1;
1493 GikoDM.TabsOpenAction.Execute;
1494 GikoDM.TabsOpenAction.Tag := 0;
1495 if (GikoSys.Setting.LastCloseTabURL <> '') then begin
1496 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( FActiveContent.Browser ), 0 );
1497 if ( FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
1498 while (FActiveContent.Browser.ReadyState <> READYSTATE_COMPLETE) and
1499 (FActiveContent.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
1500 Application.ProcessMessages;
1503 item := BBSsFindThreadFromURL( GikoSys.Setting.LastCloseTabURL );
1504 if (item <> nil) and (item.IsLogFile) then begin
1505 OpenThreadItem(item, item.URL);
1507 GikoSys.Setting.LastCloseTabURL := '';
1511 //ActionList
\82ÌGroupIndex
\82ð
\8c³
\82É
\96ß
\82·
1512 SetGroupIndex(GikoDM.GikoFormActionList);
1518 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1520 // if GikoForm.WindowState <> wsMinimized then
1521 // SaveCoolBarSettings;
1523 if ( GikoSys.Setting.ShowDialogForEnd ) and
1524 (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
1529 GikoSys.Setting.LastCloseTabURL := '';
1530 if GikoSys.Setting.TabAutoLoadSave then begin
1531 GikoDM.TabsSaveAction.Execute;
1532 if (GetActiveContent <> nil) and
1533 (GetActiveContent.IsLogFile) then begin
1534 GikoSys.Setting.LastCloseTabURL := GetActiveContent.URL;
1538 if (SearchDialog <> nil) then begin
1539 if (SearchDialog.Visible) then begin
1543 SearchDialog.Release;
1546 SearchDialog := nil;
1549 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82Ì
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81AEditorForm
\82ð
\95Â
\82¶
\82é
1550 GikoDM.CloseAllEditorAction.Execute;
1552 Application.UnhookMainWindow(Hook);
1553 Application.Terminate;
1556 procedure TGikoForm.FormDestroy(Sender: TObject);
1559 wp : TWindowPlacement;
1562 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1564 if GikoSys.Setting.GestureEnabled then begin
1565 MouseGesture.OnGestureStart := nil;
1566 MouseGesture.OnGestureMove := nil;
1567 MouseGesture.OnGestureEnd := nil;
1570 MouseGesture.UnHook;
1571 // MouseGesture.Free; // Free
\82·
\82é
\82Æ
\82¢
\82¯
\82È
\82¢
\81H
1572 // MouseGesture := nil;
1576 ActiveListColumnSave;
1580 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1581 wp.length := sizeof(wp);
1582 GetWindowPlacement(Handle, @wp);
1583 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1584 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1585 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1586 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1587 GikoSys.Setting.WindowMax := WindowState = wsMaximized;
1589 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1590 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1591 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1592 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1593 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1594 if GikoDM.ArrangeAction.Checked then
1595 GikoSys.Setting.ListOrientation := gloVertical
1597 GikoSys.Setting.ListOrientation := gloHorizontal;
1598 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1603 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1604 if not GikoSys.Setting.ResRangeHold then
1605 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1608 if WindowState <> wsNormal then
1609 WindowState := wsNormal;
1610 SaveCoolBarSettings;
1612 GikoSys.Setting.WriteWindowSettingFile;
1613 GikoSys.Setting.WriteNameMailSettingFile;
1616 //
\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è
1617 //
\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¢
1619 //
\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
1621 //if (GikoForm.WindowState <> wsMinimized) and (GikoForm.WindowState <> wsMaximized) then
1623 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\90Ý
\92è
\82Ì
\95Û
\91¶
1624 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1626 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1628 //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é
1629 //
\8f\89\8aú
\89»
\88Ù
\8fí
\8e\9e\82©
\82ç
\82Ì
\8fI
\97¹
\82Å
\82Í
\95Û
\91¶
\82µ
\82È
\82¢
1630 if not (FavoriteDM.AbEnd) then begin
1631 FavoriteDM.WriteFavorite;
1636 //LockWindowUpdate(Self.Handle);
1638 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1639 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1640 GikoSys.Setting.ShowDialogForAllTabClose := false;
1641 GikoDM.AllTabCloseAction.Execute;
1642 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1646 for i := FBrowsers.Count - 1 downto 0 do begin
1647 TWebBrowser(FBrowsers[i]).Free;
1650 FBrowsers.Capacity := 0;
1655 if BrowserNullTab <> nil then begin
1656 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
1657 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
1659 BrowserNullTab.Free;
1665 TreeView.Items.BeginUpdate;
1666 TreeView.Items.GetFirstNode.Free;
1667 TreeView.Items.Clear;
1668 TreeView.Items.EndUpdate;
1672 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1674 //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
1675 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1679 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
1681 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1693 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶&
\94j
\8aü
1695 RoundList.SaveRoundFile;
1709 FControlThread.Terminate;
1710 FControlThread.WaitFor;
1714 FControlThread.Free;
1716 //
\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é
1717 for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
1718 GikoForm.PlugInMenu.items[i].Free;
1720 GikoForm.PlugInMenu.Clear;
1723 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
1724 // 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Å
1725 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
1726 for i := Length(BoardGroups) - 1 downto 0 do begin
1727 //BoardGroups[i].Clear;
1728 BoardGroups[i].Free;
1732 for i := Length( BBSs ) - 1 downto 0 do begin
1733 if BBSs[ i ] <> nil then
1741 if FEvent <> nil then
1745 if FResPopupBrowser <> nil then begin
1746 TOleControl(FResPopupBrowser).Parent := nil;
1747 FResPopupBrowser.Free;
1753 if FPreviewBrowser <> nil then begin
1754 FPreviewBrowser.Free;
1755 FPreviewBrowser := nil;
1759 //LockWindowUpdate(0);
1762 //
\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
1763 procedure TGikoForm.SetBBSMenu;
1766 item : TBBSMenuItem;
1769 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
1770 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1772 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1773 CabinetSelectPopupMenu.Items[ i ].Free;
1774 CabinetMenu.Items[ i ].Free;
1775 BBSSelectPopupMenu.Items[ i ].Free;
1781 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
1782 for i := Length( BBSs ) - 1 downto 0 do begin
1784 item := TBBSMenuItem.Create( PopupMenu );
1785 item.Caption := BBSs[ i ].Title;
1786 item.Data := BBSs[ i ];
1787 item.OnClick := BBSMenuItemOnClick;
1788 CabinetSelectPopupMenu.Items.Insert( 0, item );
1789 item := TBBSMenuItem.Create( PopupMenu );
1790 item.Caption := BBSs[ i ].Title;
1791 item.Data := BBSs[ i ];
1792 item.OnClick := BBSMenuItemOnClick;
1793 CabinetMenu.Insert( 0, item );
1794 item := TBBSMenuItem.Create( PopupMenu );
1795 item.Caption := BBSs[ i ].Title;
1796 item.Data := BBSs[ i ];
1797 item.OnClick := BBSMenuItemOnClick;
1798 BBSSelectPopupMenu.Items.Insert( 0, Item );
1805 procedure TGikoForm.ReloadBBS;
1810 LockWindowUpdate(Self.Handle);
1812 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1813 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1814 GikoSys.Setting.ShowDialogForAllTabClose := false;
1815 GikoDM.AllTabCloseAction.Execute;
1816 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1817 SetContent(BrowserNullTab);
1818 //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
1819 TreeView.Items.Clear;
1821 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1823 RoundList.SaveRoundFile;
1826 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
1832 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1834 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1839 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1841 FavoriteDM.WriteFavorite;
1846 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
1847 for i := Length(BoardGroups) - 1 downto 0 do begin
1849 BoardGroups[i].Free;
1855 for i := Length( BBSs ) - 1 downto 0 do begin
1856 if BBSs[ i ] <> nil then
1865 FTreeType := gttNone;
1867 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
1869 //
\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Æ)
1870 InitializeBoardPlugIns;
1872 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1874 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1875 for i := Length(BBSs) - 1 downto 0 do begin
1876 if not BBSs[i].IsBoardFileRead then
1877 GikoSys.ReadBoardFile(BBSs[i]);
1880 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
1883 ShowBBSTree( BBSs[ 0 ] );
1885 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1886 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1887 TreeView, FTreeType);
1889 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1890 FavoriteDM.ReadFavorite;
1894 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1895 RoundList.LoadRoundBoardFile;
1896 RoundList.LoadRoundThreadFile;
1898 LockWindowUpdate(0);
1902 \todo
\89½
\8cÌ IE 7
\82Å
\82Í about:..
\82É
\82È
\82é
\82Ì
\82©
1903 (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©)
1904 \92²
\8d¸
\82·
\82é
\82±
\82Æ
1906 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1914 threadItem : TThreadItem;
1916 Protocol, Host, Path, Document, Port, Bookmark: string;
1921 ActiveFileName: string;
1926 cResPopup: TResPopupBrowser;
1928 //
\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ª
1929 // 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è)
1930 if Pos('about:..', Text) = 1 then
1931 Text2 := 'about:blank..' + Copy( Text, Length('about:..')+1, Length(Text) )
1934 if not( TObject(Sender) is TWebBrowser )then
1938 if (TWebBrowser(Sender) <> nil) and (not TWebBrowser(Sender).Busy) and (Assigned(TWebBrowser(Sender).Document)) then begin
1939 if LowerCase(OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset) <> 'shift_jis' then begin
1940 OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset := 'shift_jis';
1947 if PreviewTimer.Enabled then
1948 PreviewTimer.Enabled := False;
1949 Application.CancelHint;
1951 if GetActiveContent <> nil then
1952 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
1954 ActiveFileName := '';
1956 FActiveContent := nil;
1959 //
\91O
\89ñ
\82Æ
\93¯
\82¶
\8fê
\8d\87\8fI
\97¹
1960 if (StatusBar.Panels[1].Text = Text2) then begin
1961 if Text2 = '' then begin
1962 if FResPopupBrowser <> nil then begin
1963 if not(Sender is TResPopupBrowser) then
1964 FResPopupBrowser.Clear
1966 TResPopupBrowser(Sender).ChildClear;
1972 StatusBar.Panels[1].Text := Text2;
1975 if FPreviewBrowser <> nil then
1976 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1978 if FResPopupBrowser <> nil then begin
1979 if not(Sender is TResPopupBrowser) then begin
1980 if (FResPopupBrowser.Visible) then begin
1981 if ResPopupClearTimer.Interval > 0 then begin
1982 ResPopupClearTimer.Enabled := True;
1983 ResPopupClearTimer.Tag := 0;
1985 FResPopupBrowser.Clear;
1989 if ResPopupClearTimer.Interval > 0 then begin
1990 ResPopupClearTimer.Enabled := True;
1991 ResPopupClearTimer.Tag := 1;
1993 TResPopupBrowser(Sender).ChildClear;
1999 if not(Sender is TResPopupBrowser) then
2000 if not GikoSys.Setting.UnActivePopup then
2001 if not GikoForm.Active then
2006 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
2007 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
2010 Ext := AnsiLowerCase(ExtractFileExt(Text2));
2011 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
2012 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) then begin
2013 if FPreviewBrowser = nil then begin
2014 FPreviewBrowser := TPreviewBrowser.Create(Self);
2015 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2016 TOleControl(FPreviewBrowser).Parent := nil;
2018 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
2019 FPreviewURL := Text2;
2020 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
2021 PreviewTimer.Enabled := True;
2022 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
2023 if (Pos('mailto:', Text2) = 1) and (GikoSys.Setting.RespopupMailTo) then begin
2024 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
2025 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
2027 p.x := p.x - TWebBrowser(Sender).ClientOrigin.x;
2028 p.y := p.y - TWebBrowser(Sender).ClientOrigin.y;
2029 e := IHTMLDocument2(TWebBrowser(Sender).Document).elementFromPoint(p.x, p.y);
2030 if (Assigned(e)) then begin
2031 CreateResPopupBrowser;
2033 if not(Sender is TResPopupBrowser) then begin
2034 if (FResPopupBrowser.Visible) then begin
2035 FResPopupBrowser.Clear;
2038 TResPopupBrowser(Sender).ChildClear;
2041 cResPopup := FResPopupBrowser.CreateNewBrowser;
2042 tmp2 := ZenToHan(e.Get_outerText);
2043 if (GikoSys.IsNumeric(tmp2)) then begin
2044 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
2045 wkIntSt := StrToInt64(tmp2);
2046 wkIntTo := StrToInt64(tmp2);
2047 cResPopup.PopupType := gptThread;
2048 HTMLCreater.SetResPopupText(cResPopup, GetActiveContent(true), wkIntSt, wkIntTo, False, False);
2050 cResPopup.PopupType := gptRaw;
2051 cResPopup.Title := s;
2055 CreateResPopupBrowser;
2057 if not(Sender is TResPopupBrowser) then begin
2058 if (FResPopupBrowser.Visible) then begin
2059 FResPopupBrowser.Clear;
2062 TResPopupBrowser(Sender).ChildClear;
2065 threadItem := GetActiveContent(true);
2066 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
2067 PathRec := Gikosys.Parse2chURL2(URL);
2068 if (PathRec.FNoParam) then begin
2072 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
2074 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
2076 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
2078 URL := GikoSys.GetBrowsableThreadURL( URL );
2079 wkIntSt := PathRec.FSt;
2080 wkIntTo := PathRec.FTo;
2082 if (wkIntSt = 0) and (wkIntTo = 0) then begin
2085 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
2087 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
2089 end else if wkIntSt > wkIntTo then begin
2094 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
2099 threadItem := BBSsFindThreadFromURL( URL );
2101 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
2102 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
2103 if board <> nil then begin
2104 if not board.IsThreadDatRead then
2105 GikoSys.ReadSubjectFile( board );
2106 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
2110 if threadItem <> nil then begin
2111 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
2112 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
2113 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
2117 cResPopup := FResPopupBrowser.CreateNewBrowser;
2118 cResPopup.PopupType := gptThread;
2119 HTMLCreater.SetResPopupText(cResPopup, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
2123 if (cResPopup <> nil) then begin
2124 ResPopupClearTimer.Enabled := False;
2126 if cResPopup.PopupType = gptRaw then begin
2127 if cResPopup.Title <> '' then begin
2128 cResPopup.TitlePopup;
2131 if cResPopup.RawDocument <> '' then begin
2133 end else if cResPopup.Title <> '' then begin
2134 cResPopup.TitlePopup;
2141 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2145 FEnabledCloseButton := Enabled;
2146 SysMenu := GetSystemMenu(Handle, False);
2148 if Enabled then begin
2149 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2151 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2154 DrawMenuBar(Handle);
2157 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2158 var AllowChange: Boolean);
2160 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
2161 // if FTreeType = gtt2ch then
2162 // FSortIndex := -1;
2165 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2166 Shift: TShiftState);
2170 if GetActiveList is TBoard then begin
2172 VK_BACK:; // UpFolderButtonClick(Sender);
2173 VK_SPACE: ListDoubleClick(Shift);
2174 VK_RETURN: ListClick;
2177 if ListView.Selected <> nil then begin
2178 pos.X := ListView.Column[ 0 ].Width;
2179 pos.Y := ListView.Selected.Top;
2181 pos.X := ListView.Left;
2182 pos.Y := ListView.Top;
2184 Windows.ClientToScreen( ListView.Handle, pos );
2185 ListPopupMenu.Popup( pos.X, pos.Y );
2188 end else begin // TBBS, TCategory
2190 VK_BACK:; // UpFolderButtonClick(Sender);
2191 VK_SPACE: ListClick;
2192 VK_RETURN: ListDoubleClick(Shift);
2195 if ListView.Selected <> nil then begin
2196 pos.X := ListView.Column[ 0 ].Width;
2197 pos.Y := ListView.Selected.Top;
2199 pos.X := ListView.Left;
2200 pos.Y := ListView.Top;
2202 Windows.ClientToScreen( ListView.Handle, pos );
2203 ListPopupMenu.Popup( pos.X, pos.Y );
2209 function TGikoForm.GetHttpState: Boolean;
2211 Result := FHttpState;
2214 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2215 Column: TListColumn);
2219 vSortIndex : Integer;
2220 vSortOrder : Boolean;
2222 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2223 if TObject( FActiveList ) is TBBS then begin
2224 orderList := GikoSys.Setting.BBSColumnOrder;
2225 vSortIndex := GikoSys.Setting.BBSSortIndex;
2226 vSortOrder := GikoSys.Setting.BBSSortOrder;
2227 end else if TObject( FActiveList ) is TCategory then begin
2228 orderList := GikoSys.Setting.CategoryColumnOrder;
2229 vSortIndex := GikoSys.Setting.CategorySortIndex;
2230 vSortOrder := GikoSys.Setting.CategorySortOrder;
2231 end else if TObject( FActiveList ) is TBoard then begin
2232 orderList := GikoSys.Setting.BoardColumnOrder;
2233 vSortIndex := GikoSys.Setting.BoardSortIndex;
2234 vSortOrder := GikoSys.Setting.BoardSortOrder;
2238 id := Integer( orderList[ idx ] );
2241 if vSortIndex = id then
2242 vSortOrder := not vSortOrder
2244 vSortOrder := id = 0;
2247 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2250 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2251 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2255 DefaultDraw := True;
2256 //
\82È
\82º
\82©
\96³
\8fð
\8c\8f\82ÅExit
\82µ
\82Ä
\82¢
\82é
2258 DefaultDraw := False;
2259 if (cdsSelected in State) or (cdsHot in State) then begin
2260 Sender.Canvas.Brush.Color := clHighlight;
2261 Sender.Canvas.Font.Color := clHighlightText;
2263 Sender.Canvas.Brush.Color := clBtnFace;
2264 Sender.Canvas.Font.Color := clBtnText;
2266 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2267 Sender.Canvas.FillRect(ARect);
2268 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2271 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2276 Nodes := TreeView.Items;
2278 for i := 0 to Nodes.Count - 1 do begin
2279 if Nodes.Item[i].Data = Data then begin
2280 Result := Nodes.Item[i];
2287 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2288 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2289 Headers: OleVariant; var Cancel: WordBool);
2294 kMenuName: string = 'menu:';
2299 if Pos(kMenuName, URL) <> 0 then begin
2300 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2302 if not GikoSys.IsNumeric(sNo) then Exit;
2306 KokoPopupMenu.PopupComponent := nil;
2307 if (Sender is TComponent) then
2308 KokoPopupMenu.PopupComponent := TComponent(Sender);
2309 KokoPopupMenu.Tag := StrToInt(sNo);
2310 KokoPopupMenu.Popup(p.x, p.y);
2311 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2312 Cancel := not GikoSys.Setting.OpenMailer;
2317 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2318 const ARect: TRect; var DefaultDraw: Boolean);
2322 IsBoardNode: Boolean;
2328 Category: TCategory;
2332 DefaultDraw := True;
2334 if FTreeType = gttHistory then Exit;
2336 TreeView.Canvas.Font.Color := clBlue;
2337 IsBoardNode := False;
2338 for i := 0 to TreeView.Items.Count - 1 do begin
2340 if not TreeView.Items[i].IsVisible then
2343 if TObject(TreeView.Items[i].Data) is TCategory then begin
2344 if TreeView.Items[i].Expanded then
2347 IsBoardNode := False;
2348 Category := TCategory(TreeView.Items[i].Data);
2349 for j := 0 to Category.Count - 1 do begin
2350 Board := Category.Items[j];
2351 if Board <> nil then begin
2352 if Board.UnRead > 0 then begin
2360 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2361 IsBoardNode := True;
2362 Board := TBoard(TreeView.Items[i].Data);
2364 Cnt := Board.UnRead;
2370 Bitmap := TBitmap.Create;
2372 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2373 Bitmap.Canvas.Font.Style := [fsBold];
2374 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2379 NodeRect := TreeView.Items[i].DisplayRect(True);
2382 CntText := '(' + IntToStr(Cnt) + ')'
2383 else if Cnt = 1 then
2387 TextWidth := TreeView.Canvas.TextWidth(CntText);
2389 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2391 NodeRect.Left + NodeWidth + TextWidth + 8,
2393 DrawText(TreeView.Canvas.Handle,
2397 DT_SINGLELINE or DT_VCENTER);
2399 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2402 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2403 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2406 Category: TCategory;
2409 DefaultDraw := True;
2411 if FTreeType = gttHistory then Exit;
2413 TreeView.Canvas.Font.Style := [];
2414 if Node <> nil then begin
2415 if TObject(Node.Data) is TCategory then begin
2416 Category := TCategory(Node.Data);
2417 for i := 0 to Category.Count - 1 do begin
2418 Board := Category.Items[i];
2419 if Board <> nil then begin
2420 if Board.UnRead > 0 then begin
2421 TreeView.Canvas.Font.Style := [fsBold];
2426 end else if TObject(Node.Data) is TBoard then begin
2427 Board := TBoard(Node.Data);
2428 if Board.UnRead > 0 then
2429 TreeView.Canvas.Font.Style := [fsBold];
2434 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2436 TreeView.Invalidate;
2438 if TObject(Node.Data) is TBBS then begin
2439 TBBS(Node.Data).NodeExpand := True;
2440 end else if TObject(Node.Data) is TCategory then begin
2441 TCategory(Node.Data).NodeExpand := True;
2442 end else if TObject(Node.Data) is TBoard then begin
2443 TBoard(Node.Data).NodeExpand := True;
2447 procedure TGikoForm.ListViewAllSelect;
2452 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2454 AddMessageList(Msg, nil, Icon);
2456 // *************************************************************************
2457 //!
\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
2458 // *************************************************************************
2459 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2463 boardPlugIn : TBoardPlugIn;
2468 if Item.DownType = gdtBoard then
2469 ATitle := Item.Board.Title
2471 ATitle := Item.ThreadItem.Title;
2473 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2475 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2477 if Item.DownType = gdtBoard then begin
2480 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2481 if GetActiveList = Item.Board then begin
2483 //
\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é
2484 if (GikoSys.Setting.AutoSortThreadList) then begin
2485 GikoSys.Setting.BoardSortIndex := 0;
2486 GikoSys.Setting.BoardSortOrder := True;
2488 Sort.SetSortDate(Now());
2489 SetActiveList(Item.Board);
2491 Item.Board.Modified := True;
2492 Item.Board.IsThreadDatRead := True;
2495 end else if Item.DownType = gdtThread then begin
2498 Item.ThreadItem.NewArrival := True;
2499 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2500 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2501 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2502 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2503 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2504 Item.ThreadItem.Title := Res.FTitle;
2505 ATitle := Item.ThreadItem.Title;
2506 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2507 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2508 ATitle := Res.FTitle;
2510 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2511 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2512 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2516 if GikoSys.Setting.BrowserTabVisible then begin
2517 if GetActiveContent = Item.ThreadItem then
2518 InsertBrowserTab(Item.ThreadItem)
2519 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2520 InsertBrowserTab(Item.ThreadItem, True)
2522 InsertBrowserTab(Item.ThreadItem, False);
2525 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2526 InsertBrowserTab(Item.ThreadItem);
2529 Application.ProcessMessages;
2531 if Item.State = gdsComplete then begin
2533 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2537 PlaySound('NewDiff');
2538 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2543 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2544 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2545 Item.ThreadItem.Round := False;
2546 //Item.ThreadItem.RoundName := '';
2547 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);
2550 //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
2551 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
2552 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
2553 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
2554 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
2555 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
2556 case GikoForm.ViewType of
2557 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
2558 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
2559 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
2560 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
2561 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
2562 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
2565 RefreshListView(Item.ThreadItem);
2568 end else if Item.State = gdsNotModify then begin
2570 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2571 //SetContent(Item.ThreadItem);
2572 InsertBrowserTab(Item.ThreadItem);
2574 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2575 PlaySound('NoChange');
2576 Screen.Cursor := crDefault;
2577 end else if Item.State = gdsAbort then begin
2579 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2580 end else if Item.State = gdsError then begin
2585 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2586 // if Item.ResponseCode = 302 then
2587 // 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);
2593 if FWorkCount < 0 then FWorkCount := 0;
2594 if FWorkCount = 0 then begin
2596 Animate.Active := False;
2598 Screen.Cursor := crDefault;
2605 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2607 // SetProgressValue(Number, 0, AWorkCountMax);
2608 // ProgressBar.Visible := True;
2609 ProgressBar.Position := 0;
2610 ProgressBar.Max := AWorkCountMax;
2611 FDownloadTitle := AWorkTitle;
2612 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2613 FDownloadMax := AWorkCountMax;
2616 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2618 ProgressBar.Position := 0;
2619 if FDownloadMax <> 0 then
2620 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2623 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2625 ProgressBar.Position := AWorkCount;
2626 // SetProgressValue(Number, AWorkCount);
2627 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2630 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2632 ListItem: TListItem;
2634 MessageListView.Items.BeginUpdate;
2636 ListItem := MessageListView.Items.Add;
2637 ListItem.Caption := ACaption;
2638 ListItem.Data := AObject;
2639 ListItem.MakeVisible(False);
2641 gmiOK: ListItem.ImageIndex := 0;
2642 gmiSAD: ListItem.ImageIndex := 1;
2643 gmiNG: ListItem.ImageIndex := 2;
2644 gmiWhat: ListItem.ImageIndex := 3;
2647 MessageListView.Items.EndUpdate;
2651 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
2652 procedure TGikoForm.ReleaseOldestBrowser;
2656 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2657 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2658 TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2659 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2665 function TGikoForm.InsertBrowserTab(
2666 ThreadItem : TThreadItem;
2667 ActiveTab : Boolean = True
2670 i, j, idx : Integer;
2671 favItem : TFavoriteThreadItem;
2672 newBrowser : TBrowserRecord;
2677 if Threaditem = nil then Exit;
2679 if ThreadItem.IsLogFile then begin
2680 //
\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é
2681 //
\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é
2682 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2683 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2684 j := FBrowsers.IndexOf(FActiveContent.Browser);
2685 if j = BROWSER_COUNT - 1 then
2686 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2688 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2689 if not FHistoryList.AddHistory( favItem, TreeView, FTreeType ) then
2692 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2693 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2694 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2695 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2696 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2697 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2698 ReleaseOldestBrowser;
2699 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2700 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2701 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2703 if ActiveTab then begin
2704 BrowserTab.TabIndex := i;
2705 BrowserTab.OnChange(nil);
2712 idx := BrowserTab.TabIndex;
2713 newBrowser := TBrowserRecord.Create;
2714 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2715 ReleaseOldestBrowser;
2716 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2717 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2718 newBrowser.thread := ThreadItem;
2719 newBrowser.Repaint := true;
2721 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2722 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2723 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2724 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2728 if ActiveTab then begin
2729 BrowserTab.TabIndex := 0;
2731 end else if GikoSys.Setting.BrowserTabAppend = gtaLast then begin
2732 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2733 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2734 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2738 if ActiveTab then begin
2739 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2740 BrowserTab.TabIndex := 0
2742 BrowserTab.TabIndex := i;
2745 //
\83^
\83u
\88Ê
\92u
\82ð
\8eæ
\93¾
2747 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2748 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2749 TWebBrowser(FBrowsers[1]) then begin
2754 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2757 //
\83^
\83u
\82ª
\96³
\82¢
\82Æ
\82«
\82È
\82Ç
\91Î
\8dô
2758 if (ins < 0) then begin
2761 BrowserTab.Tabs.InsertObject(ins, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2762 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2763 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2764 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2766 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2771 if ActiveTab then begin
2772 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2773 BrowserTab.TabIndex := 0
2775 BrowserTab.TabIndex := ins;
2778 Result := newBrowser;
2779 if(ActiveTab) or (idx = -1) then begin
2780 BrowserTab.OnChange(nil);
2783 if BrowserNullTab = nil then begin
2784 BrowserNullTab := TBrowserRecord.Create;
2785 BrowserNullTab.Browser := Browser;
2787 // if BrowserNullTab.thread <> ThreadItem then begin
2788 // BrowserNullTab.Movement := '';
2790 BrowserNullTab.thread := ThreadItem;
2791 Result := BrowserNullTab;
2792 BrowserTab.TabIndex := -1;
2793 SetContent(BrowserNullTab);
2796 if GikoSys.Setting.URLDisplay then
2797 AddressComboBox.Text := ThreadItem.URL;
2801 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2809 ThreadItem: TThreadItem;
2810 Thread: TBrowserRecord;
2811 ThreadTitle, ThreadPTitle: string;
2812 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2815 idx := BrowserTab.TabIndex;
2816 if (not FStartUp) and
2817 (FActiveContent <> nil) and
2818 (FActiveContent.Thread <> Thread.Thread) and
2819 (FActiveContent.Browser <> nil) and
2820 (Assigned(FActiveContent.Browser.Document)) then begin
2823 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document).Body).ScrollTop;
2826 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2831 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2832 Thread.Browser.Navigate(BLANK_HTML);
2833 BrowserBoardNameLabel.Caption := '';
2834 ItemBoardImage.Picture := nil;
2835 BrowserNameLabel.Caption := '';
2836 ItemImage.Picture := nil;
2837 BrowserNullTab.Thread := nil;
2838 //TOleControl(BrowserNullTab.Browser).Visible := true;
2839 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2840 FActiveContent := nil;
2842 end else if Thread.Browser = nil then begin
2843 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2844 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2845 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2846 ReleaseOldestBrowser;
2847 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2848 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2851 ThreadTitle := Thread.Thread.Title;
2852 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2853 //ThreadScrollTop := Thread.Thread.ScrollTop;
2854 if Thread.Thread.IsLogFile then begin
2855 if not FileExists(Thread.Thread.GetThreadFileName) then begin
2856 Thread.Thread.DeleteLogFile;
2860 ThreadIsLog := Thread.Thread.IsLogFile;
2861 ThreadItem := Thread.Thread;
2862 ThreadNewArraical := Thread.Thread.NewArrival;
2863 //ThreadUnRead := Thread.Thread.UnRead;
2864 BBSID := ThreadItem.ParentBoard.BBSID;
2865 FileName := ThreadItem.FileName;
2867 if GetCapture = ListView.Handle then
2870 Screen.Cursor := crHourGlass;
2874 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2875 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2876 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2878 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2879 if (not Assigned(Thread.Browser.Document)) then begin
2880 Thread.Browser.Navigate('about:blank');
2882 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2883 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2884 Application.ProcessMessages;
2885 if idx <> BrowserTab.TabIndex then begin
2890 if (Thread <> nil) and (ThreadItem <>nil) then begin
2891 BrowserBoardNameLabel.Caption := ThreadPTitle;
2892 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2893 BrowserNameLabel.Caption := ThreadTitle;
2894 ItemImage.Picture := nil;
2896 if ThreadNewArraical then
2897 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
2899 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
2901 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
2903 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
2904 BrowserNameLabel.Left := ItemImage.Left + 20;
2907 //ActiveContent
\81@
\82Ì
\8dX
\90V
2908 FActiveContent := Thread;
2910 if not ThreadIsLog then begin
2911 Self.Caption := GikoDataModule.CAPTION_NAME ;
2912 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\8fÁ
\8b\8e
2913 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
2915 Thread.Browser.BringToFront;
2916 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
2917 doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
2919 doc.charset := 'Shift_JIS';
2926 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
2927 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\95\
\8e¦
2928 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
2929 StatusBar.Panels[THREADSIZE_PANEL].Width :=
2930 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
2931 //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«
2932 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
2933 if Thread.Repaint then begin
2934 Thread.Repaint := false;
2936 Thread.Browser.OnStatusTextChange := nil;
2937 LockWindowUpdate(Thread.Browser.ParentWindow);
2938 HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
2939 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
2940 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
2944 RefreshListView(ThreadItem);
2946 Screen.Cursor := crDefault;
2950 function TGikoForm.GetActiveContent(popup :Boolean = false): TThreadItem;
2953 if FActiveContent <> nil then begin
2954 Result := FActiveContent.Thread;
2956 (FResPopupBrowser <> nil) and (FResPopupBrowser.CurrentBrowser.Visible = True) then
2957 if (FResPopupBrowser.CurrentBrowser.Thread <> nil) then begin
2958 Result := FResPopupBrowser.CurrentBrowser.Thread;
2968 procedure TGikoForm.SetActiveList(Obj: TObject);
2972 // if FActiveList <> Obj then begin
2975 if ListView.Selected <> nil then
2976 idx := ListView.Selected.Index
2982 ListView.Items.Count := 0;
2983 ListView.Items.Clear;
2984 ListView.Selected := nil;
2985 // ListView.Columns.Clear;
2986 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
2987 and (FActiveContent.Thread.IsLogFile) then begin
2989 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
2991 on E: Exception do begin
2992 //
\83X
\83\8c\88ê
\97\97DL
\8cã
\82È
\82Ç
\82ÉFActiveContent
\82Ì
\8e\9d\82ÂThread
\82ª
2993 //
\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é
2994 ReleaseBrowser(FActiveContent);
2995 FActiveContent.Thread := nil;
2996 Self.Caption := GikoDataModule.CAPTION_NAME;
3000 Self.Caption := GikoDataModule.CAPTION_NAME;
3001 //Application.Title := CAPTION_NAME;
3003 // ActiveListColumnSave;
3005 Screen.Cursor := crHourGlass;
3007 if Obj is TBBS then begin
3008 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3009 end else if Obj is TCategory then begin
3010 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3011 end else if Obj is TBoard then begin
3012 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3015 Screen.Cursor := crDefault;
3018 if idx >= 0 then begin
3019 if idx >= ListView.Items.Count then
3020 idx := ListView.Items.Count - 1;
3021 ListView.ItemIndex := idx;
3022 ListView.ItemFocused := ListView.Items.Item[ idx ];
3028 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
3029 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
3030 function TGikoForm.GetActiveList: TObject;
3032 Result := FActiveList;
3035 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
3037 SetListViewType(AViewType, '', False);
3040 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
3045 for i := Length( BBSs ) - 1 downto 0 do begin
3046 BBSs[i].SelectText := SelectText;
3047 BBSs[i].KubetsuChk := KubetsuChk;
3049 ViewType := AViewType;
3050 if ActiveList is TBoard then begin
3051 Board := TBoard(ActiveList);
3053 //gvtAll: ListView.Items.Count := Board.Count;
3054 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
3055 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
3056 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
3057 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
3058 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
3062 SetActiveList(Board);
3066 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
3067 const ARect: TRect; var DefaultDraw: Boolean);
3073 if ListView.Items.Count = 0 then begin
3074 DefaultDraw := true;
3075 ListView.Canvas.Brush.Color := ListView.Color;
3076 ListView.Canvas.FillRect(ARect);
3080 ListView.Canvas.Font.Color := clWindowText;
3081 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3084 ListView.Canvas.Font.Color := clBlue;
3085 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';
3088 ListView.Canvas.Font.Color := clGreen;
3089 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3092 ListView.Canvas.Font.Color := clFuchsia;
3093 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';
3096 ListView.Canvas.Font.Color := clMaroon;
3097 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90¶
\91¶
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3100 ListView.Canvas.Font.Color := clNavy;
3101 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';
3102 if GetActiveList is TBoard then
3103 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
3111 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
3112 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
3113 ListView.Canvas.TextOut(p.X, p.Y, s);
3115 DefaultDraw := True;
3119 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
3121 Item: TDownloadItem;
3123 if not Board.IsThreadDatRead then
3124 GikoSys.ReadSubjectFile(Board);
3125 Item := TDownloadItem.Create;
3127 Item.Board := Board;
3128 Item.DownType := gdtBoard;
3129 Item.ForceDownload := ForceDownload;
3130 FControlThread.AddItem(Item);
3131 if FWorkCount = 0 then begin
3133 Animate.Active := True;
3136 Screen.Cursor := crAppStart;
3144 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
3146 Item: TDownloadItem;
3148 Item := TDownloadItem.Create;
3150 Item.ThreadItem := ThreadItem;
3151 Item.DownType := gdtThread;
3152 Item.ForceDownload := ForceDownload;
3153 FControlThread.AddItem(Item);
3154 if FWorkCount = 0 then begin
3156 Animate.Active := True;
3159 Screen.Cursor := crAppStart;
3167 procedure TGikoForm.PlaySound(SoundEventName: string);
3171 if not GikoSys.Setting.Mute then begin
3172 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
3173 if FileExists(FileName) then begin
3174 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
3175 sndPlaySound(nil, SND_SYNC);
3176 Application.ProcessMessages;
3178 sndPlaySound(PChar(FileName), SND_ASYNC);
3184 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
3185 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3187 FHistoryList.DeleteHistory( threadItem, TreeView, TreeType );
3190 procedure TGikoForm.ShowBBSTreeOld(
3198 FavoriteTreeView.Visible := False;
3199 FavoriteToolBar.Hide;
3200 TreeView.Visible := True;
3202 b := CabinetSelectPopupMenu.Items.Count - 1;
3203 for i := 0 to b do begin
3204 item := CabinetSelectPopupMenu.Items[ i ];
3205 if item is TBBSMenuItem then begin
3206 if TBBSMenuItem( item ).Data = inBBS then begin
3207 item.Checked := True;
3208 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3209 CabinetMenu.Items[ i ].Checked := True;
3210 GikoSys.Setting.CabinetIndex := i;
3214 item.Checked := False;
3215 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3216 CabinetMenu.Items[ i ].Checked := False;
3218 CabinetSelectToolButton.Caption := inBBS.Title;
3220 GikoDM.CabinetHistoryAction.Checked := False;
3221 GikoDM.CabinetFavoriteAction.Checked := False;
3223 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3224 FTreeType := gtt2ch;
3225 HistoryToolBar.Hide;
3226 FActiveBBS := inBBS;
3227 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3228 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3229 //?c???[??g?b?v?????I????
3230 if GetActiveList = nil then
3231 TreeView.Selected := TreeView.Items[0]
3233 for i := 0 to TreeView.Items.Count - 1 do begin
3234 if TreeView.Items[i].Data = GetActiveList then begin
3235 TreeView.Selected := TreeView.Items[i];
3239 TreeView.Selected := TreeView.Items[0]
3247 procedure TGikoForm.ShowBBSTree(
3256 FavoriteTreeView.Visible := False;
3257 FavoriteToolBar.Hide;
3258 TreeView.Visible := True;
3260 b := CabinetSelectPopupMenu.Items.Count - 1;
3261 for i := 0 to b do begin
3262 item := CabinetSelectPopupMenu.Items[ i ];
3263 if item is TBBSMenuItem then begin
3264 if TBBSMenuItem( item ).Data = inBBS then begin
3265 item.Checked := True;
3266 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3267 CabinetMenu.Items[ i ].Checked := True;
3268 GikoSys.Setting.CabinetIndex := i;
3272 item.Checked := False;
3273 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3274 CabinetMenu.Items[ i ].Checked := False;
3276 CabinetSelectToolButton.Caption := inBBS.Title;
3278 GikoDM.CabinetHistoryAction.Checked := False;
3279 GikoDM.CabinetFavoriteAction.Checked := False;
3281 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3282 or (not (CabinetPanel.Visible)) then begin
3283 FTreeType := gtt2ch;
3284 HistoryToolBar.Hide;
3285 FActiveBBS := inBBS;
3286 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3287 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3288 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3289 if GetActiveList = nil then begin
3291 TreeClick( TreeView.Items[0] );
3295 for i := 0 to TreeView.Items.Count - 1 do begin
3296 if TreeView.Items[i].Data = GetActiveList then begin
3297 TreeClick( TreeView.Items[i] );
3301 TreeClick( TreeView.Items[0] );
3309 procedure TGikoForm.ShowHistoryTree;
3314 if CabinetPanel.Visible then begin
3315 if FTreeType = gttHistory then begin
3316 CabinetVisible( False );
3317 GikoDM.CabinetHistoryAction.Checked := False;
3319 GikoDM.CabinetHistoryAction.Checked := True;
3322 CabinetVisible( True );
3323 GikoDM.CabinetHistoryAction.Checked := True;
3326 // BBS...BBS, History, Favorite
3327 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3329 FavoriteTreeView.Visible := False;
3330 TreeView.Visible := True;
3332 GikoDM.CabinetBBSAction.Checked := False;
3333 GikoDM.CabinetFavoriteAction.Checked := False;
3335 if FTreeType <> gttHistory then begin
3336 b := CabinetSelectPopupMenu.Items.Count - 1;
3337 for i := 0 to b do begin
3338 item := CabinetSelectPopupMenu.Items[ i ];
3339 if item is TBBSMenuItem then begin
3340 item.Checked := False;
3341 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3342 CabinetMenu.Items[ i ].Checked := False;
3346 FTreeType := gttHistory;
3347 HistoryToolBar.Show;
3348 FavoriteToolBar.Hide;
3349 FHistoryList.SetTreeNode( TreeView );
3350 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3354 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3356 ChangeEvent: TTVChangedEvent;
3357 ChangingEvent: TTVChangingEvent;
3361 if Item is TCategory then
3362 bbs := TCategory( Item ).ParenTBBS
3363 else if Item is TBoard then
3364 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3368 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3369 if Item <> FActiveList then begin
3371 ChangingEvent := nil;
3373 if not CallEvent then begin
3374 ChangeEvent := TreeView.OnChange;
3375 ChangingEvent := TreeView.OnChanging;
3378 if not CallEvent then begin
3379 TreeView.OnChange := nil;
3380 TreeView.OnChanging := nil;
3382 //Application.ProcessMessages;
3383 for i := 0 to TreeView.Items.Count - 1 do begin
3384 if TreeView.Items[i].Data = Item then begin
3385 TreeView.Items[i].Selected := True;
3387 TreeClick(TreeView.Items[i]);
3391 //Application.ProcessMessages;
3393 if not CallEvent then begin
3394 TreeView.OnChange := ChangeEvent;
3395 TreeView.OnChanging := ChangingEvent;
3400 if Item <> FActiveList then begin
3401 ActiveListColumnSave;
3402 if (Item is TBBS) or (Item is TCategory) then begin
3403 ListView.Columns.Clear;
3404 SetActiveList( Item );
3405 end else if Item is TBoard then begin
3406 if not TBoard( Item ).IsThreadDatRead then begin
3407 Screen.Cursor := crHourGlass;
3409 if not TBoard( Item ).IsThreadDatRead then
3410 GikoSys.ReadSubjectFile(TBoard( Item ));
3412 Screen.Cursor := crDefault;
3415 Sort.SetSortDate(Now());
3416 SetActiveList( Item );
3421 if Item is TBoard then begin // not TCategory
3422 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3423 if GikoSys.Setting.ListWidthState = glsMax then begin
3424 GikoDM.BrowserMinAction.Execute;
3425 if GikoForm.Visible then
3429 if GikoSys.Setting.ListHeightState = glsMax then begin
3430 GikoDM.BrowserMinAction.Execute;
3431 if GikoForm.Visible then
3438 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3439 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3441 listItem : TListItem;
3442 threadItem : TThreadItem;
3449 if not (GetActiveList is TBoard) then Exit;
3450 listItem := ListView.GetItemAt( X, Y );
3451 if listItem = nil then Exit;
3452 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3454 threadItem := TThreadItem(ListItem.Data);
3455 InsertBrowserTab(threadItem, False);
3456 if threadItem.IsLogFile then
3457 ListView.UpdateItems(listItem.Index, listItem.Index);
3461 //
\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Å
3462 if (ssDouble in Shift) then
3463 ListDoubleClick(Shift)
3471 Windows.ClientToScreen( ListView.Handle, pos );
3472 ListPopupMenu.Popup( pos.X, pos.Y );
3478 procedure TGikoForm.ListClick;
3480 ListItem: TListItem;
3481 ThreadItem: TThreadItem;
3483 if ListView.SelCount <> 1 then Exit;
3484 ListItem := ListView.Selected;
3485 if ListItem = nil then Exit;
3486 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3488 ThreadItem := TThreadItem(ListItem.Data);
3489 if ThreadItem.IsLogFile then begin
3490 InsertBrowserTab(ThreadItem);
3491 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3493 InsertBrowserTab(ThreadItem);
3496 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3497 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3498 if GikoSys.Setting.ListWidthState = glsMin then begin
3499 GikoDM.BrowserMaxAndFocusAction.Execute;
3502 if GikoSys.Setting.ListHeightState = glsMin then begin
3503 GikoDM.BrowserMaxAndFocusAction.Execute;
3509 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3511 ThreadItem: TThreadItem;
3514 shiftDown := (ssShift in Shift);
3516 if ListView.Selected = nil then Exit;
3518 if TObject(ListView.Selected.Data) is TCategory then begin
3519 SelectTreeNode(ListView.Selected.Data, True);
3520 end else if TObject(ListView.Selected.Data) is TBoard then begin
3521 SelectTreeNode(ListView.Selected.Data, True)
3522 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3523 Application.ProcessMessages;
3524 ThreadItem := TThreadItem(ListView.Selected.Data);
3525 DownloadContent(ThreadItem, shiftDown);
3527 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3528 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3529 if GikoSys.Setting.ListWidthState = glsMin then begin
3530 GikoDM.BrowserMaxAction.Execute;
3531 GikoDM.SetFocusForBrowserAction.Execute;
3534 if GikoSys.Setting.ListHeightState = glsMin then begin
3535 GikoDM.BrowserMaxAction.Execute;
3536 GikoDM.SetFocusForBrowserAction.Execute;
3543 procedure TGikoForm.BrowserMovement(const AName: string);
3545 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3546 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3547 and (FActiveContent <> nil) then begin
3548 FActiveContent.Move(AName);
3551 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
3552 procedure TGikoForm.BrowserMovement(scroll: Integer);
3554 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3555 and (FActiveContent <> nil) then begin
3556 FActiveContent.Move(scroll);
3559 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3561 if TObject(Node.Data) is TBBS then begin
3562 TBBS(Node.Data).NodeExpand := False;
3563 end else if TObject(Node.Data) is TCategory then begin
3564 TCategory(Node.Data).NodeExpand := False;
3565 end else if TObject(Node.Data) is TBoard then begin
3566 TBoard(Node.Data).NodeExpand := False;
3568 if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3569 TreeClick(TreeView.Selected);
3573 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3575 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3577 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3579 TreeSplitter.Visible := isVisible;
3580 CabinetPanel.Visible := isVisible;
3581 GikoDM.CabinetVisibleAction.Checked := isVisible;
3584 procedure TGikoForm.SelectListItem(List: TList);
3586 TmpListItem: TListItem;
3590 TmpListItem := ListView.Selected;
3591 while TmpListItem <> nil do begin
3592 List.Add(TmpListItem.Data);
3593 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3598 procedure TGikoForm.FormResize(Sender: TObject);
3601 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3602 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3604 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3605 if GikoSys.Setting.ListWidthState = glsMin then begin
3606 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3607 ViewPanel.Width := ThreadMainPanel.Width - 80;
3610 if GikoSys.Setting.ListHeightState = glsMin then begin
3611 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3612 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3616 FIsIgnoreResize := rtResizing;
3617 PostMessage( Handle, USER_RESIZED, 0, 0 );
3622 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3626 FTabHintIndex := -1;
3627 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3628 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3629 DeleteTab(i, BrowserTab.TabIndex);
3634 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3638 FTabHintIndex := -1;
3639 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3640 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3641 DeleteTab(i, BrowserTab.TabIndex);
3646 procedure TGikoForm.DeleteTab(index, selectIndex: Integer);
3652 if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
3653 doc := TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser.Document;
3654 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := doc.Body.ScrollTop;
3657 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := 0;
3659 if(FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[index])) then
3660 FActiveContent := nil;
3661 if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
3662 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser);
3664 FBrowsers.Move(j, BROWSER_COUNT - 1);
3666 BrowserTab.Tabs.BeginUpdate;
3668 GikoSys.Setting.LastCloseTabURL :=
3669 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.URL;
3670 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Free;
3671 if ( BrowserTab.Tabs.Count - 1 = index ) and
3672 ( BrowserTab.TabRect(index).Left
3673 <= BrowserTab.DisplayRect.Left ) then begin
3674 BrowserTab.ScrollTabs(-1);
3676 BrowserTab.Tabs.Delete(index);
3677 if selectIndex > index then begin
3678 BrowserTab.TabIndex := selectIndex - 1;
3680 if BrowserTab.Tabs.Count -1 >= selectIndex then
3681 BrowserTab.TabIndex := selectIndex
3683 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3686 BrowserTab.Tabs.EndUpdate;
3688 if BrowserTab.Tabs.Count = 0 then begin
3689 BrowserNullTab.Thread := nil;
3691 if(BrowserTab.TabIndex <> -1) and
3692 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3693 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
3694 ReleaseOldestBrowser;
3696 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3697 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3698 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3699 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3702 if( FActiveContent = nil) then
3703 BrowserTab.OnChange(nil);
3705 function TGikoForm.Hook(var Message: TMessage): Boolean;
3707 //
\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Ì
3708 //
\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ð
3712 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3714 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3718 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3720 bBoard, bCategory : Boolean;
3722 bBoard := (GetActiveList is TBoard);
3723 bCategory := (GetActiveList is TCategory);
3724 ItemRoundPMenu.Visible := bBoard;
3725 ItemReservPMenu.Visible := bBoard;
3726 LPMSep01.Visible := bBoard;
3727 ListRoundPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3728 ListReservPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3729 LPMSep02.Visible := bCategory or bBoard;
3730 KidokuPMenu.Visible := bBoard;
3731 MidokuPMenu.Visible := bBoard;
3732 UrlCopyPMenu.Visible := bCategory or bBoard;
3733 NameUrlCopyPMenu.Visible := bCategory or bBoard;
3734 AllSelectPMenu.Visible := bCategory or bBoard;
3735 LPMSep05.Visible := bCategory or bBoard;
3736 DeletePMenu.Visible := bBoard;
3737 LPMSep06.Visible := bCategory or bBoard;
3738 BoardFavoriteAddMenu.Visible := bCategory;
3739 ThreadFavoriteAddMenu.Visible := bBoard;
3740 SaveThreadFile.Visible := bBoard;
3741 AddRoundNameMenu(ItemReservPMenu);
3742 AddRoundNameMenu(ListReservPMenu);
3745 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3747 FClickNode := TreeView.Selected;
3748 if FClickNode = nil then begin
3749 TreeSelectThreadPupupMenu.Visible := False;
3750 TreeSelectBoardPupupMenu.Visible := False;
3751 TPMSep01.Visible := False;
3752 TreeSelectURLPupupMenu.Visible := False;
3753 TreeSelectNamePupupMenu.Visible := False;
3754 TreeSelectNameURLPupupMenu.Visible := False;
3755 TreeSelectFavoriteAddPupupMenu.Visible := False;
3756 TreeSelectLogDeleteSeparator.Visible := False;
3757 TreeSelectLogDeletePopupMenu.Visible := False;
3758 end else if TObject(FClickNode.Data) is TBoard then begin
3759 TreeSelectThreadPupupMenu.Visible := False;
3760 TreeSelectBoardPupupMenu.Visible := True;
3761 TPMSep01.Visible := True;
3762 TreeSelectURLPupupMenu.Visible := True;
3763 TreeSelectNamePupupMenu.Visible := True;
3764 TreeSelectNameURLPupupMenu.Visible := True;
3765 TreeSelectFavoriteAddPupupMenu.Visible := True;
3766 TreeSelectLogDeleteSeparator.Visible := False;
3767 TreeSelectLogDeletePopupMenu.Visible := False;
3768 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3769 TreeSelectThreadPupupMenu.Visible := False;
3770 TreeSelectBoardPupupMenu.Visible := True;
3771 TPMSep01.Visible := True;
3772 TreeSelectURLPupupMenu.Visible := True;
3773 TreeSelectNamePupupMenu.Visible := True;
3774 TreeSelectNameURLPupupMenu.Visible := True;
3775 TreeSelectFavoriteAddPupupMenu.Visible := True;
3776 TreeSelectLogDeleteSeparator.Visible := False;
3777 TreeSelectLogDeletePopupMenu.Visible := False;
3778 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3779 TreeSelectThreadPupupMenu.Visible := True;
3780 TreeSelectBoardPupupMenu.Visible := False;
3781 TPMSep01.Visible := True;
3782 TreeSelectURLPupupMenu.Visible := True;
3783 TreeSelectNamePupupMenu.Visible := True;
3784 TreeSelectNameURLPupupMenu.Visible := True;
3785 TreeSelectFavoriteAddPupupMenu.Visible := True;
3786 TreeSelectLogDeleteSeparator.Visible := True;
3787 TreeSelectLogDeletePopupMenu.Visible := True;
3788 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3789 TreeSelectThreadPupupMenu.Visible := True;
3790 TreeSelectBoardPupupMenu.Visible := False;
3791 TPMSep01.Visible := True;
3792 TreeSelectURLPupupMenu.Visible := True;
3793 TreeSelectNamePupupMenu.Visible := True;
3794 TreeSelectNameURLPupupMenu.Visible := True;
3795 TreeSelectFavoriteAddPupupMenu.Visible := True;
3796 TreeSelectLogDeleteSeparator.Visible := True;
3797 TreeSelectLogDeletePopupMenu.Visible := True;
3798 end else if (TObject(FClickNode.Data) is TCategory) then begin
3799 TreeSelectThreadPupupMenu.Visible := False;
3800 TreeSelectBoardPupupMenu.Visible := False;
3801 TPMSep01.Visible := False;
3802 TreeSelectURLPupupMenu.Visible := False;
3803 TreeSelectNamePupupMenu.Visible := True;
3804 TreeSelectNameURLPupupMenu.Visible := False;
3805 TreeSelectFavoriteAddPupupMenu.Visible := False;
3806 TreeSelectLogDeleteSeparator.Visible := False;
3807 TreeSelectLogDeletePopupMenu.Visible := False;
3808 end else if FClickNode.IsFirstNode then begin
3809 TreeSelectThreadPupupMenu.Visible := False;
3810 TreeSelectBoardPupupMenu.Visible := False;
3811 TPMSep01.Visible := False;
3812 TreeSelectURLPupupMenu.Visible := False;
3813 TreeSelectNamePupupMenu.Visible := True;
3814 TreeSelectNameURLPupupMenu.Visible := False;
3815 TreeSelectFavoriteAddPupupMenu.Visible := False;
3816 TreeSelectLogDeleteSeparator.Visible := False;
3817 TreeSelectLogDeletePopupMenu.Visible := False;
3819 TreeSelectThreadPupupMenu.Visible := False;
3820 TreeSelectBoardPupupMenu.Visible := False;
3821 TPMSep01.Visible := False;
3822 TreeSelectURLPupupMenu.Visible := False;
3823 TreeSelectNamePupupMenu.Visible := False;
3824 TreeSelectNameURLPupupMenu.Visible := False;
3825 TreeSelectFavoriteAddPupupMenu.Visible := False;
3826 TreeSelectLogDeleteSeparator.Visible := False;
3827 TreeSelectLogDeletePopupMenu.Visible := False;
3831 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
3832 var ppDisp: IDispatch; var Cancel: WordBool);
3841 threadItem: TThreadItem;
3842 aElement : IHTMLElement;
3845 Writeln(IntToStr(Integer(ppDisp)));
3848 aElement := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement;
3849 if ( aElement <> nil) then begin
3850 Text := aElement.Get_outerText;
3851 Html := aElement.Get_outerHTML;
3852 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
3853 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
3854 if GikoSys.Setting.ResAnchorJamp then begin
3856 Text := ZenToHan(Trim(Text));
3858 if(AnsiPos('>>', Text) = 1) then begin
3859 //Text := Copy(Text, 3, Length(Text) - 2);
3862 //Text := Copy(Text, 2, Length(Text) - 1);
3866 if AnsiPos('-', Text) <> 0 then begin
3867 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
3868 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
3869 wkIntTo := StrToIntDef(Text, 0);
3870 if wkIntTo < wkIntSt then
3873 wkIntSt := StrToIntDef(Text, 0);
3876 if wkIntSt <> 0 then begin
3877 FActiveContent.IDAnchorPopup('');
3878 MoveHisotryManager.pushItem(FActiveContent);
3879 if (Sender is TResPopupBrowser) then begin
3880 TResPopupBrowser(Sender).ChildClear;
3882 GetActiveContent(true),
3883 GetActiveContent(true).URL + '&st=' +
3884 IntToStr(wkIntSt) + '&to=' + IntToStr(wkIntSt));
3886 BrowserMovement(IntToStr(wkIntSt));
3891 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
3893 URL := GikoSys.GetHRefText(Html);
3894 URL := GikoSys.HTMLDecode(URL);
3895 if AnsiPos('BE:', URL) = 1 then begin
3896 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
3897 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
3898 threadItem := FActiveContent.Thread;
3899 if threadItem = nil then Exit;
3900 URL := BE_PHP_URL + BNum + '&u=d'
3901 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
3904 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
3905 ( AnsiPos('ftp://', URL) = 1) then begin
3906 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
3907 if GikoSys.Setting.LinkAddAddressBar then begin
3908 idx := AddressComboBox.Items.IndexOf(URL);
3909 if idx = -1 then begin
3910 AddressComboBox.Items.Insert(0, URL);
3911 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
3912 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
3914 AddressComboBox.Items.Delete(idx);
3915 AddressComboBox.Items.Insert(0, URL);
3918 if (Sender is TResPopupBrowser) then begin
3919 TResPopupBrowser(Sender).ChildClear
3922 MoveHisotryManager.pushItem(FActiveContent);
3930 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
3932 if Mouse.Capture <> 0 then
3934 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3935 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
3936 FBrowserSizeWidth := ViewPanel.Width;
3938 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
3939 FBrowserSizeHeight := ViewPanel.Height;
3941 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3942 if ViewPanel.Width < 2 then begin
3943 ViewPanel.Width := 1;
3944 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3945 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3946 GikoSys.Setting.ListWidthState := glsMax;
3947 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
3948 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3949 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3950 GikoSys.Setting.ListWidthState := glsMin;
3952 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3953 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3954 GikoSys.Setting.ListWidthState := glsNormal;
3957 if ViewPanel.Height < 2 then begin
3958 ViewPanel.Height := 1;
3959 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
3960 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
3961 GikoSys.Setting.ListHeightState := glsMax;
3962 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
3963 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
3964 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
3965 GikoSys.Setting.ListHeightState := glsMin;
3967 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
3968 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
3969 GikoSys.Setting.ListHeightState := glsNormal;
3972 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
3973 FBrowserSizeHeight := ViewPanel.Height
3974 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
3975 FBrowserSizeWidth := ViewPanel.Width;}
3978 procedure TGikoForm.BrowserTabChange(Sender: TObject);
3983 BrowserTab.Tabs.BeginUpdate;
3985 if not BrowserTab.Dragging then begin
3986 FTabHintIndex := -1;
3987 BrowserTab.Hint := '';
3988 idx := BrowserTab.TabIndex;
3989 if idx = -1 then begin
3990 SetContent(BrowserNullTab);
3992 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
3993 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
3994 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
3996 FBrowsers.Move(j ,0);
3998 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
3999 (FActiveContent.Browser <> BrowserNullTab.Browser) and
4000 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
4001 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4003 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
4004 ReleaseOldestBrowser;
4006 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
4007 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
4008 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4010 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
4011 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
4012 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4014 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
4015 AddressComboBox.Text := GetActiveContent.URL;
4017 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
4018 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
4021 GikoDM.SetFocusForBrowserAction.Execute;
4025 BrowserTab.Tabs.EndUpdate;
4030 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
4031 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
4037 if Button = mbMiddle then begin
4038 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
4041 p := BrowserTab.ScreenToClient(p);
4042 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
4044 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4045 end else if Button = mbLeft then begin
4046 FDragWFirst := true;
4047 FMouseDownPos.X := X;
4048 FMouseDownPos.Y := Y;
4053 procedure TGikoForm.SetBrowserTabState;
4055 CoolBand: TCoolBand;
4057 BrowserBottomPanel.AutoSize := False;
4058 if GikoSys.Setting.BrowserTabVisible then begin
4060 BrowserTab.Tabs.BeginUpdate;
4062 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
4063 BrowserTab.Style := tsTabs;
4064 if GikoSys.Setting.BrowserTabPosition = gtpTop then
4065 BrowserTab.TabPosition := tpTop
4067 BrowserTab.TabPosition := tpBottom;
4068 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
4069 BrowserTab.TabPosition := tpTop;
4070 BrowserTab.Style := tsButtons;
4072 BrowserTab.TabPosition := tpTop;
4073 BrowserTab.Style := tsFlatButtons
4076 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
4077 BrowserTab.Parent := BrowserTabToolBar;
4078 BrowserBottomPanel.Hide;
4079 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4080 if CoolBand <> nil then
4081 CoolBand.Visible := True;
4083 BrowserTab.Parent := BrowserBottomPanel;
4084 BrowserTab.Top := 0;
4085 BrowserTab.Left := 0;
4086 BrowserBottomPanel.Show;
4087 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4088 if CoolBand <> nil then
4089 CoolBand.Visible := False;
4092 BrowserTab.Tabs.EndUpdate;
4096 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4097 if CoolBand <> nil then
4098 CoolBand.Visible := False;
4099 BrowserBottomPanel.Visible := False;
4100 GikoDM.AllTabCloseAction.Execute;
4104 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
4105 Y: Integer; State: TDragState; var Accept: Boolean);
4109 idx := BrowserTab.IndexOfTabAt(X, Y);
4110 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
4113 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
4118 FDragWFirst := False;
4119 idx := BrowserTab.IndexOfTabAt(X, Y);
4121 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
4124 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
4125 Shift: TShiftState; X, Y: Integer);
4128 ThreadItem: TThreadItem;
4131 TabIdx := BrowserTab.IndexOfTabAt(x, y);
4133 if ( ssLeft in Shift ) then begin
4134 if (FDragWFirst) then begin
4135 BrowserTab.EndDrag(false);
4136 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
4139 BrowserTab.EndDrag(false);
4140 FDragWFirst := false;
4143 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
4144 Application.CancelHint;
4145 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
4146 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
4147 BrowserTab.Hint := ThreadItem.Title;
4148 Application.ShowHint := True;
4150 BrowserTab.Hint := '';
4151 Application.ShowHint := True;
4153 FTabHintIndex := TabIdx;
4158 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
4159 const pDisp: IDispatch; var URL: OleVariant);
4161 FDispHtmlDocument: DispHTMLDocument;
4162 BrowserRecord :TBrowserRecord;
4165 threadItem : TThreadItem;
4167 if TObject(Sender) is TWebBrowser then begin
4168 BrowserRecord := nil;
4169 if TWebBrowser(Sender) <> Browser then begin
4170 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4171 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
4172 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
4176 if BrowserRecord <> nil then begin
4177 if BrowserRecord.Event <> nil then
4178 BrowserRecord.Event.Free;
4179 FDispHtmlDocument := Idispatch(OleVariant(BrowserRecord.Browser.ControlInterface).Document) as DispHTMLDocument;
4180 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4181 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4182 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4185 if GetActiveContent <> nil then begin
4186 FDispHtmlDocument := Idispatch(OleVariant(Browser.ControlInterface).Document) as DispHTMLDocument;
4187 if FEvent <> nil then
4189 FEvent := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4190 FEvent.OnContextMenu := OnDocumentContextMenu;
4191 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4193 if FEvent <> nil then begin
4201 if (BrowserRecord <> nil) and
4202 Assigned( BrowserRecord.Thread ) then begin
4203 threadItem := BrowserRecord.Thread;
4205 if (threadItem.JumpAddress > 0) then begin
4206 if threadItem.UnRead then begin
4207 threadItem.UnRead := False;
4209 RefreshListView(threadItem);
4211 //
\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®
4212 //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4213 if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4214 BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4215 threadItem.JumpAddress := 0;
4217 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4220 end else if threadItem.UnRead then begin
4221 threadItem.UnRead := False;
4223 BrowserRecord.Move('new');
4224 RefreshListView(threadItem);
4225 end else if threadItem.ScrollTop <> 0 then begin
4227 doc := Idispatch( OleVariant( BrowserRecord.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4228 doc.Body.ScrollTop := threadItem.ScrollTop;
4231 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4236 LockWindowUpdate(0);
4239 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4241 AddRoundNameMenu(RoundNamePopupMenu.Items);
4244 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4250 Item := TMenuItem.Create(Self);
4251 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4252 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4254 Item := TMenuItem.Create(Self);
4255 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4256 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4258 Item := TMenuItem.Create(Self);
4259 Item.Caption := '-';
4261 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4262 Item := TMenuItem.Create(Self);
4263 Item.Caption := RoundList.RoundNameList[i];
4264 Item.OnClick := SetSelectRoundName;
4269 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4271 threadItem : TThreadItem;
4273 if ParentName <> 'dummy1' then begin
4274 SetSelectItemRound(RoundFlag, RoundName);
4276 threadItem := GetActiveContent;
4277 if threadItem <> nil then begin
4278 threadItem.RoundName := RoundName;
4280 RoundList.RoundNameList.Add(RoundName);
4281 threadItem.Round := RoundFlag;
4286 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4291 List := TList.Create;
4293 SelectListItem(List);
4294 for i := 0 to List.Count - 1 do begin
4295 if TObject(List[i]) is TBoard then begin
4296 TBoard(List[i]).RoundName := RoundName;
4298 RoundList.RoundNameList.Add(RoundName);
4299 TBoard(List[i]).Round := RoundFlag;
4300 end else if TObject(List[i]) is TThreadItem then begin
4301 if TThreadItem(List[i]).IsLogFile then begin
4302 TThreadItem(List[i]).RoundName := RoundName;
4304 RoundList.RoundNameList.Add(RoundName);
4305 TThreadItem(List[i]).Round := RoundFlag;
4314 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4316 MenuItem: TMenuItem;
4318 if Sender is TMenuItem then begin
4319 MenuItem := TMenuItem(Sender);
4320 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4325 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4330 if CoolBar = nil then
4332 for i := 0 to CoolBar.Bands.Count - 1 do begin
4333 if CoolBar.Bands[i].Control = Control then begin
4334 Result := CoolBar.Bands[i];
4340 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4342 if BrowserTab.Parent = BrowserTabToolBar then
4343 BrowserTab.Width := BrowserTabToolBar.Width;
4346 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4351 procedure TGikoForm.SetMenuFont;
4353 // GikoSys.MenuFont(MenuToolBar.Font);
4354 // MenuToolBar.Buttons[0].AutoSize := False;
4355 // MenuToolBar.Buttons[0].AutoSize := True;
4356 // MenuToolBar.Font.Color := clMenuText;
4357 GikoSys.MenuFont(MainCoolBar.Font);
4358 MenuToolBar.Buttons[0].AutoSize := False;
4359 MenuToolBar.Buttons[0].AutoSize := True;
4360 MainCoolBar.AutoSize := False;
4361 MainCoolBar.AutoSize := True;
4362 GikoSys.MenuFont(ListCoolBar.Font);
4363 GikoSys.MenuFont(BrowserCoolBar.Font);
4364 // MenuToolBar.Font.Color := clMenuText;
4367 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4371 if FavoriteDM.Modified then begin
4374 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4375 NewMenu := TMenuItem.Create(MainMenu);
4376 NewMenu.Action := GikoDM.FavoriteAddAction;
4377 FavoriteMenu.Add(NewMenu);
4378 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4379 NewMenu := TMenuItem.Create(FavoriteMenu);
4380 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4381 FavoriteMenu.Add(NewMenu);
4382 //
\83Z
\83p
\83\8c\81[
\83^
4383 FavoriteMenu.InsertNewLineAfter(NewMenu);
4384 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4385 FavoriteDM.Modified := false;
4389 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4392 NewMenu: array of TMenuItem;
4394 SetLength(NewMenu, Node.Count);
4395 Node := Node.getFirstChild;
4397 while ( Node <> nil ) do begin
4398 NewMenu[i] := TFavoriteMenuItem.Create(nil);
4399 NewMenu[i].AutoHotkeys := maAutomatic;
4400 NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4401 TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4403 if TObject(Node.Data) is TFavoriteFolder then begin
4404 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4405 CreateFavMenu(Node, NewMenu[i]);
4406 end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4407 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4408 NewMenu[i].OnClick := FavoriteClick;
4409 end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4410 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4411 NewMenu[i].OnClick := FavoriteClick;
4414 Node := Node.getNextSibling;
4416 MenuItem.Add(NewMenu);
4419 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4421 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';
4422 TitleAdd: String = '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á';
4424 Dlg : TFavoriteAddDialog;
4430 if Item is TFavoriteBoardItem then
4431 Item := TFavoriteBoardItem( Item ).Item
4432 else if Item is TFavoriteThreadItem then
4433 Item := TFavoriteThreadItem( Item ).Item;
4435 Node := FavoriteTreeView.Items.GetFirstNode;
4436 if Item is TBoard then begin
4437 ItemURL := TBoard( Item ).URL;
4438 while Node <> nil do begin
4440 if TObject( Data ) is TFavoriteBoardItem then begin
4441 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4442 if Application.MessageBox(PChar(MsgAdd) , PChar(TitleAdd), MB_YESNO ) = IDNO then
4447 Node := Node.GetNext;
4449 Dlg := TFavoriteAddDialog.Create(Self);
4451 Dlg.SetBoard( TBoard( Item ) );
4456 end else if Item is TThreadItem then begin
4457 ItemURL := TThreadItem( Item ).URL;
4458 while Node <> nil do begin
4460 if TObject( Data ) is TFavoriteThreadItem then begin
4461 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
4462 if Application.MessageBox( PChar(MsgAdd), PChar(TitleAdd), MB_YESNO ) = IDNO then
4467 Node := Node.GetNext;
4469 Dlg := TFavoriteAddDialog.Create(Self);
4471 Dlg.SetThreadItem( TThreadItem( Item ) );
4481 procedure TGikoForm.FavoriteClick(Sender: TObject);
4483 FavoriteClick( Sender, True );
4486 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4489 ThreadItem: TThreadItem;
4490 FavBoard: TFavoriteBoardItem;
4491 FavThread: TFavoriteThreadItem;
4495 if Sender is TFavoriteMenuItem then
4496 Item := TFavoriteMenuItem(Sender).Data
4497 else if Sender is TLinkToolButton then
4498 Item := TLinkToolButton(Sender).Data
4499 else if Sender is TTreeNode then
4500 Item := TTreeNode( Sender ).Data
4504 if TObject(Item) is TFavoriteBoardItem then begin
4505 FavBoard := TFavoriteBoardItem(Item);
4506 Board := FavBoard.Item;
4507 if Board <> nil then begin
4508 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4509 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4510 SelectTreeNode(Board, True);
4512 end else if TObject(Item) is TFavoriteThreadItem then begin
4513 FavThread := TFavoriteThreadItem(Item);
4514 ThreadItem := FavThread.Item;
4515 if ThreadItem = nil then
4518 InsertBrowserTab(ThreadItem, ActiveTab);
4520 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4521 if GikoSys.Setting.ListWidthState = glsMin then begin
4522 GikoDM.BrowserMaxAndFocusAction.Execute;
4525 if GikoSys.Setting.ListHeightState = glsMin then begin
4526 GikoDM.BrowserMaxAndFocusAction.Execute;
4532 procedure TGikoForm.BBSMenuItemOnClick(
4537 if Sender is TBBSMenuItem then
4538 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4542 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4544 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4547 //!
\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é)
4548 procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4550 stRes, edRes : Int64;
4551 browserRec : TBrowserRecord;
4552 threadNumber : String;
4557 Thread.JumpAddress := 0;
4558 //
\83^
\83u
\82ð
\90¶
\90¬
4559 browserRec := InsertBrowserTab(Thread);
4560 if (browserRec <> nil) then begin
4561 // JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N
\82·
\82é
4562 threadNumber := ChangeFileExt(Thread.FileName, '');
4563 GikoSys.GetPopupResNumber( URL, stRes, edRes );
4564 //
\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
4565 if (StrToInt64(threadNumber) = stRes) then begin
4566 if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4567 and (Pos('&st=' + threadNumber , URL) = 0) then begin
4571 if ( stRes > 0 ) then begin
4572 Thread.JumpAddress := stRes;
4574 //
\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é
4575 if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4576 DownloadContent(Thread);
4577 end else if (not browserRec.Repaint) and (stRes > 0) then begin
4578 browserRec.Move(IntToStr(stRes));
4579 Thread.JumpAddress := 0;
4581 doc := Idispatch( OleVariant( browserRec.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4582 Thread.ScrollTop := doc.Body.ScrollTop;
4589 procedure TGikoForm.MoveToURL(const inURL: string);
4591 protocol, host, path, document, port, bookmark : string;
4592 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4594 BBSID, BBSKey: string;
4595 {tmpBoard,} Board: TBoard;
4596 ThreadItem: TThreadItem;
4599 tmpThread : TThreadItem;
4600 shiftDown : Boolean;
4604 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4605 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4608 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4609 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4610 if shiftDown then begin
4611 GikoSys.OpenBrowser(inURL, gbtUserApp);
4613 end else if ctrlDown then begin
4614 GikoSys.OpenBrowser(inURL, gbtIE);
4618 //=====
\83v
\83\89\83O
\83C
\83\93
4621 bi := Length(BoardGroups) - 1;
4622 for i := 1 to bi do begin
4623 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4624 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4627 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4628 Board := BBSsFindBoardFromURL( boardURL );
4631 if Board = nil then begin
4633 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4634 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4637 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4638 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4639 ShowBBSTree( BBSs[ 1 ] );
4642 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4643 if not Board.IsThreadDatRead then begin
4644 GikoSys.ReadSubjectFile( Board );
4648 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4649 if ThreadItem = nil then begin
4650 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4651 ThreadItem := tmpThread;
4652 Board.Insert( 0, ThreadItem );
4653 if ActiveList is TBoard then begin
4654 if TBoard(ActiveList) = Board then
4655 ListView.Items.Count := ListView.Items.Count + 1;
4660 OpenThreadItem(ThreadItem, inURL);
4667 Board := BBSsFindBoardFromURL(
4668 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4670 if Board <> nil then begin
4671 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4672 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4673 SelectTreeNode( Board, True );
4681 // 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¢
4685 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4686 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4687 Board := BBSsFindBoardFromURL( boardURL );
4688 if Board = nil then begin
4689 //
\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
4690 GikoSys.OpenBrowser(inURL, gbtUserApp);
4693 //
\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é
4695 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4696 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4697 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4698 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4699 GikoSys.OpenBrowser(inURL, gbtUserApp);
4704 if not Board.IsThreadDatRead then
4705 GikoSys.ReadSubjectFile(Board);
4706 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4707 ThreadItem := Board.FindThreadFromURL( URL );
4708 //
\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)
4709 if ThreadItem = nil then begin
4710 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4713 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ª
\82È
\82¢
\82È
\82ç
\90¶
\90¬
\82·
\82é
\81B
4714 if ThreadItem = nil then begin
4715 ThreadItem := TThreadItem.Create( nil, Board, URL );
4716 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4717 Board.Insert(0, ThreadItem);
4718 if ActiveList is TBoard then begin
4719 if TBoard(ActiveList) = Board then
4720 ListView.Items.Count := ListView.Items.Count + 1;
4723 //
\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é
4724 if (not ThreadItem.IsLogFile) then begin
4725 if AnsiPos(Host, Board.URL) = 0 then
4726 ThreadItem.DownloadHost := Host
4728 ThreadItem.DownloadHost := '';
4730 OpenThreadItem(ThreadItem, inURL);
4734 Board := BBSsFindBoardFromURL( inURL );
4735 if Board = nil then begin
4736 GikoSys.OpenBrowser(inURL, gbtAuto);
4738 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4739 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4740 SelectTreeNode( Board, True );
4745 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4747 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4748 CoolBarResized( Sender, MainCoolBar );
4751 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4752 Shift: TShiftState);
4754 if Key = VK_RETURN then
4755 GikoDM.MoveToAction.Execute;
4758 procedure TGikoForm.BrowserEnter(Sender: TObject);
4760 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4763 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4765 CDS:PCopyDataStruct;
4769 CDS := Message.CopyDataStruct;
4770 GetMem(PC, CDS^.cbData);
4772 lstrcpy(PC,CDS^.lpData);
4773 SetString(sURL, PC,lstrlen(PC));
4778 Message.Result := 1;
4781 procedure TGikoForm.WndProc(var Message: TMessage);
4783 senderBrowser : TWebBrowser;
4789 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4792 if Message.WParam = SC_MINIMIZE then begin
4794 PostMessage(Handle, USER_MINIMIZED, 0, 0);
4797 TreeClick( TreeView.Selected );
4802 if (GikoSys.Setting.StoredTaskTray) then begin
4809 USER_DOCUMENTCOMPLETE:
4810 if (Message.WParam <> 0) and
4811 (TObject(Message.WParam) is TWebBrowser) then begin
4812 senderBrowser := TWebBrowser( Message.WParam );
4813 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
4816 if (TObject(Message.WParam) is TResPopupBrowser) then begin
4818 TResPopupBrowser( Message.WParam ).Clear;
4829 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
4834 //
\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Í
4835 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
4836 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
4837 if Msg.CharCode in [VK_BACK] then begin
4838 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4839 if Msg.KeyData > 0 then begin
4842 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4846 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
4847 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
4850 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4853 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
4854 if Msg.CharCode in [VK_BACK] then begin
4855 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4856 if Msg.KeyData > 0 then begin
4859 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4862 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
4865 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4869 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
4873 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
4878 PreviewTimer.Enabled := False;
4882 ARect := FPreviewBrowser.GetWindowRect(p);
4884 FPreviewBrowser.PreviewImage(FPreviewURL);
4886 if ARect.Bottom > Screen.DesktopHeight then begin
4887 OffsetRect(ARect, 0, -(ARect.Bottom - Screen.DesktopHeight));
4889 if (ARect.Right > Screen.DesktopWidth) then begin
4890 OffsetRect(ARect, -(ARect.Right - Screen.DesktopWidth), 0);
4892 if (ARect.Left < Screen.DesktopLeft) then begin
4893 OffsetRect(ARect, +(Screen.DesktopLeft - ARect.Left), 0);
4895 if (ARect.Top < Screen.DesktopTop) then begin
4896 OffsetRect(ARect, 0, (Screen.DesktopTop - ARect.Top));
4899 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST,
4900 ARect.Left, ARect.Top,
4901 (ARect.Right - ARect.Left), (ARect.Bottom - ARect.Top),
4902 SWP_NOACTIVATE or SWP_HIDEWINDOW);
4904 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
4905 FPreviewBrowserRect := ARect;
4908 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
4912 if PreviewTimer.Enabled then
4913 PreviewTimer.Enabled := False;
4915 if (FResPopupBrowser <> nil) and (IsWindowVisible(FResPopupBrowser.Handle)) then begin
4916 FResPopupBrowser.Clear;
4919 if (FPreviewBrowser <> nil)
4920 and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
4921 //
\82±
\82±
\82Å
\8fÁ
\82³
\82ê
\82é
\82Ì
\82ª
\96â
\91è
4922 //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Å
\95\
\8e¦
\94Í
\88Í
\94»
\92è
\82Å
\82«
\82Ä
\82¢
\82é
\82Í
\82¸
4923 Pos := Mouse.CursorPos;
4924 Pos.X := Pos.X + Left;
4925 Pos.Y := Pos.Y + Top;
4926 if (FPreviewBrowserRect.Left > Pos.X) or
4927 (FPreviewBrowserRect.Right < Pos.X) or
4928 (FPreviewBrowserRect.Top > Pos.Y) or
4929 (FPreviewBrowserRect.Bottom < Pos.Y) then begin
4930 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
4934 Message.Result := 1;
4937 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
4939 GikoDM.MsgBarCloseAction.Execute;
4942 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
4944 Doc: IHtmlDocument2;
4945 Range: IHTMLTxtRange;
4948 ThreadItem: TThreadItem;
4951 FactiveContent.IDAnchorPopup('');
4952 Doc := FactiveContent.Browser.Document as IHtmlDocument2;
4953 if Assigned(Doc) then begin
4954 Range := Doc.selection.createRange as IHTMLTxtRange;
4955 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
4956 s := ZenToHan(Trim(s));
4957 if GikoSys.IsNumeric(s) then begin
4958 Num := StrToInt64Def(s, -1);
4959 ThreadItem := GetActiveContent(true);
4960 if (ThreadItem <> nil) and (Num <= ThreadItem.Count)
4961 and (Num > 0)then begin
4962 CreateResPopupBrowser;
4963 FResPopupBrowser.CreateNewBrowser.PopupType := gptThread;
4964 HTMLCreater.SetResPopupText(FResPopupBrowser.CreateNewBrowser, ThreadItem, Num, Num, False, False);
4965 FResPopupBrowser.Popup;
4975 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
4977 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
4978 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
4980 if FTreeType = gttHistory then begin
4981 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
4982 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
4985 TreeView.Items.Clear;
4989 procedure TGikoForm.SetLinkBar;
4993 ToolButton: TLinkToolButton;
4994 MenuItem: TMenuItem;
4995 oldIgnoreResize : TResizeType;
4997 oldIgnoreResize := FIsIgnoreResize;
4998 FIsIgnoreResize := rtResizing;
4999 MainCoolBar.Bands.BeginUpdate;
5001 LinkBarPopupMenu.Items.Clear;
5002 for i := LinkToolBar.ButtonCount - 1 downto 0 do
5003 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
5004 LinkToolBar.Buttons[i].Free;
5005 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5006 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5007 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5008 ToolButton := TLinkToolButton.Create(LinkToolBar);
5009 // ToolButton.Parent := LinkToolBar;
5010 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
5011 MenuItem := TMenuItem.Create(Self);
5012 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
5013 LinkBarPopupMenu.Items.Add(MenuItem);
5014 ToolButton.MenuItem := MenuItem;
5015 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
5016 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
5017 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
5018 ToolButton.OnClick := FavoriteClick;
5019 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
5020 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
5021 ToolButton.OnClick := FavoriteClick;
5023 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
5024 ToolButton.Left := 10000;
5025 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
5026 ToolButton.AutoSize := True;
5027 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
5028 ToolButton.OnDragOver := FavoriteDragOver;
5029 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
5030 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
5031 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
5032 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
5033 //ToolButton.DragMode := dmAutomatic;
5034 ToolButton.DragMode := dmManual;
5035 ToolButton.PopupMenu := FavoriteTreePopupMenu;
5037 LinkToolBar.InsertControl(ToolButton);
5042 { if LinkToolBar.ButtonCount = 0 then begin
5043 ToolButton := TLinkToolButton.Create(LinkToolBar);
5044 ToolButton.Style := tbsButton;
5045 ToolButton.ImageIndex := -1;
5046 ToolButton.Caption := '';
5047 LinkToolBar.InsertControl(ToolButton);
5050 MainCoolBar.Bands.EndUpdate;
5051 LoadCoolBarSettings;
5052 FIsIgnoreResize := oldIgnoreResize;
5056 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5064 if Sender = FavoriteTreeView then begin
5065 Node := FavoriteTreeView.GetNodeAt(X, Y);
5070 bound := Node.DisplayRect( False );
5071 height := bound.Bottom - bound.Top;
5072 if (bound.Top + height / 2) <= Y then
5073 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
5078 if Node.IsFirstNode then
5083 if FDropSpaceNode <> nil then
5084 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
5087 if Change then begin
5088 if FDropSpaceNode <> nil then
5089 FDropSpaceNode.Free;
5091 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
5092 FDropSpaceNode.MoveTo( Node, naInsert );
5093 FDropSpaceNode.ImageIndex := -1;
5094 FDropSpaceNode.SelectedIndex := -1;
5098 if Source = FavoriteTreeView then begin
5099 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
5104 end else if Source = BrowserTab then
5106 else if Source = ListView then
5108 else if Source is TLinkToolButton then
5110 else if Source = TreeView then
5116 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5119 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
5122 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
5124 // FDragging := true;
5127 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
5129 SenderNode: TTreeNode;
5130 LinkToolButton: TLinkToolButton;
5133 LinkToolButton := TLinkToolButton( Sender );
5134 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5135 SenderNode.Selected := False;
5136 FavoriteDragDrop( SenderNode, Source );
5142 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5144 favButton : TLinkToolButton;
5145 favThreadItem : TFavoriteThreadItem;
5151 if Sender is TLinkToolButton then begin
5152 favButton := TLinkToolButton( Sender );
5153 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5154 favThreadItem := TFavoriteThreadItem( favButton.Data );
5155 if favThreadItem.Item <> nil then
5156 InsertBrowserTab( favThreadItem.Item, False );
5164 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5168 TToolButton( Sender ).DragMode := dmManual;
5169 if ssLeft in Shift then begin
5170 // 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)
5171 if FDragTime = 0 then begin
5172 FDragTime := GetTickCount();
5174 Now := GetTickCount();
5175 if (Now - FDragTime) > 500 then begin
5176 if FDragButton <> TToolButton( Sender ) then begin
5178 FDragButton := TToolButton( Sender );
5179 TToolButton(Sender).BeginDrag(false ,5);
5182 {$IF Defined(debug)}
5183 ShowMessage('Error');
5194 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5199 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5204 for i := 0 to ToolBar.ButtonCount - 1 do
5205 if ToolBar.Buttons[i].Visible then
5206 Result := Result + ToolBar.Buttons[i].Width;
5209 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5211 Control : TWinControl;
5214 Control := FindControl(BandInfo^.hwndChild);
5215 if Control = nil then
5218 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5219 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5220 idx := MainCoolBar.Bands[ i ].ID;
5224 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5225 if (Control = MenuToolBar) or (Control = StdToolBar) 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;
5230 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5231 end else if Control = LinkToolBar then begin
5232 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5233 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5234 BandInfo^.cxMinChild := 0;
5235 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5236 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5237 end else begin // AddressToolBar
5238 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5239 BandInfo^.cxMinChild := 0;
5240 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5244 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5250 ChevronPopupMenu.Items.Clear;
5252 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5253 if MainCoolBar.Bands[ i ].Visible then begin
5254 if Idx = Int64(RebarChevron^.uBand) then begin
5261 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5262 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5264 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5265 ToolBarChevronMenu(StdToolBar);
5266 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5270 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5271 ChevronPopupMenu.Popup(p.x, p.y);
5275 procedure TGikoForm.MenuBarChevronMenu;
5276 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5282 for i := 0 to MenuItem.Count - 1 do begin
5284 if MenuItem[i] is TFavoriteMenuItem then begin
5285 Item := TFavoriteMenuItem.Create(Self);
5286 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5288 Item := TMenuItem.Create(Self);
5289 Item.Caption := MenuItem[i].Caption;
5290 Item.Action := MenuItem[i].Action;
5291 Item.ImageIndex := MenuItem[i].ImageIndex;
5292 Item.OnClick := MenuItem[i].OnClick;
5293 PopupItem.Add(Item);
5294 if MenuItem[i].Count > 0 then
5295 SetSubMenu(MenuItem[i], Item);
5304 ChevronPopupMenu.Items.Clear;
5305 ChevronPopupMenu.Images := MainMenu.Images;
5306 bw := GetWidthAllToolButton(MenuToolBar);
5307 if MenuToolBar.Width < bw then begin
5309 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5310 w := w + MenuToolBar.Buttons[i].Width;
5311 if MenuToolBar.Width <= w then begin
5312 Item := TMenuItem.Create(Self);
5313 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5314 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5315 ChevronPopupMenu.Items.Add(Item);
5316 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5322 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5323 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5328 if Assigned(PopupMenu.OnPopup) then
5329 PopupMenu.OnPopup(nil);
5330 for i := 0 to PopupMenu.Items.Count - 1 do begin
5332 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5333 Item := TFavoriteMenuItem.Create(Self);
5334 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5336 Item := TMenuItem.Create(Self);
5337 Item.Caption := PopupMenu.Items[i].Caption;
5338 Item.Action := PopupMenu.Items[i].Action;
5339 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5340 Item.OnClick := PopupMenu.Items[i].OnClick;
5341 PopupItem.Add(Item);
5350 ChevronPopupMenu.Items.Clear;
5351 ChevronPopupMenu.Images := ToolBar.HotImages;
5352 bw := GetWidthAllToolButton(ToolBar);
5353 if ToolBar.Width < bw then begin
5355 for i := 0 to ToolBar.ButtonCount - 1 do begin
5356 if ToolBar.Buttons[i].Visible then
5357 w := w + ToolBar.Buttons[i].Width;
5358 if ToolBar.Width <= w then begin
5359 if ToolBar.Buttons[i].Tag = 0 then begin
5360 Item := TMenuItem.Create(Self);
5361 if ToolBar.Buttons[i].Style = tbsSeparator then
5364 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5365 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5368 Item.Caption := ToolBar.Buttons[i].Caption;
5369 Item.Action := ToolBar.Buttons[i].Action;
5371 //Item.Visible := True;
5373 ChevronPopupMenu.Items.Add(Item);
5374 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5376 Item.OnClick := nil;
5377 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5385 procedure TGikoForm.LinkBarChevronMenu;
5390 Item: TFavoriteMenuItem;
5392 Button: TLinkToolButton;
5394 ChevronPopupMenu.Items.Clear;
5395 ChevronPopupMenu.Images := LinkToolBar.Images;
5396 bw := GetWidthAllToolButton(LinkToolBar);
5397 if LinkToolBar.Width < bw then begin
5399 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5400 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5401 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5402 w := w + LinkToolBar.Buttons[j].Width;
5403 if LinkToolBar.Width <= w then begin
5404 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5405 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5406 Item := TFavoriteMenuItem.Create(Self);
5407 if TObject(Button.Data) is TFavoriteFolder then begin
5408 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5409 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5410 Item.OnClick := FavoriteClick;
5411 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5412 Item.OnClick := FavoriteClick;
5414 Item.Data := Button.Data;
5415 Item.Caption := LinkToolBar.Buttons[j].Caption;
5416 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5417 ChevronPopupMenu.Items.Add(Item);
5428 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5429 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5430 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5432 \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É
5433 \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
5435 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5437 bandInfo : tagREBARBANDINFOA;
5438 pBandInfo : PReBarBandInfoA;
5445 pBandInfo := @bandInfo;
5446 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5447 bandInfo.cbSize := sizeof( bandInfo );
5448 bandInfo.hwndChild := h;
5449 bandInfo.cyMinChild := bar.Height;
5450 bar.OnBandInfo( nil, pBandInfo );
5451 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5453 for i := bar.Bands.Count - 1 downto 0 do begin
5454 if bar.Bands[ i ].Control.Handle = h then begin
5460 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5464 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5466 Control: TWinControl;
5469 Control := FindControl(BandInfo^.hwndChild);
5470 if Control = nil then
5473 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5474 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5475 idx := ListCoolBar.Bands[ i ].ID;
5479 if Control = ListToolBar then begin
5480 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5481 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5482 BandInfo^.cxMinChild := 0;
5483 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5484 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5486 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5487 BandInfo^.cxMinChild := 0;
5488 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5492 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5497 ChevronPopupMenu.Items.Clear;
5498 Idx := RebarChevron^.uBand;
5499 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5500 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5501 ToolBarChevronMenu(ListToolBar);
5504 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5505 ChevronPopupMenu.Popup(p.x, p.y);
5509 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5511 Control: TWinControl;
5514 Control := FindControl(BandInfo^.hwndChild);
5515 if Control = nil then
5518 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5519 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5520 idx := BrowserCoolBar.Bands[ i ].ID;
5524 if Control = BrowserToolBar then begin
5525 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5526 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5527 BandInfo^.cxMinChild := 0;
5528 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5529 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5531 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5532 BandInfo^.cxMinChild := 0;
5533 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5537 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5542 ChevronPopupMenu.Items.Clear;
5543 Idx := RebarChevron^.uBand;
5544 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5545 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5546 ToolBarChevronMenu(BrowserToolBar)
5549 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5550 ChevronPopupMenu.Popup(p.x, p.y);
5554 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5556 if Column^.iImage = -1 then begin
5557 Column^.mask := Column^.mask or LVCF_FMT;
5559 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5560 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5564 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5569 for i := bar.ButtonCount - 1 downto 0 do begin
5570 if bar.Buttons[ i ].Action = action then begin
5571 Result := bar.Buttons[ i ];
5577 procedure TGikoForm.SetToolBarPopup;
5580 aIEButton : TToolButton;
5581 aCabinetBBSButton : TToolButton;
5582 aResRangeButton : TToolButton;
5583 aThreadRangeButton: TToolButton;
5585 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5587 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5588 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5589 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5590 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5591 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5593 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5594 if aIEButton <> nil then
5595 aIEButton.DropdownMenu := BrowserPopupMenu;
5596 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5597 if aCabinetBBSButton <> nil then
5598 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5599 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5600 if aResRangeButton <> nil then
5601 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5602 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5603 if aThreadRangeButton <> nil then
5604 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5607 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5608 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5612 // browserPos : TPoint;
5616 Wnd := WindowFromPoint(Mouse.CursorPos);
5618 if WheelDelta > 0 then
5623 if (Wnd = BrowserTab.Handle) or
5624 (Wnd = BrowserTab.Parent.Handle) then begin
5625 BrowserTab.ScrollTabs(Delta);
5627 if FIsHandledWheel then begin
5628 FIsHandledWheel := False;
5631 FIsHandledWheel := True;
5632 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5633 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5635 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5643 procedure TGikoForm.SetSelectWord( const text : string );
5645 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5646 ClearThreadRengeAction;
5648 if Length( text ) = 0 then
5650 GikoDM.AllItemAction.Checked := True;
5651 SetListViewType( gvtAll )
5653 SetListViewType( gvtUser, text, false );
5657 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5660 SetSelectWord( SelectComboBox.Text );
5664 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5665 Shift: TShiftState);
5673 if Key = VK_Return then
5676 end else if Key = 229 then begin
5677 if GikoSys.Setting.UseUndecided then begin
5678 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5679 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5680 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5681 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5682 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5683 SetLength(Str, Len);
5684 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5685 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5686 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5688 Str := SelectComboBox.Text + Str;
5690 if (Length(Str) > 0) then begin
5694 end else if Length( SelectComboBox.Text ) = 0 then
5696 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5697 *
\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
5698 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5701 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5702 ClearThreadRengeAction;
5706 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
5707 procedure TGikoForm.ClearThreadRengeAction;
5709 //
\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é
5710 if GikoDM.AllItemAction.Checked then
5711 GikoDM.AllItemAction.Checked := False;
5712 if GikoDM.LogItemAction.Checked then
5713 GikoDM.LogItemAction.Checked := False;
5714 if GikoDM.NewItemAction.Checked then
5715 GikoDM.NewItemaction.Checked := False;
5716 if GikoDM.LiveItemAction.Checked then
5717 GikoDM.LiveItemAction.Checked := False;
5718 if GikoDM.ArchiveItemAction.Checked then
5719 GikoDM.ArchiveItemAction.Checked := False;
5723 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5728 if Length( SelectComboBox.Text ) = 0 then
5730 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5731 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5736 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5737 procedure TGikoForm.ModifySelectList;
5744 if not SelectComboBoxPanel.Visible then
5747 if Length( SelectComboBox.Text ) > 0 then
5749 oldText := SelectComboBox.Text;
5750 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5752 GikoSys.Setting.SelectTextList.Delete( idx );
5753 idx := SelectComboBox.Items.IndexOf( oldText );
5755 SelectComboBox.Items.Delete( idx );
5756 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5757 SelectComboBox.Items.Insert( 0, oldText );
5758 SelectComboBox.Text := oldText;
5766 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5767 Shift: TShiftState; X, Y: Integer);
5772 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5775 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5776 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5777 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5779 If w <= 50 Then Begin
5780 //
\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
5781 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
5782 pos.X := pos.X + (50 - w);
5784 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
5788 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
5789 //If SelectComboBox.Width <> w Then Begin
5790 If SelectComboBoxPanel.Width <> w Then Begin
5791 SelectComboBoxPanel.Width := w;
5792 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
5793 GikoSys.Setting.SelectComboBoxWidth := w;
5794 DraggingSelectComboBoxPosition := pos;
5796 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
5797 ResetBandInfo( ListCoolBar, ListToolBar );
5803 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
5804 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5808 IsDraggingSelectComboBox := True;
5811 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
5815 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
5816 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5818 IsDraggingSelectComboBox := False;
5822 procedure TGikoForm.StatusBarResize(Sender: TObject);
5824 StatusBar.Panels[1].Width := StatusBar.Width -
5825 StatusBar.Panels[0].Width -
5826 StatusBar.Panels[THREADSIZE_PANEL].Width -
5827 StatusBar.Panels[NGWORDNAME_PANEL].Width;
5829 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
5832 if (Length( SelectComboBox.Text ) = 0) or
5833 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
5835 SelectComboBox.Text := '';
5836 SelectComboBox.Color := clWindow;
5841 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
5844 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
5847 if TObject(SenderNode.Data) is TFavoriteFolder then
5848 SourceNode.MoveTo(SenderNode, naAddChild)
5850 SourceNode.MoveTo(SenderNode, naInsert);
5854 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
5858 FavoBoardItem: TFavoriteBoardItem;
5859 FavoThreadItem: TFavoriteThreadItem;
5861 ThreadItem: TThreadItem;
5864 if (SenderNode = nil) or (Source = nil) then
5867 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5868 FavNode := SenderNode.Parent
5870 FavNode := SenderNode;
5874 if Source is TBoard then begin
5875 Board := TBoard( Source );
5876 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
5877 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
5878 Node.ImageIndex := 15;
5879 Node.SelectedIndex := 15;
5880 end else if Source is TFavoriteBoardItem then begin
5881 FavoBoardItem := TFavoriteBoardItem( Source );
5882 Board := FavoBoardItem.Item;
5883 if Board <> nil then
5884 if not Board.IsThreadDatRead then
5885 GikoSys.ReadSubjectFile(Board);
5886 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
5887 Node.ImageIndex := 15;
5888 Node.SelectedIndex := 15;
5889 end else if Source is TThreadItem then begin
5890 ThreadItem := TThreadItem( Source );
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 TBrowserRecord then begin
5896 ThreadItem := TBrowserRecord( Source ).Thread;
5897 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5898 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5899 Node.ImageIndex := 16;
5900 Node.SelectedIndex := 16;
5901 end else if Source is TFavoriteThreadItem then begin
5902 FavoThreadItem := TFavoriteThreadItem( Source );
5903 ThreadItem := FavoThreadItem.Item;
5904 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
5905 Node.ImageIndex := 16;
5906 Node.SelectedIndex := 16;
5909 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5911 FavoriteMoveTo( SenderNode, Node );
5915 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
5918 SourceNode: TTreeNode;
5919 LinkToolButton: TLinkToolButton;
5922 if SenderNode = nil then
5925 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
5926 if FDropSpaceNode <> nil then
5927 SenderNode := FDropSpaceNode;
5929 if Source = FavoriteTreeView then begin
5930 SourceNode := FavoriteTreeView.Selected;
5931 FavoriteMoveTo( SenderNode, SourceNode );
5932 end else if Source is TLinkToolButton then begin
5933 LinkToolButton := TLinkToolButton( Source );
5934 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5935 FavoriteMoveTo( SenderNode, SourceNode );
5936 end else if Source = BrowserTab then begin
5937 idx := BrowserTab.TabIndex;
5938 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
5939 end else if Source = ListView then begin
5940 FavoriteAddTo( SenderNode, ListView.Selected.Data );
5941 end else if Source = TreeView then begin
5942 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
5946 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
5949 SenderNode: TTreeNode;
5952 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
5953 if SenderNode <> nil then begin
5954 FavoriteDragDrop( SenderNode, Source );
5957 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
5958 if FDropSpaceNode <> nil then begin
5960 FDropSpaceNode.Delete;
5962 FDropSpaceNode := nil;
5965 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
5966 FavoriteDM.Modified := true;
5972 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
5973 Node: TTreeNode; var S: String);
5975 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
5976 FavoriteDM.Modified := true;
5978 FavoriteTreeView.ReadOnly := True;
5983 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
5984 Shift: TShiftState);
5986 if not TTreeView(Sender).IsEditing then begin
5990 FClickNode := FavoriteTreeView.Selected;
5991 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
5995 FClickNode := FavoriteTreeView.Selected;
5996 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
6000 FavoriteClick( FavoriteTreeView.Selected );
6001 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
6005 FClickNode := FavoriteTreeView.Selected;
6006 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
6010 //
\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·
6011 if Key = VK_ESCAPE then begin
6012 if (TTreeView(Sender).Selected <> nil) then begin
6013 TTreeView(Sender).Selected.Text := FOrigenCaption;
6015 TTreeView(Sender).Selected.Focused := False;
6021 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
6024 LinkToolButton: TLinkToolButton;
6027 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
6029 FClickNode := FavoriteTreeView.Selected;
6031 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
6033 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
6034 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6035 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6036 FClickNode := FavoriteTreeView.Items[i];
6040 for i := 0 to FClickNode.Count - 1 do begin
6041 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
6042 FClickNode := FClickNode.Item[i];
6049 if FClickNode = nil then begin
6050 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6051 FavoriteTreeDeletePopupMenu.Visible := False;
6052 FavoriteTreeRenamePopupMenu.Visible := False;
6053 FavoriteTreeNewFolderPopupMenu.Visible := False;
6054 FavoriteTreeURLCopyPopupMenu.Visible := False;
6055 FavoriteTreeNameCopyPopupMenu.Visible := False;
6056 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6057 FavoriteTreeReloadPopupMenu.Visible := False;
6058 FavoriteTreeLogDeletePopupMenu.Visible := False;
6059 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6060 end else if FClickNode.IsFirstNode then begin
6061 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6062 FavoriteTreeDeletePopupMenu.Visible := False;
6063 FavoriteTreeRenamePopupMenu.Visible := False;
6064 FavoriteTreeNewFolderPopupMenu.Visible := True;
6065 FavoriteTreeURLCopyPopupMenu.Visible := False;
6066 FavoriteTreeNameCopyPopupMenu.Visible := False;
6067 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6068 FavoriteTreeReloadPopupMenu.Visible := False;
6069 FavoriteTreeLogDeletePopupMenu.Visible := False;
6070 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6071 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
6072 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6073 FavoriteTreeDeletePopupMenu.Visible := True;
6074 FavoriteTreeRenamePopupMenu.Visible := False;
6075 FavoriteTreeNewFolderPopupMenu.Visible := True;
6076 FavoriteTreeURLCopyPopupMenu.Visible := False;
6077 FavoriteTreeNameCopyPopupMenu.Visible := False;
6078 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6079 FavoriteTreeReloadPopupMenu.Visible := False;
6080 FavoriteTreeLogDeletePopupMenu.Visible := False;
6081 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6082 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
6083 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6084 FavoriteTreeDeletePopupMenu.Visible := True;
6085 FavoriteTreeRenamePopupMenu.Visible := True;
6086 FavoriteTreeNewFolderPopupMenu.Visible := True;
6087 FavoriteTreeURLCopyPopupMenu.Visible := False;
6088 FavoriteTreeNameCopyPopupMenu.Visible := True;
6089 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6090 FavoriteTreeReloadPopupMenu.Visible := False;
6091 FavoriteTreeLogDeletePopupMenu.Visible := False;
6092 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6093 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
6094 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6095 FavoriteTreeDeletePopupMenu.Visible := True;
6096 FavoriteTreeRenamePopupMenu.Visible := True;
6097 FavoriteTreeNewFolderPopupMenu.Visible := True;
6098 FavoriteTreeURLCopyPopupMenu.Visible := True;
6099 FavoriteTreeNameCopyPopupMenu.Visible := True;
6100 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6101 FavoriteTreeReloadPopupMenu.Visible := True;
6102 FavoriteTreeLogDeletePopupMenu.Visible := True;
6103 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6104 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
6105 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6106 FavoriteTreeDeletePopupMenu.Visible := True;
6107 FavoriteTreeRenamePopupMenu.Visible := True;
6108 FavoriteTreeNewFolderPopupMenu.Visible := True;
6109 FavoriteTreeURLCopyPopupMenu.Visible := True;
6110 FavoriteTreeNameCopyPopupMenu.Visible := True;
6111 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6112 FavoriteTreeReloadPopupMenu.Visible := True;
6113 FavoriteTreeLogDeletePopupMenu.Visible := False;
6114 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6116 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6117 FavoriteTreeDeletePopupMenu.Visible := False;
6118 FavoriteTreeRenamePopupMenu.Visible := False;
6119 FavoriteTreeNewFolderPopupMenu.Visible := False;
6120 FavoriteTreeURLCopyPopupMenu.Visible := False;
6121 FavoriteTreeNameCopyPopupMenu.Visible := False;
6122 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6123 FavoriteTreeReloadPopupMenu.Visible := False;
6124 FavoriteTreeLogDeletePopupMenu.Visible := False;
6125 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6130 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
6135 if not (TObject(node.Data) is TFavoriteFolder) then
6138 for i := 0 to node.Count - 1 do
6140 if TObject(node.Item[i].Data) is TFavoriteFolder then
6141 FavoriteBrowseFolder( node.Item[i] )
6142 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
6143 FavoriteClick( node.Item[i], False );
6147 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6153 for i := 0 to Node.Count - 1 do begin
6154 if Node.Item[i].Data = FindPointer then begin
6155 Result := Node.Item[i];
6157 end else if Node.Item[i].Count > 0 then begin
6158 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6159 if Found <> nil then begin
6170 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6174 SenderNode: TTreeNode;
6178 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6179 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6180 SenderNode := FavoriteTreeView.Items[i];
6184 SenderNode.Selected := False;
6186 FavoriteDragDrop( SenderNode, Source );
6191 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6192 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6194 if FDragWFirst = true then
6195 FDragWFirst := false;
6197 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6198 if GikoSys.Setting.ListWidthState = glsMin then begin
6199 GikoDM.BrowserMaxAndFocusAction.Execute;
6202 if GikoSys.Setting.ListHeightState = glsMin then begin
6203 GikoDM.BrowserMaxAndFocusAction.Execute;
6208 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6209 Y: Integer; State: TDragState; var Accept: Boolean);
6212 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6216 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6220 if FDropSpaceNode <> nil then begin
6222 FDropSpaceNode.Delete;
6224 FDropSpaceNode := nil;
6226 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6227 FavoriteDM.Modified := true;
6233 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6235 if FListViewBackGroundColor <> value then begin
6236 FListViewBackGroundColor := value;
6237 ListView.Color := FListViewBackGroundColor;
6240 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6242 threadItem : TThreadItem;
6246 if FClickNode = nil then Exit;
6248 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6250 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6251 if threadItem = nil then
6253 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6255 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6257 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6258 if boardItem = nil then
6260 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6266 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6267 MousePos: TPoint; var Handled: Boolean);
6271 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6272 if BrowserTab.TabIndex <> idx then begin
6273 BrowserTab.TabIndex := idx;
6274 BrowserTab.OnChange(nil);
6278 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6280 ThreadItem: TThreadItem;
6286 boardPlugIn : TBoardPlugIn;
6288 if Number = 0 then Exit;
6289 ThreadItem := GetActiveContent(True);
6291 if ThreadItem <> nil then begin
6292 //if ThreadItem.IsBoardPlugInAvailable then begin
6293 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6294 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6295 //boardPlugIn := ThreadItem.BoardPlugIn;
6296 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6298 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6299 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6300 //
\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
6301 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6303 FileName := ThreadItem.FilePath;
6304 tmp := GikoSys.ReadThreadFile(FileName, Number);
6306 if tmp <> '' then begin
6307 THTMLCreate.DivideStrLine(tmp, @Res);
6309 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6310 if ReplaceTag then begin
6311 Header := CustomStringReplace(Header, '</b>', '',true);
6312 Header := CustomStringReplace(Header, '<b>', '',true);
6313 Header := CustomStringReplace(Header, '<br>', '',true);
6314 Header := DeleteFontTag(Header);
6316 //if ThreadItem.IsBoardPlugInAvailable then begin
6317 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6318 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6319 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6321 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6322 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6323 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6324 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6327 Body := CustomStringReplace(Body, '</a>', '',true);
6329 Body := HTMLCreater.DeleteLink(Body);
6330 if ReplaceTag then begin
6331 Body := CustomStringReplace(Body, '<', '<');
6332 Body := CustomStringReplace(Body, '>', '>');
6333 Body := CustomStringReplace(Body, '"', '"');
6334 Body := CustomStringReplace(Body, '&', '&');
6335 //Body := CustomStringReplace(Body, ' ', ' ');
6338 Header := Header + Body;
6340 Clipboard.SetTextBuf( PChar(Header) );
6346 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6348 AddRoundNameMenu(dummy1);
6349 AddMenuSameBoardThread;
6351 //!
\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Á
6352 procedure TGikoForm.AddMenuSameBoardThread;
6357 SameBoardThreadItem.Clear;
6358 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6359 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6360 if (FActiveContent.Thread.ParentBoard =
6361 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6362 //
\8e©
\95ª
\82Í
\8aO
\82·
6363 if FActiveContent.Thread <>
6364 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6365 Item := TMenuItem.Create(Self);
6366 Item.Caption := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.Title;
6367 Item.OnClick := SameBoardThreadSubItemOnClick;
6368 SameBoardThreadItem.Add(Item);
6372 //
\89½
\82à
\96³
\82¢
\82È
\82ç
\8eg
\97p
\82Å
\82«
\82È
\82¢
\82æ
\82¤
\82É
\82·
\82é
6373 SameBoardThreadItem.Enabled := SameBoardThreadItem.Count > 0;
6375 //!
\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
6376 procedure TGikoForm.SameBoardThreadSubItemOnClick(Sender: TObject);
6379 MenuItem: TMenuItem;
6381 if Sender is TMenuItem then begin
6384 MenuItem := TMenuItem(Sender);
6385 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6386 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6387 if (FActiveContent.Thread.ParentBoard =
6388 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6389 if FActiveContent.Thread <>
6390 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6391 if (SameBoardThreadItem.Items[j] = MenuItem) then begin
6392 MoveToURL( TBrowserRecord(BrowserTab.Tabs.Objects[i])
6404 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6406 FavoriteDM.URLReplace(oldURLs, newURLs);
6409 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6411 RoundList.URLReplace(oldURLs, newURLs);
6414 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6416 Filename = 'tab.sav';
6417 bFilename = '~tab.sav';
6423 oldBoardName: string;
6425 newBoardName: string;
6426 TabList: TStringList;
6429 if oldURLs.Count <> newURLs.Count then begin
6432 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6433 TabList := TStringList.Create;
6435 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6437 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6438 //
\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
6439 for i := 0 to oldURLs.Count - 1 do begin
6440 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6441 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6442 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6443 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6444 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6445 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6447 for j := 0 to TabList.Count - 1 do begin
6448 tempString := TabList[j];
6449 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6450 tempString := StringReplace(tempString, oldHost, newHost,[]);
6451 TabList[j] := tempString;
6455 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6457 if FileExists( GikoSys.GetAppDir + Filename) then begin
6458 if FileExists( GikoSys.GetAppDir + bFilename) then
6459 DeleteFile(GikoSys.GetAppDir + bFilename);
6461 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6462 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6465 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6473 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6474 procedure TGikoForm.OnMinimize;
6476 if FActiveContent <> nil then begin
6477 FIsMinimize := mtMinimizing;
6478 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
6482 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6483 procedure TGikoForm.OnMinimized;
6485 FIsMinimize := mtMinimized;
6489 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6491 CoolBarResized( Sender, BrowserCoolBar );
6494 // *************************************************************************
6495 // ExternalBoardPlugInMain
6496 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6497 // *************************************************************************
6498 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6501 boardPlugIn : TBoardPlugIn;
6504 if not (Sender is TMenuItem) then
6507 item := TMenuItem( Sender );
6508 if not Assigned( Pointer( item.Tag ) ) then
6511 //
\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·
6512 boardPlugIn := TBoardPlugIn( item.Tag );
6513 boardPlugIn.PlugInMenu( item.Handle );
6516 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6517 procedure TGikoForm.TreeClick( Node : TTreeNode );
6523 if FTreeType = gttHistory then begin
6525 if TObject( Node.Data ) is TFavoriteThreadItem then
6526 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6527 FavoriteClick( Node );
6530 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6531 if ActiveList = Node.Data then
6534 ActiveListColumnSave;
6536 if TObject(Node.Data) is TBBS then begin
6537 SetActiveList(Node.data);
6538 end else if TObject(Node.Data) is TCategory then begin
6539 SetActiveList(Node.data);
6540 end else if TObject(Node.Data) is TBoard then begin
6541 if not TBoard(Node.Data).IsThreadDatRead then begin
6542 Screen.Cursor := crHourGlass;
6544 if not TBoard(Node.Data).IsThreadDatRead then
6545 GikoSys.ReadSubjectFile(Node.Data);
6547 Screen.Cursor := crDefault;
6550 Sort.SetSortDate(Now());
6551 SetActiveList(Node.data);
6554 if TObject( Node.Data ) is TBoard then begin // not TCategory
6555 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6556 if GikoSys.Setting.ListWidthState = glsMax then begin
6557 GikoDM.BrowserMinAction.Execute;
6558 if GikoForm.Visible then
6562 if GikoSys.Setting.ListHeightState = glsMax then begin
6563 GikoDM.BrowserMinAction.Execute;
6564 if GikoForm.Visible then
6572 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6573 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6576 ThreadItem : TThreadItem;
6577 shiftDown : Boolean;
6580 if Node = nil then Exit;
6582 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6584 if FTreeType = gtt2ch then begin
6585 if not (TObject(Node.Data) is TBoard) then Exit;
6586 Board := TBoard(Node.Data);
6587 DownloadList(Board, shiftDown);
6588 end else if FTreeType = gttHistory then begin
6589 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6590 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6591 DownloadContent(ThreadItem, shiftDown);
6595 // *************************************************************************
6596 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82ÌKeyDown
\83C
\83x
\83\93\83g
6597 // *************************************************************************
6598 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6599 Shift: TShiftState);
6601 if Key = VK_BACK then begin
6602 // UpFolderButtonClick(Sender);
6603 end else if Key = VK_SPACE then begin
6604 TreeDoubleClick( TreeView.Selected );
6605 end else if Key = VK_RETURN then begin
6606 TreeClick( TreeView.Selected );
6607 //
\97\9a\97ð
\82Ì
\8fê
\8d\87\81A
\8fÁ
\82³
\82ê
\82Ä
\82¢
\82é
\82Ì
\82Å
\83`
\83F
\83b
\83N
\82·
\82é
6608 if (TreeView.Selected <> nil) then begin
6609 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6613 //!
\82¨
\8bC
\82É
\93ü
\82è
\82ÌMouseDown
\83C
\83x
\83\93\83g
6614 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6615 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6617 favItem : TTreeNode;
6618 favThreadItem : TFavoriteThreadItem;
6624 if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6625 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6626 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6627 rect := FavoriteTreeView.Selected.DisplayRect(true);
6628 //
\83A
\83C
\83R
\83\93\95ª
\8d¶
\82É
\82¸
\82ç
\82·
6629 if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
6630 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6631 if ssDouble in Shift then begin
6632 FClickNode := FavoriteTreeView.Selected;
6633 GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6637 TObject(FavoriteTreeView.Selected));
6644 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6645 if favItem = nil then Exit;
6647 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6648 favThreadItem := TFavoriteThreadItem( favItem.Data );
6649 if favThreadItem.Item <> nil then
6650 InsertBrowserTab( favThreadItem.Item, False );
6657 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6660 if FIsIgnoreResize <> rtNone then
6663 if GikoSys.Setting.ListOrientation = gloVertical then begin
6664 if GikoSys.Setting.ListHeightState = glsMin then begin
6665 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6666 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6672 procedure TGikoForm.OnResized;
6677 FOldFormWidth := Width;
6678 FIsIgnoreResize := rtNone;
6683 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6684 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6689 //
\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)
6690 if FActiveContent <> nil then begin
6691 doc := Idispatch( olevariant(FActiveContent.Browser.ControlInterface).Document) as IHTMLDocument2;
6692 doc.Body.ScrollTop := FActiveContent.Thread.ScrollTop;
6694 FIsMinimize := mtNone;
6699 // *************************************************************************
6700 //!
\83X
\83\8c\83b
\83h
\83u
\83\89\83E
\83U
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6701 // *************************************************************************
6702 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6709 stlist : TStringList;
6713 FOleInPlaceActiveObject: IOleInPlaceActiveObject;
6717 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then
6718 FOleInPlaceActiveObject := FActiveContent.Browser.ControlInterface as IOleInPlaceActiveObject;
6719 FOleInPlaceActiveObject.OnFrameWindowActivate(True);
6722 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6723 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6724 e := IHTMLDocument2(FActiveContent.Browser.Document).elementFromPoint(p.x, p.y);
6725 if (Assigned(e)) then begin
6726 if (e.className = 'date') or (e.id = 'date') then begin
6728 if AnsiPos('id', AnsiLowerCase(AID)) > 0 then begin
6729 AID := Copy(AID, AnsiPos('id', AnsiLowerCase(AID)) - 1, 11);
6730 if AnsiPos(' be:', AnsiLowerCase(AID)) > 0 then begin
6731 AID := Copy(AID, 1, AnsiPos(' BE:', AnsiLowerCase(AID)) - 1)
6734 stlist := TStringList.Create;
6736 stList.DelimitedText := AID;
6738 for i := 0 to stList.Count - 1 do
6739 if Length(WideString(stList[i])) = 8 then begin
6740 if GikoSys.NotDateorTimeString(stList[i]) then begin
6749 count := GikoSys.GetSameIDResCount(AID, FActiveContent.Thread);
6751 if not (GikoSys.Setting.LimitResCountMessage) then begin
6753 end else if (count > LIMIT) then begin
6754 if (GikoUtil.MsgBox(Handle,
6755 IntToStr(LIMIT) + '
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6756 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6757 MB_YESNO or MB_ICONQUESTION) = ID_YES) then begin
6761 body := GikoSys.GetSameIDResAnchor(AID, FActiveContent.Thread, limited);
6762 FActiveContent.IDAnchorPopup(body);
6771 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
6772 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
6774 SelectTimer.Interval := 0;
6775 if not (ListView.Selected = nil) then
6776 if( FActiveContent = nil) or
6777 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
6782 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
6783 procedure TGikoForm.ActiveListColumnSave;
6785 ActivListObj : TObject;
6786 i, id, idx : Integer;
6787 BBSOrder : TGikoBBSColumnList;
6788 CategoryOrder : TGikoCategoryColumnList;
6789 BoardOrder : TGikoBoardColumnList;
6792 ActivListObj := ActiveList;
6793 if ActivListObj is TBBS then begin
6794 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6795 BBSOrder := TGikoBBSColumnList.Create;
6797 for i := 0 to ListView.Columns.Count - 1 do begin
6798 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6799 idx := ListView.Column[ i ].Tag;
6800 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
6801 BBSOrder.Add( TGikoBBSColumnID( id ) );
6802 //
\95\9d\82Ì
\95Û
\91¶
6803 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
6805 for i := 0 to ListView.Columns.Count - 1 do
6806 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6807 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
6811 end else if ActivListObj is TCategory then begin
6812 //=====
\94Â
\83\8a\83X
\83g =====
6813 CategoryOrder := TGikoCategoryColumnList.Create;
6815 for i := 0 to ListView.Columns.Count - 1 do begin
6816 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6817 idx := ListView.Column[ i ].Tag;
6818 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
6819 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
6820 //
\95\9d\82Ì
\95Û
\91¶
6821 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
6823 for i := 0 to ListView.Columns.Count - 1 do
6824 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6825 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
6829 end else if ActivListObj is TBoard then begin
6830 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6831 BoardOrder := TGikoBoardColumnList.Create;
6833 for i := 0 to ListView.Columns.Count - 1 do begin
6834 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6835 idx := ListView.Column[ i ].Tag;
6836 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
6837 BoardOrder.Add( TGikoBoardColumnID( id ) );
6838 //
\95\9d\82Ì
\95Û
\91¶
6839 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
6841 for i := 0 to ListView.Columns.Count - 1 do
6842 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6843 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
6851 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
6852 Column: TListColumn; Point: TPoint);
6858 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
6859 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
6860 ListColumnPopupMenu.Items.Items[ i ].Free;
6862 //
\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¢)
6863 if TObject( FActiveList ) is TBBS then begin
6865 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6866 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
6867 item := TMenuItem.Create( ListColumnPopupMenu );
6868 item.Caption := GikoBBSColumnCaption[ i ];
6870 item.OnClick := ListColumnPopupMenuOnClick;
6871 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
6872 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
6873 item.Checked := True;
6877 ListColumnPopupMenu.Items.Add( item );
6880 end else if TObject( FActiveList ) is TCategory then begin
6882 //=====
\94Â
\83\8a\83X
\83g =====
6883 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
6884 item := TMenuItem.Create( ListColumnPopupMenu );
6885 item.Caption := GikoCategoryColumnCaption[ i ];
6887 item.OnClick := ListColumnPopupMenuOnClick;
6888 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
6889 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
6890 item.Checked := True;
6894 ListColumnPopupMenu.Items.Add( item );
6897 end else if TObject( FActiveList ) is TBoard then begin
6899 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6900 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
6901 item := TMenuItem.Create( ListColumnPopupMenu );
6902 item.Caption := GikoBoardColumnCaption[ i ];
6904 item.OnClick := ListColumnPopupMenuOnClick;
6905 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
6906 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
6907 item.Checked := True;
6911 ListColumnPopupMenu.Items.Add( item );
6916 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
6917 Point := ListView.ClientToScreen( Point );
6918 if ListColumnPopupMenu.Items.Count > 0 then
6919 ListColumnPopupMenu.Popup( Point.X, Point.Y );
6923 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6924 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
6931 if not (Sender is TMenuItem) then
6934 ActiveListColumnSave;
6935 item := TMenuItem( Sender );
6937 if TObject( FActiveList ) is TBBS then
6938 orderList := GikoSys.Setting.BBSColumnOrder
6939 else if TObject( FActiveList ) is TCategory then
6940 orderList := GikoSys.Setting.CategoryColumnOrder
6941 else if TObject( FActiveList ) is TBoard then
6942 orderList := GikoSys.Setting.BoardColumnOrder
6946 if item.Checked then begin
6947 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
6948 for i := orderList.Count - 1 downto 0 do begin
6949 if Integer( orderList[ i ] ) = item.Tag then begin
6950 orderList.Delete( i );
6955 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
6956 orderList.Add( Pointer( item.Tag ) );
6959 SetActiveList( FActiveList );
6963 procedure TGikoForm.OnGestureStart(Sender: TObject);
6968 procedure TGikoForm.OnGestureMove(Sender: TObject);
6975 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
6977 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
6978 s := MouseGesture.GetGestureStr;
6980 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
6981 if Action <> nil then
6982 ActStr := '
\81i' + Action.Caption + '
\81j';
6983 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
6984 StatusBar.Panels[1].Text := s;
6987 procedure TGikoForm.OnGestureEnd(Sender: TObject);
6992 s := MouseGesture.GetGestureStr;
6994 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
6995 if Action <> nil then
6997 StatusBar.Panels[1].Text := '';
7000 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
7001 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
7003 ThreadItem: TThreadItem;
7005 DefaultDraw := true;
7006 if TObject(Item.Data) is TThreadItem then begin
7007 ThreadItem := TThreadItem(Item.Data);
7008 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
7009 ListView.Canvas.Brush.Color := FOddColor;
7010 //
\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
7011 if (GikoSys.Setting.UnFocusedBold) and
7012 (Item.Selected) and (not ListView.Focused) then begin
7013 ListView.Canvas.Font.Style := [fsBold];
7016 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
7019 if ThreadItem.UnRead then
7020 ListView.Canvas.Font.Style := [fsBold];
7025 procedure TGikoForm.FormActivate(Sender: TObject);
7027 if GikoSys.Setting.GestureEnabled then begin
7028 GikoSys.Setting.Gestures.ClearGesture;
7029 GikoSys.Setting.Gestures.LoadGesture(
7030 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
7031 MouseGesture.UnHook;
7032 MouseGesture.OnGestureStart := OnGestureStart;
7033 MouseGesture.OnGestureMove := OnGestureMove;
7034 MouseGesture.OnGestureEnd := OnGestureEnd;
7035 MouseGesture.SetHook(Handle);
7037 //MouseGesture.UnHook;
7038 MouseGesture.OnGestureStart := nil;
7039 MouseGesture.OnGestureMove := nil;
7040 MouseGesture.OnGestureEnd := nil;
7044 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
7046 if (FIsMinimize <> mtMinimizing) then begin
7047 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
7048 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
7052 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
7057 affectedBand : TCoolBand;
7060 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
7061 FIsIgnoreResize := rtResizing;
7062 PostMessage( Handle, USER_RESIZED, 0, 0 );
7064 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
7065 if CoolBar = MainCoolBar then begin
7066 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
7067 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7068 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7069 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7070 GikoSys.Setting.MainCoolSet[i] := CoolSet;
7072 end else if CoolBar = ListCoolBar then begin
7073 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
7074 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7075 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7076 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7077 GikoSys.Setting.ListCoolSet[i] := CoolSet;
7079 end else if CoolBar = BrowserCoolBar then begin
7080 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
7081 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7082 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7083 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7084 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
7087 if not (Sender is TToolBar) or (CoolBar = nil) then
7089 toolbar := TToolBar( Sender );
7090 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
7091 affectedBand := nil;
7092 for i := CoolBar.Bands.Count - 1 downto 0 do begin
7093 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
7094 band := CoolBar.Bands[ i ];
7095 if band.Break or (i = 0) then begin
7096 if i + 1 < CoolBar.Bands.Count then
7097 if not CoolBar.Bands[ i + 1 ].Break then
7098 affectedBand := CoolBar.Bands[ i + 1 ];
7101 affectedBand := CoolBar.Bands[ i - 1 ];
7106 //
\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·
7107 if CoolBar = MainCoolBar then begin
7108 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
7109 coolSet.FCoolWidth := toolbar.Width + 25;
7110 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
7111 if affectedBand <> nil then begin
7112 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
7113 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7114 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
7116 end else if CoolBar = ListCoolBar then begin
7117 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
7118 coolSet.FCoolWidth := toolbar.Width + 25;
7119 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
7120 if affectedBand <> nil then begin
7121 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
7122 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7123 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
7125 end else if CoolBar = BrowserCoolBar then begin
7126 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
7127 coolSet.FCoolWidth := toolbar.Width + 25;
7128 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
7129 if affectedBand <> nil then begin
7130 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
7131 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7132 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
7139 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
7141 CoolBarResized( Sender, MainCoolBar );
7144 procedure TGikoForm.ListToolBarResize(Sender: TObject);
7146 CoolBarResized( Sender, ListCoolBar );
7149 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
7151 CoolBarResized( Sender, BrowserCoolBar );
7154 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
7155 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
7157 ThreadItem : TThreadItem;
7158 ReadList : TStringList;
7159 wordCount : TWordCount;
7161 ThreadItem := GetActiveContent(True);
7162 ReadList := TStringList.Create;
7163 wordCount := TWordCount.Create;
7165 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7166 {$IFDEF SPAM_FILTER_ENABLED}
7167 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7168 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7169 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
7170 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7171 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7173 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7174 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7179 FActiveContent.Repaint := true;
7180 if ThreadItem <> nil then
7181 InsertBrowserTab( ThreadItem, True );
7183 //
\93¯
\88êID
\82ðNG
\83\8f\81[
\83h
\82É
\93o
\98^
7184 procedure TGikoForm.AddIDtoNGWord(invisible : boolean);
7186 ThreadItem : TThreadItem;
7188 {$IFDEF SPAM_FILTER_ENABLED}
7190 ReadList : TStringList;
7191 wordCount : TWordCount;
7193 id, dateStr: String;
7195 No := KokoPopupMenu.Tag;
7196 if No = 0 then Exit;
7197 ThreadItem := GetActiveContent(True);
7198 if ThreadItem = nil then Exit;
7200 id := GikoSys.GetResID(No, ThreadItem);
7201 if (id <> '') and (not IsNoValidID(id)) then begin
7202 //
\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Á
7203 DateTimeToString(dateStr, 'yyyymmdd', Now);
7204 id := id + #9'>>add ' + dateStr + ',' + ThreadItem.Title;
7205 if (GikoSys.FAbon.AddToken(id, invisible)) then begin
7206 GikoSys.FAbon.ReLoadFromNGwordFile;
7207 FActiveContent.Repaint := True;
7210 ShowMessage('ID
\82ð
\8eæ
\93¾
\82Å
\82«
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B');
7212 {$IFDEF SPAM_FILTER_ENABLED}
7213 body := TStringList.Create;
7215 GikoSys.GetSameIDRes(id, ThreadItem, body);
7216 ReadList := TStringList.Create;
7217 wordCount := TWordCount.Create;
7219 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7220 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7221 for i := 0 to body.Count - 1 do begin
7222 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7223 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7224 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7234 if (FActiveContent.Repaint) then begin
7235 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7236 if ThreadItem <> nil then
7237 InsertBrowserTab( ThreadItem, True );
7241 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
7242 procedure TGikoForm.IndividualAbonID(Atype : Integer);
7244 ThreadItem : TThreadItem;
7247 ReadList : TStringList;
7248 wordCount : TWordCount;
7250 No := KokoPopupMenu.Tag;
7251 if No = 0 then Exit;
7252 ThreadItem := GetActiveContent(True);
7253 if ThreadItem = nil then Exit;
7254 body := TStringList.Create;
7256 GikoSys.GetSameIDRes(No, ThreadItem, body);
7258 ReadList := TStringList.Create;
7259 wordCount := TWordCount.Create;
7261 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7262 {$IFDEF SPAM_FILTER_ENABLED}
7263 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7264 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7266 for i := 0 to body.Count - 1 do begin
7267 {$IFDEF SPAM_FILTER_ENABLED}
7268 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7269 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7270 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7272 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7273 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7279 FActiveContent.Repaint := true;
7280 if ThreadItem <> nil then
7281 InsertBrowserTab( ThreadItem, True );
7288 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7290 firstElement: IHTMLElement;
7291 document: IHTMLDocument2;
7293 document := FActiveContent.Browser.Document as IHTMLDocument2;
7294 if Assigned(document) then
7295 firstElement := document.all.item('idSearch', 0) as IHTMLElement;
7296 if Assigned(firstElement) then
7297 if firstElement.style.visibility <> 'hidden' then
7298 firstElement.style.visibility := 'hidden';
7301 procedure TGikoForm.RepaintAllTabsBrowser();
7304 ThreadItem: TThreadItem;
7306 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7307 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7309 ThreadItem := GetActiveContent;
7310 if ThreadItem <> nil then
7311 InsertBrowserTab( ThreadItem, True );
7315 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7316 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7317 Shift: TShiftState);
7319 //
\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Ì
7320 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7321 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7322 SelectTimer.Interval := 0;
7323 if not (GikoSys.Setting.BrowserTabVisible) then begin
7324 if (GetActiveList is TBoard) then begin
7325 //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
7326 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7327 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7328 (Key = VK_UP) or (Key = VK_DOWN)) then
7329 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7333 // *************************************************************************
7334 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7335 // *************************************************************************
7336 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7337 Node: TTreeNode; var AllowEdit: Boolean);
7339 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7340 FOrigenCaption := Node.Text;
7342 // *************************************************************************
7343 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7344 // *************************************************************************
7345 function TGikoForm.GetMainForm(): TComponent;
7347 Result := Application.MainForm;
7349 // *************************************************************************
7350 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7351 // *************************************************************************
7352 function TGikoForm.GetScreenCursor(): TCursor;
7354 Result := Screen.Cursor;
7356 // *************************************************************************
7357 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7358 // *************************************************************************
7359 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7361 if (Screen.Cursor <> Cursor) then
7362 Screen.Cursor := Cursor;
7364 // *************************************************************************
7365 //!
\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
7366 // *************************************************************************
7367 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7369 //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Ì
7370 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7371 if GikoDM.CabinetVisibleAction.Enabled then begin
7372 GikoDM.CabinetVisibleAction.Execute;
7375 // *************************************************************************
7376 //!
\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
7377 // *************************************************************************
7378 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7380 if GikoDM.FavoriteArrangeAction.Enabled then begin
7381 GikoDM.FavoriteArrangeAction.Execute;
7384 // *************************************************************************
7385 //!
\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
7386 // *************************************************************************
7387 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7388 var Handled: Boolean);
7392 //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ß
7393 if Self.Active then begin
7395 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7396 WM_KEYFIRST..WM_KEYLAST :
7398 //
\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ç
7399 if (Msg.message <> WM_KEYUP)
7400 and (Msg.message <> WM_CHAR)
7401 and (Msg.message <> WM_SYSKEYUP) then begin
7402 wmMsg.Msg := Msg.message;
7403 wmMsg.CharCode := Word(Msg.wParam);
7404 wmMsg.KeyData := Msg.lParam;
7405 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7406 Self.OnShortCut(wmMsg, Handled);
7411 // Explorer
\82ÌD&D
\82ð
\8eó
\82¯
\82é
\82Æ
\82Ì
\94ñ
\83A
\83N
\83e
\83B
\83u
7412 if Msg.message = WM_DROPFILES then begin
7413 AcceptDropFiles(Msg);
7418 // *************************************************************************
7419 //!
\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
7420 // *************************************************************************
7421 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7423 Application.ProcessMessages;
7424 if not Application.Terminated then begin
7425 if PreviewTimer.Enabled then
7426 PreviewTimer.Enabled := False;
7427 //
\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
7428 if (FResPopupBrowser <> nil) then
7429 FResPopupBrowser.Clear;
7431 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7432 if FPreviewBrowser <> nil then
7433 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7437 // *************************************************************************
7438 //!
\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
7439 // *************************************************************************
7440 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7445 if (Sender <> nil) then begin
7446 s := ' [' + Sender.ClassName + ']' + #13#10;
7448 s := ' [ Sender is nil ] ' + #13#10;
7451 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7453 // *************************************************************************
7454 //!
\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¬
7455 // *************************************************************************
7456 procedure TGikoForm.CreateControlThread();
7458 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7459 FControlThread := TThreadControl.Create(True);
7460 FControlThread.MaxThreadCount := 1;
7461 FControlThread.Resume;
7462 FControlThread.OnDownloadEnd := DownloadEnd;
7463 FControlThread.OnDownloadMsg := DownloadMsg;
7464 FControlThread.OnWork := Work;
7465 FControlThread.OnWorkBegin := WorkBegin;
7466 FControlThread.OnWorkEnd := WorkEnd;
7468 // *************************************************************************
7469 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7470 // *************************************************************************
7471 procedure TGikoForm.CreateBrowsers(count: Integer);
7474 newBrowser: TWebBrowser;
7476 BrowserNullTab := TBrowserRecord.Create;
7477 BrowserNullTab.Browser := Browser;
7478 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7480 FBrowsers := TList.Create;
7481 for i := 0 to count -1 do begin
7482 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7483 newBrowser := FBrowsers[FBrowsers.Count - 1];
7484 TOleControl(newBrowser).Parent := BrowserPanel;
7485 TOleControl(newBrowser).Align := alNone;
7486 TOleControl(newBrowser).Left := 0;
7487 TOleControl(newBrowser).Top := 0;
7488 newBrowser.RegisterAsDropTarget := False;
7489 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7490 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7491 newBrowser.OnEnter := BrowserEnter;
7492 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7493 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7494 newBrowser.Navigate(BLANK_HTML);
7495 ShowWindow(newBrowser.Handle, SW_HIDE);
7497 BrowserNullTab.Browser.BringToFront;
7498 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7500 //
\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Ì
7501 //
\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Å
7502 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7503 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7504 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7505 Application.ProcessMessages;
7508 // *************************************************************************
7509 //!
\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é
7510 // *************************************************************************
7511 procedure TGikoForm.SetSelectComboBox();
7513 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7516 ToolButton: TToolButton;
7518 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7519 SelectComboBoxPanel.Visible := False;
7521 for i := ListToolBar.ControlCount - 1 downto 0 do
7523 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7525 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7526 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7527 SelectComboBoxPanel.Parent := ListToolBar;
7528 SelectComboBoxPanel.Visible := True;
7530 SelectComboBox.Left := 0;
7531 SelectComboBox.Top := 0;
7532 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7533 SelectComboBox.Width := SelectComboBoxPanel.Width -
7534 SelectComboBoxSplitter.Width;
7536 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7537 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7538 if ToolButton = nil then begin
7539 ToolButton := TToolButton.Create(ListToolBar);
7540 ToolButton.Name := DUMMYCOMPNAME;
7542 ToolButton.Style := tbsSeparator;
7543 ToolButton.Width := 0;
7544 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7545 ListToolBar.InsertControl(ToolButton);
7546 ToolButton.Visible := False;
7548 //
\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·
7549 if (i + 1) < ListToolBar.ControlCount then
7550 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7551 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7552 ListToolBar.Controls[ i + 1 ].Visible := False;
7555 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7556 ListToolBar.Controls[ i ].Visible := False;
7564 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\83}
\83E
\83X
\83_
\83E
\83\93\83C
\83x
\83\93\83g
7565 procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7566 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7573 if (TreeView.Selected <> nil) and
7574 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7575 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
7576 rect := TreeView.Selected.DisplayRect(true);
7577 //
\83A
\83C
\83R
\83\93\95ª
\82¾
\82¯
\8d¶
\82É
\82¸
\82ç
\82·
7578 if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
7579 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7580 //
\83N
\83\8a\83b
\83N
\82Æ
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82ð
\83R
\83R
\82Å
\94»
\92è
7581 if ssDouble in Shift then begin
7582 TreeDoubleClick( TreeView.Selected );
7584 TreeClick(TreeView.Selected);
7591 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
7592 procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7596 if ActionList <> nil then begin
7597 SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7599 for i := 0 to ActionList.ActionCount - 1 do begin
7601 FActionListGroupIndexes[i] :=
7602 TCustomAction(ActionList.Actions[i]).GroupIndex;
7603 TCustomAction(ActionList.Actions[i]).GroupIndex
7606 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7612 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
7613 procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7617 if ActionList <> nil then begin
7618 if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7619 for i := 0 to ActionList.ActionCount - 1 do begin
7621 TCustomAction(ActionList.Actions[i]).GroupIndex
7622 := FActionListGroupIndexes[i];
7624 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7630 //!
\82±
\82Ì
\83\8c\83X
\82ÌURL
\8eæ
\93¾
7631 procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
7635 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
7636 procedure TGikoForm.RefreshListView(Thread: TThreadItem);
7638 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
7639 if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin
7644 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
7645 MousePos: TPoint; var Handled: Boolean);
7648 coolBar: TGikoCoolBar;
7651 if (Sender <> nil) and (Sender is TGikoCoolBar) then begin
7652 coolBar := TGikoCoolBar(Sender);
7653 if (coolBar = MainCoolBar) then begin
7654 FToolBarSettingSender := tssMain;
7655 end else if (coolBar = ListCoolBar) then begin
7656 FToolBarSettingSender := tssList;
7657 end else if (coolBar = BrowserCoolBar) then begin
7658 FToolBarSettingSender := tssBrowser;
7660 FToolBarSettingSender := tssNone;
7662 pos := coolBar.ClientToScreen( MousePos );
7663 MainCoolBarPopupMenu.Popup( pos.X, pos.Y );
7668 procedure TGikoForm.TaskTrayIconMessage(var Msg: TMsg);
7670 //
\8d¶
\83N
\83\8a\83b
\83N
\82È
\82ç
\95\9c\8c³
\82·
\82é
7671 if (Msg.wParam = WM_LBUTTONUP) then begin
7675 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
7676 procedure TGikoForm.StoredTaskTray;
7679 if (FIconData.uID = 0) then begin
7680 FIconData.cbSize := SizeOf(TNotifyIconData);
7681 FIconData.uID := Self.Handle;
7682 FIconData.Wnd := Handle;
7683 FIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
7684 FIconData.uCallbackMessage := USER_TASKTRAY;
7685 FIconData.hIcon := Application.Icon.Handle; {
\83A
\83C
\83R
\83\93\8ew
\92è}
7686 FIconData.szTip := '
\83M
\83R
\83i
\83r'; {
\83q
\83\93\83g
\95¶
\8e\9a\97ñ}
7687 Shell_NotifyIcon(NIM_ADD, @FIconData);
7688 ShowEditors(SW_HIDE);
7689 ShowWindow(Self.Handle, SW_HIDE);
7694 //!
\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¦
7695 procedure TGikoForm.UnStoredTaskTray;
7699 Shell_NotifyIcon(NIM_DELETE, @FIconData);
7700 SetForegroundWindow(Application.Handle);
7705 // Action
\82©
\82ç
\8ai
\94[
\82µ
\82½
\82Æ
\82«
\82ÍTag
\82Ì
\92l
\82Í0
\88È
\8aO
7706 if (GikoDM.StoredTaskTrayAction.Tag = 0) then begin
7707 ShowWindow(Self.Handle, SW_RESTORE);
7709 ShowWindow(Self.Handle, SW_SHOW);
7711 ShowEditors(SW_SHOW);
7712 GikoDM.StoredTaskTrayAction.Tag := 0;
7716 \brief
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
7717 \param nCmdShow Windows.ShowWindow
\82É
\91\97\82é
\83p
\83\89\83\81\81[
\83^
\82Æ
\93¯
\82¶
7719 procedure TGikoForm.ShowEditors(nCmdShow: Integer);
7723 //
\83\8c\83X
\83G
\83f
\83B
\83^
\82ð
\92T
\82·
7724 for i := 0 to Screen.CustomFormCount - 1 do begin
7725 if TObject(Screen.CustomForms[i]) is TEditorForm then
7726 ShowWindow(Screen.CustomForms[i].Handle, nCmdShow);
7730 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83u
\83\89\83E
\83U
\8dì
\90¬
7731 procedure TGikoForm.CreateResPopupBrowser;
7733 if (FResPopupBrowser = nil) then begin
7734 FResPopupBrowser := TResPopupBrowser.Create(BrowserPanel);
7737 //! ListView
\82ÌD&D
\8eó
\82¯
\8eæ
\82è
7738 procedure TGikoForm.AcceptDropFiles(var Msg: TMsg);
7740 FileName: Array[0..MAX_PATH] of Char;
7744 datList: TStringList;
7747 //
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\94Â
\82Ì
\82Æ
\82«
\88È
\8aO
\82Í
\8b\91\94Û
7748 if GetActiveList is TBoard then begin
7749 Board := TBoard(GetActiveList);
7750 if MsgBox(Handle, Board.Title
7751 + '
\94Â
\82É
\93ü
\82ê
\82Ä
\82¢
\82¢
\82Å
\82·
\82©
\81H', '
\83M
\83R
\83i
\83r', MB_YESNO or MB_ICONQUESTION) = IDYES then begin
7752 //
\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
7753 datList := TStringList.Create;
7755 Cnt := DragQueryFile(Msg.WParam, $FFFFFFFF, FileName, SizeOf(FileName));
7756 for K := 0 to Cnt - 1 do begin
7757 DragQueryFile(Msg.WParam, K, FileName, SizeOf(FileName));
7758 // 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
7759 //
\83t
\83@
\83C
\83\8b\82Ì
\83`
\83F
\83b
\83N
7760 if (isValidFile(FileName)) then begin
7761 LogFolder := ExtractFilePath(Board.FilePath);
7762 if (FileExists( LogFolder + ExtractFileName(FileName))) then begin
7763 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);
7765 if (not DirectoryExists(LogFolder)) then begin
7766 if (not GikoSys.ForceDirectoriesEx(LogFolder) ) then begin
7767 GikoUtil.MsgBox(Handle, LogFolder + '
\82Ì
\90¶
\90¬
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7770 if (not Windows.CopyFile(FileName, PChar(LogFolder + ExtractFileName(FileName)), true)) then begin
7771 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);
7773 datList.Add(ExtractFileName(FileName));
7778 DragFinish(Msg.WParam);
7779 if (datList.Count > 0) then begin
7780 GikoSys.AddOutofIndexDat(Board, datList, False);
7781 ShowMessage(IntToStr(datList.Count) + '
\8cÂ
\82Ìdat
\83t
\83@
\83C
\83\8b\82ª
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82µ
\82½
\81B' );
7782 if GikoForm.TreeView.Visible then
7783 GikoForm.TreeView.Refresh;
7784 if GikoForm.ListView.Visible then
7785 GikoForm.ListView.Refresh;
7787 ShowMessage('
\88ê
\82Â
\82à
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B' );
7795 ShowMessage('
\94Â
\82ð
\95\
\8e¦
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
7799 //!
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
7800 function TGikoForm.isValidFile(FileName: String) : boolean;
7805 //
\91¶
\8dÝ
\82·
\82é
\82©
\81A
\8ag
\92£
\8eqdat
\81A
\83t
\83@
\83C
\83\8b\96¼
7806 if ( not FileExists(FileName) ) then begin
7808 GikoUtil.MsgBox(Handle, FileName + '
\82Í
\91¶
\8dÝ
\82µ
\82Ü
\82¹
\82ñ
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7809 end else if (ExtractFileExt(ExtractFileName(FileName)) <> '.dat' ) then begin
7811 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);
7813 //
\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
7815 dt := GikoSys.GetCreateDateFromName(FileName);
7816 if ((UnixToDateTime(ZERO_DATE) + OffsetFromUTC) = dt) then begin
7818 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);
7822 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);
7827 procedure TGikoForm.ResPopupClearTimerTimer(Sender: TObject);
7829 ResPopupClearTimer.Enabled := False;
7830 if ResPopupClearTimer.Tag = 0 then begin
7831 FResPopupBrowser.Clear;
7833 FResPopupBrowser.CurrentBrowser.ChildClear;