6 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
7 OleCtrls, ComCtrls, ExtCtrls, Menus, StdCtrls, MMSystem, DateUtils,
15 IdHTTP, ActiveX, ActnList, ImgList,
16 ToolWin, Buttons, IdComponent, UrlMon, Tabs, IdGlobal, StrUtils,
17 CommCtrl, Dialogs, GikoSystem, Setting, BoardGroup, ThreadControl, ItemDownload,
18 Editor, RoundData, GikoPanel, Favorite, HTMLDocumentEvent,
19 {HintWindow,} GikoCoolBar, GikoListView, Search, ExternalBoardManager,
20 ExternalBoardPlugInMain, StdActns, Variants, ExtActns,IdTCPConnection,
21 IdBaseComponent, IdTCPClient, AppEvnts, BrowserRecord, MoveHistoryItem,
22 ShellAPI,Preview, HistoryList, ResPopupBrowser, ExtPreviewDatamodule;
27 USER_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 ListNameToolBar: TToolBar;
197 ListNameLabel: TLabel;
199 BrowserNameToolBar: TToolBar;
200 ItemBoardImage: TImage;
201 BrowserBoardNameLabel: TLabel;
203 BrowserNameLabel: TLabel;
210 TreeSelectNameURLPupupMenu: TMenuItem;
214 BrowserTabToolBar: TToolBar;
215 BrowserTab: TTabControl;
226 FavoriteMenu: TMenuItem;
228 BoardFavoriteAddMenu: TMenuItem;
229 ThreadFavoriteAddMenu: TMenuItem;
231 TreeSelectFavoriteAddPupupMenu: TMenuItem;
232 FavoriteTreeView: TTreeView;
233 StateIconImageList: TImageList;
235 TopRightPanel: TPanel;
238 TopCoolPanel: TPanel;
239 MainCoolBar: TGikoCoolBar;
240 MenuToolBar: TToolBar;
241 StdToolBar: TToolBar;
242 AddressToolBar: TToolBar;
243 AddressComboBox: TComboBox;
244 MoveToToolButton: TToolButton;
245 AddressImageList: TImageList;
246 AddressToolBarMenu: TMenuItem;
256 PreviewTimer: TTimer;
257 MonazillaWebPageAction1: TMenuItem;
264 ChevronPopupMenu: TPopupMenu;
268 LinkToolBar: TToolBar;
273 LinkBarPopupMenu: TPopupMenu;
275 ThreadPopupMenu: TPopupMenu;
276 MenuItem4: TMenuItem;
277 MenuItem5: TMenuItem;
278 MenuItem6: TMenuItem;
281 SelectItemNameCopyAction1: TMenuItem;
284 NameCopyPMenu: TMenuItem;
285 SelectComboBox: TComboBox;
286 MainCoolBarPopupMenu: TPopupMenu;
287 StdToolBarVisiblePMenu: TMenuItem;
288 AddressToolBarVisiblePMenu: TMenuItem;
289 LinkToolBarVisiblePMenu: TMenuItem;
316 IndividualAbon1: TMenuItem;
318 IndividualAbon2: TMenuItem;
319 AntiIndivAbonMenuItem: TMenuItem;
320 AntiIndividualAbon: TMenuItem;
324 SearchBoardName: TMenuItem;
325 TreeSelectLogDeleteSeparator: TMenuItem;
328 FavoriteTreePopupMenu: TPopupMenu;
329 FavoriteTreeRenamePopupMenu: TMenuItem;
330 FavoriteTreeNewFolderPopupMenu: TMenuItem;
332 FavoriteTreeDeletePopupMenu: TMenuItem;
333 FavoriteToolBar: TToolBar;
334 FavoriteAddToolButton: TToolButton;
335 FavoriteArrangeToolButton: TToolButton;
336 FavoriteTreeBrowseFolderPopupMenu: TMenuItem;
338 FavoriteTreeReloadPopupMenu: TMenuItem;
340 FavoriteTreeURLCopyPopupMenu: TMenuItem;
341 FavoriteTreeNameCopyPopupMenu: TMenuItem;
342 FavoriteTreeLogDeletePopupMenu: TMenuItem;
344 FavoriteTreeNameURLCopyPopupMenu: TMenuItem;
346 ExportFavoriteFileAction1: TMenuItem;
357 TreeSelectLogDeletePopupMenu: TMenuItem;
359 BBSSelectPopupMenu: TPopupMenu;
360 PlugInMenu: TMenuItem;
361 TreeSelectNamePupupMenu: TMenuItem;
362 BrowserPanel: TPanel;
364 SelectThreadSave: TMenuItem;
368 OpenLogFolder: TMenuItem;
369 Browser: TWebBrowser;
372 ResRangePopupMenu: TPopupMenu;
373 ResRangeHundPMenuItem: TMenuItem;
374 ResRangeKokoPMenuItem: TMenuItem;
375 ResRangeNewPMenuItem: TMenuItem;
376 ResRangeAllPMenuItem: TMenuItem;
377 BrowsBoradHeadAction1: TMenuItem;
378 ThreadRangePopupMenu: TPopupMenu;
385 ResRangeSelectPMenuItem: TMenuItem;
386 ListColumnPopupMenu: TPopupMenu;
395 SelectComboBoxPanel: TPanel;
396 SelectComboBoxSplitter: TImage;
399 GikoApplicationEvents: TApplicationEvents;
406 FavoriteTreeItemNameCopyPopupMenu: TMenuItem;
409 SaveThreadFile: TMenuItem;
414 SameBoardThreadItem: TMenuItem;
419 ResPopupClearTimer: TTimer;
420 procedure FormCreate(Sender: TObject);
421 procedure FormDestroy(Sender: TObject);
422 procedure BrowserStatusTextChange(Sender: TObject;
423 const Text: WideString);
424 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
425 procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
426 var AllowChange: Boolean);
427 procedure ListViewKeyDown(Sender: TObject; var Key: Word;
429 procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
430 procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
431 Button: TToolButton; State: TCustomDrawState;
432 var DefaultDraw: Boolean);
433 procedure BrowserBeforeNavigate2(Sender: TObject;
434 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
435 Headers: OleVariant; var Cancel: WordBool);
436 procedure TreeViewCustomDraw(Sender: TCustomTreeView;
437 const ARect: TRect; var DefaultDraw: Boolean);
438 procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
439 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
440 procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
441 procedure ListViewCustomDraw(Sender: TCustomListView;
442 const ARect: TRect; var DefaultDraw: Boolean);
443 procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
444 Shift: TShiftState; X, Y: Integer);
445 procedure TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
446 procedure MessageListViewResize(Sender: TObject);
447 procedure CabinetVisible( isVisible : Boolean );
448 procedure FormResize(Sender: TObject);
449 procedure ListPopupMenuPopup(Sender: TObject);
450 procedure TreePopupMenuPopup(Sender: TObject);
451 procedure BrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
452 var Cancel: WordBool);
453 procedure ListSplitterMoved(Sender: TObject);
454 procedure BrowserTabChange(Sender: TObject);
455 procedure BrowserTabMouseDown(Sender: TObject; Button: TMouseButton;
456 Shift: TShiftState; X, Y: Integer);
457 procedure BrowserTabDragOver(Sender, Source: TObject; X, Y: Integer;
458 State: TDragState; var Accept: Boolean);
459 procedure BrowserTabDragDrop(Sender, Source: TObject; X, Y: Integer);
460 procedure BrowserTabMouseMove(Sender: TObject; Shift: TShiftState; X,
462 procedure BrowserDocumentComplete(Sender: TObject;
463 const pDisp: IDispatch; var URL: OleVariant);
464 procedure RoundNamePopupMenuPopup(Sender: TObject);
465 procedure FormShow(Sender: TObject);
466 procedure BrowserTabToolBarResize(Sender: TObject);
467 procedure FavoriteMenuClick(Sender: TObject);
468 procedure MainCoolBarResize(Sender: TObject);
469 procedure AddressToolBarResize(Sender: TObject);
470 procedure AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
472 procedure BrowserEnter(Sender: TObject);
473 procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
474 procedure PreviewTimerTimer(Sender: TObject);
475 procedure MessageHideButtonClick(Sender: TObject);
476 procedure HistoryAllClearToolButtonClick(Sender: TObject);
477 procedure MainCoolBarBandInfo(Sender: TObject;
478 var BandInfo: PReBarBandInfoA);
479 procedure MainCoolBarChevronClick(Sender: TObject;
480 RebarChevron: PNMRebarChevron);
481 procedure ListCoolBarBandInfo(Sender: TObject;
482 var BandInfo: PReBarBandInfoA);
483 procedure ListCoolBarChevronClick(Sender: TObject;
484 RebarChevron: PNMRebarChevron);
485 procedure BrowserCoolBarBandInfo(Sender: TObject;
486 var BandInfo: PReBarBandInfoA);
487 procedure BrowserCoolBarChevronClick(Sender: TObject;
488 RebarChevron: PNMRebarChevron);
489 procedure ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
490 procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
491 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
492 procedure SelectComboBoxChange(Sender: TObject);
493 procedure SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
495 procedure SelectComboBoxExit(Sender: TObject);
496 procedure SelectComboBoxSplitterMouseMove(Sender: TObject;
497 Shift: TShiftState; X, Y: Integer);
498 procedure SelectComboBoxSplitterMouseDown(Sender: TObject;
499 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
500 procedure SelectComboBoxSplitterMouseUp(Sender: TObject;
501 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
502 procedure StatusBarResize(Sender: TObject);
503 procedure SelectComboBoxEnter(Sender: TObject);
504 procedure FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
506 procedure FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
507 procedure FavoriteTreeViewEdited(Sender: TObject; Node: TTreeNode;
509 procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
511 procedure FavoriteTreePopupMenuPopup(Sender: TObject);
512 procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
513 procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
514 Shift: TShiftState; X, Y: Integer);
515 procedure LinkToolBarDragOver(Sender, Source: TObject; X, Y: Integer;
516 State: TDragState; var Accept: Boolean);
517 procedure FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
519 procedure FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
520 procedure BrowserTabContextPopup(Sender: TObject; MousePos: TPoint;
521 var Handled: Boolean);
522 procedure BrowserTabPopupMenuPopup(Sender: TObject);
523 procedure BrowserTabResize(Sender: TObject);
524 procedure TreeViewKeyDown(Sender: TObject; var Key: Word;
526 procedure FavoriteTreeViewMouseDown(Sender: TObject;
527 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
528 procedure MessagePanelResize(Sender: TObject);
530 procedure SelectTimerTimer(Sender: TObject);
531 procedure ListViewColumnRightClick(Sender: TObject;
532 Column: TListColumn; Point: TPoint);
533 procedure ListViewCustomDrawItem(Sender: TCustomListView;
534 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
535 procedure FormActivate(Sender: TObject);
536 procedure BrowserPanelResize(Sender: TObject);
537 procedure MenuToolBarResize(Sender: TObject);
538 procedure ListToolBarResize(Sender: TObject);
539 procedure BrowserToolBarResize(Sender: TObject);
540 procedure KokoPopupMenuPopup(Sender: TObject);
541 procedure ListViewKeyUp(Sender: TObject; var Key: Word;
543 procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
544 var AllowEdit: Boolean);
545 procedure CabinetCloseSpeedButtonClick(Sender: TObject);
546 procedure FavoriteArrangeToolButtonClick(Sender: TObject);
547 procedure GikoApplicationEventsMessage(var Msg: tagMSG;
548 var Handled: Boolean);
549 procedure GikoApplicationEventsDeactivate(Sender: TObject);
550 procedure GikoApplicationEventsException(Sender: TObject; E: Exception);
551 procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
552 Shift: TShiftState; X, Y: Integer);
553 procedure GetResURLMenuClick(Sender: TObject);
554 procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
555 var Handled: Boolean);
556 procedure ResPopupClearTimerTimer(Sender: TObject);
559 FEnabledCloseButton: Boolean;
560 FClickNode: TTreeNode;
562 FPreviewBrowser: TPreviewBrowser;
564 FBrowserSizeHeight: Integer;
565 FBrowserSizeWidth: Integer;
566 FTabHintIndex: Integer;
567 FListStyle: TViewStyle; //
\83\8a\83X
\83g
\83A
\83C
\83R
\83\93\83X
\83^
\83C
\83\8b
568 FItemNoVisible: Boolean; //
\83\8a\83X
\83g
\94Ô
\8d\86\95\
\8e¦
\83t
\83\89\83O
569 FViewType: TGikoViewType; //
\83\8a\83X
\83g
\83A
\83C
\83e
\83\80\95\
\8e¦
\83^
\83C
\83v
570 FActiveList: TObject;
571 FActiveContent: TBrowserRecord; //
573 FHistoryList: THistoryList; //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
574 FTreeType: TGikoTreeType;
578 FDownloadTitle: string; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\83^
\83C
\83g
\83\8b\96¼
579 FDownloadMax: Integer; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\8dÅ
\91å
\83T
\83C
\83Y
580 FEvent: THTMLDocumentEventSink;//
\83u
\83\89\83E
\83U
\83h
\83L
\83\85\83\81\83\93\83g
\83C
\83x
\83\93\83g
581 IsDraggingSelectComboBox : Boolean;
582 DraggingSelectComboBoxPosition : TPoint;
583 FSearchDialog: TSearchDialog;
584 FDropSpaceNode: TTreeNode;
585 FDragTime : Cardinal; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
586 FDragButton : TToolButton; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
\82ÉDrag
\82µ
\82Ä
\82éButton
\95Û
\91¶
587 FDragWFirst : Boolean; ///< WebTab
\82ÌD&D
\97p
588 FListViewBackGroundColor : TColor; ///< ListView
\82ÌBackGroundColor
589 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¦
590 FOddColor : TColor; ///<
\82»
\82Ì
\90F
591 FSelectResWord : string; ///<
\83\8c\83X
\8di
\8d\9e\83\8f\81[
\83h
592 FIsIgnoreResize : TResizeType; ///<
\83\8a\83T
\83C
\83Y
\83C
\83x
\83\93\83g
\82ð
\96³
\8e\8b\82·
\82é
\82©
\82Ç
\82¤
\82©
593 FIsMinimize : TMinimizeType; ///<
\8dÅ
\8f¬
\89»
\82µ
\82Ä
\82¢
\82é
\8dÅ
\92\86\82©
594 FOldFormWidth : Integer; ///<
\92¼
\91O
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\95\9d
595 FToolBarSettingSender : TToolBarSettingSenderType; ///<
\83c
\81[
\83\8b\83o
\81[
\90Ý
\92è
\82ð
\83N
\83\8a\83b
\83N
\82µ
\82½
\83N
\81[
\83\8b\83o
\81[
596 FMouseDownPos : TPoint; ///<
\83u
\83\89\83E
\83U
\83^
\83u
\82Å
\83}
\83E
\83X
\82ð
\89\9f\82µ
\82½
\82Æ
\82«
\82Ì
\8dÀ
\95W
598 FResRangeMenuSelect : Longint; ///< ResRangeButton
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\8d\80\96Ú (
\83t
\83H
\81[
\83}
\83b
\83g
\82Í ResRange
\8cÝ
\8a·)
600 FIsHandledWheel : Boolean; ///<
\8aù
\82É
\8eó
\82¯
\8eæ
\82Á
\82½ WM_MOUSEWHEEL
\82©
\82Ç
\82¤
\82©
601 DiffComp: Boolean; //Add by Genyakun
\83X
\83\8c\82ª
\8dX
\90V
\82³
\82ê
\82½
\82Æ
\82«
\82ÉTrue
\82É
\82È
\82é
602 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ñ
603 FPreviewBrowserRect: TRect; ///<
\83v
\83\8c\83r
\83\85\81[
\82Ì
\95\
\8e¦
\88Ê
\92u
\82ð
\8bL
\89¯
\82·
\82é
604 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ñ
605 FResPopupBrowser: TResPopupBrowser;
606 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
607 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
608 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
609 procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
610 procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
612 procedure ListDoubleClick(Shift: TShiftState);
613 function Hook(var Message: TMessage): Boolean;
614 procedure AddRoundNameMenu(MenuItem: TMenuItem);
615 procedure SetMenuFont;
616 procedure CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
617 procedure FavoriteClick(Sender: TObject; ActiveTab: Boolean); overload;
618 procedure FavoriteClick(Sender: TObject); overload;
619 procedure FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
620 function OnDocumentContextMenu(Sender: TObject): WordBool;
621 function GetWidthAllToolButton(ToolBar: TToolBar): Integer;
622 procedure MenuBarChevronMenu;
623 procedure LinkBarChevronMenu;
624 procedure ToolBarChevronMenu(ToolBar: TToolBar);
625 procedure LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
626 procedure LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
627 procedure LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
628 procedure LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
629 procedure LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
630 function TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
631 procedure FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
632 procedure FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
633 procedure FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
635 procedure SetListViewBackGroundColor(value: TColor);
636 procedure BBSMenuItemOnClick( Sender : TObject );
637 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
638 procedure SaveCoolBarSettings;
639 procedure SaveMainCoolBarSettings;
640 procedure SaveBoardCoolBarSettings;
641 procedure SaveBrowserCoolBarSettings;
642 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
643 procedure LoadCoolBarSettings;
644 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
645 procedure OnMinimize;
646 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½
647 procedure OnMinimized;
648 /// TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
649 procedure TreeClick( Node : TTreeNode );
650 /// TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
651 procedure TreeDoubleClick( Node : TTreeNode );
652 ///
\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
653 procedure SetBBSMenu;
654 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
655 procedure ListColumnPopupMenuOnClick( Sender : TObject );
656 //!
\8di
\82è
\8d\9e\82Ý
\95¶
\8e\9a\97ñ
\90Ý
\92è
657 procedure SetSelectWord( const text : string );
658 //
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
659 function GetScreenCursor(): TCursor;
660 //
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
661 procedure SetScreenCursor(Cursor : TCursor);
662 //!
\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¬
663 procedure CreateControlThread();
664 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
665 procedure CreateBrowsers(count: Integer);
666 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
667 procedure GetGroupIndex(ActionList: TActionList);
668 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
669 procedure SetGroupIndex(ActionList: TActionList);
670 //!
\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é)
671 procedure OpenThreadItem(Thread: TThreadItem; URL: String);
672 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
673 procedure RefreshListView(Thread: TThreadItem);
674 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
675 procedure ClearThreadRengeAction;
676 //!
\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¦
677 procedure UnStoredTaskTray;
678 //!
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
679 procedure ShowEditors(nCmdShow: Integer);
680 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
681 procedure ReleaseOldestBrowser;
682 //!
\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Á
683 procedure AddMenuSameBoardThread;
684 //!
\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
685 procedure SameBoardThreadSubItemOnClick(Sender: TObject);
686 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83u
\83\89\83E
\83U
\8dì
\90¬
687 procedure CreateResPopupBrowser;
688 //!
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
689 function isValidFile(FileName: String) : boolean;
690 //! ListView
\82ÌD&D
\8eó
\82¯
\8eæ
\82è
691 procedure AcceptDropFiles(var Msg: TMsg);
693 procedure CreateParams(var Params: TCreateParams); override;
694 procedure WndProc(var Message: TMessage); override;
695 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
696 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
697 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
700 LastRoundTime: TDateTime;
701 BrowserNullTab: TBrowserRecord;
702 FControlThread: TThreadControl;
703 FIconData : TNotifyIconData;
704 procedure MoveToURL(const inURL: string);
705 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
707 function GetHttpState: Boolean;
708 procedure SetEnabledCloseButton(Enabled: Boolean);
709 function GetTreeNode(Data: TObject): TTreeNode;
710 procedure ListViewAllSelect;
711 property ListStyle: TViewStyle read FListStyle write FListStyle;
712 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
713 property ViewType: TGikoViewType read FViewType write FViewType;
714 property NameCookie: string read FNameCookie write FNameCookie;
715 property MailCookie: string read FMailCookie write FMailCookie;
716 property ClickNode: TTreeNode read FClickNode write FClickNode;
717 property TreeType: TGikoTreeType read FTreeType write FTreeType;
718 property ActiveContent: TBrowserRecord read FActiveContent write FActiveContent;
719 property ResRangeMenuSelect: Longint read FResRangeMenuSelect write FResRangeMenuSelect;
720 property SelectResWord : string read FSelectResWord write FSelectResWord;
721 property BrowserSizeWidth: Integer read FBrowserSizeWidth write FBrowserSizeWidth;
722 property BrowserSizeHeight: Integer read FBrowserSizeHeight write FBrowserSizeHeight;
723 property SearchDialog: TSearchDialog read FSearchDialog write FSearchDialog;
724 property ToolBarSettingSender : TToolBarSettingSenderType
725 read FToolBarSettingSender write FToolBarSettingSender;
726 property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
727 property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
728 property WorkCount: Integer read FWorkCount write FWorkCount;
729 procedure SetContent(inThread: TBrowserRecord);
730 function GetActiveContent(popup :Boolean = false): TThreadItem;
731 function GetActiveList: TObject;
733 procedure SetListViewType(AViewType: TGikoViewType); overload;
734 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
735 procedure PlaySound(SoundEventName: string);
736 procedure ShowBBSTree( inBBS : TBBS );
737 procedure ShowBBSTreeOld( inBBS : TBBS );
738 procedure ShowHistoryTree;
739 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
740 procedure SetBrowserTabState;
741 procedure SetToolBarPopup;
742 procedure ShowFavoriteAddDialog( Item : TObject );
743 procedure FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
744 procedure RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
745 property ListViewBackGroundColor: TColor read FListViewBackGroundColor write SetListViewBackGroundColor;
746 property UseOddResOddColor : Boolean read FUseOddResOddColor write FUseOddResOddColor;
747 property OddColor : TColor read FOddColor write FOddColor;
748 function FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
749 procedure OnPlugInMenuItem( Sender : TObject );
750 procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
751 /// 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Å
752 procedure ActiveListColumnSave;
753 procedure SetActiveList(Obj: TObject);
754 property ActiveList: TObject read GetActiveList write SetActiveList;
755 /// CoolBar
\82ª
\83T
\83C
\83Y
\95Ï
\8dX
\82³
\82ê
\82½
756 procedure CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
757 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
758 procedure IndividualAbonID(Atype : Integer);
759 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
760 procedure IndividualAbon(Atag, Atype : Integer);
761 //
\93¯
\88êID
\82ðNG
\83\8f\81[
\83h
\82É
\93o
\98^
762 procedure AddIDtoNGWord(invisible : boolean);
763 //
\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Ý
764 procedure RepaintAllTabsBrowser();
765 //
\83\8a\83\93\83N
\83o
\81[
\90Ý
\92è
766 procedure SetLinkBar;
767 procedure FavoriteBrowseFolder( node: TTreeNode );
768 //
\83X
\83\8c\83b
\83h
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
769 procedure DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
770 //
\94Â
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
771 procedure DownloadList(Board: TBoard; ForceDownload: Boolean = False);
772 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
773 procedure DeleteHistory( threadItem: TThreadItem );
774 //
\83^
\83u
\82ð
\8dí
\8f\9c \83X
\83\8c\83b
\83h
\8ew
\92è
775 procedure DeleteTab(ThreadItem: TThreadItem); overload;
776 //
\83^
\83u
\82ð
\8dí
\8f\9c \83u
\83\89\83E
\83U
\83\8c\83R
\81[
\83h
\81i
\83^
\83u
\81j
\8ew
\92è
777 procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
778 //
\83^
\83u
\8dí
\8f\9c\81i
\8eÀ
\91\95\95\94\81j
779 procedure DeleteTab(index, selectIndex: Integer); overload;
780 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
781 procedure BrowserMovement(const AName: string); overload;
782 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
783 procedure BrowserMovement(scroll: Integer); overload;
784 //Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
785 function GetMainForm(): TComponent;
786 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
787 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
788 procedure OnGestureStart(Sender: TObject);
789 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
790 procedure OnGestureMove(Sender: TObject);
791 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
792 procedure OnGestureEnd(Sender: TObject);
793 ///
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
794 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
795 //ListView
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\82ð
\8eæ
\93¾
\82·
\82é
796 procedure SelectListItem(List: TList);
797 //
\8ew
\92è
\82µ
\82½
\83\8c\83X
\82ð
\83R
\83s
\81[
\82·
\82é
798 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
800 procedure ModifySelectList;
802 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
804 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
806 procedure SetSelectRoundName(Sender: TObject);
808 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
810 function WebBrowserClick(Sender: TObject): WordBool;
811 //!
\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é
812 procedure SetSelectComboBox();
814 //!
\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
815 procedure TaskTrayIconMessage(var Msg : TMsg); message WM_USER + 2010;
816 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
817 procedure StoredTaskTray;
819 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
822 TFavoriteMenuItem = class(TMenuItem)
826 property Data: Pointer read FData write FData;
829 TBBSMenuItem = class(TMenuItem)
833 property Data: Pointer read FData write FData;
836 TLinkToolButton = class(TToolButton)
840 property Data: Pointer read FData write FData;
849 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
850 YofUtils, ToolBarUtil, ToolBarSetting,
851 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
852 FavoriteArrange, AddressHistory, Gesture,
853 About, Option, Round, Splash, Sort, ListSelect, Imm,
854 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
855 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
856 InputAssistDataModule, Types, ReplaceDataModule;
859 BLANK_HTML: string = 'about:blank';
860 BROWSER_COUNT = 5; //
\83u
\83\89\83E
\83U
\82Ì
\90\94
862 DandD_THRESHOLD = 5; //D&D
\82Ìè
\87\92l
\81ipixcel)
863 //
\83v
\83\8c\83r
\83\85\81[
\83t
\83@
\83C
\83\8b\96¼
864 HTML_FILE_NAME = 'temp_preview.html';
865 //
\83\81\83b
\83Z
\81[
\83WID
866 USER_TREECLICK = WM_USER + 2000;
867 USER_RESIZED = WM_USER + 2001;
868 USER_MINIMIZED = WM_USER + 2002;
869 USER_SETLINKBAR = WM_USER + 2003;
870 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
871 USER_TASKTRAY = WM_USER + 2010;
874 procedure TGikoForm.CreateParams(var Params: TCreateParams);
877 if FormStyle in [fsNormal, fsStayOnTop] then begin
878 if BorderStyle in [bsSingle, bsSizeable] then begin
879 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
880 Params.WndParent := 0;
885 procedure TGikoForm.FormCreate(Sender: TObject);
887 TVS_NOTOOLTIPS = $0080;
893 wp: TWindowPlacement;
897 Writeln('============================================================');
898 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
900 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
901 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¢');
902 Writeln('============================================================');
905 Sort.SetSortDate(Now());
907 FTreeType := gttNone;
908 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô
910 Application.HookMainWindow(Hook);
911 FIsIgnoreResize := rtResizing;
912 //ActionList
\82ÌGuoupIndex
\82ð
\95Û
\91¶
\82µ
\82Ä
\81A0
\82É
\83N
\83\8a\83A
\82·
\82é
\81B
913 //(
\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¢)
914 //
\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
915 GetGroupIndex(GikoDM.GikoFormActionList);
916 FSearchDialog := nil;
917 FResPopupBrowser := nil;
918 CreateBrowsers(BROWSER_COUNT);
921 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
924 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
925 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
927 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
928 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
930 EnabledCloseButton := True;
932 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
933 ListView.ViewStyle := GikoSys.Setting.ListStyle;
935 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
937 AnimePanel.Left := 0;
939 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
941 //
\83L
\83\83\83r
\83l
\83b
\83g
942 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
944 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
945 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
946 GikoDM.MsgBarVisibleActionExecute(nil);
947 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
949 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
950 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
951 GikoDM.StatusBarVisibleActionExecute(nil);
953 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
954 TreeView.Items.BeginUpdate;
955 FavoriteTreeView.Items.BeginUpdate;
956 ListView.Items.BeginUpdate;
958 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
959 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
960 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
961 TreeView.Color := GikoSys.Setting.CabinetBackColor;
962 FavoriteTreeView.Font.Assign(TreeView.Font);
963 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
965 ListView.Font.Name := GikoSys.Setting.ListFontName;
966 ListView.Font.Size := GikoSys.Setting.ListFontSize;
967 ListView.Font.Color := GikoSys.Setting.ListFontColor;
968 ListView.Font.Style := [];
969 if GikoSys.Setting.ListFontBold then
970 ListView.Font.Style := [fsbold];
971 if GikoSys.Setting.ListFontItalic then
972 ListView.Font.Style := ListView.Font.Style + [fsitalic];
974 ListViewBackGroundColor := clWhite; //
\83f
\83t
\83H
\83\8b\83g
\82É
\90Ý
\92è
\82µ
\82½
\82Ì
\82¿
975 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; //
\83\86\81[
\83U
\92è
\8b`
\82É
\95Ï
\8dX
976 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
977 FOddColor := GikoSys.Setting.OddColor;
980 TreeView.Items.EndUpdate;
981 FavoriteTreeView.Items.EndUpdate;
982 ListView.Items.EndUpdate;
984 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
985 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
987 //
\83~
\83\85\81[
\83g
\82Ì
\8fó
\91Ô
\82ð
\90Ý
\92è
988 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
990 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
991 FResRangeMenuSelect := GikoSys.ResRange;
992 case GikoSys.ResRange of
995 GikoDM.AllResAction.Execute;
999 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
1000 GikoDM.SelectResAction.Checked := True;
1003 case FResRangeMenuSelect of
1004 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
1005 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
1006 100: GikoDM.OnlyAHundredResAction.Checked := True;
1010 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\95\
\8e¦
\94Í
\88Í
1011 case GikoSys.Setting.ThreadRange of
1014 GikoDM.AllItemAction.Checked := True;
1019 GikoDM.LogItemAction.Checked := True;
1024 GikoDM.NewItemAction.Checked := True;
1029 GikoDM.LiveItemAction.Checked := True;
1030 ViewType := gvtLive;
1034 GikoDM.ArchiveItemAction.Checked := True;
1035 ViewType := gvtArch;
1040 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
1041 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1042 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1043 BrowserTab.Font.Style := [];
1044 if GikoSys.Setting.BrowserTabFontBold then
1045 BrowserTab.Font.Style := [fsBold];
1046 if GikoSys.Setting.BrowserTabFontItalic then
1047 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1049 BrowserTab.DoubleBuffered := True;
1050 FDragWFirst := false;
1051 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1053 //
\83u
\83\89\83E
\83U
\83^
\83u
1054 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1056 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1057 GikoDM.BrowserTabTopAction.Checked := True;
1059 GikoDM.BrowserTabBottomAction.Checked := True;
1062 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1063 GikoDM.BrowserTabTabStyleAction.Checked := True;
1064 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1065 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1067 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1070 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1071 ProgressBar.Parent := StatusBar;
1072 ProgressBar.Top := 2;
1073 ProgressBar.Left := 0;
1074 ProgressBar.Width := StatusBar.Panels[0].Width;
1075 ProgressBar.Height := StatusBar.Height - 2;
1076 ProgressBar.Position := 0;
1078 //
\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Æ)
1079 InitializeBoardPlugIns;
1081 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1082 GikoSys.ListBoardFile;
1083 //
\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É
1085 //
\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è
1086 if (SplashWindow <> nil) then begin
1087 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1091 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1092 for i := Length(BBSs) - 1 downto 0 do begin
1093 if not BBSs[i].IsBoardFileRead then
1094 GikoSys.ReadBoardFile(BBSs[i]);
1096 if SplashWindow <> nil then begin
1097 SplashWindow.ProgressBar.StepBy(20);
1098 SplashWindow.Update;
1102 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1103 RoundList := TRoundList.Create;
1104 RoundList.LoadRoundBoardFile;
1105 RoundList.LoadRoundThreadFile;
1107 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1108 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1109 Style := Style or TVS_NOTOOLTIPS;
1110 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1112 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1113 TreeView.Align := alClient;
1114 FavoriteTreeView.Align := alClient;
1115 FavoriteTreeView.Visible := False;
1117 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1120 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1121 wp.length := sizeof(wp);
1122 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1123 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1124 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1125 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1126 wp.showCmd := SW_HIDE;
1127 SetWindowPlacement(Handle, @wp);
1130 if GikoSys.Setting.WindowMax then
1131 WindowState := wsMaximized;
1133 //
\83M
\83R
\83A
\83j
\83\81
1135 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1136 if FileExists(FileName) then
1137 Animate.FileName := FileName;
1145 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1146 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1147 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1150 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1151 FHistoryList := THistoryList.Create;
1153 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1154 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1155 TreeView, FTreeType);
1157 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1158 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1159 FavoriteDM.ReadFavorite;
1161 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1162 GikoDM.ArrangeAction.Execute;
1164 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1165 case GikoSys.Setting.ListWidthState of
1167 ViewPanel.Width := 1;
1168 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1169 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1172 ViewPanel.Width := GikoSys.Setting.ListWidth;
1173 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1174 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1177 ViewPanel.Width := GikoSys.Setting.ListWidth;
1178 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1179 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1183 case GikoSys.Setting.ListHeightState of
1185 ViewPanel.Height := 1;
1186 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1187 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1190 ViewPanel.Height := GikoSys.Setting.ListHeight;
1191 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1192 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1195 ViewPanel.Height := GikoSys.Setting.ListHeight;
1196 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1197 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1202 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1203 CreateControlThread();
1205 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1206 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1208 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1211 BrowserBoardNameLabel.Caption := '';
1212 BrowserNameLabel.Caption := '';
1215 FTabHintIndex := -1;
1217 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1218 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1219 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1221 MakeDefaultINIFile();
1222 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1223 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1224 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1225 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1228 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1229 SetSelectComboBox();
1231 //
\83A
\83h
\83\8c\83X
\83o
\81[
1232 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1234 //
\83\8a\83\93\83N
\83o
\81[
1236 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1238 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1239 if not FileExists(GikoSys.GetBoardFileName) then begin
1240 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
1241 + '
\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
1242 + '
\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';
1243 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1244 GikoDM.NewBoardAction.Execute;
1247 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1248 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1250 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1251 // FLastRoundTime := 0;
1253 ListView.OnData := TListViewUtils.ListViewData;
1255 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1256 CabinetVisible( False );
1257 if GikoSys.Setting.CabinetVisible then begin
1258 i := CabinetSelectPopupMenu.Items.Count - 1;
1259 if GikoSys.Setting.CabinetIndex = i - 1 then
1260 GikoDM.CabinetHistoryAction.Execute
1261 else if GikoSys.Setting.CabinetIndex = i then
1262 GikoDM.CabinetFavoriteAction.Execute
1264 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1265 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1266 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1267 FIsIgnoreResize := rtResizing;
1268 GikoDM.CabinetBBSAction.Execute;
1271 ShowBBSTreeOld( BBSs[ 0 ] );
1272 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1275 //
\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
1276 for i := 1 to ParamCount do begin
1277 MoveToURL(ParamStr(i));
1280 GikoDM.RepaintStatusBar;
1281 StatusBarResize(Sender);
1283 dummy1.Caption := ItemReservPMenu.Caption;
1284 dummy1.Hint := ItemReservPMenu.Hint;
1286 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1287 MouseGesture := TMouseGesture.Create;
1289 {$IFDEF SPAM_FILTER_ENABLED}
1290 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1291 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1294 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1295 GikoSys.SetGikoMessage;
1297 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1298 if GikoSys.Setting.AutoLogin then
1299 GikoDM.LoginAction.Execute;
1301 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1303 //
\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è
1304 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1305 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1307 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\8f\89\8aú
\89»
1308 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1310 //
\92u
\8a·
\90Ý
\92è
\83t
\83@
\83C
\83\8b\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1311 ReplaceDM.LoadFromFile(GikoSys.GetReplaceFileName);
1313 //
\83\8c\83X
\83|
\83b
\83v
\83A
\83b
\83v
\8fÁ
\8b\8e\83^
\83C
\83}
\81[
1314 ResPopupClearTimer.Interval := GikoSys.Setting.RespopupWait;
1316 // D&D
\82ð
\8eó
\82¯
\8eæ
\82é
1317 DragAcceptFiles(ListView.Handle, True);
1319 //
\8f\89\8aú
\89»
\82É
\8e¸
\94s
\82µ
\82½
\83\82\83W
\83\85\81[
\83\8b\83`
\83F
\83b
\83N
1320 if (FavoriteDM.AbEnd) then begin
1321 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',
1322 '
\8f\89\8aú
\89»
\88Ù
\8fí');
1328 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1329 procedure TGikoForm.SaveCoolBarSettings;
1332 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1334 SaveMainCoolBarSettings;
1335 SaveBoardCoolBarSettings;
1336 SaveBrowserCoolBarSettings;
1339 procedure TGikoForm.SaveMainCoolBarSettings;
1344 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1345 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1346 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1347 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1348 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1349 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1352 procedure TGikoForm.SaveBoardCoolBarSettings;
1357 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1358 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1359 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1360 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1361 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1362 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1365 procedure TGikoForm.SaveBrowserCoolBarSettings;
1370 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1371 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1372 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1373 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1374 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1375 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1378 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1379 procedure TGikoForm.LoadCoolBarSettings;
1385 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1386 MainCoolBar.Bands.BeginUpdate;
1388 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1389 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1390 CoolSet := GikoSys.Setting.MainCoolSet[i];
1391 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1392 FIsIgnoreResize := rtNone;
1393 SaveCoolBarSettings;
1396 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1397 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1398 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1401 MainCoolBar.Bands.EndUpdate;
1404 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1405 ListCoolBar.Bands.BeginUpdate;
1407 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1408 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1409 CoolSet := GikoSys.Setting.ListCoolSet[i];
1410 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1411 FIsIgnoreResize := rtNone;
1412 SaveCoolBarSettings;
1415 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1416 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1417 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1420 ListCoolBar.Bands.EndUpdate;
1423 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1424 BrowserCoolBar.Bands.BeginUpdate;
1426 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1427 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1428 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1429 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1430 FIsIgnoreResize := rtNone;
1431 SaveCoolBarSettings;
1434 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1435 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1436 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1439 BrowserCoolBar.Bands.EndUpdate;
1444 procedure TGikoForm.FormShow(Sender: TObject);
1448 if FStartUp then begin
1449 ShowWindow(Application.Handle, SW_HIDE);
1451 //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½
1452 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1453 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1454 GikoDM.StdToolBarVisibleActionExecute( nil );
1455 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1456 GikoDM.AddressBarVisibleActionExecute( nil );
1457 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1458 GikoDM.LinkBarVisibleActionExecute( nil );
1459 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1460 GikoDM.ListToolBarVisibleActionExecute( nil );
1461 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1462 GikoDM.ListNameBarVisibleActionExecute( nil );
1463 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1464 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1465 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1466 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1468 // CoolBar
\95\9c\8c³
1469 LoadCoolBarSettings;
1471 //
\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é
1472 // ResetBandInfo( ListCoolBar, ListToolBar );
1473 FIsIgnoreResize := rtNone;
1475 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1476 if GikoSys.Setting.TabAutoLoadSave then begin
1477 GikoDM.TabsOpenAction.Tag := 1;
1478 GikoDM.TabsOpenAction.Execute;
1479 GikoDM.TabsOpenAction.Tag := 0;
1480 if (GikoSys.Setting.LastCloseTabURL <> '') then begin
1481 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( FActiveContent.Browser ), 0 );
1482 if ( FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
1483 while (FActiveContent.Browser.ReadyState <> READYSTATE_COMPLETE) and
1484 (FActiveContent.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
1485 Application.ProcessMessages;
1488 item := BBSsFindThreadFromURL( GikoSys.Setting.LastCloseTabURL );
1489 if (item <> nil) and (item.IsLogFile) then begin
1490 OpenThreadItem(item, item.URL);
1492 GikoSys.Setting.LastCloseTabURL := '';
1496 //ActionList
\82ÌGroupIndex
\82ð
\8c³
\82É
\96ß
\82·
1497 SetGroupIndex(GikoDM.GikoFormActionList);
1503 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1505 // if GikoForm.WindowState <> wsMinimized then
1506 // SaveCoolBarSettings;
1508 if ( GikoSys.Setting.ShowDialogForEnd ) and
1509 (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
1514 GikoSys.Setting.LastCloseTabURL := '';
1515 if GikoSys.Setting.TabAutoLoadSave then begin
1516 GikoDM.TabsSaveAction.Execute;
1517 if (GetActiveContent <> nil) and
1518 (GetActiveContent.IsLogFile) then begin
1519 GikoSys.Setting.LastCloseTabURL := GetActiveContent.URL;
1523 if (SearchDialog <> nil) then begin
1524 if (SearchDialog.Visible) then begin
1528 SearchDialog.Release;
1531 SearchDialog := nil;
1534 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82Ì
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81AEditorForm
\82ð
\95Â
\82¶
\82é
1535 GikoDM.CloseAllEditorAction.Execute;
1537 Application.UnhookMainWindow(Hook);
1538 //
\83A
\83v
\83\8a\83P
\81[
\83V
\83\87\83\93\8fI
\97¹
\82Ì
\91O
\82É
\83_
\83E
\83\93\83\8d\81[
\83h
\83X
\83\8c\83b
\83h
\82É
\90³
\8fí
\8fI
\97¹
\82ð
\91£
\82·
1539 FControlThread.Terminate;
1540 Application.Terminate;
1543 procedure TGikoForm.FormDestroy(Sender: TObject);
1546 wp : TWindowPlacement;
1550 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1552 if GikoSys.Setting.GestureEnabled then begin
1553 MouseGesture.OnGestureStart := nil;
1554 MouseGesture.OnGestureMove := nil;
1555 MouseGesture.OnGestureEnd := nil;
1558 MouseGesture.UnHook;
1563 ActiveListColumnSave;
1567 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1568 wp.length := sizeof(wp);
1569 GetWindowPlacement(Handle, @wp);
1570 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1571 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1572 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1573 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1574 GikoSys.Setting.WindowMax := WindowState = wsMaximized;
1576 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1577 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1578 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1579 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1580 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1581 if GikoDM.ArrangeAction.Checked then
1582 GikoSys.Setting.ListOrientation := gloVertical
1584 GikoSys.Setting.ListOrientation := gloHorizontal;
1585 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1590 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1591 if not GikoSys.Setting.ResRangeHold then
1592 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1595 if WindowState <> wsNormal then
1596 WindowState := wsNormal;
1597 SaveCoolBarSettings;
1599 GikoSys.Setting.WriteWindowSettingFile;
1600 GikoSys.Setting.WriteNameMailSettingFile;
1603 //
\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è
1604 //
\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¢
1606 //
\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
1608 //if (GikoForm.WindowState <> wsMinimized) and (GikoForm.WindowState <> wsMaximized) then
1610 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\90Ý
\92è
\82Ì
\95Û
\91¶
1611 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1613 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1615 //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é
1616 //
\8f\89\8aú
\89»
\88Ù
\8fí
\8e\9e\82©
\82ç
\82Ì
\8fI
\97¹
\82Å
\82Í
\95Û
\91¶
\82µ
\82È
\82¢
1617 if not (FavoriteDM.AbEnd) then begin
1618 FavoriteDM.WriteFavorite;
1623 //LockWindowUpdate(Self.Handle);
1625 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1626 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1627 GikoSys.Setting.ShowDialogForAllTabClose := false;
1628 GikoDM.AllTabCloseAction.Execute;
1629 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1633 for i := FBrowsers.Count - 1 downto 0 do begin
1634 GikoSys.ShowRefCount('browser' + IntToStr(i), TWebBrowser(FBrowsers[i]).ControlInterface);
1635 GikoSys.ShowRefCount('document' + IntToStr(i), TWebBrowser(FBrowsers[i]).ControlInterface.Document);
1638 for i := FBrowsers.Count - 1 downto 0 do begin
1639 TWebBrowser(FBrowsers[i]).Free;
1642 FBrowsers.Capacity := 0;
1647 if BrowserNullTab <> nil then begin
1648 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
1649 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
1651 BrowserNullTab.Free;
1657 TreeView.Items.BeginUpdate;
1658 TreeView.Items.GetFirstNode.Free;
1659 TreeView.Items.Clear;
1660 TreeView.Items.EndUpdate;
1664 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1666 //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
1667 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1671 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
1673 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1685 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶&
\94j
\8aü
1687 RoundList.SaveRoundFile;
1701 FControlThread.DownloadAbort;
1702 FControlThread.Terminate;
1703 FControlThread.WaitFor;
1707 FControlThread.Free;
1709 //
\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é
1710 for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
1711 GikoForm.PlugInMenu.items[i].Free;
1713 GikoForm.PlugInMenu.Clear;
1716 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
1717 // 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Å
1718 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
1719 for i := Length(BoardGroups) - 1 downto 0 do begin
1720 //BoardGroups[i].Clear;
1721 BoardGroups[i].Free;
1725 for i := Length( BBSs ) - 1 downto 0 do begin
1726 if BBSs[ i ] <> nil then
1734 if FEvent <> nil then
1738 if FResPopupBrowser <> nil then begin
1739 TOleControl(FResPopupBrowser).Parent := nil;
1740 FResPopupBrowser.Free;
1746 if FPreviewBrowser <> nil then begin
1747 FPreviewBrowser.Free;
1748 FPreviewBrowser := nil;
1752 //LockWindowUpdate(0);
1755 //
\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
1756 procedure TGikoForm.SetBBSMenu;
1759 item : TBBSMenuItem;
1762 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
1763 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1765 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1766 CabinetSelectPopupMenu.Items[ i ].Free;
1767 CabinetMenu.Items[ i ].Free;
1768 BBSSelectPopupMenu.Items[ i ].Free;
1774 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
1775 for i := Length( BBSs ) - 1 downto 0 do begin
1777 item := TBBSMenuItem.Create( PopupMenu );
1778 item.Caption := BBSs[ i ].Title;
1779 item.Data := BBSs[ i ];
1780 item.OnClick := BBSMenuItemOnClick;
1781 CabinetSelectPopupMenu.Items.Insert( 0, item );
1782 item := TBBSMenuItem.Create( PopupMenu );
1783 item.Caption := BBSs[ i ].Title;
1784 item.Data := BBSs[ i ];
1785 item.OnClick := BBSMenuItemOnClick;
1786 CabinetMenu.Insert( 0, item );
1787 item := TBBSMenuItem.Create( PopupMenu );
1788 item.Caption := BBSs[ i ].Title;
1789 item.Data := BBSs[ i ];
1790 item.OnClick := BBSMenuItemOnClick;
1791 BBSSelectPopupMenu.Items.Insert( 0, Item );
1798 procedure TGikoForm.ReloadBBS;
1803 LockWindowUpdate(Self.Handle);
1805 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1806 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1807 GikoSys.Setting.ShowDialogForAllTabClose := false;
1808 GikoDM.AllTabCloseAction.Execute;
1809 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1810 SetContent(BrowserNullTab);
1811 //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
1812 TreeView.Items.Clear;
1814 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1816 RoundList.SaveRoundFile;
1819 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
1825 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1827 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1832 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1834 FavoriteDM.WriteFavorite;
1839 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
1840 for i := Length(BoardGroups) - 1 downto 0 do begin
1842 BoardGroups[i].Free;
1848 for i := Length( BBSs ) - 1 downto 0 do begin
1849 if BBSs[ i ] <> nil then
1858 FTreeType := gttNone;
1860 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
1862 //
\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Æ)
1863 InitializeBoardPlugIns;
1865 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1867 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1868 for i := Length(BBSs) - 1 downto 0 do begin
1869 if not BBSs[i].IsBoardFileRead then
1870 GikoSys.ReadBoardFile(BBSs[i]);
1873 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
1876 ShowBBSTree( BBSs[ 0 ] );
1878 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1879 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1880 TreeView, FTreeType);
1882 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1883 FavoriteDM.ReadFavorite;
1887 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1888 RoundList.LoadRoundBoardFile;
1889 RoundList.LoadRoundThreadFile;
1891 LockWindowUpdate(0);
1895 \todo
\89½
\8cÌ IE 7
\82Å
\82Í about:..
\82É
\82È
\82é
\82Ì
\82©
1896 (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©)
1897 \92²
\8d¸
\82·
\82é
\82±
\82Æ
1899 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1907 threadItem : TThreadItem;
1909 Protocol, Host, Path, Document, Port, Bookmark: string;
1914 ActiveFileName: string;
1919 cResPopup: TResPopupBrowser;
1920 senderBrowser :TWebBrowser;
1921 doc: IHTMLDocument2;
1923 //
\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ª
1924 // 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è)
1925 if Pos('about:..', Text) = 1 then
1926 Text2 := 'about:blank..' + Copy( Text, Length('about:..')+1, Length(Text) )
1930 if not( TObject(Sender) is TWebBrowser )then
1933 senderBrowser := TWebBrowser(Sender);
1934 doc := senderBrowser.ControlInterface.Document as IHTMLDocument2;
1938 if ((not senderBrowser.Busy) and Assigned(doc)) then begin
1939 if LowerCase(doc.charset) <> 'shift_jis' then begin
1940 doc.charset := 'shift_jis';
1948 if PreviewTimer.Enabled then
1949 PreviewTimer.Enabled := False;
1951 Application.CancelHint;
1954 if GetActiveContent <> nil then
1955 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
1957 ActiveFileName := '';
1959 FActiveContent := nil;
1963 //
\91O
\89ñ
\82Æ
\93¯
\82¶
\8fê
\8d\87\8fI
\97¹
1964 if (StatusBar.Panels[1].Text = Text2) then begin
1965 if Text2 = '' then begin
1966 if FResPopupBrowser <> nil then begin
1967 if not(Sender is TResPopupBrowser) then
1968 FResPopupBrowser.Clear
1970 TResPopupBrowser(Sender).ChildClear;
1976 StatusBar.Panels[1].Text := Text2;
1979 if FPreviewBrowser <> nil then
1980 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1982 if FResPopupBrowser <> nil then begin
1983 if not(Sender is TResPopupBrowser) then begin
1984 if (FResPopupBrowser.Visible) then begin
1985 if ResPopupClearTimer.Interval > 0 then begin
1986 ResPopupClearTimer.Enabled := True;
1987 ResPopupClearTimer.Tag := 0;
1989 FResPopupBrowser.Clear;
1993 if ResPopupClearTimer.Interval > 0 then begin
1994 ResPopupClearTimer.Enabled := True;
1995 ResPopupClearTimer.Tag := 1;
1997 TResPopupBrowser(Sender).ChildClear;
2003 if not(Sender is TResPopupBrowser) then
2004 if not GikoSys.Setting.UnActivePopup then
2005 if not GikoForm.Active then
2010 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
2011 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
2012 //
\91¼
\82Ì
\83A
\83v
\83\8a\82Å
\8f\88\97\9d\82·
\82éURL
\82©
\8am
\94F
2013 if (ExtPreviewDM.PreviewURL(Text2)) then begin
2017 Ext := AnsiLowerCase(ExtractFileExt(Text2));
2018 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
2019 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) then begin
2020 if FPreviewBrowser = nil then begin
2021 FPreviewBrowser := TPreviewBrowser.Create(Self);
2022 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2023 TOleControl(FPreviewBrowser).Parent := nil;
2025 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
2026 FPreviewURL := Text2;
2027 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
2028 PreviewTimer.Enabled := True;
2029 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
2030 if (Pos('mailto:', Text2) = 1) and (GikoSys.Setting.RespopupMailTo) then begin
2031 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
2032 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
2034 p.x := p.x - senderBrowser.ClientOrigin.x;
2035 p.y := p.y - senderBrowser.ClientOrigin.y;
2036 e := doc.elementFromPoint(p.x, p.y);
2037 if (Assigned(e)) then begin
2038 CreateResPopupBrowser;
2040 if not(Sender is TResPopupBrowser) then begin
2041 if (FResPopupBrowser.Visible) then begin
2042 FResPopupBrowser.Clear;
2045 TResPopupBrowser(Sender).ChildClear;
2048 cResPopup := FResPopupBrowser.CreateNewBrowser;
2049 tmp2 := Trim(ZenToHan(e.Get_outerText));
2050 if (GikoSys.IsNumeric(tmp2)) then begin
2051 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
2052 wkIntSt := StrToInt64(tmp2);
2053 wkIntTo := StrToInt64(tmp2);
2054 cResPopup.PopupType := gptThread;
2055 HTMLCreater.SetResPopupText(cResPopup, GetActiveContent(true), wkIntSt, wkIntTo, False, False);
2057 cResPopup.PopupType := gptRaw;
2058 cResPopup.Title := s;
2062 CreateResPopupBrowser;
2064 if not(Sender is TResPopupBrowser) then begin
2065 if (FResPopupBrowser.Visible) then begin
2066 FResPopupBrowser.Clear;
2069 TResPopupBrowser(Sender).ChildClear;
2072 threadItem := GetActiveContent(true);
2073 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
2074 PathRec := Gikosys.Parse2chURL2(URL);
2075 if (PathRec.FNoParam) then begin
2079 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
2081 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
2083 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
2085 URL := GikoSys.GetBrowsableThreadURL( URL );
2086 wkIntSt := PathRec.FSt;
2087 wkIntTo := PathRec.FTo;
2089 if (wkIntSt = 0) and (wkIntTo = 0) then begin
2092 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
2094 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
2096 end else if wkIntSt > wkIntTo then begin
2101 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
2106 threadItem := BBSsFindThreadFromURL( URL );
2108 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
2109 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
2110 if board <> nil then begin
2111 if not board.IsThreadDatRead then
2112 GikoSys.ReadSubjectFile( board );
2113 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
2117 if threadItem <> nil then begin
2118 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
2119 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
2120 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
2124 cResPopup := FResPopupBrowser.CreateNewBrowser;
2125 cResPopup.PopupType := gptThread;
2126 HTMLCreater.SetResPopupText(cResPopup, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
2130 if (cResPopup <> nil) then begin
2131 ResPopupClearTimer.Enabled := False;
2133 if cResPopup.PopupType = gptRaw then begin
2134 if cResPopup.Title <> '' then begin
2135 cResPopup.TitlePopup;
2138 if cResPopup.RawDocument <> '' then begin
2140 end else if cResPopup.Title <> '' then begin
2141 cResPopup.TitlePopup;
2148 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2152 FEnabledCloseButton := Enabled;
2153 SysMenu := GetSystemMenu(Handle, False);
2155 if Enabled then begin
2156 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2158 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2161 DrawMenuBar(Handle);
2164 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2165 var AllowChange: Boolean);
2167 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
2168 // if FTreeType = gtt2ch then
2169 // FSortIndex := -1;
2172 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2173 Shift: TShiftState);
2177 if GetActiveList is TBoard then begin
2179 VK_BACK:; // UpFolderButtonClick(Sender);
2180 VK_SPACE: ListDoubleClick(Shift);
2181 VK_RETURN: ListClick;
2184 if ListView.Selected <> nil then begin
2185 pos.X := ListView.Column[ 0 ].Width;
2186 pos.Y := ListView.Selected.Top;
2188 pos.X := ListView.Left;
2189 pos.Y := ListView.Top;
2191 Windows.ClientToScreen( ListView.Handle, pos );
2192 ListPopupMenu.Popup( pos.X, pos.Y );
2195 end else begin // TBBS, TCategory
2197 VK_BACK:; // UpFolderButtonClick(Sender);
2198 VK_SPACE: ListClick;
2199 VK_RETURN: ListDoubleClick(Shift);
2202 if ListView.Selected <> nil then begin
2203 pos.X := ListView.Column[ 0 ].Width;
2204 pos.Y := ListView.Selected.Top;
2206 pos.X := ListView.Left;
2207 pos.Y := ListView.Top;
2209 Windows.ClientToScreen( ListView.Handle, pos );
2210 ListPopupMenu.Popup( pos.X, pos.Y );
2216 function TGikoForm.GetHttpState: Boolean;
2218 Result := FHttpState;
2221 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2222 Column: TListColumn);
2226 vSortIndex : Integer;
2227 vSortOrder : Boolean;
2229 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2230 if TObject( FActiveList ) is TBBS then begin
2231 orderList := GikoSys.Setting.BBSColumnOrder;
2232 vSortIndex := GikoSys.Setting.BBSSortIndex;
2233 vSortOrder := GikoSys.Setting.BBSSortOrder;
2234 end else if TObject( FActiveList ) is TCategory then begin
2235 orderList := GikoSys.Setting.CategoryColumnOrder;
2236 vSortIndex := GikoSys.Setting.CategorySortIndex;
2237 vSortOrder := GikoSys.Setting.CategorySortOrder;
2238 end else if TObject( FActiveList ) is TBoard then begin
2239 orderList := GikoSys.Setting.BoardColumnOrder;
2240 vSortIndex := GikoSys.Setting.BoardSortIndex;
2241 vSortOrder := GikoSys.Setting.BoardSortOrder;
2245 id := Integer( orderList[ idx ] );
2248 if vSortIndex = id then
2249 vSortOrder := not vSortOrder
2251 vSortOrder := id = 0;
2254 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2257 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2258 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2262 DefaultDraw := True;
2263 //
\82È
\82º
\82©
\96³
\8fð
\8c\8f\82ÅExit
\82µ
\82Ä
\82¢
\82é
2265 DefaultDraw := False;
2266 if (cdsSelected in State) or (cdsHot in State) then begin
2267 Sender.Canvas.Brush.Color := clHighlight;
2268 Sender.Canvas.Font.Color := clHighlightText;
2270 Sender.Canvas.Brush.Color := clBtnFace;
2271 Sender.Canvas.Font.Color := clBtnText;
2273 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2274 Sender.Canvas.FillRect(ARect);
2275 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2278 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2283 Nodes := TreeView.Items;
2285 for i := 0 to Nodes.Count - 1 do begin
2286 if Nodes.Item[i].Data = Data then begin
2287 Result := Nodes.Item[i];
2294 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2295 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2296 Headers: OleVariant; var Cancel: WordBool);
2301 kMenuName: string = 'menu:';
2306 if Pos(kMenuName, URL) <> 0 then begin
2307 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2309 if not GikoSys.IsNumeric(sNo) then Exit;
2313 KokoPopupMenu.PopupComponent := nil;
2314 if (Sender is TComponent) then
2315 KokoPopupMenu.PopupComponent := TComponent(Sender);
2316 KokoPopupMenu.Tag := StrToInt(sNo);
2317 KokoPopupMenu.Popup(p.x, p.y);
2318 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2319 Cancel := not GikoSys.Setting.OpenMailer;
2321 //@
\82Æ.
\82ð
\8aÜ
\82Ü
\82È
\82¢URL
\82Í
\83\81\81[
\83\8b\83A
\83h
\83\8c\83X
\82Æ
\82Ý
\82È
\82³
\82È
\82¢
2322 //
\8eå
\82Éage
\81Asage
\91Î
\8dô
2323 if (Pos('@', URL) = 0) or (Pos('.', URL) = 0) then begin
2330 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2331 const ARect: TRect; var DefaultDraw: Boolean);
2335 IsBoardNode: Boolean;
2341 Category: TCategory;
2345 DefaultDraw := True;
2347 if FTreeType = gttHistory then Exit;
2349 TreeView.Canvas.Font.Color := clBlue;
2350 IsBoardNode := False;
2351 for i := 0 to TreeView.Items.Count - 1 do begin
2353 if not TreeView.Items[i].IsVisible then
2356 if TObject(TreeView.Items[i].Data) is TCategory then begin
2357 if TreeView.Items[i].Expanded then
2360 IsBoardNode := False;
2361 Category := TCategory(TreeView.Items[i].Data);
2362 for j := 0 to Category.Count - 1 do begin
2363 Board := Category.Items[j];
2364 if Board <> nil then begin
2365 if Board.UnRead > 0 then begin
2373 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2374 IsBoardNode := True;
2375 Board := TBoard(TreeView.Items[i].Data);
2377 Cnt := Board.UnRead;
2383 Bitmap := TBitmap.Create;
2385 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2386 Bitmap.Canvas.Font.Style := [fsBold];
2387 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2392 NodeRect := TreeView.Items[i].DisplayRect(True);
2395 CntText := '(' + IntToStr(Cnt) + ')'
2396 else if Cnt = 1 then
2400 TextWidth := TreeView.Canvas.TextWidth(CntText);
2402 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2404 NodeRect.Left + NodeWidth + TextWidth + 8,
2406 DrawText(TreeView.Canvas.Handle,
2410 DT_SINGLELINE or DT_VCENTER);
2412 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2415 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2416 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2419 Category: TCategory;
2422 DefaultDraw := True;
2424 if FTreeType = gttHistory then Exit;
2426 TreeView.Canvas.Font.Style := [];
2427 if Node <> nil then begin
2428 if TObject(Node.Data) is TCategory then begin
2429 Category := TCategory(Node.Data);
2430 for i := 0 to Category.Count - 1 do begin
2431 Board := Category.Items[i];
2432 if Board <> nil then begin
2433 if Board.UnRead > 0 then begin
2434 TreeView.Canvas.Font.Style := [fsBold];
2439 end else if TObject(Node.Data) is TBoard then begin
2440 Board := TBoard(Node.Data);
2441 if Board.UnRead > 0 then
2442 TreeView.Canvas.Font.Style := [fsBold];
2447 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2449 TreeView.Invalidate;
2451 if TObject(Node.Data) is TBBS then begin
2452 TBBS(Node.Data).NodeExpand := True;
2453 end else if TObject(Node.Data) is TCategory then begin
2454 TCategory(Node.Data).NodeExpand := True;
2455 end else if TObject(Node.Data) is TBoard then begin
2456 TBoard(Node.Data).NodeExpand := True;
2460 procedure TGikoForm.ListViewAllSelect;
2465 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2467 if csDestroying in Self.ComponentState then
2469 AddMessageList(Msg, nil, Icon);
2471 // *************************************************************************
2472 //!
\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
2473 // *************************************************************************
2474 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2478 boardPlugIn : TBoardPlugIn;
2483 if csDestroying in Self.ComponentState then
2485 if Item.DownType = gdtBoard then
2486 ATitle := Item.Board.Title
2488 ATitle := Item.ThreadItem.Title;
2490 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2492 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2494 if Item.DownType = gdtBoard then begin
2497 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2498 if GetActiveList = Item.Board then begin
2500 //
\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é
2501 if (GikoSys.Setting.AutoSortThreadList) then begin
2502 GikoSys.Setting.BoardSortIndex := 0;
2503 GikoSys.Setting.BoardSortOrder := True;
2505 Sort.SetSortDate(Now());
2506 SetActiveList(Item.Board);
2508 Item.Board.Modified := True;
2509 Item.Board.IsThreadDatRead := True;
2512 end else if Item.DownType = gdtThread then begin
2515 Item.ThreadItem.NewArrival := True;
2516 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2517 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2518 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2519 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2520 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2521 Item.ThreadItem.Title := Res.FTitle;
2522 ATitle := Item.ThreadItem.Title;
2523 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2524 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2525 ATitle := Res.FTitle;
2527 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2528 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2529 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2533 if GikoSys.Setting.BrowserTabVisible then begin
2534 if GetActiveContent = Item.ThreadItem then
2535 InsertBrowserTab(Item.ThreadItem)
2536 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2537 InsertBrowserTab(Item.ThreadItem, True)
2539 InsertBrowserTab(Item.ThreadItem, False);
2542 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2543 InsertBrowserTab(Item.ThreadItem);
2546 Application.ProcessMessages;
2548 if Item.State = gdsComplete then begin
2550 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2554 PlaySound('NewDiff');
2555 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2560 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2561 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2562 // 2ch
\88È
\8aO
\82Í
\81A1000
\82ª
\8dÅ
\8d\82\82©
\95s
\96¾
\82È
\82Ì
\82Å
\81A2ch
\8cÀ
\92è
\82É
\82·
\82é
2563 if (Item.ThreadItem.ParentBoard.Is2ch) then begin
2564 Item.ThreadItem.Round := False;
2565 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);
2569 //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
2570 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
2571 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
2572 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
2573 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
2574 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
2575 case GikoForm.ViewType of
2576 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
2577 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
2578 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
2579 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
2580 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
2581 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
2584 RefreshListView(Item.ThreadItem);
2587 end else if Item.State = gdsNotModify then begin
2589 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2590 //SetContent(Item.ThreadItem);
2591 InsertBrowserTab(Item.ThreadItem);
2593 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2594 PlaySound('NoChange');
2595 Screen.Cursor := crDefault;
2596 end else if Item.State = gdsAbort then begin
2598 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2599 end else if Item.State = gdsError then begin
2604 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2605 // if Item.ResponseCode = 302 then
2606 // 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);
2612 if FWorkCount < 0 then FWorkCount := 0;
2613 if FWorkCount = 0 then begin
2615 Animate.Active := False;
2617 Screen.Cursor := crDefault;
2624 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2626 // SetProgressValue(Number, 0, AWorkCountMax);
2627 // ProgressBar.Visible := True;
2628 if csDestroying in Self.ComponentState then
2631 ProgressBar.Position := 0;
2632 ProgressBar.Max := AWorkCountMax;
2633 FDownloadTitle := AWorkTitle;
2634 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2635 FDownloadMax := AWorkCountMax;
2638 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2640 if csDestroying in Self.ComponentState then
2642 ProgressBar.Position := 0;
2643 if FDownloadMax <> 0 then
2644 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2647 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2649 if csDestroying in Self.ComponentState then
2651 ProgressBar.Position := AWorkCount;
2652 // SetProgressValue(Number, AWorkCount);
2653 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2656 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2658 ListItem: TListItem;
2660 MessageListView.Items.BeginUpdate;
2662 ListItem := MessageListView.Items.Add;
2663 ListItem.Caption := ACaption;
2664 ListItem.Data := AObject;
2665 ListItem.MakeVisible(False);
2667 gmiOK: ListItem.ImageIndex := 0;
2668 gmiSAD: ListItem.ImageIndex := 1;
2669 gmiNG: ListItem.ImageIndex := 2;
2670 gmiWhat: ListItem.ImageIndex := 3;
2673 MessageListView.Items.EndUpdate;
2677 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
2678 procedure TGikoForm.ReleaseOldestBrowser;
2682 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2683 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2684 TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2685 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2691 function TGikoForm.InsertBrowserTab(
2692 ThreadItem : TThreadItem;
2693 ActiveTab : Boolean = True
2696 i, j, idx : Integer;
2697 favItem : TFavoriteThreadItem;
2698 newBrowser : TBrowserRecord;
2703 if Threaditem = nil then Exit;
2705 if ThreadItem.IsLogFile then begin
2706 //
\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é
2707 //
\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é
2708 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2709 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2710 j := FBrowsers.IndexOf(FActiveContent.Browser);
2711 if j = BROWSER_COUNT - 1 then
2712 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2714 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2715 if not FHistoryList.AddHistory( favItem, TreeView, FTreeType ) then
2718 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2719 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2720 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2721 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2722 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2723 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2724 ReleaseOldestBrowser;
2725 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2726 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2727 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2729 if ActiveTab then begin
2730 BrowserTab.TabIndex := i;
2731 BrowserTab.OnChange(nil);
2738 idx := BrowserTab.TabIndex;
2739 newBrowser := TBrowserRecord.Create;
2740 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2741 ReleaseOldestBrowser;
2742 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2743 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2744 newBrowser.thread := ThreadItem;
2745 newBrowser.Repaint := true;
2747 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2748 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2749 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2750 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2754 if ActiveTab then begin
2755 BrowserTab.TabIndex := 0;
2757 end else if GikoSys.Setting.BrowserTabAppend = gtaLast then begin
2758 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2759 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2760 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2764 if ActiveTab then begin
2765 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2766 BrowserTab.TabIndex := 0
2768 BrowserTab.TabIndex := i;
2771 //
\83^
\83u
\88Ê
\92u
\82ð
\8eæ
\93¾
2773 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2774 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2775 TWebBrowser(FBrowsers[1]) then begin
2780 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2783 //
\83^
\83u
\82ª
\96³
\82¢
\82Æ
\82«
\82È
\82Ç
\91Î
\8dô
2784 if (ins < 0) then begin
2787 BrowserTab.Tabs.InsertObject(ins, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2788 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2789 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2790 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2792 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2797 if ActiveTab then begin
2798 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2799 BrowserTab.TabIndex := 0
2801 BrowserTab.TabIndex := ins;
2804 Result := newBrowser;
2805 if(ActiveTab) or (idx = -1) then begin
2806 BrowserTab.OnChange(nil);
2809 if BrowserNullTab = nil then begin
2810 BrowserNullTab := TBrowserRecord.Create;
2811 BrowserNullTab.Browser := Browser;
2813 // if BrowserNullTab.thread <> ThreadItem then begin
2814 // BrowserNullTab.Movement := '';
2816 BrowserNullTab.thread := ThreadItem;
2817 Result := BrowserNullTab;
2818 BrowserTab.TabIndex := -1;
2819 SetContent(BrowserNullTab);
2822 if GikoSys.Setting.URLDisplay then
2823 AddressComboBox.Text := ThreadItem.URL;
2827 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2835 ThreadItem: TThreadItem;
2836 Thread: TBrowserRecord;
2837 ThreadTitle, ThreadPTitle: string;
2838 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2841 idx := BrowserTab.TabIndex;
2842 if (not FStartUp) and
2843 (FActiveContent <> nil) and
2844 (FActiveContent.Thread <> Thread.Thread) and
2845 (FActiveContent.Browser <> nil) and
2846 (Assigned(FActiveContent.Browser.ControlInterface.Document)) then begin
2849 FActiveContent.Thread.ScrollTop := FActiveContent.Browser.OleObject.Document.Body.ScrollTop;
2852 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2857 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2858 Thread.Browser.Navigate(BLANK_HTML);
2859 BrowserBoardNameLabel.Caption := '';
2860 ItemBoardImage.Picture := nil;
2861 BrowserNameLabel.Caption := '';
2862 ItemImage.Picture := nil;
2863 BrowserNullTab.Thread := nil;
2864 //TOleControl(BrowserNullTab.Browser).Visible := true;
2865 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2866 FActiveContent := nil;
2868 end else if Thread.Browser = nil then begin
2869 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2870 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2871 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2872 ReleaseOldestBrowser;
2873 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2874 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2877 ThreadTitle := Thread.Thread.Title;
2878 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2879 //ThreadScrollTop := Thread.Thread.ScrollTop;
2880 if Thread.Thread.IsLogFile then begin
2881 if not FileExists(Thread.Thread.GetThreadFileName) then begin
2882 Thread.Thread.DeleteLogFile;
2886 ThreadIsLog := Thread.Thread.IsLogFile;
2887 ThreadItem := Thread.Thread;
2888 ThreadNewArraical := Thread.Thread.NewArrival;
2889 //ThreadUnRead := Thread.Thread.UnRead;
2890 BBSID := ThreadItem.ParentBoard.BBSID;
2891 FileName := ThreadItem.FileName;
2893 if GetCapture = ListView.Handle then
2896 Screen.Cursor := crHourGlass;
2900 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2901 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2902 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2904 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2905 if (not Assigned(Thread.Browser.ControlInterface.Document)) then begin
2906 Thread.Browser.Navigate('about:blank');
2908 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2909 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2910 Application.ProcessMessages;
2911 if idx <> BrowserTab.TabIndex then begin
2916 if (Thread <> nil) and (ThreadItem <>nil) then begin
2917 BrowserBoardNameLabel.Caption := ThreadPTitle;
2918 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2919 BrowserNameLabel.Caption := ThreadTitle;
2920 ItemImage.Picture := nil;
2922 if ThreadNewArraical then
2923 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
2925 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
2927 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
2929 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
2930 BrowserNameLabel.Left := ItemImage.Left + 20;
2933 //ActiveContent
\81@
\82Ì
\8dX
\90V
2934 FActiveContent := Thread;
2936 if not ThreadIsLog then begin
2937 Self.Caption := GikoDataModule.CAPTION_NAME ;
2938 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\8fÁ
\8b\8e
2939 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
2941 Thread.Browser.BringToFront;
2942 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
2943 doc := Thread.Browser.OleObject.Document;
2945 doc.charset := 'Shift_JIS';
2952 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
2953 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\95\
\8e¦
2954 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
2955 StatusBar.Panels[THREADSIZE_PANEL].Width :=
2956 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
2957 //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«
2958 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
2959 if Thread.Repaint then begin
2960 Thread.Repaint := false;
2962 Thread.Browser.OnStatusTextChange := nil;
2963 LockWindowUpdate(Thread.Browser.ParentWindow);
2964 HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
2965 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
2966 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
2970 RefreshListView(ThreadItem);
2972 Screen.Cursor := crDefault;
2976 function TGikoForm.GetActiveContent(popup :Boolean = false): TThreadItem;
2979 if FActiveContent <> nil then begin
2980 Result := FActiveContent.Thread;
2982 (FResPopupBrowser <> nil) and (FResPopupBrowser.CurrentBrowser.Visible = True) then
2983 if (FResPopupBrowser.CurrentBrowser.Thread <> nil) then begin
2984 Result := FResPopupBrowser.CurrentBrowser.Thread;
2994 procedure TGikoForm.SetActiveList(Obj: TObject);
2998 // if FActiveList <> Obj then begin
3001 if ListView.Selected <> nil then
3002 idx := ListView.Selected.Index
3008 ListView.Items.Count := 0;
3009 ListView.Items.Clear;
3010 ListView.Selected := nil;
3011 // ListView.Columns.Clear;
3012 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
3013 and (FActiveContent.Thread.IsLogFile) then begin
3015 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
3017 on E: Exception do begin
3018 //
\83X
\83\8c\88ê
\97\97DL
\8cã
\82È
\82Ç
\82ÉFActiveContent
\82Ì
\8e\9d\82ÂThread
\82ª
3019 //
\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é
3020 ReleaseBrowser(FActiveContent);
3021 FActiveContent.Thread := nil;
3022 Self.Caption := GikoDataModule.CAPTION_NAME;
3026 Self.Caption := GikoDataModule.CAPTION_NAME;
3027 //Application.Title := CAPTION_NAME;
3029 // ActiveListColumnSave;
3031 Screen.Cursor := crHourGlass;
3033 if Obj is TBBS then begin
3034 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3035 end else if Obj is TCategory then begin
3036 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3037 end else if Obj is TBoard then begin
3038 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3041 Screen.Cursor := crDefault;
3044 if idx >= 0 then begin
3045 if idx >= ListView.Items.Count then
3046 idx := ListView.Items.Count - 1;
3047 ListView.ItemIndex := idx;
3048 ListView.ItemFocused := ListView.Items.Item[ idx ];
3054 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
3055 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
3056 function TGikoForm.GetActiveList: TObject;
3058 Result := FActiveList;
3061 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
3063 SetListViewType(AViewType, '', False);
3066 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
3071 for i := Length( BBSs ) - 1 downto 0 do begin
3072 BBSs[i].SelectText := SelectText;
3073 BBSs[i].KubetsuChk := KubetsuChk;
3075 ViewType := AViewType;
3076 if ActiveList is TBoard then begin
3077 Board := TBoard(ActiveList);
3079 //gvtAll: ListView.Items.Count := Board.Count;
3080 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
3081 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
3082 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
3083 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
3084 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
3088 SetActiveList(Board);
3092 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
3093 const ARect: TRect; var DefaultDraw: Boolean);
3099 if ListView.Items.Count = 0 then begin
3100 DefaultDraw := true;
3101 ListView.Canvas.Brush.Color := ListView.Color;
3102 ListView.Canvas.FillRect(ARect);
3106 ListView.Canvas.Font.Color := clWindowText;
3107 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3110 ListView.Canvas.Font.Color := clBlue;
3111 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';
3114 ListView.Canvas.Font.Color := clGreen;
3115 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3118 ListView.Canvas.Font.Color := clFuchsia;
3119 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';
3122 ListView.Canvas.Font.Color := clMaroon;
3123 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90¶
\91¶
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3126 ListView.Canvas.Font.Color := clNavy;
3127 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';
3128 if GetActiveList is TBoard then
3129 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
3137 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
3138 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
3139 ListView.Canvas.TextOut(p.X, p.Y, s);
3141 DefaultDraw := True;
3145 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
3147 Item: TDownloadItem;
3149 if not Board.IsThreadDatRead then
3150 GikoSys.ReadSubjectFile(Board);
3151 Item := TDownloadItem.Create;
3153 Item.Board := Board;
3154 Item.DownType := gdtBoard;
3155 Item.ForceDownload := ForceDownload;
3156 FControlThread.AddItem(Item);
3157 if FWorkCount = 0 then begin
3159 Animate.Active := True;
3162 Screen.Cursor := crAppStart;
3170 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
3172 Item: TDownloadItem;
3174 Item := TDownloadItem.Create;
3176 Item.ThreadItem := ThreadItem;
3177 Item.DownType := gdtThread;
3178 Item.ForceDownload := ForceDownload;
3179 FControlThread.AddItem(Item);
3180 if FWorkCount = 0 then begin
3182 Animate.Active := True;
3185 Screen.Cursor := crAppStart;
3193 procedure TGikoForm.PlaySound(SoundEventName: string);
3197 if not GikoSys.Setting.Mute then begin
3198 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
3199 if FileExists(FileName) then begin
3200 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
3201 sndPlaySound(nil, SND_SYNC);
3202 Application.ProcessMessages;
3204 sndPlaySound(PChar(FileName), SND_ASYNC);
3210 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
3211 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3213 FHistoryList.DeleteHistory( threadItem, TreeView, TreeType );
3216 procedure TGikoForm.ShowBBSTreeOld(
3224 FavoriteTreeView.Visible := False;
3225 FavoriteToolBar.Hide;
3226 TreeView.Visible := True;
3228 b := CabinetSelectPopupMenu.Items.Count - 1;
3229 for i := 0 to b do begin
3230 item := CabinetSelectPopupMenu.Items[ i ];
3231 if item is TBBSMenuItem then begin
3232 if TBBSMenuItem( item ).Data = inBBS then begin
3233 item.Checked := True;
3234 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3235 CabinetMenu.Items[ i ].Checked := True;
3236 GikoSys.Setting.CabinetIndex := i;
3240 item.Checked := False;
3241 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3242 CabinetMenu.Items[ i ].Checked := False;
3244 CabinetSelectToolButton.Caption := inBBS.Title;
3246 GikoDM.CabinetHistoryAction.Checked := False;
3247 GikoDM.CabinetFavoriteAction.Checked := False;
3249 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3250 FTreeType := gtt2ch;
3251 HistoryToolBar.Hide;
3252 FActiveBBS := inBBS;
3253 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3254 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3255 //?c???[??g?b?v?????I????
3256 if GetActiveList = nil then
3257 TreeView.Selected := TreeView.Items[0]
3259 for i := 0 to TreeView.Items.Count - 1 do begin
3260 if TreeView.Items[i].Data = GetActiveList then begin
3261 TreeView.Selected := TreeView.Items[i];
3265 TreeView.Selected := TreeView.Items[0]
3273 procedure TGikoForm.ShowBBSTree(
3282 FavoriteTreeView.Visible := False;
3283 FavoriteToolBar.Hide;
3284 TreeView.Visible := True;
3286 b := CabinetSelectPopupMenu.Items.Count - 1;
3287 for i := 0 to b do begin
3288 item := CabinetSelectPopupMenu.Items[ i ];
3289 if item is TBBSMenuItem then begin
3290 if TBBSMenuItem( item ).Data = inBBS then begin
3291 item.Checked := True;
3292 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3293 CabinetMenu.Items[ i ].Checked := True;
3294 GikoSys.Setting.CabinetIndex := i;
3298 item.Checked := False;
3299 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3300 CabinetMenu.Items[ i ].Checked := False;
3302 CabinetSelectToolButton.Caption := inBBS.Title;
3304 GikoDM.CabinetHistoryAction.Checked := False;
3305 GikoDM.CabinetFavoriteAction.Checked := False;
3307 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3308 or (not (CabinetPanel.Visible)) then begin
3309 FTreeType := gtt2ch;
3310 HistoryToolBar.Hide;
3311 FActiveBBS := inBBS;
3312 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3313 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3314 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3315 if GetActiveList = nil then begin
3317 TreeClick( TreeView.Items[0] );
3321 for i := 0 to TreeView.Items.Count - 1 do begin
3322 if TreeView.Items[i].Data = GetActiveList then begin
3323 TreeClick( TreeView.Items[i] );
3327 TreeClick( TreeView.Items[0] );
3335 procedure TGikoForm.ShowHistoryTree;
3340 if CabinetPanel.Visible then begin
3341 if FTreeType = gttHistory then begin
3342 CabinetVisible( False );
3343 GikoDM.CabinetHistoryAction.Checked := False;
3345 GikoDM.CabinetHistoryAction.Checked := True;
3348 CabinetVisible( True );
3349 GikoDM.CabinetHistoryAction.Checked := True;
3352 // BBS...BBS, History, Favorite
3353 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3355 FavoriteTreeView.Visible := False;
3356 TreeView.Visible := True;
3358 GikoDM.CabinetBBSAction.Checked := False;
3359 GikoDM.CabinetFavoriteAction.Checked := False;
3361 if FTreeType <> gttHistory then begin
3362 b := CabinetSelectPopupMenu.Items.Count - 1;
3363 for i := 0 to b do begin
3364 item := CabinetSelectPopupMenu.Items[ i ];
3365 if item is TBBSMenuItem then begin
3366 item.Checked := False;
3367 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3368 CabinetMenu.Items[ i ].Checked := False;
3372 FTreeType := gttHistory;
3373 HistoryToolBar.Show;
3374 FavoriteToolBar.Hide;
3375 FHistoryList.SetTreeNode( TreeView );
3376 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3380 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3382 ChangeEvent: TTVChangedEvent;
3383 ChangingEvent: TTVChangingEvent;
3387 if Item is TCategory then
3388 bbs := TCategory( Item ).ParenTBBS
3389 else if Item is TBoard then
3390 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3394 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3395 if Item <> FActiveList then begin
3397 ChangingEvent := nil;
3399 if not CallEvent then begin
3400 ChangeEvent := TreeView.OnChange;
3401 ChangingEvent := TreeView.OnChanging;
3404 if not CallEvent then begin
3405 TreeView.OnChange := nil;
3406 TreeView.OnChanging := nil;
3408 //Application.ProcessMessages;
3409 for i := 0 to TreeView.Items.Count - 1 do begin
3410 if TreeView.Items[i].Data = Item then begin
3411 TreeView.Items[i].Selected := True;
3413 TreeClick(TreeView.Items[i]);
3417 //Application.ProcessMessages;
3419 if not CallEvent then begin
3420 TreeView.OnChange := ChangeEvent;
3421 TreeView.OnChanging := ChangingEvent;
3426 if Item <> FActiveList then begin
3427 ActiveListColumnSave;
3428 if (Item is TBBS) or (Item is TCategory) then begin
3429 ListView.Columns.Clear;
3430 SetActiveList( Item );
3431 end else if Item is TBoard then begin
3432 if not TBoard( Item ).IsThreadDatRead then begin
3433 Screen.Cursor := crHourGlass;
3435 if not TBoard( Item ).IsThreadDatRead then
3436 GikoSys.ReadSubjectFile(TBoard( Item ));
3438 Screen.Cursor := crDefault;
3441 Sort.SetSortDate(Now());
3442 SetActiveList( Item );
3447 if Item is TBoard then begin // not TCategory
3448 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3449 if GikoSys.Setting.ListWidthState = glsMax then begin
3450 GikoDM.BrowserMinAction.Execute;
3451 if GikoForm.Visible then
3455 if GikoSys.Setting.ListHeightState = glsMax then begin
3456 GikoDM.BrowserMinAction.Execute;
3457 if GikoForm.Visible then
3464 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3465 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3467 listItem : TListItem;
3468 threadItem : TThreadItem;
3475 if not (GetActiveList is TBoard) then Exit;
3476 listItem := ListView.GetItemAt( X, Y );
3477 if listItem = nil then Exit;
3478 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3480 threadItem := TThreadItem(ListItem.Data);
3481 InsertBrowserTab(threadItem, False);
3482 if threadItem.IsLogFile then
3483 ListView.UpdateItems(listItem.Index, listItem.Index);
3487 //
\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Å
3488 if (ssDouble in Shift) then
3489 ListDoubleClick(Shift)
3497 Windows.ClientToScreen( ListView.Handle, pos );
3498 ListPopupMenu.Popup( pos.X, pos.Y );
3504 procedure TGikoForm.ListClick;
3506 ListItem: TListItem;
3507 ThreadItem: TThreadItem;
3509 if ListView.SelCount <> 1 then Exit;
3510 ListItem := ListView.Selected;
3511 if ListItem = nil then Exit;
3512 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3514 ThreadItem := TThreadItem(ListItem.Data);
3515 if ThreadItem.IsLogFile then begin
3516 InsertBrowserTab(ThreadItem);
3517 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3519 InsertBrowserTab(ThreadItem);
3522 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3523 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3524 if GikoSys.Setting.ListWidthState = glsMin then begin
3525 GikoDM.BrowserMaxAndFocusAction.Execute;
3528 if GikoSys.Setting.ListHeightState = glsMin then begin
3529 GikoDM.BrowserMaxAndFocusAction.Execute;
3535 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3537 ThreadItem: TThreadItem;
3540 shiftDown := (ssShift in Shift);
3542 if ListView.Selected = nil then Exit;
3544 if TObject(ListView.Selected.Data) is TCategory then begin
3545 SelectTreeNode(ListView.Selected.Data, True);
3546 end else if TObject(ListView.Selected.Data) is TBoard then begin
3547 SelectTreeNode(ListView.Selected.Data, True)
3548 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3549 Application.ProcessMessages;
3550 ThreadItem := TThreadItem(ListView.Selected.Data);
3551 DownloadContent(ThreadItem, shiftDown);
3553 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3554 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3555 if GikoSys.Setting.ListWidthState = glsMin then begin
3556 GikoDM.BrowserMaxAction.Execute;
3557 GikoDM.SetFocusForBrowserAction.Execute;
3560 if GikoSys.Setting.ListHeightState = glsMin then begin
3561 GikoDM.BrowserMaxAction.Execute;
3562 GikoDM.SetFocusForBrowserAction.Execute;
3569 procedure TGikoForm.BrowserMovement(const AName: string);
3571 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3572 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3573 and (FActiveContent <> nil) then begin
3574 FActiveContent.Move(AName);
3577 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
3578 procedure TGikoForm.BrowserMovement(scroll: Integer);
3580 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3581 and (FActiveContent <> nil) then begin
3582 FActiveContent.Move(scroll);
3585 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3587 if TObject(Node.Data) is TBBS then begin
3588 TBBS(Node.Data).NodeExpand := False;
3589 end else if TObject(Node.Data) is TCategory then begin
3590 TCategory(Node.Data).NodeExpand := False;
3591 end else if TObject(Node.Data) is TBoard then begin
3592 TBoard(Node.Data).NodeExpand := False;
3594 if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3595 TreeClick(TreeView.Selected);
3599 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3601 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3603 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3605 TreeSplitter.Visible := isVisible;
3606 CabinetPanel.Visible := isVisible;
3607 GikoDM.CabinetVisibleAction.Checked := isVisible;
3610 procedure TGikoForm.SelectListItem(List: TList);
3612 TmpListItem: TListItem;
3616 TmpListItem := ListView.Selected;
3617 while TmpListItem <> nil do begin
3618 List.Add(TmpListItem.Data);
3619 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3624 procedure TGikoForm.FormResize(Sender: TObject);
3627 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3628 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3630 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3631 if GikoSys.Setting.ListWidthState = glsMin then begin
3632 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3633 ViewPanel.Width := ThreadMainPanel.Width - 80;
3636 if GikoSys.Setting.ListHeightState = glsMin then begin
3637 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3638 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3642 FIsIgnoreResize := rtResizing;
3643 PostMessage( Handle, USER_RESIZED, 0, 0 );
3648 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3652 FTabHintIndex := -1;
3653 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3654 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3655 DeleteTab(i, BrowserTab.TabIndex);
3660 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3664 FTabHintIndex := -1;
3665 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3666 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3667 DeleteTab(i, BrowserTab.TabIndex);
3672 procedure TGikoForm.DeleteTab(index, selectIndex: Integer);
3674 browserRec : TBrowserRecord;
3678 browserRec := TBrowserRecord(BrowserTab.Tabs.Objects[index]);
3680 if browserRec.Browser <> nil then begin
3681 doc := browserRec.Browser.OleObject.Document;
3682 browserRec.Thread.ScrollTop := doc.Body.ScrollTop;
3685 browserRec.Thread.ScrollTop := 0;
3688 if(FActiveContent = browserRec) then
3689 FActiveContent := nil;
3690 if browserRec.Browser <> nil then begin
3691 j := FBrowsers.IndexOf(browserRec.Browser);
3693 FBrowsers.Move(j, BROWSER_COUNT - 1);
3696 BrowserTab.Tabs.BeginUpdate;
3698 GikoSys.Setting.LastCloseTabURL := browserRec.Thread.URL;
3700 if ( BrowserTab.Tabs.Count - 1 = index ) and
3701 ( BrowserTab.TabRect(index).Left
3702 <= BrowserTab.DisplayRect.Left ) then begin
3703 BrowserTab.ScrollTabs(-1);
3705 BrowserTab.Tabs.Delete(index);
3706 if selectIndex > index then begin
3707 BrowserTab.TabIndex := selectIndex - 1;
3709 if BrowserTab.Tabs.Count -1 >= selectIndex then
3710 BrowserTab.TabIndex := selectIndex
3712 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3715 BrowserTab.Tabs.EndUpdate;
3717 if BrowserTab.Tabs.Count = 0 then begin
3718 BrowserNullTab.Thread := nil;
3721 if(BrowserTab.TabIndex <> -1) and
3722 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3723 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
3724 ReleaseOldestBrowser;
3726 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3727 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3728 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3729 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3732 if( FActiveContent = nil) then
3733 BrowserTab.OnChange(nil);
3735 function TGikoForm.Hook(var Message: TMessage): Boolean;
3737 //
\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Ì
3738 //
\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ð
3742 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3744 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3748 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3750 bBoard, bCategory : Boolean;
3752 bBoard := (GetActiveList is TBoard);
3753 bCategory := (GetActiveList is TCategory);
3754 ItemRoundPMenu.Visible := bBoard;
3755 ItemReservPMenu.Visible := bBoard;
3756 LPMSep01.Visible := bBoard;
3757 ListRoundPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3758 ListReservPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3759 LPMSep02.Visible := bCategory or bBoard;
3760 KidokuPMenu.Visible := bBoard;
3761 MidokuPMenu.Visible := bBoard;
3762 UrlCopyPMenu.Visible := bCategory or bBoard;
3763 NameUrlCopyPMenu.Visible := bCategory or bBoard;
3764 AllSelectPMenu.Visible := bCategory or bBoard;
3765 LPMSep05.Visible := bCategory or bBoard;
3766 DeletePMenu.Visible := bBoard;
3767 LPMSep06.Visible := bCategory or bBoard;
3768 BoardFavoriteAddMenu.Visible := bCategory;
3769 ThreadFavoriteAddMenu.Visible := bBoard;
3770 SaveThreadFile.Visible := bBoard;
3771 AddRoundNameMenu(ItemReservPMenu);
3772 AddRoundNameMenu(ListReservPMenu);
3775 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3777 FClickNode := TreeView.Selected;
3778 if FClickNode = nil then begin
3779 TreeSelectThreadPupupMenu.Visible := False;
3780 TreeSelectBoardPupupMenu.Visible := False;
3781 TPMSep01.Visible := False;
3782 TreeSelectURLPupupMenu.Visible := False;
3783 TreeSelectNamePupupMenu.Visible := False;
3784 TreeSelectNameURLPupupMenu.Visible := False;
3785 TreeSelectFavoriteAddPupupMenu.Visible := False;
3786 TreeSelectLogDeleteSeparator.Visible := False;
3787 TreeSelectLogDeletePopupMenu.Visible := False;
3788 end else if TObject(FClickNode.Data) is TBoard then begin
3789 TreeSelectThreadPupupMenu.Visible := False;
3790 TreeSelectBoardPupupMenu.Visible := True;
3791 TPMSep01.Visible := True;
3792 TreeSelectURLPupupMenu.Visible := True;
3793 TreeSelectNamePupupMenu.Visible := True;
3794 TreeSelectNameURLPupupMenu.Visible := True;
3795 TreeSelectFavoriteAddPupupMenu.Visible := True;
3796 TreeSelectLogDeleteSeparator.Visible := False;
3797 TreeSelectLogDeletePopupMenu.Visible := False;
3798 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3799 TreeSelectThreadPupupMenu.Visible := False;
3800 TreeSelectBoardPupupMenu.Visible := True;
3801 TPMSep01.Visible := True;
3802 TreeSelectURLPupupMenu.Visible := True;
3803 TreeSelectNamePupupMenu.Visible := True;
3804 TreeSelectNameURLPupupMenu.Visible := True;
3805 TreeSelectFavoriteAddPupupMenu.Visible := True;
3806 TreeSelectLogDeleteSeparator.Visible := False;
3807 TreeSelectLogDeletePopupMenu.Visible := False;
3808 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3809 TreeSelectThreadPupupMenu.Visible := True;
3810 TreeSelectBoardPupupMenu.Visible := False;
3811 TPMSep01.Visible := True;
3812 TreeSelectURLPupupMenu.Visible := True;
3813 TreeSelectNamePupupMenu.Visible := True;
3814 TreeSelectNameURLPupupMenu.Visible := True;
3815 TreeSelectFavoriteAddPupupMenu.Visible := True;
3816 TreeSelectLogDeleteSeparator.Visible := True;
3817 TreeSelectLogDeletePopupMenu.Visible := True;
3818 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3819 TreeSelectThreadPupupMenu.Visible := True;
3820 TreeSelectBoardPupupMenu.Visible := False;
3821 TPMSep01.Visible := True;
3822 TreeSelectURLPupupMenu.Visible := True;
3823 TreeSelectNamePupupMenu.Visible := True;
3824 TreeSelectNameURLPupupMenu.Visible := True;
3825 TreeSelectFavoriteAddPupupMenu.Visible := True;
3826 TreeSelectLogDeleteSeparator.Visible := True;
3827 TreeSelectLogDeletePopupMenu.Visible := True;
3828 end else if (TObject(FClickNode.Data) is TCategory) then begin
3829 TreeSelectThreadPupupMenu.Visible := False;
3830 TreeSelectBoardPupupMenu.Visible := False;
3831 TPMSep01.Visible := False;
3832 TreeSelectURLPupupMenu.Visible := False;
3833 TreeSelectNamePupupMenu.Visible := True;
3834 TreeSelectNameURLPupupMenu.Visible := False;
3835 TreeSelectFavoriteAddPupupMenu.Visible := False;
3836 TreeSelectLogDeleteSeparator.Visible := False;
3837 TreeSelectLogDeletePopupMenu.Visible := False;
3838 end else if FClickNode.IsFirstNode then begin
3839 TreeSelectThreadPupupMenu.Visible := False;
3840 TreeSelectBoardPupupMenu.Visible := False;
3841 TPMSep01.Visible := False;
3842 TreeSelectURLPupupMenu.Visible := False;
3843 TreeSelectNamePupupMenu.Visible := True;
3844 TreeSelectNameURLPupupMenu.Visible := False;
3845 TreeSelectFavoriteAddPupupMenu.Visible := False;
3846 TreeSelectLogDeleteSeparator.Visible := False;
3847 TreeSelectLogDeletePopupMenu.Visible := False;
3849 TreeSelectThreadPupupMenu.Visible := False;
3850 TreeSelectBoardPupupMenu.Visible := False;
3851 TPMSep01.Visible := False;
3852 TreeSelectURLPupupMenu.Visible := False;
3853 TreeSelectNamePupupMenu.Visible := False;
3854 TreeSelectNameURLPupupMenu.Visible := False;
3855 TreeSelectFavoriteAddPupupMenu.Visible := False;
3856 TreeSelectLogDeleteSeparator.Visible := False;
3857 TreeSelectLogDeletePopupMenu.Visible := False;
3861 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
3862 var ppDisp: IDispatch; var Cancel: WordBool);
3871 threadItem: TThreadItem;
3872 aElement : IHTMLElement;
3873 senderBrowser : TWebBrowser;
3874 doc : IHTMLDocument2;
3877 Writeln(IntToStr(Integer(ppDisp)));
3881 if not( TObject(Sender) is TWebBrowser )then
3884 senderBrowser := TWebBrowser(Sender);
3885 doc := senderBrowser.ControlInterface.Document as IHTMLDocument2;
3886 if not Assigned(doc) then
3889 aElement := doc.activeElement;
3890 if not Assigned(aElement) then
3893 Text := aElement.Get_outerText;
3894 Html := aElement.Get_outerHTML;
3896 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
3897 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
3898 if GikoSys.Setting.ResAnchorJamp then begin
3900 Text := ZenToHan(Trim(Text));
3902 if(AnsiPos('>>', Text) = 1) then begin
3903 //Text := Copy(Text, 3, Length(Text) - 2);
3906 //Text := Copy(Text, 2, Length(Text) - 1);
3910 if AnsiPos('-', Text) <> 0 then begin
3911 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
3912 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
3913 wkIntTo := StrToIntDef(Text, 0);
3914 if wkIntTo < wkIntSt then
3917 wkIntSt := StrToIntDef(Text, 0);
3920 if wkIntSt <> 0 then begin
3921 FActiveContent.IDAnchorPopup('');
3922 MoveHisotryManager.pushItem(FActiveContent);
3923 if (Sender is TResPopupBrowser) then begin
3924 TResPopupBrowser(Sender).ChildClear;
3926 GetActiveContent(true),
3927 GetActiveContent(true).URL + '&st=' +
3928 IntToStr(wkIntSt) + '&to=' + IntToStr(wkIntSt));
3930 BrowserMovement(IntToStr(wkIntSt));
3935 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
3937 URL := GikoSys.GetHRefText(Html);
3938 URL := GikoSys.HTMLDecode(URL);
3939 if AnsiPos('BE:', URL) = 1 then begin
3940 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
3941 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
3942 threadItem := FActiveContent.Thread;
3943 if threadItem = nil then Exit;
3944 URL := BE_PHP_URL + BNum + '&u=d'
3945 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
3948 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
3949 ( AnsiPos('ftp://', URL) = 1) then begin
3950 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
3951 if GikoSys.Setting.LinkAddAddressBar then begin
3952 idx := AddressComboBox.Items.IndexOf(URL);
3953 if idx = -1 then begin
3954 AddressComboBox.Items.Insert(0, URL);
3955 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
3956 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
3958 AddressComboBox.Items.Delete(idx);
3959 AddressComboBox.Items.Insert(0, URL);
3962 if (Sender is TResPopupBrowser) then begin
3963 TResPopupBrowser(Sender).ChildClear
3966 MoveHisotryManager.pushItem(FActiveContent);
3973 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
3975 if Mouse.Capture <> 0 then
3977 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3978 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
3979 FBrowserSizeWidth := ViewPanel.Width;
3981 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
3982 FBrowserSizeHeight := ViewPanel.Height;
3984 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3985 if ViewPanel.Width < 2 then begin
3986 ViewPanel.Width := 1;
3987 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3988 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3989 GikoSys.Setting.ListWidthState := glsMax;
3990 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
3991 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3992 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3993 GikoSys.Setting.ListWidthState := glsMin;
3995 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3996 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3997 GikoSys.Setting.ListWidthState := glsNormal;
4000 if ViewPanel.Height < 2 then begin
4001 ViewPanel.Height := 1;
4002 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4003 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4004 GikoSys.Setting.ListHeightState := glsMax;
4005 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
4006 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4007 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4008 GikoSys.Setting.ListHeightState := glsMin;
4010 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4011 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4012 GikoSys.Setting.ListHeightState := glsNormal;
4015 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
4016 FBrowserSizeHeight := ViewPanel.Height
4017 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
4018 FBrowserSizeWidth := ViewPanel.Width;}
4021 procedure TGikoForm.BrowserTabChange(Sender: TObject);
4026 BrowserTab.Tabs.BeginUpdate;
4028 if not BrowserTab.Dragging then begin
4029 FTabHintIndex := -1;
4030 BrowserTab.Hint := '';
4031 idx := BrowserTab.TabIndex;
4032 if idx = -1 then begin
4033 SetContent(BrowserNullTab);
4035 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
4036 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
4037 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
4039 FBrowsers.Move(j ,0);
4041 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
4042 (FActiveContent.Browser <> BrowserNullTab.Browser) and
4043 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
4044 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4046 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
4047 ReleaseOldestBrowser;
4049 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
4050 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
4051 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4053 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
4054 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
4055 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4057 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
4058 AddressComboBox.Text := GetActiveContent.URL;
4060 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
4061 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
4064 GikoDM.SetFocusForBrowserAction.Execute;
4068 BrowserTab.Tabs.EndUpdate;
4073 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
4074 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
4080 if Button = mbMiddle then begin
4081 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
4084 p := BrowserTab.ScreenToClient(p);
4085 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
4087 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4088 end else if Button = mbLeft then begin
4089 FDragWFirst := true;
4090 FMouseDownPos.X := X;
4091 FMouseDownPos.Y := Y;
4096 procedure TGikoForm.SetBrowserTabState;
4098 CoolBand: TCoolBand;
4100 BrowserBottomPanel.AutoSize := False;
4101 if GikoSys.Setting.BrowserTabVisible then begin
4103 BrowserTab.Tabs.BeginUpdate;
4105 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
4106 BrowserTab.Style := tsTabs;
4107 if GikoSys.Setting.BrowserTabPosition = gtpTop then
4108 BrowserTab.TabPosition := tpTop
4110 BrowserTab.TabPosition := tpBottom;
4111 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
4112 BrowserTab.TabPosition := tpTop;
4113 BrowserTab.Style := tsButtons;
4115 BrowserTab.TabPosition := tpTop;
4116 BrowserTab.Style := tsFlatButtons
4119 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
4120 BrowserTab.Parent := BrowserTabToolBar;
4121 BrowserBottomPanel.Hide;
4122 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4123 if CoolBand <> nil then
4124 CoolBand.Visible := True;
4126 BrowserTab.Parent := BrowserBottomPanel;
4127 BrowserTab.Top := 0;
4128 BrowserTab.Left := 0;
4129 BrowserBottomPanel.Show;
4130 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4131 if CoolBand <> nil then
4132 CoolBand.Visible := False;
4135 BrowserTab.Tabs.EndUpdate;
4139 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4140 if CoolBand <> nil then
4141 CoolBand.Visible := False;
4142 BrowserBottomPanel.Visible := False;
4143 GikoDM.AllTabCloseAction.Execute;
4147 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
4148 Y: Integer; State: TDragState; var Accept: Boolean);
4152 idx := BrowserTab.IndexOfTabAt(X, Y);
4153 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
4156 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
4161 FDragWFirst := False;
4162 idx := BrowserTab.IndexOfTabAt(X, Y);
4164 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
4167 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
4168 Shift: TShiftState; X, Y: Integer);
4171 ThreadItem: TThreadItem;
4174 TabIdx := BrowserTab.IndexOfTabAt(x, y);
4176 if ( ssLeft in Shift ) then begin
4177 if (FDragWFirst) then begin
4178 BrowserTab.EndDrag(false);
4179 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
4182 BrowserTab.EndDrag(false);
4183 FDragWFirst := false;
4186 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
4187 Application.CancelHint;
4188 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
4189 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
4190 BrowserTab.Hint := ThreadItem.Title;
4191 Application.ShowHint := True;
4193 BrowserTab.Hint := '';
4194 Application.ShowHint := True;
4196 FTabHintIndex := TabIdx;
4201 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
4202 const pDisp: IDispatch; var URL: OleVariant);
4204 BrowserRecord :TBrowserRecord;
4206 doc : IHTMLDocument2;
4207 threadItem : TThreadItem;
4209 if TObject(Sender) is TWebBrowser then begin
4210 BrowserRecord := nil;
4211 if TWebBrowser(Sender) <> Browser then begin
4212 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4213 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
4214 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
4218 if BrowserRecord <> nil then begin
4219 if BrowserRecord.Event <> nil then
4220 BrowserRecord.Event.Free;
4221 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, BrowserRecord.Browser.ControlInterface.Document, HTMLDocumentEvents2);
4222 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4223 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4226 if GetActiveContent <> nil then begin
4227 if FEvent <> nil then
4229 FEvent := THTMLDocumentEventSink.Create(Self, Browser.ControlInterface.Document, HTMLDocumentEvents2);
4230 FEvent.OnContextMenu := OnDocumentContextMenu;
4231 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4233 if FEvent <> nil then begin
4241 if (BrowserRecord <> nil) and
4242 Assigned( BrowserRecord.Thread ) then begin
4243 threadItem := BrowserRecord.Thread;
4245 if (threadItem.JumpAddress > 0) then begin
4246 if threadItem.UnRead then begin
4247 threadItem.UnRead := False;
4249 RefreshListView(threadItem);
4251 //
\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®
4252 //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4253 if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4254 BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4255 threadItem.JumpAddress := 0;
4257 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4260 end else if threadItem.UnRead then begin
4261 threadItem.UnRead := False;
4263 BrowserRecord.Move('new');
4264 RefreshListView(threadItem);
4265 end else if threadItem.ScrollTop <> 0 then begin
4267 doc := BrowserRecord.Browser.ControlInterface.Document as IHTMLDocument2;
4268 (doc.body as IHTMLElement2).ScrollTop := threadItem.ScrollTop;
4271 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4276 LockWindowUpdate(0);
4279 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4281 AddRoundNameMenu(RoundNamePopupMenu.Items);
4284 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4290 Item := TMenuItem.Create(Self);
4291 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4292 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4294 Item := TMenuItem.Create(Self);
4295 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4296 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4298 Item := TMenuItem.Create(Self);
4299 Item.Caption := '-';
4301 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4302 Item := TMenuItem.Create(Self);
4303 Item.Caption := RoundList.RoundNameList[i];
4304 Item.OnClick := SetSelectRoundName;
4309 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4311 threadItem : TThreadItem;
4313 if ParentName <> 'dummy1' then begin
4314 SetSelectItemRound(RoundFlag, RoundName);
4316 threadItem := GetActiveContent;
4317 if threadItem <> nil then begin
4318 threadItem.RoundName := RoundName;
4320 RoundList.RoundNameList.Add(RoundName);
4321 threadItem.Round := RoundFlag;
4326 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4331 List := TList.Create;
4333 SelectListItem(List);
4334 for i := 0 to List.Count - 1 do begin
4335 if TObject(List[i]) is TBoard then begin
4336 TBoard(List[i]).RoundName := RoundName;
4338 RoundList.RoundNameList.Add(RoundName);
4339 TBoard(List[i]).Round := RoundFlag;
4340 end else if TObject(List[i]) is TThreadItem then begin
4341 if TThreadItem(List[i]).IsLogFile then begin
4342 TThreadItem(List[i]).RoundName := RoundName;
4344 RoundList.RoundNameList.Add(RoundName);
4345 TThreadItem(List[i]).Round := RoundFlag;
4354 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4356 MenuItem: TMenuItem;
4358 if Sender is TMenuItem then begin
4359 MenuItem := TMenuItem(Sender);
4360 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4365 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4370 if CoolBar = nil then
4372 for i := 0 to CoolBar.Bands.Count - 1 do begin
4373 if CoolBar.Bands[i].Control = Control then begin
4374 Result := CoolBar.Bands[i];
4380 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4382 if BrowserTab.Parent = BrowserTabToolBar then
4383 BrowserTab.Width := BrowserTabToolBar.Width;
4386 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4391 procedure TGikoForm.SetMenuFont;
4393 // GikoSys.MenuFont(MenuToolBar.Font);
4394 // MenuToolBar.Buttons[0].AutoSize := False;
4395 // MenuToolBar.Buttons[0].AutoSize := True;
4396 // MenuToolBar.Font.Color := clMenuText;
4397 GikoSys.MenuFont(MainCoolBar.Font);
4398 MenuToolBar.Buttons[0].AutoSize := False;
4399 MenuToolBar.Buttons[0].AutoSize := True;
4400 MainCoolBar.AutoSize := False;
4401 MainCoolBar.AutoSize := True;
4402 GikoSys.MenuFont(ListCoolBar.Font);
4403 GikoSys.MenuFont(BrowserCoolBar.Font);
4404 // MenuToolBar.Font.Color := clMenuText;
4407 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4411 if FavoriteDM.Modified then begin
4414 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4415 NewMenu := TMenuItem.Create(MainMenu);
4416 NewMenu.Action := GikoDM.FavoriteAddAction;
4417 FavoriteMenu.Add(NewMenu);
4418 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4419 NewMenu := TMenuItem.Create(FavoriteMenu);
4420 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4421 FavoriteMenu.Add(NewMenu);
4422 //
\83Z
\83p
\83\8c\81[
\83^
4423 FavoriteMenu.InsertNewLineAfter(NewMenu);
4424 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4425 FavoriteDM.Modified := false;
4429 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4432 NewMenu: array of TMenuItem;
4434 SetLength(NewMenu, Node.Count);
4435 Node := Node.getFirstChild;
4437 while ( Node <> nil ) do begin
4438 NewMenu[i] := TFavoriteMenuItem.Create(nil);
4439 NewMenu[i].AutoHotkeys := maAutomatic;
4440 NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4441 TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4443 if TObject(Node.Data) is TFavoriteFolder then begin
4444 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4445 CreateFavMenu(Node, NewMenu[i]);
4446 end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4447 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4448 NewMenu[i].OnClick := FavoriteClick;
4449 end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4450 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4451 NewMenu[i].OnClick := FavoriteClick;
4454 Node := Node.getNextSibling;
4456 MenuItem.Add(NewMenu);
4459 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4461 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';
4462 TitleAdd: String = '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á';
4464 Dlg : TFavoriteAddDialog;
4470 if Item is TFavoriteBoardItem then
4471 Item := TFavoriteBoardItem( Item ).Item
4472 else if Item is TFavoriteThreadItem then
4473 Item := TFavoriteThreadItem( Item ).Item;
4475 Node := FavoriteTreeView.Items.GetFirstNode;
4476 if Item is TBoard then begin
4477 ItemURL := TBoard( Item ).URL;
4478 while Node <> nil do begin
4480 if TObject( Data ) is TFavoriteBoardItem then begin
4481 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4482 if Application.MessageBox(PChar(MsgAdd) , PChar(TitleAdd), MB_YESNO ) = IDNO then
4487 Node := Node.GetNext;
4489 Dlg := TFavoriteAddDialog.Create(Self);
4491 Dlg.SetBoard( TBoard( Item ) );
4496 end else if Item is TThreadItem then begin
4497 ItemURL := TThreadItem( Item ).URL;
4498 while Node <> nil do begin
4500 if TObject( Data ) is TFavoriteThreadItem then begin
4501 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
4502 if Application.MessageBox( PChar(MsgAdd), PChar(TitleAdd), MB_YESNO ) = IDNO then
4507 Node := Node.GetNext;
4509 Dlg := TFavoriteAddDialog.Create(Self);
4511 Dlg.SetThreadItem( TThreadItem( Item ) );
4521 procedure TGikoForm.FavoriteClick(Sender: TObject);
4523 FavoriteClick( Sender, True );
4526 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4529 ThreadItem: TThreadItem;
4530 FavBoard: TFavoriteBoardItem;
4531 FavThread: TFavoriteThreadItem;
4535 if Sender is TFavoriteMenuItem then
4536 Item := TFavoriteMenuItem(Sender).Data
4537 else if Sender is TLinkToolButton then
4538 Item := TLinkToolButton(Sender).Data
4539 else if Sender is TTreeNode then
4540 Item := TTreeNode( Sender ).Data
4544 if TObject(Item) is TFavoriteBoardItem then begin
4545 FavBoard := TFavoriteBoardItem(Item);
4546 Board := FavBoard.Item;
4547 if Board <> nil then begin
4548 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4549 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4550 SelectTreeNode(Board, True);
4552 end else if TObject(Item) is TFavoriteThreadItem then begin
4553 FavThread := TFavoriteThreadItem(Item);
4554 ThreadItem := FavThread.Item;
4555 if ThreadItem = nil then
4558 InsertBrowserTab(ThreadItem, ActiveTab);
4560 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4561 if GikoSys.Setting.ListWidthState = glsMin then begin
4562 GikoDM.BrowserMaxAndFocusAction.Execute;
4565 if GikoSys.Setting.ListHeightState = glsMin then begin
4566 GikoDM.BrowserMaxAndFocusAction.Execute;
4572 procedure TGikoForm.BBSMenuItemOnClick(
4577 if Sender is TBBSMenuItem then
4578 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4582 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4584 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4587 //!
\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é)
4588 procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4590 stRes, edRes : Int64;
4591 browserRec : TBrowserRecord;
4592 threadNumber : String;
4593 doc : IHTMLDocument2;
4597 Thread.JumpAddress := 0;
4598 //
\83^
\83u
\82ð
\90¶
\90¬
4599 browserRec := InsertBrowserTab(Thread);
4600 if (browserRec <> nil) then begin
4601 // JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N
\82·
\82é
4602 threadNumber := ChangeFileExt(Thread.FileName, '');
4603 GikoSys.GetPopupResNumber( URL, stRes, edRes );
4604 //
\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
4605 if (StrToInt64(threadNumber) = stRes) then begin
4606 if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4607 and (Pos('&st=' + threadNumber , URL) = 0) then begin
4611 if ( stRes > 0 ) then begin
4612 Thread.JumpAddress := stRes;
4614 //
\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é
4615 if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4616 DownloadContent(Thread);
4617 end else if (not browserRec.Repaint) and (stRes > 0) then begin
4618 browserRec.Move(IntToStr(stRes));
4619 Thread.JumpAddress := 0;
4621 doc := browserRec.Browser.ControlInterface.Document as IHTMLDocument2;
4622 if Assigned(doc) then
4623 Thread.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
4630 procedure TGikoForm.MoveToURL(const inURL: string);
4632 protocol, host, path, document, port, bookmark : string;
4633 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4635 BBSID, BBSKey: string;
4636 {tmpBoard,} Board: TBoard;
4637 ThreadItem: TThreadItem;
4640 tmpThread : TThreadItem;
4641 shiftDown : Boolean;
4645 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4646 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4649 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4650 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4651 if shiftDown then begin
4652 GikoSys.OpenBrowser(inURL, gbtUserApp);
4654 end else if ctrlDown then begin
4655 GikoSys.OpenBrowser(inURL, gbtIE);
4659 //=====
\83v
\83\89\83O
\83C
\83\93
4662 bi := Length(BoardGroups) - 1;
4663 for i := 1 to bi do begin
4664 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4665 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4668 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4669 Board := BBSsFindBoardFromURL( boardURL );
4672 if Board = nil then begin
4674 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4675 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4678 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4679 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4680 ShowBBSTree( BBSs[ 1 ] );
4683 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4684 if not Board.IsThreadDatRead then begin
4685 GikoSys.ReadSubjectFile( Board );
4689 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4690 if ThreadItem = nil then begin
4691 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4692 ThreadItem := tmpThread;
4693 Board.Insert( 0, ThreadItem );
4694 if ActiveList is TBoard then begin
4695 if TBoard(ActiveList) = Board then
4696 ListView.Items.Count := ListView.Items.Count + 1;
4701 OpenThreadItem(ThreadItem, inURL);
4708 Board := BBSsFindBoardFromURL(
4709 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4711 if Board <> nil then begin
4712 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4713 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4714 SelectTreeNode( Board, True );
4722 // 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¢
4726 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4727 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4728 Board := BBSsFindBoardFromURL( boardURL );
4729 if Board = nil then begin
4730 //
\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
4731 GikoSys.OpenBrowser(inURL, gbtUserApp);
4734 //
\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é
4736 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4737 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4738 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4739 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4740 GikoSys.OpenBrowser(inURL, gbtUserApp);
4745 if not Board.IsThreadDatRead then
4746 GikoSys.ReadSubjectFile(Board);
4747 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4748 ThreadItem := Board.FindThreadFromURL( URL );
4749 //
\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)
4750 if ThreadItem = nil then begin
4751 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4754 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ª
\82È
\82¢
\82È
\82ç
\90¶
\90¬
\82·
\82é
\81B
4755 if ThreadItem = nil then begin
4756 ThreadItem := TThreadItem.Create( nil, Board, URL );
4757 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4758 Board.Insert(0, ThreadItem);
4759 if ActiveList is TBoard then begin
4760 if TBoard(ActiveList) = Board then
4761 ListView.Items.Count := ListView.Items.Count + 1;
4764 //
\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é
4765 if (not ThreadItem.IsLogFile) then begin
4766 if AnsiPos(Host, Board.URL) = 0 then
4767 ThreadItem.DownloadHost := Host
4769 ThreadItem.DownloadHost := '';
4771 OpenThreadItem(ThreadItem, inURL);
4775 Board := BBSsFindBoardFromURL( inURL );
4776 if Board = nil then begin
4777 GikoSys.OpenBrowser(inURL, gbtAuto);
4779 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4780 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4781 SelectTreeNode( Board, True );
4786 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4788 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4789 CoolBarResized( Sender, MainCoolBar );
4792 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4793 Shift: TShiftState);
4795 if Key = VK_RETURN then
4796 GikoDM.MoveToAction.Execute;
4799 procedure TGikoForm.BrowserEnter(Sender: TObject);
4801 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4804 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4806 CDS:PCopyDataStruct;
4810 CDS := Message.CopyDataStruct;
4811 GetMem(PC, CDS^.cbData);
4813 lstrcpy(PC,CDS^.lpData);
4814 SetString(sURL, PC,lstrlen(PC));
4819 Message.Result := 1;
4822 procedure TGikoForm.WndProc(var Message: TMessage);
4824 senderBrowser : TWebBrowser;
4830 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4833 if Message.WParam = SC_MINIMIZE then begin
4835 PostMessage(Handle, USER_MINIMIZED, 0, 0);
4838 TreeClick( TreeView.Selected );
4843 if (GikoSys.Setting.StoredTaskTray) then begin
4850 USER_DOCUMENTCOMPLETE:
4851 if (Message.WParam <> 0) and
4852 (TObject(Message.WParam) is TWebBrowser) then begin
4853 senderBrowser := TWebBrowser( Message.WParam );
4854 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
4857 if (TObject(Message.WParam) is TResPopupBrowser) then begin
4859 TResPopupBrowser( Message.WParam ).Clear;
4870 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
4875 //
\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Í
4876 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
4877 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
4878 if Msg.CharCode in [VK_BACK] then begin
4879 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4880 if Msg.KeyData > 0 then begin
4883 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4887 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
4888 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
4891 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4894 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
4895 if Msg.CharCode in [VK_BACK] then begin
4896 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4897 if Msg.KeyData > 0 then begin
4900 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4903 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
4906 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4910 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
4914 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
4919 PreviewTimer.Enabled := False;
4923 ARect := FPreviewBrowser.GetWindowRect(p);
4925 FPreviewBrowser.PreviewImage(FPreviewURL);
4927 if ARect.Bottom > Screen.DesktopHeight then begin
4928 OffsetRect(ARect, 0, -(ARect.Bottom - Screen.DesktopHeight));
4930 if (ARect.Right > Screen.DesktopWidth) then begin
4931 OffsetRect(ARect, -(ARect.Right - Screen.DesktopWidth), 0);
4933 if (ARect.Left < Screen.DesktopLeft) then begin
4934 OffsetRect(ARect, +(Screen.DesktopLeft - ARect.Left), 0);
4936 if (ARect.Top < Screen.DesktopTop) then begin
4937 OffsetRect(ARect, 0, (Screen.DesktopTop - ARect.Top));
4940 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST,
4941 ARect.Left, ARect.Top,
4942 (ARect.Right - ARect.Left), (ARect.Bottom - ARect.Top),
4943 SWP_NOACTIVATE or SWP_HIDEWINDOW);
4945 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
4946 FPreviewBrowserRect := ARect;
4949 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
4953 if PreviewTimer.Enabled then
4954 PreviewTimer.Enabled := False;
4956 if (FPreviewBrowser <> nil)
4957 and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
4958 //
\82±
\82±
\82Å
\8fÁ
\82³
\82ê
\82é
\82Ì
\82ª
\96â
\91è
4959 //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Å
\95\
\8e¦
\94Í
\88Í
\94»
\92è
\82Å
\82«
\82Ä
\82¢
\82é
\82Í
\82¸
4960 Pos := Mouse.CursorPos;
4961 Pos.X := Pos.X + Left;
4962 Pos.Y := Pos.Y + Top;
4963 if (FPreviewBrowserRect.Left > Pos.X) or
4964 (FPreviewBrowserRect.Right < Pos.X) or
4965 (FPreviewBrowserRect.Top > Pos.Y) or
4966 (FPreviewBrowserRect.Bottom < Pos.Y) then begin
4967 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
4971 Message.Result := 1;
4974 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
4976 GikoDM.MsgBarCloseAction.Execute;
4979 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
4981 doc: IHtmlDocument2;
4982 Range: IHTMLTxtRange;
4985 ThreadItem: TThreadItem;
4988 FactiveContent.IDAnchorPopup('');
4990 doc := FactiveContent.Browser.ControlInterface.Document as IHtmlDocument2;
4991 if not Assigned(doc) then
4994 Range := doc.selection.createRange as IHTMLTxtRange;
4995 if not Assigned(Range) then
4998 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
4999 s := ZenToHan(Trim(s));
5000 if GikoSys.IsNumeric(s) then begin
5001 Num := StrToInt64Def(s, -1);
5002 ThreadItem := GetActiveContent(true);
5003 if (ThreadItem <> nil) and (Num <= ThreadItem.Count)
5004 and (Num > 0)then begin
5005 CreateResPopupBrowser;
5006 FResPopupBrowser.CreateNewBrowser.PopupType := gptThread;
5007 HTMLCreater.SetResPopupText(FResPopupBrowser.CreateNewBrowser, ThreadItem, Num, Num, False, False);
5008 FResPopupBrowser.Popup;
5017 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
5019 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
5020 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
5022 if FTreeType = gttHistory then begin
5023 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
5024 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
5027 TreeView.Items.Clear;
5031 procedure TGikoForm.SetLinkBar;
5035 ToolButton: TLinkToolButton;
5036 MenuItem: TMenuItem;
5037 oldIgnoreResize : TResizeType;
5039 oldIgnoreResize := FIsIgnoreResize;
5040 FIsIgnoreResize := rtResizing;
5041 MainCoolBar.Bands.BeginUpdate;
5043 LinkBarPopupMenu.Items.Clear;
5044 for i := LinkToolBar.ButtonCount - 1 downto 0 do
5045 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
5046 LinkToolBar.Buttons[i].Free;
5047 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5048 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5049 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5050 ToolButton := TLinkToolButton.Create(LinkToolBar);
5051 // ToolButton.Parent := LinkToolBar;
5052 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
5053 MenuItem := TMenuItem.Create(Self);
5054 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
5055 LinkBarPopupMenu.Items.Add(MenuItem);
5056 ToolButton.MenuItem := MenuItem;
5057 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
5058 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
5059 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
5060 ToolButton.OnClick := FavoriteClick;
5061 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
5062 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
5063 ToolButton.OnClick := FavoriteClick;
5065 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
5066 ToolButton.Left := 10000;
5067 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
5068 ToolButton.AutoSize := True;
5069 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
5070 ToolButton.OnDragOver := FavoriteDragOver;
5071 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
5072 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
5073 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
5074 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
5075 //ToolButton.DragMode := dmAutomatic;
5076 ToolButton.DragMode := dmManual;
5077 ToolButton.PopupMenu := FavoriteTreePopupMenu;
5079 LinkToolBar.InsertControl(ToolButton);
5084 { if LinkToolBar.ButtonCount = 0 then begin
5085 ToolButton := TLinkToolButton.Create(LinkToolBar);
5086 ToolButton.Style := tbsButton;
5087 ToolButton.ImageIndex := -1;
5088 ToolButton.Caption := '';
5089 LinkToolBar.InsertControl(ToolButton);
5092 MainCoolBar.Bands.EndUpdate;
5093 LoadCoolBarSettings;
5094 FIsIgnoreResize := oldIgnoreResize;
5098 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5106 if Sender = FavoriteTreeView then begin
5107 Node := FavoriteTreeView.GetNodeAt(X, Y);
5112 bound := Node.DisplayRect( False );
5113 height := bound.Bottom - bound.Top;
5114 if (bound.Top + height / 2) <= Y then
5115 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
5120 if Node.IsFirstNode then
5125 if FDropSpaceNode <> nil then
5126 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
5129 if Change then begin
5130 if FDropSpaceNode <> nil then
5131 FDropSpaceNode.Free;
5133 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
5134 FDropSpaceNode.MoveTo( Node, naInsert );
5135 FDropSpaceNode.ImageIndex := -1;
5136 FDropSpaceNode.SelectedIndex := -1;
5140 if Source = FavoriteTreeView then begin
5141 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
5146 end else if Source = BrowserTab then
5148 else if Source = ListView then
5150 else if Source is TLinkToolButton then
5152 else if Source = TreeView then
5158 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5161 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
5164 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
5166 // FDragging := true;
5169 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
5171 SenderNode: TTreeNode;
5172 LinkToolButton: TLinkToolButton;
5175 LinkToolButton := TLinkToolButton( Sender );
5176 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5177 SenderNode.Selected := False;
5178 FavoriteDragDrop( SenderNode, Source );
5184 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5186 favButton : TLinkToolButton;
5187 favThreadItem : TFavoriteThreadItem;
5193 if Sender is TLinkToolButton then begin
5194 favButton := TLinkToolButton( Sender );
5195 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5196 favThreadItem := TFavoriteThreadItem( favButton.Data );
5197 if favThreadItem.Item <> nil then
5198 InsertBrowserTab( favThreadItem.Item, False );
5206 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5210 TToolButton( Sender ).DragMode := dmManual;
5211 if ssLeft in Shift then begin
5212 // 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)
5213 if FDragTime = 0 then begin
5214 FDragTime := GetTickCount();
5216 Now := GetTickCount();
5217 if (Now - FDragTime) > 500 then begin
5218 if FDragButton <> TToolButton( Sender ) then begin
5220 FDragButton := TToolButton( Sender );
5221 TToolButton(Sender).BeginDrag(false ,5);
5224 {$IF Defined(debug)}
5225 ShowMessage('Error');
5236 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5241 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5246 for i := 0 to ToolBar.ButtonCount - 1 do
5247 if ToolBar.Buttons[i].Visible then
5248 Result := Result + ToolBar.Buttons[i].Width;
5251 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5253 Control : TWinControl;
5256 Control := FindControl(BandInfo^.hwndChild);
5257 if Control = nil then
5260 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5261 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5262 idx := MainCoolBar.Bands[ i ].ID;
5266 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5267 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
5268 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5269 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5270 BandInfo^.cxMinChild := 0;
5271 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
5272 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5273 end else if Control = LinkToolBar then begin
5274 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5275 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5276 BandInfo^.cxMinChild := 0;
5277 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5278 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5279 end else begin // AddressToolBar
5280 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5281 BandInfo^.cxMinChild := 0;
5282 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5286 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5292 ChevronPopupMenu.Items.Clear;
5294 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5295 if MainCoolBar.Bands[ i ].Visible then begin
5296 if Idx = Int64(RebarChevron^.uBand) then begin
5303 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5304 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5306 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5307 ToolBarChevronMenu(StdToolBar);
5308 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5312 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5313 ChevronPopupMenu.Popup(p.x, p.y);
5317 procedure TGikoForm.MenuBarChevronMenu;
5318 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5324 for i := 0 to MenuItem.Count - 1 do begin
5326 if MenuItem[i] is TFavoriteMenuItem then begin
5327 Item := TFavoriteMenuItem.Create(Self);
5328 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5330 Item := TMenuItem.Create(Self);
5331 Item.Caption := MenuItem[i].Caption;
5332 Item.Action := MenuItem[i].Action;
5333 Item.ImageIndex := MenuItem[i].ImageIndex;
5334 Item.OnClick := MenuItem[i].OnClick;
5335 PopupItem.Add(Item);
5336 if MenuItem[i].Count > 0 then
5337 SetSubMenu(MenuItem[i], Item);
5346 ChevronPopupMenu.Items.Clear;
5347 ChevronPopupMenu.Images := MainMenu.Images;
5348 bw := GetWidthAllToolButton(MenuToolBar);
5349 if MenuToolBar.Width < bw then begin
5351 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5352 w := w + MenuToolBar.Buttons[i].Width;
5353 if MenuToolBar.Width <= w then begin
5354 Item := TMenuItem.Create(Self);
5355 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5356 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5357 ChevronPopupMenu.Items.Add(Item);
5358 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5364 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5365 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5370 if Assigned(PopupMenu.OnPopup) then
5371 PopupMenu.OnPopup(nil);
5372 for i := 0 to PopupMenu.Items.Count - 1 do begin
5374 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5375 Item := TFavoriteMenuItem.Create(Self);
5376 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5378 Item := TMenuItem.Create(Self);
5379 Item.Caption := PopupMenu.Items[i].Caption;
5380 Item.Action := PopupMenu.Items[i].Action;
5381 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5382 Item.OnClick := PopupMenu.Items[i].OnClick;
5383 PopupItem.Add(Item);
5392 ChevronPopupMenu.Items.Clear;
5393 ChevronPopupMenu.Images := ToolBar.HotImages;
5394 bw := GetWidthAllToolButton(ToolBar);
5395 if ToolBar.Width < bw then begin
5397 for i := 0 to ToolBar.ButtonCount - 1 do begin
5398 if ToolBar.Buttons[i].Visible then
5399 w := w + ToolBar.Buttons[i].Width;
5400 if ToolBar.Width <= w then begin
5401 if ToolBar.Buttons[i].Tag = 0 then begin
5402 Item := TMenuItem.Create(Self);
5403 if ToolBar.Buttons[i].Style = tbsSeparator then
5406 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5407 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5410 Item.Caption := ToolBar.Buttons[i].Caption;
5411 Item.Action := ToolBar.Buttons[i].Action;
5413 //Item.Visible := True;
5415 ChevronPopupMenu.Items.Add(Item);
5416 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5418 Item.OnClick := nil;
5419 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5427 procedure TGikoForm.LinkBarChevronMenu;
5432 Item: TFavoriteMenuItem;
5434 Button: TLinkToolButton;
5436 ChevronPopupMenu.Items.Clear;
5437 ChevronPopupMenu.Images := LinkToolBar.Images;
5438 bw := GetWidthAllToolButton(LinkToolBar);
5439 if LinkToolBar.Width < bw then begin
5441 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5442 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5443 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5444 w := w + LinkToolBar.Buttons[j].Width;
5445 if LinkToolBar.Width <= w then begin
5446 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5447 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5448 Item := TFavoriteMenuItem.Create(Self);
5449 if TObject(Button.Data) is TFavoriteFolder then begin
5450 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5451 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5452 Item.OnClick := FavoriteClick;
5453 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5454 Item.OnClick := FavoriteClick;
5456 Item.Data := Button.Data;
5457 Item.Caption := LinkToolBar.Buttons[j].Caption;
5458 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5459 ChevronPopupMenu.Items.Add(Item);
5470 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5471 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5472 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5474 \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É
5475 \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
5477 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5479 bandInfo : tagREBARBANDINFOA;
5480 pBandInfo : PReBarBandInfoA;
5487 pBandInfo := @bandInfo;
5488 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5489 bandInfo.cbSize := sizeof( bandInfo );
5490 bandInfo.hwndChild := h;
5491 bandInfo.cyMinChild := bar.Height;
5492 bar.OnBandInfo( nil, pBandInfo );
5493 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5495 for i := bar.Bands.Count - 1 downto 0 do begin
5496 if bar.Bands[ i ].Control.Handle = h then begin
5502 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5506 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5508 Control: TWinControl;
5511 Control := FindControl(BandInfo^.hwndChild);
5512 if Control = nil then
5515 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5516 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5517 idx := ListCoolBar.Bands[ i ].ID;
5521 if Control = ListToolBar then begin
5522 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5523 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5524 BandInfo^.cxMinChild := 0;
5525 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5526 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5528 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5529 BandInfo^.cxMinChild := 0;
5530 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5534 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5539 ChevronPopupMenu.Items.Clear;
5540 Idx := RebarChevron^.uBand;
5541 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5542 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5543 ToolBarChevronMenu(ListToolBar);
5546 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5547 ChevronPopupMenu.Popup(p.x, p.y);
5551 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5553 Control: TWinControl;
5556 Control := FindControl(BandInfo^.hwndChild);
5557 if Control = nil then
5560 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5561 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5562 idx := BrowserCoolBar.Bands[ i ].ID;
5566 if Control = BrowserToolBar then begin
5567 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5568 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5569 BandInfo^.cxMinChild := 0;
5570 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5571 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5573 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5574 BandInfo^.cxMinChild := 0;
5575 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5579 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5584 ChevronPopupMenu.Items.Clear;
5585 Idx := RebarChevron^.uBand;
5586 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5587 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5588 ToolBarChevronMenu(BrowserToolBar)
5591 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5592 ChevronPopupMenu.Popup(p.x, p.y);
5596 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5598 if Column^.iImage = -1 then begin
5599 Column^.mask := Column^.mask or LVCF_FMT;
5601 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5602 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5606 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5611 for i := bar.ButtonCount - 1 downto 0 do begin
5612 if bar.Buttons[ i ].Action = action then begin
5613 Result := bar.Buttons[ i ];
5619 procedure TGikoForm.SetToolBarPopup;
5622 aIEButton : TToolButton;
5623 aCabinetBBSButton : TToolButton;
5624 aResRangeButton : TToolButton;
5625 aThreadRangeButton: TToolButton;
5627 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5629 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5630 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5631 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5632 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5633 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5635 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5636 if aIEButton <> nil then
5637 aIEButton.DropdownMenu := BrowserPopupMenu;
5638 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5639 if aCabinetBBSButton <> nil then
5640 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5641 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5642 if aResRangeButton <> nil then
5643 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5644 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5645 if aThreadRangeButton <> nil then
5646 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5649 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5650 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5654 // browserPos : TPoint;
5658 Wnd := WindowFromPoint(Mouse.CursorPos);
5660 if WheelDelta > 0 then
5665 if (Wnd = BrowserTab.Handle) or
5666 (Wnd = BrowserTab.Parent.Handle) then begin
5667 BrowserTab.ScrollTabs(Delta);
5669 if FIsHandledWheel then begin
5670 FIsHandledWheel := False;
5673 FIsHandledWheel := True;
5674 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5675 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5677 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5685 procedure TGikoForm.SetSelectWord( const text : string );
5687 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5688 ClearThreadRengeAction;
5690 if Length( text ) = 0 then
5692 GikoDM.AllItemAction.Checked := True;
5693 SetListViewType( gvtAll )
5695 SetListViewType( gvtUser, text, false );
5699 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5702 SetSelectWord( SelectComboBox.Text );
5706 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5707 Shift: TShiftState);
5715 if Key = VK_Return then
5718 end else if Key = 229 then begin
5719 if GikoSys.Setting.UseUndecided then begin
5720 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5721 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5722 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5723 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5724 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5725 SetLength(Str, Len);
5726 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5727 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5728 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5730 Str := SelectComboBox.Text + Str;
5732 if (Length(Str) > 0) then begin
5736 end else if Length( SelectComboBox.Text ) = 0 then
5738 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5739 *
\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
5740 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5743 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5744 ClearThreadRengeAction;
5748 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
5749 procedure TGikoForm.ClearThreadRengeAction;
5751 //
\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é
5752 if GikoDM.AllItemAction.Checked then
5753 GikoDM.AllItemAction.Checked := False;
5754 if GikoDM.LogItemAction.Checked then
5755 GikoDM.LogItemAction.Checked := False;
5756 if GikoDM.NewItemAction.Checked then
5757 GikoDM.NewItemaction.Checked := False;
5758 if GikoDM.LiveItemAction.Checked then
5759 GikoDM.LiveItemAction.Checked := False;
5760 if GikoDM.ArchiveItemAction.Checked then
5761 GikoDM.ArchiveItemAction.Checked := False;
5765 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5770 if Length( SelectComboBox.Text ) = 0 then
5772 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5773 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5778 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5779 procedure TGikoForm.ModifySelectList;
5786 if not SelectComboBoxPanel.Visible then
5789 if Length( SelectComboBox.Text ) > 0 then
5791 oldText := SelectComboBox.Text;
5792 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5794 GikoSys.Setting.SelectTextList.Delete( idx );
5795 idx := SelectComboBox.Items.IndexOf( oldText );
5797 SelectComboBox.Items.Delete( idx );
5798 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5799 SelectComboBox.Items.Insert( 0, oldText );
5800 SelectComboBox.Text := oldText;
5808 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5809 Shift: TShiftState; X, Y: Integer);
5814 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5817 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5818 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5819 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5821 If w <= 50 Then Begin
5822 //
\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
5823 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
5824 pos.X := pos.X + (50 - w);
5826 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
5830 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
5831 //If SelectComboBox.Width <> w Then Begin
5832 If SelectComboBoxPanel.Width <> w Then Begin
5833 SelectComboBoxPanel.Width := w;
5834 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
5835 GikoSys.Setting.SelectComboBoxWidth := w;
5836 DraggingSelectComboBoxPosition := pos;
5838 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
5839 ResetBandInfo( ListCoolBar, ListToolBar );
5845 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
5846 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5850 IsDraggingSelectComboBox := True;
5853 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
5857 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
5858 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5860 IsDraggingSelectComboBox := False;
5864 procedure TGikoForm.StatusBarResize(Sender: TObject);
5866 StatusBar.Panels[1].Width := StatusBar.Width -
5867 StatusBar.Panels[0].Width -
5868 StatusBar.Panels[THREADSIZE_PANEL].Width -
5869 StatusBar.Panels[NGWORDNAME_PANEL].Width;
5871 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
5874 if (Length( SelectComboBox.Text ) = 0) or
5875 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
5877 SelectComboBox.Text := '';
5878 SelectComboBox.Color := clWindow;
5883 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
5886 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
5889 if TObject(SenderNode.Data) is TFavoriteFolder then
5890 SourceNode.MoveTo(SenderNode, naAddChild)
5892 SourceNode.MoveTo(SenderNode, naInsert);
5896 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
5900 FavoBoardItem: TFavoriteBoardItem;
5901 FavoThreadItem: TFavoriteThreadItem;
5903 ThreadItem: TThreadItem;
5906 if (SenderNode = nil) or (Source = nil) then
5909 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5910 FavNode := SenderNode.Parent
5912 FavNode := SenderNode;
5916 if Source is TBoard then begin
5917 Board := TBoard( Source );
5918 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
5919 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
5920 Node.ImageIndex := 15;
5921 Node.SelectedIndex := 15;
5922 end else if Source is TFavoriteBoardItem then begin
5923 FavoBoardItem := TFavoriteBoardItem( Source );
5924 Board := FavoBoardItem.Item;
5925 if Board <> nil then
5926 if not Board.IsThreadDatRead then
5927 GikoSys.ReadSubjectFile(Board);
5928 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
5929 Node.ImageIndex := 15;
5930 Node.SelectedIndex := 15;
5931 end else if Source is TThreadItem then begin
5932 ThreadItem := TThreadItem( Source );
5933 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5934 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5935 Node.ImageIndex := 16;
5936 Node.SelectedIndex := 16;
5937 end else if Source is TBrowserRecord then begin
5938 ThreadItem := TBrowserRecord( Source ).Thread;
5939 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5940 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5941 Node.ImageIndex := 16;
5942 Node.SelectedIndex := 16;
5943 end else if Source is TFavoriteThreadItem then begin
5944 FavoThreadItem := TFavoriteThreadItem( Source );
5945 ThreadItem := FavoThreadItem.Item;
5946 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
5947 Node.ImageIndex := 16;
5948 Node.SelectedIndex := 16;
5951 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5953 FavoriteMoveTo( SenderNode, Node );
5957 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
5960 SourceNode: TTreeNode;
5961 LinkToolButton: TLinkToolButton;
5964 if SenderNode = nil then
5967 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
5968 if FDropSpaceNode <> nil then
5969 SenderNode := FDropSpaceNode;
5971 if Source = FavoriteTreeView then begin
5972 SourceNode := FavoriteTreeView.Selected;
5973 FavoriteMoveTo( SenderNode, SourceNode );
5974 end else if Source is TLinkToolButton then begin
5975 LinkToolButton := TLinkToolButton( Source );
5976 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5977 FavoriteMoveTo( SenderNode, SourceNode );
5978 end else if Source = BrowserTab then begin
5979 idx := BrowserTab.TabIndex;
5980 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
5981 end else if Source = ListView then begin
5982 FavoriteAddTo( SenderNode, ListView.Selected.Data );
5983 end else if Source = TreeView then begin
5984 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
5988 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
5991 SenderNode: TTreeNode;
5994 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
5995 if SenderNode <> nil then begin
5996 FavoriteDragDrop( SenderNode, Source );
5999 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
6000 if FDropSpaceNode <> nil then begin
6002 FDropSpaceNode.Delete;
6004 FDropSpaceNode := nil;
6007 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6008 FavoriteDM.Modified := true;
6014 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
6015 Node: TTreeNode; var S: String);
6017 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6018 FavoriteDM.Modified := true;
6020 FavoriteTreeView.ReadOnly := True;
6025 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
6026 Shift: TShiftState);
6028 if not TTreeView(Sender).IsEditing then begin
6032 FClickNode := FavoriteTreeView.Selected;
6033 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
6037 FClickNode := FavoriteTreeView.Selected;
6038 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
6042 FavoriteClick( FavoriteTreeView.Selected );
6043 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
6047 FClickNode := FavoriteTreeView.Selected;
6048 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
6052 //
\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·
6053 if Key = VK_ESCAPE then begin
6054 if (TTreeView(Sender).Selected <> nil) then begin
6055 TTreeView(Sender).Selected.Text := FOrigenCaption;
6057 TTreeView(Sender).Selected.Focused := False;
6063 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
6066 LinkToolButton: TLinkToolButton;
6069 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
6071 FClickNode := FavoriteTreeView.Selected;
6073 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
6075 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
6076 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6077 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6078 FClickNode := FavoriteTreeView.Items[i];
6082 for i := 0 to FClickNode.Count - 1 do begin
6083 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
6084 FClickNode := FClickNode.Item[i];
6091 if FClickNode = nil then begin
6092 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6093 FavoriteTreeDeletePopupMenu.Visible := False;
6094 FavoriteTreeRenamePopupMenu.Visible := False;
6095 FavoriteTreeNewFolderPopupMenu.Visible := False;
6096 FavoriteTreeURLCopyPopupMenu.Visible := False;
6097 FavoriteTreeNameCopyPopupMenu.Visible := False;
6098 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6099 FavoriteTreeReloadPopupMenu.Visible := False;
6100 FavoriteTreeLogDeletePopupMenu.Visible := False;
6101 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6102 end else if FClickNode.IsFirstNode then begin
6103 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6104 FavoriteTreeDeletePopupMenu.Visible := False;
6105 FavoriteTreeRenamePopupMenu.Visible := False;
6106 FavoriteTreeNewFolderPopupMenu.Visible := True;
6107 FavoriteTreeURLCopyPopupMenu.Visible := False;
6108 FavoriteTreeNameCopyPopupMenu.Visible := False;
6109 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6110 FavoriteTreeReloadPopupMenu.Visible := False;
6111 FavoriteTreeLogDeletePopupMenu.Visible := False;
6112 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6113 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
6114 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6115 FavoriteTreeDeletePopupMenu.Visible := True;
6116 FavoriteTreeRenamePopupMenu.Visible := False;
6117 FavoriteTreeNewFolderPopupMenu.Visible := True;
6118 FavoriteTreeURLCopyPopupMenu.Visible := False;
6119 FavoriteTreeNameCopyPopupMenu.Visible := False;
6120 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6121 FavoriteTreeReloadPopupMenu.Visible := False;
6122 FavoriteTreeLogDeletePopupMenu.Visible := False;
6123 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6124 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
6125 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6126 FavoriteTreeDeletePopupMenu.Visible := True;
6127 FavoriteTreeRenamePopupMenu.Visible := True;
6128 FavoriteTreeNewFolderPopupMenu.Visible := True;
6129 FavoriteTreeURLCopyPopupMenu.Visible := False;
6130 FavoriteTreeNameCopyPopupMenu.Visible := True;
6131 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6132 FavoriteTreeReloadPopupMenu.Visible := False;
6133 FavoriteTreeLogDeletePopupMenu.Visible := False;
6134 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6135 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
6136 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6137 FavoriteTreeDeletePopupMenu.Visible := True;
6138 FavoriteTreeRenamePopupMenu.Visible := True;
6139 FavoriteTreeNewFolderPopupMenu.Visible := True;
6140 FavoriteTreeURLCopyPopupMenu.Visible := True;
6141 FavoriteTreeNameCopyPopupMenu.Visible := True;
6142 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6143 FavoriteTreeReloadPopupMenu.Visible := True;
6144 FavoriteTreeLogDeletePopupMenu.Visible := True;
6145 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6146 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
6147 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6148 FavoriteTreeDeletePopupMenu.Visible := True;
6149 FavoriteTreeRenamePopupMenu.Visible := True;
6150 FavoriteTreeNewFolderPopupMenu.Visible := True;
6151 FavoriteTreeURLCopyPopupMenu.Visible := True;
6152 FavoriteTreeNameCopyPopupMenu.Visible := True;
6153 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6154 FavoriteTreeReloadPopupMenu.Visible := True;
6155 FavoriteTreeLogDeletePopupMenu.Visible := False;
6156 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6158 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6159 FavoriteTreeDeletePopupMenu.Visible := False;
6160 FavoriteTreeRenamePopupMenu.Visible := False;
6161 FavoriteTreeNewFolderPopupMenu.Visible := False;
6162 FavoriteTreeURLCopyPopupMenu.Visible := False;
6163 FavoriteTreeNameCopyPopupMenu.Visible := False;
6164 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6165 FavoriteTreeReloadPopupMenu.Visible := False;
6166 FavoriteTreeLogDeletePopupMenu.Visible := False;
6167 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6172 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
6177 if not (TObject(node.Data) is TFavoriteFolder) then
6180 for i := 0 to node.Count - 1 do
6182 if TObject(node.Item[i].Data) is TFavoriteFolder then
6183 FavoriteBrowseFolder( node.Item[i] )
6184 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
6185 FavoriteClick( node.Item[i], False );
6189 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6195 for i := 0 to Node.Count - 1 do begin
6196 if Node.Item[i].Data = FindPointer then begin
6197 Result := Node.Item[i];
6199 end else if Node.Item[i].Count > 0 then begin
6200 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6201 if Found <> nil then begin
6212 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6216 SenderNode: TTreeNode;
6220 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6221 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6222 SenderNode := FavoriteTreeView.Items[i];
6226 SenderNode.Selected := False;
6228 FavoriteDragDrop( SenderNode, Source );
6233 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6234 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6236 if FDragWFirst = true then
6237 FDragWFirst := false;
6239 //
\83}
\83E
\83X
\82Ì
\92\86\83{
\83^
\83\93\82Å
\95Â
\82¶
\82½
\82Æ
\82«
\82É
\8dÅ
\91å
\89»
\82µ
\82Ä
\82µ
\82Ü
\82¤
\82Ì
\82ð
\96h
\82®
\81@
6240 if Button <> mbMiddle then begin
6241 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6242 if GikoSys.Setting.ListWidthState = glsMin then begin
6243 GikoDM.BrowserMaxAndFocusAction.Execute;
6246 if GikoSys.Setting.ListHeightState = glsMin then begin
6247 GikoDM.BrowserMaxAndFocusAction.Execute;
6253 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6254 Y: Integer; State: TDragState; var Accept: Boolean);
6257 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6261 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6265 if FDropSpaceNode <> nil then begin
6267 FDropSpaceNode.Delete;
6269 FDropSpaceNode := nil;
6271 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6272 FavoriteDM.Modified := true;
6278 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6280 if FListViewBackGroundColor <> value then begin
6281 FListViewBackGroundColor := value;
6282 ListView.Color := FListViewBackGroundColor;
6285 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6287 threadItem : TThreadItem;
6291 if FClickNode = nil then Exit;
6293 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6295 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6296 if threadItem = nil then
6298 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6300 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6302 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6303 if boardItem = nil then
6305 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6311 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6312 MousePos: TPoint; var Handled: Boolean);
6316 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6317 if BrowserTab.TabIndex <> idx then begin
6318 BrowserTab.TabIndex := idx;
6319 BrowserTab.OnChange(nil);
6323 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6325 ThreadItem: TThreadItem;
6331 boardPlugIn : TBoardPlugIn;
6333 if Number = 0 then Exit;
6334 ThreadItem := GetActiveContent(True);
6336 if ThreadItem <> nil then begin
6337 //if ThreadItem.IsBoardPlugInAvailable then begin
6338 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6339 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6340 //boardPlugIn := ThreadItem.BoardPlugIn;
6341 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6343 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6344 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6345 //
\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
6346 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6348 FileName := ThreadItem.FilePath;
6349 tmp := GikoSys.ReadThreadFile(FileName, Number);
6351 if tmp <> '' then begin
6352 THTMLCreate.DivideStrLine(tmp, @Res);
6354 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6355 if ReplaceTag then begin
6356 Header := CustomStringReplace(Header, '</b>', '',true);
6357 Header := CustomStringReplace(Header, '<b>', '',true);
6358 Header := CustomStringReplace(Header, '<br>', '',true);
6359 Header := DeleteFontTag(Header);
6361 //if ThreadItem.IsBoardPlugInAvailable then begin
6362 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6363 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6364 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6366 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6367 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6368 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6369 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6372 Body := CustomStringReplace(Body, '</a>', '',true);
6374 Body := HTMLCreater.DeleteLink(Body);
6375 if ReplaceTag then begin
6376 Body := CustomStringReplace(Body, '<', '<');
6377 Body := CustomStringReplace(Body, '>', '>');
6378 Body := CustomStringReplace(Body, '"', '"');
6379 Body := CustomStringReplace(Body, '&', '&');
6380 //Body := CustomStringReplace(Body, ' ', ' ');
6383 Header := Header + Body;
6385 Clipboard.SetTextBuf( PChar(Header) );
6391 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6393 AddRoundNameMenu(dummy1);
6394 AddMenuSameBoardThread;
6396 //!
\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Á
6397 procedure TGikoForm.AddMenuSameBoardThread;
6402 SameBoardThreadItem.Clear;
6403 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6404 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6405 if (FActiveContent.Thread.ParentBoard =
6406 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6407 //
\8e©
\95ª
\82Í
\8aO
\82·
6408 if FActiveContent.Thread <>
6409 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6410 Item := TMenuItem.Create(Self);
6411 Item.Caption := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.Title;
6412 Item.OnClick := SameBoardThreadSubItemOnClick;
6413 SameBoardThreadItem.Add(Item);
6417 //
\89½
\82à
\96³
\82¢
\82È
\82ç
\8eg
\97p
\82Å
\82«
\82È
\82¢
\82æ
\82¤
\82É
\82·
\82é
6418 SameBoardThreadItem.Enabled := SameBoardThreadItem.Count > 0;
6420 //!
\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
6421 procedure TGikoForm.SameBoardThreadSubItemOnClick(Sender: TObject);
6424 MenuItem: TMenuItem;
6426 if Sender is TMenuItem then begin
6429 MenuItem := TMenuItem(Sender);
6430 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6431 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6432 if (FActiveContent.Thread.ParentBoard =
6433 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6434 if FActiveContent.Thread <>
6435 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6436 if (SameBoardThreadItem.Items[j] = MenuItem) then begin
6437 MoveToURL( TBrowserRecord(BrowserTab.Tabs.Objects[i])
6449 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6451 FavoriteDM.URLReplace(oldURLs, newURLs);
6454 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6456 RoundList.URLReplace(oldURLs, newURLs);
6459 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6461 Filename = 'tab.sav';
6462 bFilename = '~tab.sav';
6468 oldBoardName: string;
6470 newBoardName: string;
6471 TabList: TStringList;
6474 if oldURLs.Count <> newURLs.Count then begin
6477 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6478 TabList := TStringList.Create;
6480 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6482 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6483 //
\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
6484 for i := 0 to oldURLs.Count - 1 do begin
6485 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6486 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6487 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6488 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6489 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6490 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6492 for j := 0 to TabList.Count - 1 do begin
6493 tempString := TabList[j];
6494 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6495 tempString := StringReplace(tempString, oldHost, newHost,[]);
6496 TabList[j] := tempString;
6500 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6502 if FileExists( GikoSys.GetAppDir + Filename) then begin
6503 if FileExists( GikoSys.GetAppDir + bFilename) then
6504 DeleteFile(GikoSys.GetAppDir + bFilename);
6506 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6507 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6510 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6518 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6519 procedure TGikoForm.OnMinimize;
6521 doc: IHTMLDocument2;
6523 if FActiveContent <> nil then begin
6524 FIsMinimize := mtMinimizing;
6525 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6526 if Assigned(doc) then begin
6527 FActiveContent.Thread.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
6532 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6533 procedure TGikoForm.OnMinimized;
6535 FIsMinimize := mtMinimized;
6539 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6541 CoolBarResized( Sender, BrowserCoolBar );
6544 // *************************************************************************
6545 // ExternalBoardPlugInMain
6546 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6547 // *************************************************************************
6548 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6551 boardPlugIn : TBoardPlugIn;
6554 if not (Sender is TMenuItem) then
6557 item := TMenuItem( Sender );
6558 if not Assigned( Pointer( item.Tag ) ) then
6561 //
\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·
6562 boardPlugIn := TBoardPlugIn( item.Tag );
6563 boardPlugIn.PlugInMenu( item.Handle );
6566 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6567 procedure TGikoForm.TreeClick( Node : TTreeNode );
6573 if FTreeType = gttHistory then begin
6575 if TObject( Node.Data ) is TFavoriteThreadItem then
6576 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6577 FavoriteClick( Node );
6580 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6581 if ActiveList = Node.Data then
6584 ActiveListColumnSave;
6586 if TObject(Node.Data) is TBBS then begin
6587 SetActiveList(Node.data);
6588 end else if TObject(Node.Data) is TCategory then begin
6589 SetActiveList(Node.data);
6590 end else if TObject(Node.Data) is TBoard then begin
6591 if not TBoard(Node.Data).IsThreadDatRead then begin
6592 Screen.Cursor := crHourGlass;
6594 if not TBoard(Node.Data).IsThreadDatRead then
6595 GikoSys.ReadSubjectFile(Node.Data);
6597 Screen.Cursor := crDefault;
6600 Sort.SetSortDate(Now());
6601 SetActiveList(Node.data);
6604 if TObject( Node.Data ) is TBoard then begin // not TCategory
6605 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6606 if GikoSys.Setting.ListWidthState = glsMax then begin
6607 GikoDM.BrowserMinAction.Execute;
6608 if GikoForm.Visible then
6612 if GikoSys.Setting.ListHeightState = glsMax then begin
6613 GikoDM.BrowserMinAction.Execute;
6614 if GikoForm.Visible then
6622 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6623 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6626 ThreadItem : TThreadItem;
6627 shiftDown : Boolean;
6630 if Node = nil then Exit;
6632 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6634 if FTreeType = gtt2ch then begin
6635 if not (TObject(Node.Data) is TBoard) then Exit;
6636 Board := TBoard(Node.Data);
6637 DownloadList(Board, shiftDown);
6638 end else if FTreeType = gttHistory then begin
6639 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6640 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6641 DownloadContent(ThreadItem, shiftDown);
6645 // *************************************************************************
6646 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82ÌKeyDown
\83C
\83x
\83\93\83g
6647 // *************************************************************************
6648 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6649 Shift: TShiftState);
6651 if Key = VK_BACK then begin
6652 // UpFolderButtonClick(Sender);
6653 end else if Key = VK_SPACE then begin
6654 TreeDoubleClick( TreeView.Selected );
6655 end else if Key = VK_RETURN then begin
6656 TreeClick( TreeView.Selected );
6657 //
\97\9a\97ð
\82Ì
\8fê
\8d\87\81A
\8fÁ
\82³
\82ê
\82Ä
\82¢
\82é
\82Ì
\82Å
\83`
\83F
\83b
\83N
\82·
\82é
6658 if (TreeView.Selected <> nil) then begin
6659 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6663 //!
\82¨
\8bC
\82É
\93ü
\82è
\82ÌMouseDown
\83C
\83x
\83\93\83g
6664 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6665 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6667 favItem : TTreeNode;
6668 favThreadItem : TFavoriteThreadItem;
6674 if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6675 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6676 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6677 rect := FavoriteTreeView.Selected.DisplayRect(true);
6678 //
\83A
\83C
\83R
\83\93\95ª
\8d¶
\82É
\82¸
\82ç
\82·
6679 if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
6680 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6681 if ssDouble in Shift then begin
6682 FClickNode := FavoriteTreeView.Selected;
6683 GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6687 TObject(FavoriteTreeView.Selected));
6694 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6695 if favItem = nil then Exit;
6697 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6698 favThreadItem := TFavoriteThreadItem( favItem.Data );
6699 if favThreadItem.Item <> nil then
6700 InsertBrowserTab( favThreadItem.Item, False );
6707 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6710 if FIsIgnoreResize <> rtNone then
6713 if GikoSys.Setting.ListOrientation = gloVertical then begin
6714 if GikoSys.Setting.ListHeightState = glsMin then begin
6715 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6716 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6722 procedure TGikoForm.OnResized;
6724 doc : IHTMLDocument2;
6726 FOldFormWidth := Width;
6727 FIsIgnoreResize := rtNone;
6732 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6733 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6738 //
\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)
6739 if FActiveContent <> nil then begin
6740 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6741 (doc.body as IHTMLElement2).ScrollTop := FActiveContent.Thread.ScrollTop;
6743 FIsMinimize := mtNone;
6748 // *************************************************************************
6749 //!
\83X
\83\8c\83b
\83h
\83u
\83\89\83E
\83U
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6750 // *************************************************************************
6751 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6756 doc : IHTMLDocument2;
6757 FOleInPlaceActiveObject: IOleInPlaceActiveObject;
6760 stlist : TStringList;
6766 if not Assigned(FActiveContent) then
6768 if not Assigned(FActiveContent.Browser) then
6772 FOleInPlaceActiveObject := FActiveContent.Browser.ControlInterface as IOleInPlaceActiveObject;
6773 FOleInPlaceActiveObject.OnFrameWindowActivate(True);
6776 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6777 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6779 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6780 if not Assigned(doc) then
6783 e := doc.elementFromPoint(p.x, p.y);
6784 if not Assigned(e) then
6787 if (e.className = 'date') or (e.id = 'date') then begin
6789 if AnsiPos('id', AnsiLowerCase(AID)) > 0 then begin
6790 AID := Copy(AID, AnsiPos('id', AnsiLowerCase(AID)) - 1, 11);
6791 if AnsiPos(' be:', AnsiLowerCase(AID)) > 0 then begin
6792 AID := Copy(AID, 1, AnsiPos(' BE:', AnsiLowerCase(AID)) - 1)
6795 stlist := TStringList.Create;
6797 stList.DelimitedText := AID;
6799 for i := 0 to stList.Count - 1 do begin
6800 if Length(WideString(stList[i])) = 8 then begin
6801 if GikoSys.NotDateorTimeString(stList[i]) then begin
6812 count := GikoSys.GetSameIDResCount(AID, FActiveContent.Thread);
6814 if not (GikoSys.Setting.LimitResCountMessage) then begin
6816 end else if (count > LIMIT) then begin
6817 if (GikoUtil.MsgBox(Handle,
6818 IntToStr(LIMIT) + '
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6819 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6820 MB_YESNO or MB_ICONQUESTION) = ID_YES) then begin
6825 body := GikoSys.GetSameIDResAnchor(AID, FActiveContent.Thread, limited);
6826 FActiveContent.IDAnchorPopup(body);
6832 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
6833 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
6835 SelectTimer.Interval := 0;
6836 if not (ListView.Selected = nil) then
6837 if( FActiveContent = nil) or
6838 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
6843 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
6844 procedure TGikoForm.ActiveListColumnSave;
6846 ActivListObj : TObject;
6847 i, id, idx : Integer;
6848 BBSOrder : TGikoBBSColumnList;
6849 CategoryOrder : TGikoCategoryColumnList;
6850 BoardOrder : TGikoBoardColumnList;
6853 ActivListObj := ActiveList;
6854 if ActivListObj is TBBS then begin
6855 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6856 BBSOrder := TGikoBBSColumnList.Create;
6858 for i := 0 to ListView.Columns.Count - 1 do begin
6859 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6860 idx := ListView.Column[ i ].Tag;
6861 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
6862 BBSOrder.Add( TGikoBBSColumnID( id ) );
6863 //
\95\9d\82Ì
\95Û
\91¶
6864 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
6866 for i := 0 to ListView.Columns.Count - 1 do
6867 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6868 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
6872 end else if ActivListObj is TCategory then begin
6873 //=====
\94Â
\83\8a\83X
\83g =====
6874 CategoryOrder := TGikoCategoryColumnList.Create;
6876 for i := 0 to ListView.Columns.Count - 1 do begin
6877 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6878 idx := ListView.Column[ i ].Tag;
6879 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
6880 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
6881 //
\95\9d\82Ì
\95Û
\91¶
6882 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
6884 for i := 0 to ListView.Columns.Count - 1 do
6885 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6886 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
6890 end else if ActivListObj is TBoard then begin
6891 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6892 BoardOrder := TGikoBoardColumnList.Create;
6894 for i := 0 to ListView.Columns.Count - 1 do begin
6895 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6896 idx := ListView.Column[ i ].Tag;
6897 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
6898 BoardOrder.Add( TGikoBoardColumnID( id ) );
6899 //
\95\9d\82Ì
\95Û
\91¶
6900 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
6902 for i := 0 to ListView.Columns.Count - 1 do
6903 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6904 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
6912 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
6913 Column: TListColumn; Point: TPoint);
6919 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
6920 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
6921 ListColumnPopupMenu.Items.Items[ i ].Free;
6923 //
\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¢)
6924 if TObject( FActiveList ) is TBBS then begin
6926 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6927 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
6928 item := TMenuItem.Create( ListColumnPopupMenu );
6929 item.Caption := GikoBBSColumnCaption[ i ];
6931 item.OnClick := ListColumnPopupMenuOnClick;
6932 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
6933 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
6934 item.Checked := True;
6938 ListColumnPopupMenu.Items.Add( item );
6941 end else if TObject( FActiveList ) is TCategory then begin
6943 //=====
\94Â
\83\8a\83X
\83g =====
6944 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
6945 item := TMenuItem.Create( ListColumnPopupMenu );
6946 item.Caption := GikoCategoryColumnCaption[ i ];
6948 item.OnClick := ListColumnPopupMenuOnClick;
6949 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
6950 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
6951 item.Checked := True;
6955 ListColumnPopupMenu.Items.Add( item );
6958 end else if TObject( FActiveList ) is TBoard then begin
6960 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6961 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
6962 item := TMenuItem.Create( ListColumnPopupMenu );
6963 item.Caption := GikoBoardColumnCaption[ i ];
6965 item.OnClick := ListColumnPopupMenuOnClick;
6966 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
6967 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
6968 item.Checked := True;
6972 ListColumnPopupMenu.Items.Add( item );
6977 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
6978 Point := ListView.ClientToScreen( Point );
6979 if ListColumnPopupMenu.Items.Count > 0 then
6980 ListColumnPopupMenu.Popup( Point.X, Point.Y );
6984 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6985 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
6992 if not (Sender is TMenuItem) then
6995 ActiveListColumnSave;
6996 item := TMenuItem( Sender );
6998 if TObject( FActiveList ) is TBBS then
6999 orderList := GikoSys.Setting.BBSColumnOrder
7000 else if TObject( FActiveList ) is TCategory then
7001 orderList := GikoSys.Setting.CategoryColumnOrder
7002 else if TObject( FActiveList ) is TBoard then
7003 orderList := GikoSys.Setting.BoardColumnOrder
7007 if item.Checked then begin
7008 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
7009 for i := orderList.Count - 1 downto 0 do begin
7010 if Integer( orderList[ i ] ) = item.Tag then begin
7011 orderList.Delete( i );
7016 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
7017 orderList.Add( Pointer( item.Tag ) );
7020 SetActiveList( FActiveList );
7024 procedure TGikoForm.OnGestureStart(Sender: TObject);
7029 procedure TGikoForm.OnGestureMove(Sender: TObject);
7036 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
7038 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
7039 s := MouseGesture.GetGestureStr;
7041 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7042 if Action <> nil then
7043 ActStr := '
\81i' + Action.Caption + '
\81j';
7044 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
7045 StatusBar.Panels[1].Text := s;
7048 procedure TGikoForm.OnGestureEnd(Sender: TObject);
7053 s := MouseGesture.GetGestureStr;
7055 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7056 if Action <> nil then
7058 StatusBar.Panels[1].Text := '';
7061 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
7062 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
7064 ThreadItem: TThreadItem;
7066 DefaultDraw := true;
7067 if TObject(Item.Data) is TThreadItem then begin
7068 ThreadItem := TThreadItem(Item.Data);
7069 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
7070 ListView.Canvas.Brush.Color := FOddColor;
7071 //
\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
7072 if (GikoSys.Setting.UnFocusedBold) and
7073 (Item.Selected) and (not ListView.Focused) then begin
7074 ListView.Canvas.Font.Style := [fsBold];
7077 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
7080 if ThreadItem.UnRead then
7081 ListView.Canvas.Font.Style := [fsBold];
7086 procedure TGikoForm.FormActivate(Sender: TObject);
7088 if GikoSys.Setting.GestureEnabled then begin
7089 GikoSys.Setting.Gestures.ClearGesture;
7090 GikoSys.Setting.Gestures.LoadGesture(
7091 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
7092 MouseGesture.UnHook;
7093 MouseGesture.OnGestureStart := OnGestureStart;
7094 MouseGesture.OnGestureMove := OnGestureMove;
7095 MouseGesture.OnGestureEnd := OnGestureEnd;
7096 MouseGesture.SetHook(Handle);
7098 //MouseGesture.UnHook;
7099 MouseGesture.OnGestureStart := nil;
7100 MouseGesture.OnGestureMove := nil;
7101 MouseGesture.OnGestureEnd := nil;
7105 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
7107 if (FIsMinimize <> mtMinimizing) then begin
7108 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
7109 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
7113 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
7118 affectedBand : TCoolBand;
7121 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
7122 FIsIgnoreResize := rtResizing;
7123 PostMessage( Handle, USER_RESIZED, 0, 0 );
7125 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
7126 if CoolBar = MainCoolBar then begin
7127 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
7128 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7129 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7130 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7131 GikoSys.Setting.MainCoolSet[i] := CoolSet;
7133 end else if CoolBar = ListCoolBar then begin
7134 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
7135 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7136 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7137 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7138 GikoSys.Setting.ListCoolSet[i] := CoolSet;
7140 end else if CoolBar = BrowserCoolBar then begin
7141 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
7142 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7143 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7144 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7145 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
7148 if not (Sender is TToolBar) or (CoolBar = nil) then
7150 toolbar := TToolBar( Sender );
7151 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
7152 affectedBand := nil;
7153 for i := CoolBar.Bands.Count - 1 downto 0 do begin
7154 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
7155 band := CoolBar.Bands[ i ];
7156 if band.Break or (i = 0) then begin
7157 if i + 1 < CoolBar.Bands.Count then
7158 if not CoolBar.Bands[ i + 1 ].Break then
7159 affectedBand := CoolBar.Bands[ i + 1 ];
7162 affectedBand := CoolBar.Bands[ i - 1 ];
7167 //
\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·
7168 if CoolBar = MainCoolBar then begin
7169 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
7170 coolSet.FCoolWidth := toolbar.Width + 25;
7171 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
7172 if affectedBand <> nil then begin
7173 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
7174 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7175 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
7177 end else if CoolBar = ListCoolBar then begin
7178 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
7179 coolSet.FCoolWidth := toolbar.Width + 25;
7180 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
7181 if affectedBand <> nil then begin
7182 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
7183 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7184 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
7186 end else if CoolBar = BrowserCoolBar then begin
7187 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
7188 coolSet.FCoolWidth := toolbar.Width + 25;
7189 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
7190 if affectedBand <> nil then begin
7191 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
7192 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7193 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
7200 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
7202 CoolBarResized( Sender, MainCoolBar );
7205 procedure TGikoForm.ListToolBarResize(Sender: TObject);
7207 CoolBarResized( Sender, ListCoolBar );
7210 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
7212 CoolBarResized( Sender, BrowserCoolBar );
7215 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
7216 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
7218 doc : IHTMLDocument2;
7219 ThreadItem : TThreadItem;
7220 ReadList : TStringList;
7221 wordCount : TWordCount;
7223 if not Assigned(FActiveContent) then
7225 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7226 if not Assigned(doc) then
7229 ThreadItem := GetActiveContent(True);
7230 ReadList := TStringList.Create;
7231 wordCount := TWordCount.Create;
7233 ThreadItem.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
7234 {$IFDEF SPAM_FILTER_ENABLED}
7235 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7236 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7237 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
7238 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7239 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7241 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7242 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7247 FActiveContent.Repaint := true;
7248 if ThreadItem <> nil then
7249 InsertBrowserTab( ThreadItem, True );
7251 //
\93¯
\88êID
\82ðNG
\83\8f\81[
\83h
\82É
\93o
\98^
7252 procedure TGikoForm.AddIDtoNGWord(invisible : boolean);
7254 doc : IHTMLDocument2;
7255 ThreadItem : TThreadItem;
7257 {$IFDEF SPAM_FILTER_ENABLED}
7259 ReadList : TStringList;
7260 wordCount : TWordCount;
7262 id, dateStr: String;
7264 No := KokoPopupMenu.Tag;
7265 if No = 0 then Exit;
7266 ThreadItem := GetActiveContent(True);
7267 if ThreadItem = nil then Exit;
7269 id := GikoSys.GetResID(No, ThreadItem);
7270 if (id <> '') and (not IsNoValidID(id)) then begin
7271 //
\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Á
7272 DateTimeToString(dateStr, 'yyyymmdd', Now);
7273 id := id + #9'>>add ' + dateStr + ',' + ThreadItem.Title;
7274 if (GikoSys.FAbon.AddToken(id, invisible)) then begin
7275 GikoSys.FAbon.ReLoadFromNGwordFile;
7276 FActiveContent.Repaint := True;
7279 ShowMessage('ID
\82ð
\8eæ
\93¾
\82Å
\82«
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B');
7281 {$IFDEF SPAM_FILTER_ENABLED}
7282 body := TStringList.Create;
7284 GikoSys.GetSameIDRes(id, ThreadItem, body);
7285 ReadList := TStringList.Create;
7286 wordCount := TWordCount.Create;
7288 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7289 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7290 for i := 0 to body.Count - 1 do begin
7291 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7292 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7293 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7303 if (FActiveContent.Repaint) then begin
7304 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7306 if not Assigned(doc) then
7308 ThreadItem.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
7309 if ThreadItem <> nil then
7310 InsertBrowserTab( ThreadItem, True );
7314 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
7315 procedure TGikoForm.IndividualAbonID(Atype : Integer);
7317 ThreadItem : TThreadItem;
7320 ReadList : TStringList;
7321 wordCount : TWordCount;
7323 No := KokoPopupMenu.Tag;
7324 if No = 0 then Exit;
7325 ThreadItem := GetActiveContent(True);
7326 if ThreadItem = nil then Exit;
7327 body := TStringList.Create;
7329 GikoSys.GetSameIDRes(No, ThreadItem, body);
7331 ReadList := TStringList.Create;
7332 wordCount := TWordCount.Create;
7334 ThreadItem.ScrollTop := FActiveContent.Browser.OleObject.Document.Body.ScrollTop;
7335 {$IFDEF SPAM_FILTER_ENABLED}
7336 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7337 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7339 for i := 0 to body.Count - 1 do begin
7340 {$IFDEF SPAM_FILTER_ENABLED}
7341 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7342 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7343 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7345 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7346 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7352 FActiveContent.Repaint := true;
7353 if ThreadItem <> nil then
7354 InsertBrowserTab( ThreadItem, True );
7361 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7363 firstElement: IHTMLElement;
7364 doc: IHTMLDocument2;
7367 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7368 if Assigned(doc) then
7369 firstElement := doc.all.item('idSearch', 0) as IHTMLElement;
7370 if Assigned(firstElement) then
7371 if firstElement.style.visibility <> 'hidden' then
7372 firstElement.style.visibility := 'hidden';
7377 procedure TGikoForm.RepaintAllTabsBrowser();
7380 ThreadItem: TThreadItem;
7382 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7383 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7385 ThreadItem := GetActiveContent;
7386 if ThreadItem <> nil then
7387 InsertBrowserTab( ThreadItem, True );
7391 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7392 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7393 Shift: TShiftState);
7395 //
\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Ì
7396 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7397 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7398 SelectTimer.Interval := 0;
7399 if not (GikoSys.Setting.BrowserTabVisible) then begin
7400 if (GetActiveList is TBoard) then begin
7401 //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
7402 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7403 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7404 (Key = VK_UP) or (Key = VK_DOWN)) then
7405 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7409 // *************************************************************************
7410 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7411 // *************************************************************************
7412 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7413 Node: TTreeNode; var AllowEdit: Boolean);
7415 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7416 FOrigenCaption := Node.Text;
7418 // *************************************************************************
7419 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7420 // *************************************************************************
7421 function TGikoForm.GetMainForm(): TComponent;
7423 Result := Application.MainForm;
7425 // *************************************************************************
7426 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7427 // *************************************************************************
7428 function TGikoForm.GetScreenCursor(): TCursor;
7430 Result := Screen.Cursor;
7432 // *************************************************************************
7433 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7434 // *************************************************************************
7435 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7437 if (Screen.Cursor <> Cursor) then
7438 Screen.Cursor := Cursor;
7440 // *************************************************************************
7441 //!
\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
7442 // *************************************************************************
7443 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7445 //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Ì
7446 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7447 if GikoDM.CabinetVisibleAction.Enabled then begin
7448 GikoDM.CabinetVisibleAction.Execute;
7451 // *************************************************************************
7452 //!
\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
7453 // *************************************************************************
7454 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7456 if GikoDM.FavoriteArrangeAction.Enabled then begin
7457 GikoDM.FavoriteArrangeAction.Execute;
7460 // *************************************************************************
7461 //!
\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
7462 // *************************************************************************
7463 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7464 var Handled: Boolean);
7468 //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ß
7469 if Self.Active then begin
7471 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7472 WM_KEYFIRST..WM_KEYLAST :
7474 //
\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ç
7475 if (Msg.message <> WM_KEYUP)
7476 and (Msg.message <> WM_CHAR)
7477 and (Msg.message <> WM_SYSKEYUP) then begin
7478 wmMsg.Msg := Msg.message;
7479 wmMsg.CharCode := Word(Msg.wParam);
7480 wmMsg.KeyData := Msg.lParam;
7481 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7482 Self.OnShortCut(wmMsg, Handled);
7487 // Explorer
\82ÌD&D
\82ð
\8eó
\82¯
\82é
\82Æ
\82Ì
\94ñ
\83A
\83N
\83e
\83B
\83u
7488 if Msg.message = WM_DROPFILES then begin
7489 AcceptDropFiles(Msg);
7494 // *************************************************************************
7495 //!
\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
7496 // *************************************************************************
7497 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7499 Application.ProcessMessages;
7500 if not Application.Terminated then begin
7501 if PreviewTimer.Enabled then
7502 PreviewTimer.Enabled := False;
7503 //
\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
7504 if (FResPopupBrowser <> nil) then
7505 FResPopupBrowser.Clear;
7507 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7508 if FPreviewBrowser <> nil then
7509 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7513 // *************************************************************************
7514 //!
\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
7515 // *************************************************************************
7516 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7521 if (Sender <> nil) then begin
7522 s := ' [' + Sender.ClassName + ']' + #13#10;
7524 s := ' [ Sender is nil ] ' + #13#10;
7527 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7529 // *************************************************************************
7530 //!
\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¬
7531 // *************************************************************************
7532 procedure TGikoForm.CreateControlThread();
7534 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7535 FControlThread := TThreadControl.Create(True);
7536 FControlThread.MaxThreadCount := 1;
7537 FControlThread.Resume;
7538 FControlThread.OnDownloadEnd := DownloadEnd;
7539 FControlThread.OnDownloadMsg := DownloadMsg;
7540 FControlThread.OnWork := Work;
7541 FControlThread.OnWorkBegin := WorkBegin;
7542 FControlThread.OnWorkEnd := WorkEnd;
7544 // *************************************************************************
7545 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7546 // *************************************************************************
7547 procedure TGikoForm.CreateBrowsers(count: Integer);
7550 newBrowser: TWebBrowser;
7552 BrowserNullTab := TBrowserRecord.Create;
7553 BrowserNullTab.Browser := Browser;
7554 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7556 FBrowsers := TList.Create;
7558 for i := 0 to count -1 do begin
7559 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7560 newBrowser := FBrowsers[FBrowsers.Count - 1];
7561 TOleControl(newBrowser).Parent := BrowserPanel;
7562 TOleControl(newBrowser).Align := alNone;
7563 TOleControl(newBrowser).Left := 0;
7564 TOleControl(newBrowser).Top := 0;
7565 newBrowser.RegisterAsDropTarget := False;
7566 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7567 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7568 newBrowser.OnEnter := BrowserEnter;
7569 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7570 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7571 newBrowser.Navigate(BLANK_HTML);
7572 ShowWindow(newBrowser.Handle, SW_HIDE);
7573 GikoSys.ShowRefCount('Browser' + IntToStr(i), newBrowser.ControlInterface);
7574 GikoSys.ShowRefCount('Document' + IntToStr(i), newBrowser.ControlInterface.Document);
7576 BrowserNullTab.Browser.BringToFront;
7577 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7579 //
\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Ì
7580 //
\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Å
7581 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7582 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7583 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7584 Application.ProcessMessages;
7587 // *************************************************************************
7588 //!
\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é
7589 // *************************************************************************
7590 procedure TGikoForm.SetSelectComboBox();
7592 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7595 ToolButton: TToolButton;
7597 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7598 SelectComboBoxPanel.Visible := False;
7600 for i := ListToolBar.ControlCount - 1 downto 0 do
7602 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7604 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7605 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7606 SelectComboBoxPanel.Parent := ListToolBar;
7607 SelectComboBoxPanel.Visible := True;
7609 SelectComboBox.Left := 0;
7610 SelectComboBox.Top := 0;
7611 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7612 SelectComboBox.Width := SelectComboBoxPanel.Width -
7613 SelectComboBoxSplitter.Width;
7615 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7616 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7617 if ToolButton = nil then begin
7618 ToolButton := TToolButton.Create(ListToolBar);
7619 ToolButton.Name := DUMMYCOMPNAME;
7621 ToolButton.Style := tbsSeparator;
7622 ToolButton.Width := 0;
7623 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7624 ListToolBar.InsertControl(ToolButton);
7625 ToolButton.Visible := False;
7627 //
\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·
7628 if (i + 1) < ListToolBar.ControlCount then
7629 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7630 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7631 ListToolBar.Controls[ i + 1 ].Visible := False;
7634 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7635 ListToolBar.Controls[ i ].Visible := False;
7643 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\83}
\83E
\83X
\83_
\83E
\83\93\83C
\83x
\83\93\83g
7644 procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7645 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7652 if (TreeView.Selected <> nil) and
7653 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7654 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
7655 rect := TreeView.Selected.DisplayRect(true);
7656 //
\83A
\83C
\83R
\83\93\95ª
\82¾
\82¯
\8d¶
\82É
\82¸
\82ç
\82·
7657 if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
7658 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7659 //
\83N
\83\8a\83b
\83N
\82Æ
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82ð
\83R
\83R
\82Å
\94»
\92è
7660 if ssDouble in Shift then begin
7661 TreeDoubleClick( TreeView.Selected );
7663 TreeClick(TreeView.Selected);
7670 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
7671 procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7675 if ActionList <> nil then begin
7676 SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7678 for i := 0 to ActionList.ActionCount - 1 do begin
7680 FActionListGroupIndexes[i] :=
7681 TCustomAction(ActionList.Actions[i]).GroupIndex;
7682 TCustomAction(ActionList.Actions[i]).GroupIndex
7685 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7691 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
7692 procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7696 if ActionList <> nil then begin
7697 if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7698 for i := 0 to ActionList.ActionCount - 1 do begin
7700 TCustomAction(ActionList.Actions[i]).GroupIndex
7701 := FActionListGroupIndexes[i];
7703 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7709 //!
\82±
\82Ì
\83\8c\83X
\82ÌURL
\8eæ
\93¾
7710 procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
7714 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
7715 procedure TGikoForm.RefreshListView(Thread: TThreadItem);
7717 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
7718 if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin
7723 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
7724 MousePos: TPoint; var Handled: Boolean);
7727 coolBar: TGikoCoolBar;
7730 if (Sender <> nil) and (Sender is TGikoCoolBar) then begin
7731 coolBar := TGikoCoolBar(Sender);
7732 if (coolBar = MainCoolBar) then begin
7733 FToolBarSettingSender := tssMain;
7734 end else if (coolBar = ListCoolBar) then begin
7735 FToolBarSettingSender := tssList;
7736 end else if (coolBar = BrowserCoolBar) then begin
7737 FToolBarSettingSender := tssBrowser;
7739 FToolBarSettingSender := tssNone;
7741 pos := coolBar.ClientToScreen( MousePos );
7742 MainCoolBarPopupMenu.Popup( pos.X, pos.Y );
7747 procedure TGikoForm.TaskTrayIconMessage(var Msg: TMsg);
7749 //
\8d¶
\83N
\83\8a\83b
\83N
\82È
\82ç
\95\9c\8c³
\82·
\82é
7750 if (Msg.wParam = WM_LBUTTONUP) then begin
7754 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
7755 procedure TGikoForm.StoredTaskTray;
7758 if (FIconData.uID = 0) then begin
7759 FIconData.cbSize := SizeOf(TNotifyIconData);
7760 FIconData.uID := Self.Handle;
7761 FIconData.Wnd := Handle;
7762 FIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
7763 FIconData.uCallbackMessage := USER_TASKTRAY;
7764 FIconData.hIcon := Application.Icon.Handle; {
\83A
\83C
\83R
\83\93\8ew
\92è}
7765 FIconData.szTip := '
\83M
\83R
\83i
\83r'; {
\83q
\83\93\83g
\95¶
\8e\9a\97ñ}
7766 Shell_NotifyIcon(NIM_ADD, @FIconData);
7767 ShowEditors(SW_HIDE);
7768 ShowWindow(Self.Handle, SW_HIDE);
7773 //!
\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¦
7774 procedure TGikoForm.UnStoredTaskTray;
7778 Shell_NotifyIcon(NIM_DELETE, @FIconData);
7779 SetForegroundWindow(Application.Handle);
7784 // Action
\82©
\82ç
\8ai
\94[
\82µ
\82½
\82Æ
\82«
\82ÍTag
\82Ì
\92l
\82Í0
\88È
\8aO
7785 if (GikoDM.StoredTaskTrayAction.Tag = 0) then begin
7786 ShowWindow(Self.Handle, SW_RESTORE);
7788 ShowWindow(Self.Handle, SW_SHOW);
7790 ShowEditors(SW_SHOW);
7791 GikoDM.StoredTaskTrayAction.Tag := 0;
7795 \brief
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
7796 \param nCmdShow Windows.ShowWindow
\82É
\91\97\82é
\83p
\83\89\83\81\81[
\83^
\82Æ
\93¯
\82¶
7798 procedure TGikoForm.ShowEditors(nCmdShow: Integer);
7802 //
\83\8c\83X
\83G
\83f
\83B
\83^
\82ð
\92T
\82·
7803 for i := 0 to Screen.CustomFormCount - 1 do begin
7804 if TObject(Screen.CustomForms[i]) is TEditorForm then
7805 ShowWindow(Screen.CustomForms[i].Handle, nCmdShow);
7809 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83u
\83\89\83E
\83U
\8dì
\90¬
7810 procedure TGikoForm.CreateResPopupBrowser;
7812 if (FResPopupBrowser = nil) then begin
7813 FResPopupBrowser := TResPopupBrowser.Create(BrowserPanel);
7816 //! ListView
\82ÌD&D
\8eó
\82¯
\8eæ
\82è
7817 procedure TGikoForm.AcceptDropFiles(var Msg: TMsg);
7819 FileName: Array[0..MAX_PATH] of Char;
7823 datList: TStringList;
7826 //
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\94Â
\82Ì
\82Æ
\82«
\88È
\8aO
\82Í
\8b\91\94Û
7827 if GetActiveList is TBoard then begin
7828 Board := TBoard(GetActiveList);
7829 if MsgBox(Handle, Board.Title
7830 + '
\94Â
\82É
\93ü
\82ê
\82Ä
\82¢
\82¢
\82Å
\82·
\82©
\81H', '
\83M
\83R
\83i
\83r', MB_YESNO or MB_ICONQUESTION) = IDYES then begin
7831 //
\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
7832 datList := TStringList.Create;
7834 Cnt := DragQueryFile(Msg.WParam, $FFFFFFFF, FileName, SizeOf(FileName));
7835 for K := 0 to Cnt - 1 do begin
7836 DragQueryFile(Msg.WParam, K, FileName, SizeOf(FileName));
7837 // 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
7838 //
\83t
\83@
\83C
\83\8b\82Ì
\83`
\83F
\83b
\83N
7839 if (isValidFile(FileName)) then begin
7840 LogFolder := ExtractFilePath(Board.FilePath);
7841 if (FileExists( LogFolder + ExtractFileName(FileName))) then begin
7842 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);
7844 if (not DirectoryExists(LogFolder)) then begin
7845 if (not GikoSys.ForceDirectoriesEx(LogFolder) ) then begin
7846 GikoUtil.MsgBox(Handle, LogFolder + '
\82Ì
\90¶
\90¬
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7849 if (not Windows.CopyFile(FileName, PChar(LogFolder + ExtractFileName(FileName)), true)) then begin
7850 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);
7852 datList.Add(ExtractFileName(FileName));
7857 DragFinish(Msg.WParam);
7858 if (datList.Count > 0) then begin
7859 GikoSys.AddOutofIndexDat(Board, datList, False);
7860 ShowMessage(IntToStr(datList.Count) + '
\8cÂ
\82Ìdat
\83t
\83@
\83C
\83\8b\82ª
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82µ
\82½
\81B' );
7861 if GikoForm.TreeView.Visible then
7862 GikoForm.TreeView.Refresh;
7863 if GikoForm.ListView.Visible then
7864 GikoForm.ListView.Refresh;
7866 ShowMessage('
\88ê
\82Â
\82à
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B' );
7874 ShowMessage('
\94Â
\82ð
\95\
\8e¦
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
7878 //!
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
7879 function TGikoForm.isValidFile(FileName: String) : boolean;
7884 //
\91¶
\8dÝ
\82·
\82é
\82©
\81A
\8ag
\92£
\8eqdat
\81A
\83t
\83@
\83C
\83\8b\96¼
7885 if ( not FileExists(FileName) ) then begin
7887 GikoUtil.MsgBox(Handle, FileName + '
\82Í
\91¶
\8dÝ
\82µ
\82Ü
\82¹
\82ñ
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7888 end else if (ExtractFileExt(ExtractFileName(FileName)) <> '.dat' ) then begin
7890 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);
7892 //
\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
7894 dt := GikoSys.GetCreateDateFromName(FileName);
7895 if ((UnixToDateTime(ZERO_DATE) + OffsetFromUTC) = dt) then begin
7897 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);
7901 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);
7906 procedure TGikoForm.ResPopupClearTimerTimer(Sender: TObject);
7908 ResPopupClearTimer.Enabled := False;
7909 if ResPopupClearTimer.Tag = 0 then begin
7910 FResPopupBrowser.Clear;
7912 FResPopupBrowser.CurrentBrowser.ChildClear;