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 TaskTrayPopupMenu: TPopupMenu;
422 procedure FormCreate(Sender: TObject);
423 procedure FormDestroy(Sender: TObject);
424 procedure BrowserStatusTextChange(Sender: TObject;
425 const Text: WideString);
426 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
427 procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
428 var AllowChange: Boolean);
429 procedure ListViewKeyDown(Sender: TObject; var Key: Word;
431 procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
432 procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
433 Button: TToolButton; State: TCustomDrawState;
434 var DefaultDraw: Boolean);
435 procedure BrowserBeforeNavigate2(Sender: TObject;
436 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
437 Headers: OleVariant; var Cancel: WordBool);
438 procedure TreeViewCustomDraw(Sender: TCustomTreeView;
439 const ARect: TRect; var DefaultDraw: Boolean);
440 procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
441 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
442 procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
443 procedure ListViewCustomDraw(Sender: TCustomListView;
444 const ARect: TRect; var DefaultDraw: Boolean);
445 procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
446 Shift: TShiftState; X, Y: Integer);
447 procedure TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
448 procedure MessageListViewResize(Sender: TObject);
449 procedure CabinetVisible( isVisible : Boolean );
450 procedure FormResize(Sender: TObject);
451 procedure ListPopupMenuPopup(Sender: TObject);
452 procedure TreePopupMenuPopup(Sender: TObject);
453 procedure BrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
454 var Cancel: WordBool);
455 procedure ListSplitterMoved(Sender: TObject);
456 procedure BrowserTabChange(Sender: TObject);
457 procedure BrowserTabMouseDown(Sender: TObject; Button: TMouseButton;
458 Shift: TShiftState; X, Y: Integer);
459 procedure BrowserTabDragOver(Sender, Source: TObject; X, Y: Integer;
460 State: TDragState; var Accept: Boolean);
461 procedure BrowserTabDragDrop(Sender, Source: TObject; X, Y: Integer);
462 procedure BrowserTabMouseMove(Sender: TObject; Shift: TShiftState; X,
464 procedure BrowserDocumentComplete(Sender: TObject;
465 const pDisp: IDispatch; var URL: OleVariant);
466 procedure RoundNamePopupMenuPopup(Sender: TObject);
467 procedure FormShow(Sender: TObject);
468 procedure BrowserTabToolBarResize(Sender: TObject);
469 procedure FavoriteMenuClick(Sender: TObject);
470 procedure MainCoolBarResize(Sender: TObject);
471 procedure AddressToolBarResize(Sender: TObject);
472 procedure AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
474 procedure BrowserEnter(Sender: TObject);
475 procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
476 procedure PreviewTimerTimer(Sender: TObject);
477 procedure MessageHideButtonClick(Sender: TObject);
478 procedure HistoryAllClearToolButtonClick(Sender: TObject);
479 procedure MainCoolBarBandInfo(Sender: TObject;
480 var BandInfo: PReBarBandInfoA);
481 procedure MainCoolBarChevronClick(Sender: TObject;
482 RebarChevron: PNMRebarChevron);
483 procedure ListCoolBarBandInfo(Sender: TObject;
484 var BandInfo: PReBarBandInfoA);
485 procedure ListCoolBarChevronClick(Sender: TObject;
486 RebarChevron: PNMRebarChevron);
487 procedure BrowserCoolBarBandInfo(Sender: TObject;
488 var BandInfo: PReBarBandInfoA);
489 procedure BrowserCoolBarChevronClick(Sender: TObject;
490 RebarChevron: PNMRebarChevron);
491 procedure ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
492 procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
493 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
494 procedure SelectComboBoxChange(Sender: TObject);
495 procedure SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
497 procedure SelectComboBoxExit(Sender: TObject);
498 procedure SelectComboBoxSplitterMouseMove(Sender: TObject;
499 Shift: TShiftState; X, Y: Integer);
500 procedure SelectComboBoxSplitterMouseDown(Sender: TObject;
501 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
502 procedure SelectComboBoxSplitterMouseUp(Sender: TObject;
503 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
504 procedure StatusBarResize(Sender: TObject);
505 procedure SelectComboBoxEnter(Sender: TObject);
506 procedure FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
508 procedure FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
509 procedure FavoriteTreeViewEdited(Sender: TObject; Node: TTreeNode;
511 procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
513 procedure FavoriteTreePopupMenuPopup(Sender: TObject);
514 procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
515 procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
516 Shift: TShiftState; X, Y: Integer);
517 procedure LinkToolBarDragOver(Sender, Source: TObject; X, Y: Integer;
518 State: TDragState; var Accept: Boolean);
519 procedure FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
521 procedure FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
522 procedure BrowserTabContextPopup(Sender: TObject; MousePos: TPoint;
523 var Handled: Boolean);
524 procedure BrowserTabPopupMenuPopup(Sender: TObject);
525 procedure BrowserTabResize(Sender: TObject);
526 procedure TreeViewKeyDown(Sender: TObject; var Key: Word;
528 procedure FavoriteTreeViewMouseDown(Sender: TObject;
529 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
530 procedure MessagePanelResize(Sender: TObject);
532 procedure SelectTimerTimer(Sender: TObject);
533 procedure ListViewColumnRightClick(Sender: TObject;
534 Column: TListColumn; Point: TPoint);
535 procedure ListViewCustomDrawItem(Sender: TCustomListView;
536 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
537 procedure FormActivate(Sender: TObject);
538 procedure BrowserPanelResize(Sender: TObject);
539 procedure MenuToolBarResize(Sender: TObject);
540 procedure ListToolBarResize(Sender: TObject);
541 procedure BrowserToolBarResize(Sender: TObject);
542 procedure KokoPopupMenuPopup(Sender: TObject);
543 procedure ListViewKeyUp(Sender: TObject; var Key: Word;
545 procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
546 var AllowEdit: Boolean);
547 procedure CabinetCloseSpeedButtonClick(Sender: TObject);
548 procedure FavoriteArrangeToolButtonClick(Sender: TObject);
549 procedure GikoApplicationEventsMessage(var Msg: tagMSG;
550 var Handled: Boolean);
551 procedure GikoApplicationEventsDeactivate(Sender: TObject);
552 procedure GikoApplicationEventsException(Sender: TObject; E: Exception);
553 procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
554 Shift: TShiftState; X, Y: Integer);
555 procedure GetResURLMenuClick(Sender: TObject);
556 procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
557 var Handled: Boolean);
558 procedure ResPopupClearTimerTimer(Sender: TObject);
561 FEnabledCloseButton: Boolean;
562 FClickNode: TTreeNode;
564 FPreviewBrowser: TPreviewBrowser;
566 FBrowserSizeHeight: Integer;
567 FBrowserSizeWidth: Integer;
568 FTabHintIndex: Integer;
569 FListStyle: TViewStyle; //
\83\8a\83X
\83g
\83A
\83C
\83R
\83\93\83X
\83^
\83C
\83\8b
570 FItemNoVisible: Boolean; //
\83\8a\83X
\83g
\94Ô
\8d\86\95\
\8e¦
\83t
\83\89\83O
571 FViewType: TGikoViewType; //
\83\8a\83X
\83g
\83A
\83C
\83e
\83\80\95\
\8e¦
\83^
\83C
\83v
572 FActiveList: TObject;
573 FActiveContent: TBrowserRecord; //
575 FHistoryList: THistoryList; //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
576 FTreeType: TGikoTreeType;
580 FDownloadTitle: string; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\83^
\83C
\83g
\83\8b\96¼
581 FDownloadMax: Integer; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\8dÅ
\91å
\83T
\83C
\83Y
582 FEvent: THTMLDocumentEventSink;//
\83u
\83\89\83E
\83U
\83h
\83L
\83\85\83\81\83\93\83g
\83C
\83x
\83\93\83g
583 IsDraggingSelectComboBox : Boolean;
584 DraggingSelectComboBoxPosition : TPoint;
585 FSearchDialog: TSearchDialog;
586 FDropSpaceNode: TTreeNode;
587 FDragTime : Cardinal; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
588 FDragButton : TToolButton; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
\82ÉDrag
\82µ
\82Ä
\82éButton
\95Û
\91¶
589 FDragWFirst : Boolean; ///< WebTab
\82ÌD&D
\97p
590 FListViewBackGroundColor : TColor; ///< ListView
\82ÌBackGroundColor
591 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¦
592 FOddColor : TColor; ///<
\82»
\82Ì
\90F
593 FSelectResWord : string; ///<
\83\8c\83X
\8di
\8d\9e\83\8f\81[
\83h
594 FIsIgnoreResize : TResizeType; ///<
\83\8a\83T
\83C
\83Y
\83C
\83x
\83\93\83g
\82ð
\96³
\8e\8b\82·
\82é
\82©
\82Ç
\82¤
\82©
595 FIsMinimize : TMinimizeType; ///<
\8dÅ
\8f¬
\89»
\82µ
\82Ä
\82¢
\82é
\8dÅ
\92\86\82©
596 FOldFormWidth : Integer; ///<
\92¼
\91O
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\95\9d
597 FToolBarSettingSender : TToolBarSettingSenderType; ///<
\83c
\81[
\83\8b\83o
\81[
\90Ý
\92è
\82ð
\83N
\83\8a\83b
\83N
\82µ
\82½
\83N
\81[
\83\8b\83o
\81[
598 FMouseDownPos : TPoint; ///<
\83u
\83\89\83E
\83U
\83^
\83u
\82Å
\83}
\83E
\83X
\82ð
\89\9f\82µ
\82½
\82Æ
\82«
\82Ì
\8dÀ
\95W
600 FResRangeMenuSelect : Longint; ///< ResRangeButton
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\8d\80\96Ú (
\83t
\83H
\81[
\83}
\83b
\83g
\82Í ResRange
\8cÝ
\8a·)
602 FIsHandledWheel : Boolean; ///<
\8aù
\82É
\8eó
\82¯
\8eæ
\82Á
\82½ WM_MOUSEWHEEL
\82©
\82Ç
\82¤
\82©
603 DiffComp: Boolean; //Add by Genyakun
\83X
\83\8c\82ª
\8dX
\90V
\82³
\82ê
\82½
\82Æ
\82«
\82ÉTrue
\82É
\82È
\82é
604 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ñ
605 FPreviewBrowserRect: TRect; ///<
\83v
\83\8c\83r
\83\85\81[
\82Ì
\95\
\8e¦
\88Ê
\92u
\82ð
\8bL
\89¯
\82·
\82é
606 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ñ
607 FResPopupBrowser: TResPopupBrowser;
608 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
609 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
610 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
611 procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
612 procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
614 procedure ListDoubleClick(Shift: TShiftState);
615 function Hook(var Message: TMessage): Boolean;
616 procedure AddRoundNameMenu(MenuItem: TMenuItem);
617 procedure SetMenuFont;
618 procedure CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
619 procedure FavoriteClick(Sender: TObject; ActiveTab: Boolean); overload;
620 procedure FavoriteClick(Sender: TObject); overload;
621 procedure FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
622 function OnDocumentContextMenu(Sender: TObject): WordBool;
623 function GetWidthAllToolButton(ToolBar: TToolBar): Integer;
624 procedure MenuBarChevronMenu;
625 procedure LinkBarChevronMenu;
626 procedure ToolBarChevronMenu(ToolBar: TToolBar);
627 procedure LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
628 procedure LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
629 procedure LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
630 procedure LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
631 procedure LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
632 function TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
633 procedure FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
634 procedure FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
635 procedure FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
637 procedure SetListViewBackGroundColor(value: TColor);
638 procedure BBSMenuItemOnClick( Sender : TObject );
639 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
640 procedure SaveCoolBarSettings;
641 procedure SaveMainCoolBarSettings;
642 procedure SaveBoardCoolBarSettings;
643 procedure SaveBrowserCoolBarSettings;
644 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
645 procedure LoadCoolBarSettings;
646 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
647 procedure OnMinimize;
648 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½
649 procedure OnMinimized;
650 /// TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
651 procedure TreeClick( Node : TTreeNode );
652 /// TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
653 procedure TreeDoubleClick( Node : TTreeNode );
654 ///
\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
655 procedure SetBBSMenu;
656 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
657 procedure ListColumnPopupMenuOnClick( Sender : TObject );
658 //!
\8di
\82è
\8d\9e\82Ý
\95¶
\8e\9a\97ñ
\90Ý
\92è
659 procedure SetSelectWord( const text : string );
660 //
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
661 function GetScreenCursor(): TCursor;
662 //
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
663 procedure SetScreenCursor(Cursor : TCursor);
664 //!
\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¬
665 procedure CreateControlThread();
666 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
667 procedure CreateBrowsers(count: Integer);
668 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
669 procedure GetGroupIndex(ActionList: TActionList);
670 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
671 procedure SetGroupIndex(ActionList: TActionList);
672 //!
\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é)
673 procedure OpenThreadItem(Thread: TThreadItem; URL: String);
674 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
675 procedure RefreshListView(Thread: TThreadItem);
676 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
677 procedure ClearThreadRengeAction;
678 //!
\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¦
679 procedure UnStoredTaskTray;
680 //!
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
681 procedure ShowEditors(nCmdShow: Integer);
682 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
683 procedure ReleaseOldestBrowser;
684 //!
\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Á
685 procedure AddMenuSameBoardThread;
686 //!
\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
687 procedure SameBoardThreadSubItemOnClick(Sender: TObject);
688 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83u
\83\89\83E
\83U
\8dì
\90¬
689 procedure CreateResPopupBrowser;
690 //!
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
691 function isValidFile(FileName: String) : boolean;
692 //! ListView
\82ÌD&D
\8eó
\82¯
\8eæ
\82è
693 procedure AcceptDropFiles(var Msg: TMsg);
695 procedure CreateParams(var Params: TCreateParams); override;
696 procedure WndProc(var Message: TMessage); override;
697 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
698 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
699 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
702 LastRoundTime: TDateTime;
703 BrowserNullTab: TBrowserRecord;
704 FControlThread: TThreadControl;
705 FIconData : TNotifyIconData;
706 procedure MoveToURL(const inURL: string);
707 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
709 function GetHttpState: Boolean;
710 procedure SetEnabledCloseButton(Enabled: Boolean);
711 function GetTreeNode(Data: TObject): TTreeNode;
712 procedure ListViewAllSelect;
713 property ListStyle: TViewStyle read FListStyle write FListStyle;
714 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
715 property ViewType: TGikoViewType read FViewType write FViewType;
716 property NameCookie: string read FNameCookie write FNameCookie;
717 property MailCookie: string read FMailCookie write FMailCookie;
718 property ClickNode: TTreeNode read FClickNode write FClickNode;
719 property TreeType: TGikoTreeType read FTreeType write FTreeType;
720 property ActiveContent: TBrowserRecord read FActiveContent write FActiveContent;
721 property ResRangeMenuSelect: Longint read FResRangeMenuSelect write FResRangeMenuSelect;
722 property SelectResWord : string read FSelectResWord write FSelectResWord;
723 property BrowserSizeWidth: Integer read FBrowserSizeWidth write FBrowserSizeWidth;
724 property BrowserSizeHeight: Integer read FBrowserSizeHeight write FBrowserSizeHeight;
725 property SearchDialog: TSearchDialog read FSearchDialog write FSearchDialog;
726 property ToolBarSettingSender : TToolBarSettingSenderType
727 read FToolBarSettingSender write FToolBarSettingSender;
728 property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
729 property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
730 property WorkCount: Integer read FWorkCount write FWorkCount;
731 procedure SetContent(inThread: TBrowserRecord);
732 function GetActiveContent(popup :Boolean = false): TThreadItem;
733 function GetActiveList: TObject;
735 procedure SetListViewType(AViewType: TGikoViewType); overload;
736 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
737 procedure PlaySound(SoundEventName: string);
738 procedure ShowBBSTree( inBBS : TBBS );
739 procedure ShowBBSTreeOld( inBBS : TBBS );
740 procedure ShowHistoryTree;
741 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
742 procedure SetBrowserTabState;
743 procedure SetToolBarPopup;
744 procedure ShowFavoriteAddDialog( Item : TObject );
745 procedure FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
746 procedure RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
747 property ListViewBackGroundColor: TColor read FListViewBackGroundColor write SetListViewBackGroundColor;
748 property UseOddResOddColor : Boolean read FUseOddResOddColor write FUseOddResOddColor;
749 property OddColor : TColor read FOddColor write FOddColor;
750 function FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
751 procedure OnPlugInMenuItem( Sender : TObject );
752 procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
753 /// 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Å
754 procedure ActiveListColumnSave;
755 procedure SetActiveList(Obj: TObject);
756 property ActiveList: TObject read GetActiveList write SetActiveList;
757 /// CoolBar
\82ª
\83T
\83C
\83Y
\95Ï
\8dX
\82³
\82ê
\82½
758 procedure CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
759 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
760 procedure IndividualAbonID(Atype : Integer);
761 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
762 procedure IndividualAbon(Atag, Atype : Integer);
763 //
\93¯
\88êID
\82ðNG
\83\8f\81[
\83h
\82É
\93o
\98^
764 procedure AddIDtoNGWord(invisible : boolean);
765 //
\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Ý
766 procedure RepaintAllTabsBrowser();
767 //
\83\8a\83\93\83N
\83o
\81[
\90Ý
\92è
768 procedure SetLinkBar;
769 procedure FavoriteBrowseFolder( node: TTreeNode );
770 //
\83X
\83\8c\83b
\83h
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
771 procedure DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
772 //
\94Â
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
773 procedure DownloadList(Board: TBoard; ForceDownload: Boolean = False);
774 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
775 procedure DeleteHistory( threadItem: TThreadItem );
776 //
\83^
\83u
\82ð
\8dí
\8f\9c \83X
\83\8c\83b
\83h
\8ew
\92è
777 procedure DeleteTab(ThreadItem: TThreadItem); overload;
778 //
\83^
\83u
\82ð
\8dí
\8f\9c \83u
\83\89\83E
\83U
\83\8c\83R
\81[
\83h
\81i
\83^
\83u
\81j
\8ew
\92è
779 procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
780 //
\83^
\83u
\8dí
\8f\9c\81i
\8eÀ
\91\95\95\94\81j
781 procedure DeleteTab(index, selectIndex: Integer); 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(const AName: string); overload;
784 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
785 procedure BrowserMovement(scroll: Integer); overload;
786 //Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
787 function GetMainForm(): TComponent;
788 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
789 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
790 procedure OnGestureStart(Sender: TObject);
791 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
792 procedure OnGestureMove(Sender: TObject);
793 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
794 procedure OnGestureEnd(Sender: TObject);
795 ///
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
796 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
797 //ListView
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\82ð
\8eæ
\93¾
\82·
\82é
798 procedure SelectListItem(List: TList);
799 //
\8ew
\92è
\82µ
\82½
\83\8c\83X
\82ð
\83R
\83s
\81[
\82·
\82é
800 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
802 procedure ModifySelectList;
804 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
806 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
808 procedure SetSelectRoundName(Sender: TObject);
810 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
812 function WebBrowserClick(Sender: TObject): WordBool;
813 //!
\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é
814 procedure SetSelectComboBox();
816 //!
\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
817 procedure TaskTrayIconMessage(var Msg : TMsg); message WM_USER + 2010;
818 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
819 procedure StoredTaskTray;
820 //!
\93¯ID
\83\8c\83X
\83A
\83\93\83J
\81[
\95\
\8e¦
821 procedure ShowSameIDAncher(const AID: String);
823 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
826 TFavoriteMenuItem = class(TMenuItem)
830 property Data: Pointer read FData write FData;
833 TBBSMenuItem = class(TMenuItem)
837 property Data: Pointer read FData write FData;
840 TLinkToolButton = class(TToolButton)
844 property Data: Pointer read FData write FData;
853 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
854 YofUtils, ToolBarUtil, ToolBarSetting,
855 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
856 FavoriteArrange, AddressHistory, Gesture,
857 About, Option, Round, Splash, Sort, ListSelect, Imm,
858 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
859 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
860 InputAssistDataModule, Types, ReplaceDataModule;
863 BLANK_HTML: string = 'about:blank';
864 BROWSER_COUNT = 5; //
\83u
\83\89\83E
\83U
\82Ì
\90\94
866 DandD_THRESHOLD = 5; //D&D
\82Ìè
\87\92l
\81ipixcel)
867 //
\83v
\83\8c\83r
\83\85\81[
\83t
\83@
\83C
\83\8b\96¼
868 HTML_FILE_NAME = 'temp_preview.html';
869 //
\83\81\83b
\83Z
\81[
\83WID
870 USER_TREECLICK = WM_USER + 2000;
871 USER_RESIZED = WM_USER + 2001;
872 USER_MINIMIZED = WM_USER + 2002;
873 USER_SETLINKBAR = WM_USER + 2003;
874 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
875 USER_TASKTRAY = WM_USER + 2010;
878 procedure TGikoForm.CreateParams(var Params: TCreateParams);
881 if FormStyle in [fsNormal, fsStayOnTop] then begin
882 if BorderStyle in [bsSingle, bsSizeable] then begin
883 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
884 Params.WndParent := 0;
889 procedure TGikoForm.FormCreate(Sender: TObject);
891 TVS_NOTOOLTIPS = $0080;
897 wp: TWindowPlacement;
901 Writeln('============================================================');
902 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
904 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
905 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¢');
906 Writeln('============================================================');
909 Sort.SetSortDate(Now());
911 FTreeType := gttNone;
912 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô
914 Application.HookMainWindow(Hook);
915 FIsIgnoreResize := rtResizing;
916 //ActionList
\82ÌGuoupIndex
\82ð
\95Û
\91¶
\82µ
\82Ä
\81A0
\82É
\83N
\83\8a\83A
\82·
\82é
\81B
917 //(
\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¢)
918 //
\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
919 GetGroupIndex(GikoDM.GikoFormActionList);
920 FSearchDialog := nil;
921 FResPopupBrowser := nil;
922 CreateBrowsers(BROWSER_COUNT);
925 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
928 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
929 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
931 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
932 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
934 EnabledCloseButton := True;
936 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
937 ListView.ViewStyle := GikoSys.Setting.ListStyle;
939 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
941 AnimePanel.Left := 0;
943 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
945 //
\83L
\83\83\83r
\83l
\83b
\83g
946 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
948 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
949 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
950 GikoDM.MsgBarVisibleActionExecute(nil);
951 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
953 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
954 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
955 GikoDM.StatusBarVisibleActionExecute(nil);
957 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
958 TreeView.Items.BeginUpdate;
959 FavoriteTreeView.Items.BeginUpdate;
960 ListView.Items.BeginUpdate;
962 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
963 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
964 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
965 TreeView.Color := GikoSys.Setting.CabinetBackColor;
966 FavoriteTreeView.Font.Assign(TreeView.Font);
967 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
969 ListView.Font.Name := GikoSys.Setting.ListFontName;
970 ListView.Font.Size := GikoSys.Setting.ListFontSize;
971 ListView.Font.Color := GikoSys.Setting.ListFontColor;
972 ListView.Font.Style := [];
973 if GikoSys.Setting.ListFontBold then
974 ListView.Font.Style := [fsbold];
975 if GikoSys.Setting.ListFontItalic then
976 ListView.Font.Style := ListView.Font.Style + [fsitalic];
978 ListViewBackGroundColor := clWhite; //
\83f
\83t
\83H
\83\8b\83g
\82É
\90Ý
\92è
\82µ
\82½
\82Ì
\82¿
979 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; //
\83\86\81[
\83U
\92è
\8b`
\82É
\95Ï
\8dX
980 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
981 FOddColor := GikoSys.Setting.OddColor;
984 TreeView.Items.EndUpdate;
985 FavoriteTreeView.Items.EndUpdate;
986 ListView.Items.EndUpdate;
988 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
989 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
991 //
\83~
\83\85\81[
\83g
\82Ì
\8fó
\91Ô
\82ð
\90Ý
\92è
992 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
994 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
995 FResRangeMenuSelect := GikoSys.ResRange;
996 case GikoSys.ResRange of
999 GikoDM.AllResAction.Execute;
1003 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
1004 GikoDM.SelectResAction.Checked := True;
1007 case FResRangeMenuSelect of
1008 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
1009 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
1010 100: GikoDM.OnlyAHundredResAction.Checked := True;
1014 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\95\
\8e¦
\94Í
\88Í
1015 case GikoSys.Setting.ThreadRange of
1018 GikoDM.AllItemAction.Checked := True;
1023 GikoDM.LogItemAction.Checked := True;
1028 GikoDM.NewItemAction.Checked := True;
1033 GikoDM.LiveItemAction.Checked := True;
1034 ViewType := gvtLive;
1038 GikoDM.ArchiveItemAction.Checked := True;
1039 ViewType := gvtArch;
1044 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
1045 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1046 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1047 BrowserTab.Font.Style := [];
1048 if GikoSys.Setting.BrowserTabFontBold then
1049 BrowserTab.Font.Style := [fsBold];
1050 if GikoSys.Setting.BrowserTabFontItalic then
1051 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1053 BrowserTab.DoubleBuffered := True;
1054 FDragWFirst := false;
1055 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1057 //
\83u
\83\89\83E
\83U
\83^
\83u
1058 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1060 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1061 GikoDM.BrowserTabTopAction.Checked := True;
1063 GikoDM.BrowserTabBottomAction.Checked := True;
1066 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1067 GikoDM.BrowserTabTabStyleAction.Checked := True;
1068 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1069 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1071 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1074 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1075 ProgressBar.Parent := StatusBar;
1076 ProgressBar.Top := 2;
1077 ProgressBar.Left := 0;
1078 ProgressBar.Width := StatusBar.Panels[0].Width;
1079 ProgressBar.Height := StatusBar.Height - 2;
1080 ProgressBar.Position := 0;
1082 //
\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Æ)
1083 InitializeBoardPlugIns;
1085 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1086 GikoSys.ListBoardFile;
1087 //
\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É
1089 //
\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è
1090 if (SplashWindow <> nil) then begin
1091 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1095 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1096 for i := Length(BBSs) - 1 downto 0 do begin
1097 if not BBSs[i].IsBoardFileRead then
1098 GikoSys.ReadBoardFile(BBSs[i]);
1100 if SplashWindow <> nil then begin
1101 SplashWindow.ProgressBar.StepBy(20);
1102 SplashWindow.Update;
1106 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1107 RoundList := TRoundList.Create;
1108 RoundList.LoadRoundBoardFile;
1109 RoundList.LoadRoundThreadFile;
1111 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1112 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1113 Style := Style or TVS_NOTOOLTIPS;
1114 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1116 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1117 TreeView.Align := alClient;
1118 FavoriteTreeView.Align := alClient;
1119 FavoriteTreeView.Visible := False;
1121 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1124 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1125 wp.length := sizeof(wp);
1126 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1127 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1128 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1129 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1130 wp.showCmd := SW_HIDE;
1131 SetWindowPlacement(Handle, @wp);
1134 if GikoSys.Setting.WindowMax then
1135 WindowState := wsMaximized;
1137 //
\83M
\83R
\83A
\83j
\83\81
1139 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1140 if FileExists(FileName) then
1141 Animate.FileName := FileName;
1149 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1150 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1151 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1154 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1155 FHistoryList := THistoryList.Create;
1157 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1158 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1159 TreeView, FTreeType);
1161 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1162 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1163 FavoriteDM.ReadFavorite;
1165 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1166 GikoDM.ArrangeAction.Execute;
1168 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1169 case GikoSys.Setting.ListWidthState of
1171 ViewPanel.Width := 1;
1172 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1173 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1176 ViewPanel.Width := GikoSys.Setting.ListWidth;
1177 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1178 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1181 ViewPanel.Width := GikoSys.Setting.ListWidth;
1182 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1183 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1187 case GikoSys.Setting.ListHeightState of
1189 ViewPanel.Height := 1;
1190 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1191 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1194 ViewPanel.Height := GikoSys.Setting.ListHeight;
1195 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1196 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1199 ViewPanel.Height := GikoSys.Setting.ListHeight;
1200 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1201 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1206 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1207 CreateControlThread();
1209 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1210 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1212 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1215 BrowserBoardNameLabel.Caption := '';
1216 BrowserNameLabel.Caption := '';
1219 FTabHintIndex := -1;
1221 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1222 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1223 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1225 MakeDefaultINIFile();
1226 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1227 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1228 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1229 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1232 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1233 SetSelectComboBox();
1235 //
\83A
\83h
\83\8c\83X
\83o
\81[
1236 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1238 //
\83\8a\83\93\83N
\83o
\81[
1240 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1242 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1243 if not FileExists(GikoSys.GetBoardFileName) then begin
1244 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
1245 + '
\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
1246 + '
\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';
1247 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1248 GikoDM.NewBoardAction.Execute;
1251 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1252 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1254 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1255 // FLastRoundTime := 0;
1257 ListView.OnData := TListViewUtils.ListViewData;
1259 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1260 CabinetVisible( False );
1261 if GikoSys.Setting.CabinetVisible then begin
1262 i := CabinetSelectPopupMenu.Items.Count - 1;
1263 if GikoSys.Setting.CabinetIndex = i - 1 then
1264 GikoDM.CabinetHistoryAction.Execute
1265 else if GikoSys.Setting.CabinetIndex = i then
1266 GikoDM.CabinetFavoriteAction.Execute
1268 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1269 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1270 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1271 FIsIgnoreResize := rtResizing;
1272 GikoDM.CabinetBBSAction.Execute;
1275 ShowBBSTreeOld( BBSs[ 0 ] );
1276 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1279 //
\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
1280 for i := 1 to ParamCount do begin
1281 MoveToURL(ParamStr(i));
1284 GikoDM.RepaintStatusBar;
1285 StatusBarResize(Sender);
1287 dummy1.Caption := ItemReservPMenu.Caption;
1288 dummy1.Hint := ItemReservPMenu.Hint;
1290 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1291 MouseGesture := TMouseGesture.Create;
1293 {$IFDEF SPAM_FILTER_ENABLED}
1294 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1295 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1298 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1299 GikoSys.SetGikoMessage;
1301 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1302 if GikoSys.Setting.AutoLogin then
1303 GikoDM.LoginAction.Execute;
1305 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1307 //
\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è
1308 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1309 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1311 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\8f\89\8aú
\89»
1312 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1314 //
\92u
\8a·
\90Ý
\92è
\83t
\83@
\83C
\83\8b\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1315 ReplaceDM.LoadFromFile(GikoSys.GetReplaceFileName);
1317 //
\83\8c\83X
\83|
\83b
\83v
\83A
\83b
\83v
\8fÁ
\8b\8e\83^
\83C
\83}
\81[
1318 ResPopupClearTimer.Interval := GikoSys.Setting.RespopupWait;
1320 // D&D
\82ð
\8eó
\82¯
\8eæ
\82é
1321 DragAcceptFiles(ListView.Handle, True);
1323 //
\8f\89\8aú
\89»
\82É
\8e¸
\94s
\82µ
\82½
\83\82\83W
\83\85\81[
\83\8b\83`
\83F
\83b
\83N
1324 if (FavoriteDM.AbEnd) then begin
1325 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',
1326 '
\8f\89\8aú
\89»
\88Ù
\8fí');
1332 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1333 procedure TGikoForm.SaveCoolBarSettings;
1336 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1338 SaveMainCoolBarSettings;
1339 SaveBoardCoolBarSettings;
1340 SaveBrowserCoolBarSettings;
1343 procedure TGikoForm.SaveMainCoolBarSettings;
1348 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1349 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1350 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1351 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1352 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1353 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1356 procedure TGikoForm.SaveBoardCoolBarSettings;
1361 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1362 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1363 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1364 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1365 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1366 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1369 procedure TGikoForm.SaveBrowserCoolBarSettings;
1374 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1375 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1376 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1377 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1378 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1379 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1382 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1383 procedure TGikoForm.LoadCoolBarSettings;
1389 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1390 MainCoolBar.Bands.BeginUpdate;
1392 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1393 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1394 CoolSet := GikoSys.Setting.MainCoolSet[i];
1395 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1396 FIsIgnoreResize := rtNone;
1397 SaveCoolBarSettings;
1400 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1401 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1402 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1405 MainCoolBar.Bands.EndUpdate;
1408 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1409 ListCoolBar.Bands.BeginUpdate;
1411 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1412 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1413 CoolSet := GikoSys.Setting.ListCoolSet[i];
1414 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1415 FIsIgnoreResize := rtNone;
1416 SaveCoolBarSettings;
1419 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1420 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1421 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1424 ListCoolBar.Bands.EndUpdate;
1427 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1428 BrowserCoolBar.Bands.BeginUpdate;
1430 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1431 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1432 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1433 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1434 FIsIgnoreResize := rtNone;
1435 SaveCoolBarSettings;
1438 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1439 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1440 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1443 BrowserCoolBar.Bands.EndUpdate;
1448 procedure TGikoForm.FormShow(Sender: TObject);
1452 if FStartUp then begin
1453 ShowWindow(Application.Handle, SW_HIDE);
1455 //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½
1456 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1457 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1458 GikoDM.StdToolBarVisibleActionExecute( nil );
1459 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1460 GikoDM.AddressBarVisibleActionExecute( nil );
1461 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1462 GikoDM.LinkBarVisibleActionExecute( nil );
1463 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1464 GikoDM.ListToolBarVisibleActionExecute( nil );
1465 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1466 GikoDM.ListNameBarVisibleActionExecute( nil );
1467 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1468 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1469 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1470 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1472 // CoolBar
\95\9c\8c³
1473 LoadCoolBarSettings;
1475 //
\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é
1476 // ResetBandInfo( ListCoolBar, ListToolBar );
1477 FIsIgnoreResize := rtNone;
1479 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1480 if GikoSys.Setting.TabAutoLoadSave then begin
1481 GikoDM.TabsOpenAction.Tag := 1;
1482 GikoDM.TabsOpenAction.Execute;
1483 GikoDM.TabsOpenAction.Tag := 0;
1484 if (GikoSys.Setting.LastCloseTabURL <> '') then begin
1485 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( FActiveContent.Browser ), 0 );
1486 if ( FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
1487 while (FActiveContent.Browser.ReadyState <> READYSTATE_COMPLETE) and
1488 (FActiveContent.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
1489 Application.ProcessMessages;
1492 item := BBSsFindThreadFromURL( GikoSys.Setting.LastCloseTabURL );
1493 if (item <> nil) and (item.IsLogFile) then begin
1494 OpenThreadItem(item, item.URL);
1496 GikoSys.Setting.LastCloseTabURL := '';
1500 //ActionList
\82ÌGroupIndex
\82ð
\8c³
\82É
\96ß
\82·
1501 SetGroupIndex(GikoDM.GikoFormActionList);
1507 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1509 // if GikoForm.WindowState <> wsMinimized then
1510 // SaveCoolBarSettings;
1512 if ( GikoSys.Setting.ShowDialogForEnd ) and
1513 (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
1518 GikoSys.Setting.LastCloseTabURL := '';
1519 if GikoSys.Setting.TabAutoLoadSave then begin
1520 GikoDM.TabsSaveAction.Execute;
1521 if (GetActiveContent <> nil) and
1522 (GetActiveContent.IsLogFile) then begin
1523 GikoSys.Setting.LastCloseTabURL := GetActiveContent.URL;
1527 if (SearchDialog <> nil) then begin
1528 if (SearchDialog.Visible) then begin
1532 SearchDialog.Release;
1535 SearchDialog := nil;
1538 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82Ì
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81AEditorForm
\82ð
\95Â
\82¶
\82é
1539 GikoDM.CloseAllEditorAction.Execute;
1541 Application.UnhookMainWindow(Hook);
1542 //
\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·
1543 FControlThread.Terminate;
1544 Application.Terminate;
1547 procedure TGikoForm.FormDestroy(Sender: TObject);
1550 wp : TWindowPlacement;
1553 WindowPlacement: TWindowPlacement;
1555 //
\83^
\83X
\83N
\83g
\83\8c\83C
\82Ì
\83A
\83C
\83R
\83\93\8dí
\8f\9c
1556 if (FIconData.uID <> 0) then begin
1557 Shell_NotifyIcon(NIM_DELETE, @FIconData);
1560 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1562 if GikoSys.Setting.GestureEnabled then begin
1563 MouseGesture.OnGestureStart := nil;
1564 MouseGesture.OnGestureMove := nil;
1565 MouseGesture.OnGestureEnd := nil;
1568 MouseGesture.UnHook;
1573 ActiveListColumnSave;
1577 WindowPlacement.length := SizeOf(TWindowPlacement);
1578 GetWindowPlacement(Self.Handle, @WindowPlacement);
1580 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1581 wp.length := sizeof(wp);
1582 GetWindowPlacement(Handle, @wp);
1583 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1584 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1585 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1586 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1587 GikoSys.Setting.WindowMax := (WindowState = wsMaximized) or
1588 (WindowPlacement.flags = WPF_RESTORETOMAXIMIZED);
1589 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1590 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1591 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1592 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1593 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1594 if GikoDM.ArrangeAction.Checked then
1595 GikoSys.Setting.ListOrientation := gloVertical
1597 GikoSys.Setting.ListOrientation := gloHorizontal;
1598 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1603 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1604 if not GikoSys.Setting.ResRangeHold then
1605 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1608 if WindowState <> wsNormal then
1609 WindowState := wsNormal;
1610 SaveCoolBarSettings;
1612 GikoSys.Setting.WriteWindowSettingFile;
1613 GikoSys.Setting.WriteNameMailSettingFile;
1616 //
\83\8a\83A
\83\8b\83^
\83C
\83\80\82É
\95Û
\91¶
\82³
\82ê
\82é
\82Ì
\82Å
\81A
\82Ü
\82½
\81A
\83E
\83B
\83\93\83h
\83E
\83T
\83C
\83Y
\82ª CoolBar
\82æ
\82è
1617 //
\8f¬
\82³
\82
\82È
\82Á
\82Ä
\82¢
\82é
\82Æ
\82«
\82É
\95Û
\91¶
\82·
\82é
\82Æ
\92l
\82ª
\8fã
\8f\91\82«
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\82Ì
\82Å
\82±
\82±
\82Å
\82Í
\95Û
\91¶
\82µ
\82È
\82¢
1619 //
\81ªFormDestroy
\92\86\82É
\88Ú
\93®
\82µ
\82½
\82Ì
\82Å
\81A
\82±
\82±
\82Å
\95Û
\91¶
\82µ
\82È
\82¢
\82Æ
\82¢
\82¯
\82È
\82¢
\82Æ
\8ev
\82¤
\81B
\81i
\82à
\82¶
\82ã
\81@2004/04/09
\81j
1621 //if (GikoForm.WindowState <> wsMinimized) and (GikoForm.WindowState <> wsMaximized) then
1623 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\90Ý
\92è
\82Ì
\95Û
\91¶
1624 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1626 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1628 //FavoriteDM
\82Í
\8e©
\93®
\90¶
\90¬
\83t
\83H
\81[
\83\80\82È
\82Ì
\82Å
\81A
\89ð
\95ú
\82Í
\8e©
\93®
\93I
\82É
\82³
\82ê
\82é
1629 //
\8f\89\8aú
\89»
\88Ù
\8fí
\8e\9e\82©
\82ç
\82Ì
\8fI
\97¹
\82Å
\82Í
\95Û
\91¶
\82µ
\82È
\82¢
1630 if not (FavoriteDM.AbEnd) then begin
1631 FavoriteDM.WriteFavorite;
1636 //LockWindowUpdate(Self.Handle);
1638 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1639 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1640 GikoSys.Setting.ShowDialogForAllTabClose := false;
1641 GikoDM.AllTabCloseAction.Execute;
1642 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1646 for i := FBrowsers.Count - 1 downto 0 do begin
1647 GikoSys.ShowRefCount('browser' + IntToStr(i), TWebBrowser(FBrowsers[i]).ControlInterface);
1648 GikoSys.ShowRefCount('document' + IntToStr(i), TWebBrowser(FBrowsers[i]).ControlInterface.Document);
1651 for i := FBrowsers.Count - 1 downto 0 do begin
1652 TWebBrowser(FBrowsers[i]).Free;
1655 FBrowsers.Capacity := 0;
1660 if BrowserNullTab <> nil then begin
1661 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
1662 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
1664 BrowserNullTab.Free;
1670 TreeView.Items.BeginUpdate;
1671 TreeView.Items.GetFirstNode.Free;
1672 TreeView.Items.Clear;
1673 TreeView.Items.EndUpdate;
1677 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1679 //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
1680 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1684 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
1686 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1698 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶&
\94j
\8aü
1700 RoundList.SaveRoundFile;
1714 FControlThread.DownloadAbort;
1715 FControlThread.Terminate;
1716 FControlThread.WaitFor;
1720 FControlThread.Free;
1722 //
\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é
1723 for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
1724 GikoForm.PlugInMenu.items[i].Free;
1726 GikoForm.PlugInMenu.Clear;
1729 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
1730 // 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Å
1731 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
1732 for i := Length(BoardGroups) - 1 downto 0 do begin
1733 //BoardGroups[i].Clear;
1734 BoardGroups[i].Free;
1738 for i := Length( BBSs ) - 1 downto 0 do begin
1739 if BBSs[ i ] <> nil then
1747 if FEvent <> nil then
1751 if FResPopupBrowser <> nil then begin
1752 TOleControl(FResPopupBrowser).Parent := nil;
1753 FResPopupBrowser.Free;
1759 if FPreviewBrowser <> nil then begin
1760 FPreviewBrowser.Free;
1761 FPreviewBrowser := nil;
1765 //LockWindowUpdate(0);
1768 //
\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
1769 procedure TGikoForm.SetBBSMenu;
1772 item : TBBSMenuItem;
1775 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
1776 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1778 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1779 CabinetSelectPopupMenu.Items[ i ].Free;
1780 CabinetMenu.Items[ i ].Free;
1781 BBSSelectPopupMenu.Items[ i ].Free;
1787 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
1788 for i := Length( BBSs ) - 1 downto 0 do begin
1790 item := TBBSMenuItem.Create( PopupMenu );
1791 item.Caption := BBSs[ i ].Title;
1792 item.Data := BBSs[ i ];
1793 item.OnClick := BBSMenuItemOnClick;
1794 CabinetSelectPopupMenu.Items.Insert( 0, item );
1795 item := TBBSMenuItem.Create( PopupMenu );
1796 item.Caption := BBSs[ i ].Title;
1797 item.Data := BBSs[ i ];
1798 item.OnClick := BBSMenuItemOnClick;
1799 CabinetMenu.Insert( 0, item );
1800 item := TBBSMenuItem.Create( PopupMenu );
1801 item.Caption := BBSs[ i ].Title;
1802 item.Data := BBSs[ i ];
1803 item.OnClick := BBSMenuItemOnClick;
1804 BBSSelectPopupMenu.Items.Insert( 0, Item );
1811 procedure TGikoForm.ReloadBBS;
1816 LockWindowUpdate(Self.Handle);
1818 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1819 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1820 GikoSys.Setting.ShowDialogForAllTabClose := false;
1821 GikoDM.AllTabCloseAction.Execute;
1822 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1823 SetContent(BrowserNullTab);
1824 //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
1825 TreeView.Items.Clear;
1827 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1829 RoundList.SaveRoundFile;
1832 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
1838 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1840 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1845 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1847 FavoriteDM.WriteFavorite;
1852 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
1853 for i := Length(BoardGroups) - 1 downto 0 do begin
1855 BoardGroups[i].Free;
1861 for i := Length( BBSs ) - 1 downto 0 do begin
1862 if BBSs[ i ] <> nil then
1871 FTreeType := gttNone;
1873 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
1875 //
\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Æ)
1876 InitializeBoardPlugIns;
1878 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1880 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1881 for i := Length(BBSs) - 1 downto 0 do begin
1882 if not BBSs[i].IsBoardFileRead then
1883 GikoSys.ReadBoardFile(BBSs[i]);
1886 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
1889 ShowBBSTree( BBSs[ 0 ] );
1891 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1892 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1893 TreeView, FTreeType);
1895 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1896 FavoriteDM.ReadFavorite;
1900 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1901 RoundList.LoadRoundBoardFile;
1902 RoundList.LoadRoundThreadFile;
1904 LockWindowUpdate(0);
1908 \todo
\89½
\8cÌ IE 7
\82Å
\82Í about:..
\82É
\82È
\82é
\82Ì
\82©
1909 (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©)
1910 \92²
\8d¸
\82·
\82é
\82±
\82Æ
1912 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1920 threadItem : TThreadItem;
1922 Protocol, Host, Path, Document, Port, Bookmark: string;
1927 ActiveFileName: string;
1932 cResPopup: TResPopupBrowser;
1933 senderBrowser :TWebBrowser;
1934 doc: IHTMLDocument2;
1936 //
\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ª
1937 // 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è)
1938 if Pos('about:..', Text) = 1 then
1939 Text2 := 'about:blank..' + Copy( Text, Length('about:..')+1, Length(Text) )
1943 if not( TObject(Sender) is TWebBrowser )then
1946 senderBrowser := TWebBrowser(Sender);
1947 doc := senderBrowser.ControlInterface.Document as IHTMLDocument2;
1951 if ((not senderBrowser.Busy) and Assigned(doc)) then begin
1952 if LowerCase(doc.charset) <> 'shift_jis' then begin
1953 doc.charset := 'shift_jis';
1961 if PreviewTimer.Enabled then
1962 PreviewTimer.Enabled := False;
1964 Application.CancelHint;
1967 if GetActiveContent <> nil then
1968 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
1970 ActiveFileName := '';
1972 FActiveContent := nil;
1976 //
\91O
\89ñ
\82Æ
\93¯
\82¶
\8fê
\8d\87\8fI
\97¹
1977 if (StatusBar.Panels[1].Text = Text2) then begin
1978 if Text2 = '' then begin
1979 if FResPopupBrowser <> nil then begin
1980 if not(Sender is TResPopupBrowser) then
1981 FResPopupBrowser.Clear
1983 TResPopupBrowser(Sender).ChildClear;
1989 StatusBar.Panels[1].Text := Text2;
1992 if FPreviewBrowser <> nil then
1993 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1995 if FResPopupBrowser <> nil then begin
1996 if not(Sender is TResPopupBrowser) then begin
1997 if (FResPopupBrowser.Visible) then begin
1998 if ResPopupClearTimer.Interval > 0 then begin
1999 ResPopupClearTimer.Enabled := True;
2000 ResPopupClearTimer.Tag := 0;
2002 FResPopupBrowser.Clear;
2006 if ResPopupClearTimer.Interval > 0 then begin
2007 ResPopupClearTimer.Enabled := True;
2008 ResPopupClearTimer.Tag := 1;
2010 TResPopupBrowser(Sender).ChildClear;
2016 if not(Sender is TResPopupBrowser) then
2017 if not GikoSys.Setting.UnActivePopup then
2018 if not GikoForm.Active then
2023 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
2024 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
2025 //
\91¼
\82Ì
\83A
\83v
\83\8a\82Å
\8f\88\97\9d\82·
\82éURL
\82©
\8am
\94F
2026 if (ExtPreviewDM.PreviewURL(Text2)) then begin
2030 Ext := AnsiLowerCase(ExtractFileExt(Text2));
2031 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
2032 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) then begin
2033 if FPreviewBrowser = nil then begin
2034 FPreviewBrowser := TPreviewBrowser.Create(Self);
2035 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2036 TOleControl(FPreviewBrowser).Parent := nil;
2038 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
2039 FPreviewURL := Text2;
2040 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
2041 PreviewTimer.Enabled := True;
2042 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
2043 if (Pos('mailto:', Text2) = 1) and (GikoSys.Setting.RespopupMailTo) then begin
2044 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
2045 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
2047 p.x := p.x - senderBrowser.ClientOrigin.x;
2048 p.y := p.y - senderBrowser.ClientOrigin.y;
2049 e := doc.elementFromPoint(p.x, p.y);
2050 if (Assigned(e)) then begin
2051 CreateResPopupBrowser;
2053 if not(Sender is TResPopupBrowser) then begin
2054 if (FResPopupBrowser.Visible) then begin
2055 FResPopupBrowser.Clear;
2058 TResPopupBrowser(Sender).ChildClear;
2061 cResPopup := FResPopupBrowser.CreateNewBrowser;
2062 tmp2 := Trim(ZenToHan(e.Get_outerText));
2063 if (GikoSys.IsNumeric(tmp2)) then begin
2064 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
2065 wkIntSt := StrToInt64(tmp2);
2066 wkIntTo := StrToInt64(tmp2);
2067 cResPopup.PopupType := gptThread;
2068 HTMLCreater.SetResPopupText(cResPopup, GetActiveContent(true), wkIntSt, wkIntTo, False, False);
2070 cResPopup.PopupType := gptRaw;
2071 cResPopup.Title := s;
2075 CreateResPopupBrowser;
2077 if not(Sender is TResPopupBrowser) then begin
2078 if (FResPopupBrowser.Visible) then begin
2079 FResPopupBrowser.Clear;
2082 TResPopupBrowser(Sender).ChildClear;
2085 threadItem := GetActiveContent(true);
2086 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
2087 PathRec := Gikosys.Parse2chURL2(URL);
2088 if (PathRec.FNoParam) then begin
2092 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
2094 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
2096 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
2098 URL := GikoSys.GetBrowsableThreadURL( URL );
2099 wkIntSt := PathRec.FSt;
2100 wkIntTo := PathRec.FTo;
2102 if (wkIntSt = 0) and (wkIntTo = 0) then begin
2105 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
2107 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
2109 end else if wkIntSt > wkIntTo then begin
2114 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
2119 threadItem := BBSsFindThreadFromURL( URL );
2121 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
2122 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
2123 if board <> nil then begin
2124 if not board.IsThreadDatRead then
2125 GikoSys.ReadSubjectFile( board );
2126 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
2130 if threadItem <> nil then begin
2131 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
2132 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
2133 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
2137 cResPopup := FResPopupBrowser.CreateNewBrowser;
2138 cResPopup.PopupType := gptThread;
2139 HTMLCreater.SetResPopupText(cResPopup, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
2143 if (cResPopup <> nil) then begin
2144 ResPopupClearTimer.Enabled := False;
2146 if cResPopup.PopupType = gptRaw then begin
2147 if cResPopup.Title <> '' then begin
2148 cResPopup.TitlePopup;
2151 if cResPopup.RawDocument <> '' then begin
2153 end else if cResPopup.Title <> '' then begin
2154 cResPopup.TitlePopup;
2161 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2165 FEnabledCloseButton := Enabled;
2166 SysMenu := GetSystemMenu(Handle, False);
2168 if Enabled then begin
2169 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2171 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2174 DrawMenuBar(Handle);
2177 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2178 var AllowChange: Boolean);
2180 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
2181 // if FTreeType = gtt2ch then
2182 // FSortIndex := -1;
2185 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2186 Shift: TShiftState);
2190 if GetActiveList is TBoard then begin
2192 VK_BACK:; // UpFolderButtonClick(Sender);
2193 VK_SPACE: ListDoubleClick(Shift);
2194 VK_RETURN: ListClick;
2197 if ListView.Selected <> nil then begin
2198 pos.X := ListView.Column[ 0 ].Width;
2199 pos.Y := ListView.Selected.Top;
2201 pos.X := ListView.Left;
2202 pos.Y := ListView.Top;
2204 Windows.ClientToScreen( ListView.Handle, pos );
2205 ListPopupMenu.Popup( pos.X, pos.Y );
2208 end else begin // TBBS, TCategory
2210 VK_BACK:; // UpFolderButtonClick(Sender);
2211 VK_SPACE: ListClick;
2212 VK_RETURN: ListDoubleClick(Shift);
2215 if ListView.Selected <> nil then begin
2216 pos.X := ListView.Column[ 0 ].Width;
2217 pos.Y := ListView.Selected.Top;
2219 pos.X := ListView.Left;
2220 pos.Y := ListView.Top;
2222 Windows.ClientToScreen( ListView.Handle, pos );
2223 ListPopupMenu.Popup( pos.X, pos.Y );
2229 function TGikoForm.GetHttpState: Boolean;
2231 Result := FHttpState;
2234 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2235 Column: TListColumn);
2239 vSortIndex : Integer;
2240 vSortOrder : Boolean;
2242 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2243 if TObject( FActiveList ) is TBBS then begin
2244 orderList := GikoSys.Setting.BBSColumnOrder;
2245 vSortIndex := GikoSys.Setting.BBSSortIndex;
2246 vSortOrder := GikoSys.Setting.BBSSortOrder;
2247 end else if TObject( FActiveList ) is TCategory then begin
2248 orderList := GikoSys.Setting.CategoryColumnOrder;
2249 vSortIndex := GikoSys.Setting.CategorySortIndex;
2250 vSortOrder := GikoSys.Setting.CategorySortOrder;
2251 end else if TObject( FActiveList ) is TBoard then begin
2252 orderList := GikoSys.Setting.BoardColumnOrder;
2253 vSortIndex := GikoSys.Setting.BoardSortIndex;
2254 vSortOrder := GikoSys.Setting.BoardSortOrder;
2258 id := Integer( orderList[ idx ] );
2261 if vSortIndex = id then
2262 vSortOrder := not vSortOrder
2264 vSortOrder := id = 0;
2267 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2270 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2271 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2275 DefaultDraw := True;
2276 //
\82È
\82º
\82©
\96³
\8fð
\8c\8f\82ÅExit
\82µ
\82Ä
\82¢
\82é
2278 DefaultDraw := False;
2279 if (cdsSelected in State) or (cdsHot in State) then begin
2280 Sender.Canvas.Brush.Color := clHighlight;
2281 Sender.Canvas.Font.Color := clHighlightText;
2283 Sender.Canvas.Brush.Color := clBtnFace;
2284 Sender.Canvas.Font.Color := clBtnText;
2286 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2287 Sender.Canvas.FillRect(ARect);
2288 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2291 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2296 Nodes := TreeView.Items;
2298 for i := 0 to Nodes.Count - 1 do begin
2299 if Nodes.Item[i].Data = Data then begin
2300 Result := Nodes.Item[i];
2307 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2308 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2309 Headers: OleVariant; var Cancel: WordBool);
2314 kMenuName: string = 'menu:';
2319 if Pos(kMenuName, URL) <> 0 then begin
2320 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2322 if not GikoSys.IsNumeric(sNo) then Exit;
2326 KokoPopupMenu.PopupComponent := nil;
2327 if (Sender is TComponent) then
2328 KokoPopupMenu.PopupComponent := TComponent(Sender);
2329 KokoPopupMenu.Tag := StrToInt(sNo);
2330 KokoPopupMenu.Popup(p.x, p.y);
2331 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2332 Cancel := not GikoSys.Setting.OpenMailer;
2334 //@
\82Æ.
\82ð
\8aÜ
\82Ü
\82È
\82¢URL
\82Í
\83\81\81[
\83\8b\83A
\83h
\83\8c\83X
\82Æ
\82Ý
\82È
\82³
\82È
\82¢
2335 //
\8eå
\82Éage
\81Asage
\91Î
\8dô
2336 if (Pos('@', URL) = 0) or (Pos('.', URL) = 0) then begin
2343 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2344 const ARect: TRect; var DefaultDraw: Boolean);
2348 IsBoardNode: Boolean;
2354 Category: TCategory;
2358 DefaultDraw := True;
2360 if FTreeType = gttHistory then Exit;
2362 TreeView.Canvas.Font.Color := clBlue;
2363 IsBoardNode := False;
2364 for i := 0 to TreeView.Items.Count - 1 do begin
2366 if not TreeView.Items[i].IsVisible then
2369 if TObject(TreeView.Items[i].Data) is TCategory then begin
2370 if TreeView.Items[i].Expanded then
2373 IsBoardNode := False;
2374 Category := TCategory(TreeView.Items[i].Data);
2375 for j := 0 to Category.Count - 1 do begin
2376 Board := Category.Items[j];
2377 if Board <> nil then begin
2378 if Board.UnRead > 0 then begin
2386 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2387 IsBoardNode := True;
2388 Board := TBoard(TreeView.Items[i].Data);
2390 Cnt := Board.UnRead;
2396 Bitmap := TBitmap.Create;
2398 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2399 Bitmap.Canvas.Font.Style := [fsBold];
2400 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2405 NodeRect := TreeView.Items[i].DisplayRect(True);
2408 CntText := '(' + IntToStr(Cnt) + ')'
2409 else if Cnt = 1 then
2413 TextWidth := TreeView.Canvas.TextWidth(CntText);
2415 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2417 NodeRect.Left + NodeWidth + TextWidth + 8,
2419 DrawText(TreeView.Canvas.Handle,
2423 DT_SINGLELINE or DT_VCENTER);
2425 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2428 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2429 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2432 Category: TCategory;
2435 DefaultDraw := True;
2437 if FTreeType = gttHistory then Exit;
2439 TreeView.Canvas.Font.Style := [];
2440 if Node <> nil then begin
2441 if TObject(Node.Data) is TCategory then begin
2442 Category := TCategory(Node.Data);
2443 for i := 0 to Category.Count - 1 do begin
2444 Board := Category.Items[i];
2445 if Board <> nil then begin
2446 if Board.UnRead > 0 then begin
2447 TreeView.Canvas.Font.Style := [fsBold];
2452 end else if TObject(Node.Data) is TBoard then begin
2453 Board := TBoard(Node.Data);
2454 if Board.UnRead > 0 then
2455 TreeView.Canvas.Font.Style := [fsBold];
2460 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2462 TreeView.Invalidate;
2464 if TObject(Node.Data) is TBBS then begin
2465 TBBS(Node.Data).NodeExpand := True;
2466 end else if TObject(Node.Data) is TCategory then begin
2467 TCategory(Node.Data).NodeExpand := True;
2468 end else if TObject(Node.Data) is TBoard then begin
2469 TBoard(Node.Data).NodeExpand := True;
2473 procedure TGikoForm.ListViewAllSelect;
2478 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2480 if csDestroying in Self.ComponentState then
2482 AddMessageList(Msg, nil, Icon);
2484 // *************************************************************************
2485 //!
\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
2486 // *************************************************************************
2487 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2491 boardPlugIn : TBoardPlugIn;
2496 if csDestroying in Self.ComponentState then
2498 if Item.DownType = gdtBoard then
2499 ATitle := Item.Board.Title
2501 ATitle := Item.ThreadItem.Title;
2503 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2505 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2507 if Item.DownType = gdtBoard then begin
2510 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2511 if GetActiveList = Item.Board then begin
2513 //
\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é
2514 if (GikoSys.Setting.AutoSortThreadList) then begin
2515 GikoSys.Setting.BoardSortIndex := 0;
2516 GikoSys.Setting.BoardSortOrder := True;
2518 Sort.SetSortDate(Now());
2519 SetActiveList(Item.Board);
2521 Item.Board.Modified := True;
2522 Item.Board.IsThreadDatRead := True;
2525 end else if Item.DownType = gdtThread then begin
2528 Item.ThreadItem.NewArrival := True;
2529 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2530 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2531 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2532 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2533 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2534 Item.ThreadItem.Title := Res.FTitle;
2535 ATitle := Item.ThreadItem.Title;
2536 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2537 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2538 ATitle := Res.FTitle;
2540 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2541 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2542 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2546 if GikoSys.Setting.BrowserTabVisible then begin
2547 if GetActiveContent = Item.ThreadItem then
2548 InsertBrowserTab(Item.ThreadItem)
2549 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2550 InsertBrowserTab(Item.ThreadItem, True)
2552 InsertBrowserTab(Item.ThreadItem, False);
2555 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2556 InsertBrowserTab(Item.ThreadItem);
2559 Application.ProcessMessages;
2561 if Item.State = gdsComplete then begin
2563 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2567 PlaySound('NewDiff');
2568 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2573 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2574 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2575 // 2ch
\88È
\8aO
\82Í
\81A1000
\82ª
\8dÅ
\8d\82\82©
\95s
\96¾
\82È
\82Ì
\82Å
\81A2ch
\8cÀ
\92è
\82É
\82·
\82é
2576 if (Item.ThreadItem.ParentBoard.Is2ch) then begin
2577 Item.ThreadItem.Round := False;
2578 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);
2582 //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
2583 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
2584 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
2585 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
2586 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
2587 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
2588 case GikoForm.ViewType of
2589 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
2590 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
2591 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
2592 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
2593 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
2594 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
2597 RefreshListView(Item.ThreadItem);
2600 end else if Item.State = gdsNotModify then begin
2602 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2603 //SetContent(Item.ThreadItem);
2604 InsertBrowserTab(Item.ThreadItem);
2606 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2607 PlaySound('NoChange');
2608 Screen.Cursor := crDefault;
2609 end else if Item.State = gdsAbort then begin
2611 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2612 end else if Item.State = gdsError then begin
2617 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2618 // if Item.ResponseCode = 302 then
2619 // 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);
2625 if FWorkCount < 0 then FWorkCount := 0;
2626 if FWorkCount = 0 then begin
2628 Animate.Active := False;
2630 Screen.Cursor := crDefault;
2637 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2639 // SetProgressValue(Number, 0, AWorkCountMax);
2640 // ProgressBar.Visible := True;
2641 if csDestroying in Self.ComponentState then
2644 ProgressBar.Position := 0;
2645 ProgressBar.Max := AWorkCountMax;
2646 FDownloadTitle := AWorkTitle;
2647 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2648 FDownloadMax := AWorkCountMax;
2651 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2653 if csDestroying in Self.ComponentState then
2655 ProgressBar.Position := 0;
2656 if FDownloadMax <> 0 then
2657 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2660 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2662 if csDestroying in Self.ComponentState then
2664 ProgressBar.Position := AWorkCount;
2665 // SetProgressValue(Number, AWorkCount);
2666 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2669 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2671 ListItem: TListItem;
2673 MessageListView.Items.BeginUpdate;
2675 ListItem := MessageListView.Items.Add;
2676 ListItem.Caption := ACaption;
2677 ListItem.Data := AObject;
2678 ListItem.MakeVisible(False);
2680 gmiOK: ListItem.ImageIndex := 0;
2681 gmiSAD: ListItem.ImageIndex := 1;
2682 gmiNG: ListItem.ImageIndex := 2;
2683 gmiWhat: ListItem.ImageIndex := 3;
2686 MessageListView.Items.EndUpdate;
2690 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
2691 procedure TGikoForm.ReleaseOldestBrowser;
2695 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2696 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2697 TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2698 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2704 function TGikoForm.InsertBrowserTab(
2705 ThreadItem : TThreadItem;
2706 ActiveTab : Boolean = True
2709 i, j, idx : Integer;
2710 favItem : TFavoriteThreadItem;
2711 newBrowser : TBrowserRecord;
2716 if Threaditem = nil then Exit;
2718 if ThreadItem.IsLogFile then begin
2719 //
\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é
2720 //
\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é
2721 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2722 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2723 j := FBrowsers.IndexOf(FActiveContent.Browser);
2724 if j = BROWSER_COUNT - 1 then
2725 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2727 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2728 if not FHistoryList.AddHistory( favItem, TreeView, FTreeType ) then
2731 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2732 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2733 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2734 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2735 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2736 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2737 ReleaseOldestBrowser;
2738 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2739 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2740 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2742 if ActiveTab then begin
2743 BrowserTab.TabIndex := i;
2744 BrowserTab.OnChange(nil);
2751 idx := BrowserTab.TabIndex;
2752 newBrowser := TBrowserRecord.Create;
2753 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2754 ReleaseOldestBrowser;
2755 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2756 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2757 newBrowser.thread := ThreadItem;
2758 newBrowser.Repaint := true;
2760 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2761 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2762 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2763 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2767 if ActiveTab then begin
2768 BrowserTab.TabIndex := 0;
2770 end else if GikoSys.Setting.BrowserTabAppend = gtaLast then begin
2771 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2772 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2773 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2777 if ActiveTab then begin
2778 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2779 BrowserTab.TabIndex := 0
2781 BrowserTab.TabIndex := i;
2784 //
\83^
\83u
\88Ê
\92u
\82ð
\8eæ
\93¾
2786 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2787 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2788 TWebBrowser(FBrowsers[1]) then begin
2793 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2796 //
\83^
\83u
\82ª
\96³
\82¢
\82Æ
\82«
\82È
\82Ç
\91Î
\8dô
2797 if (ins < 0) then begin
2800 BrowserTab.Tabs.InsertObject(ins, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2801 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2802 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2803 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2805 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2810 if ActiveTab then begin
2811 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2812 BrowserTab.TabIndex := 0
2814 BrowserTab.TabIndex := ins;
2817 Result := newBrowser;
2818 if(ActiveTab) or (idx = -1) then begin
2819 BrowserTab.OnChange(nil);
2822 if BrowserNullTab = nil then begin
2823 BrowserNullTab := TBrowserRecord.Create;
2824 BrowserNullTab.Browser := Browser;
2826 // if BrowserNullTab.thread <> ThreadItem then begin
2827 // BrowserNullTab.Movement := '';
2829 BrowserNullTab.thread := ThreadItem;
2830 Result := BrowserNullTab;
2831 BrowserTab.TabIndex := -1;
2832 SetContent(BrowserNullTab);
2835 if GikoSys.Setting.URLDisplay then
2836 AddressComboBox.Text := ThreadItem.URL;
2840 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2848 ThreadItem: TThreadItem;
2849 Thread: TBrowserRecord;
2850 ThreadTitle, ThreadPTitle: string;
2851 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2854 idx := BrowserTab.TabIndex;
2855 if (not FStartUp) and
2856 (FActiveContent <> nil) and
2857 (FActiveContent.Thread <> Thread.Thread) and
2858 (FActiveContent.Browser <> nil) and
2859 (Assigned(FActiveContent.Browser.ControlInterface.Document)) then begin
2862 FActiveContent.Thread.ScrollTop := FActiveContent.Browser.OleObject.Document.Body.ScrollTop;
2865 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2870 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2871 Thread.Browser.Navigate(BLANK_HTML);
2872 BrowserBoardNameLabel.Caption := '';
2873 ItemBoardImage.Picture := nil;
2874 BrowserNameLabel.Caption := '';
2875 ItemImage.Picture := nil;
2876 BrowserNullTab.Thread := nil;
2877 //TOleControl(BrowserNullTab.Browser).Visible := true;
2878 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2879 FActiveContent := nil;
2881 end else if Thread.Browser = nil then begin
2882 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2883 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2884 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2885 ReleaseOldestBrowser;
2886 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2887 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2890 ThreadTitle := Thread.Thread.Title;
2891 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2892 //ThreadScrollTop := Thread.Thread.ScrollTop;
2893 if Thread.Thread.IsLogFile then begin
2894 if not FileExists(Thread.Thread.GetThreadFileName) then begin
2895 Thread.Thread.DeleteLogFile;
2899 ThreadIsLog := Thread.Thread.IsLogFile;
2900 ThreadItem := Thread.Thread;
2901 ThreadNewArraical := Thread.Thread.NewArrival;
2902 //ThreadUnRead := Thread.Thread.UnRead;
2903 BBSID := ThreadItem.ParentBoard.BBSID;
2904 FileName := ThreadItem.FileName;
2906 if GetCapture = ListView.Handle then
2909 Screen.Cursor := crHourGlass;
2913 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2914 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2915 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2917 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2918 if (not Assigned(Thread.Browser.ControlInterface.Document)) then begin
2919 Thread.Browser.Navigate('about:blank');
2921 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2922 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2923 Application.ProcessMessages;
2924 if idx <> BrowserTab.TabIndex then begin
2929 if (Thread <> nil) and (ThreadItem <>nil) then begin
2930 BrowserBoardNameLabel.Caption := ThreadPTitle;
2931 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2932 BrowserNameLabel.Caption := ThreadTitle;
2933 ItemImage.Picture := nil;
2935 if ThreadNewArraical then
2936 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
2938 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
2940 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
2942 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
2943 BrowserNameLabel.Left := ItemImage.Left + 20;
2946 //ActiveContent
\81@
\82Ì
\8dX
\90V
2947 FActiveContent := Thread;
2949 if not ThreadIsLog then begin
2950 Self.Caption := GikoDataModule.CAPTION_NAME ;
2951 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\8fÁ
\8b\8e
2952 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
2954 Thread.Browser.BringToFront;
2955 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
2956 doc := Thread.Browser.OleObject.Document;
2958 doc.charset := 'Shift_JIS';
2965 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
2966 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\95\
\8e¦
2967 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
2968 StatusBar.Panels[THREADSIZE_PANEL].Width :=
2969 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
2970 //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«
2971 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
2972 if Thread.Repaint then begin
2973 Thread.Repaint := false;
2975 Thread.Browser.OnStatusTextChange := nil;
2976 LockWindowUpdate(Thread.Browser.ParentWindow);
2977 HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
2978 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
2979 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
2983 RefreshListView(ThreadItem);
2985 Screen.Cursor := crDefault;
2989 function TGikoForm.GetActiveContent(popup :Boolean = false): TThreadItem;
2992 if FActiveContent <> nil then begin
2993 Result := FActiveContent.Thread;
2995 (FResPopupBrowser <> nil) and (FResPopupBrowser.CurrentBrowser.Visible = True) then
2996 if (FResPopupBrowser.CurrentBrowser.Thread <> nil) then begin
2997 Result := FResPopupBrowser.CurrentBrowser.Thread;
3007 procedure TGikoForm.SetActiveList(Obj: TObject);
3011 // if FActiveList <> Obj then begin
3014 if ListView.Selected <> nil then
3015 idx := ListView.Selected.Index
3021 ListView.Items.Count := 0;
3022 ListView.Items.Clear;
3023 ListView.Selected := nil;
3024 // ListView.Columns.Clear;
3025 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
3026 and (FActiveContent.Thread.IsLogFile) then begin
3028 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
3030 on E: Exception do begin
3031 //
\83X
\83\8c\88ê
\97\97DL
\8cã
\82È
\82Ç
\82ÉFActiveContent
\82Ì
\8e\9d\82ÂThread
\82ª
3032 //
\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é
3033 ReleaseBrowser(FActiveContent);
3034 FActiveContent.Thread := nil;
3035 Self.Caption := GikoDataModule.CAPTION_NAME;
3039 Self.Caption := GikoDataModule.CAPTION_NAME;
3040 //Application.Title := CAPTION_NAME;
3042 // ActiveListColumnSave;
3044 Screen.Cursor := crHourGlass;
3046 if Obj is TBBS then begin
3047 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3048 end else if Obj is TCategory then begin
3049 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3050 end else if Obj is TBoard then begin
3051 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3054 Screen.Cursor := crDefault;
3057 if idx >= 0 then begin
3058 if idx >= ListView.Items.Count then
3059 idx := ListView.Items.Count - 1;
3060 ListView.ItemIndex := idx;
3061 ListView.ItemFocused := ListView.Items.Item[ idx ];
3067 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
3068 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
3069 function TGikoForm.GetActiveList: TObject;
3071 Result := FActiveList;
3074 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
3076 SetListViewType(AViewType, '', False);
3079 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
3084 for i := Length( BBSs ) - 1 downto 0 do begin
3085 BBSs[i].SelectText := SelectText;
3086 BBSs[i].KubetsuChk := KubetsuChk;
3088 ViewType := AViewType;
3089 if ActiveList is TBoard then begin
3090 Board := TBoard(ActiveList);
3092 //gvtAll: ListView.Items.Count := Board.Count;
3093 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
3094 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
3095 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
3096 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
3097 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
3101 SetActiveList(Board);
3105 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
3106 const ARect: TRect; var DefaultDraw: Boolean);
3112 if ListView.Items.Count = 0 then begin
3113 DefaultDraw := true;
3114 ListView.Canvas.Brush.Color := ListView.Color;
3115 ListView.Canvas.FillRect(ARect);
3119 ListView.Canvas.Font.Color := clWindowText;
3120 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3123 ListView.Canvas.Font.Color := clBlue;
3124 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';
3127 ListView.Canvas.Font.Color := clGreen;
3128 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3131 ListView.Canvas.Font.Color := clFuchsia;
3132 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';
3135 ListView.Canvas.Font.Color := clMaroon;
3136 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90¶
\91¶
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3139 ListView.Canvas.Font.Color := clNavy;
3140 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';
3141 if GetActiveList is TBoard then
3142 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
3150 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
3151 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
3152 ListView.Canvas.TextOut(p.X, p.Y, s);
3154 DefaultDraw := True;
3158 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
3160 Item: TDownloadItem;
3162 if not Board.IsThreadDatRead then
3163 GikoSys.ReadSubjectFile(Board);
3164 Item := TDownloadItem.Create;
3166 Item.Board := Board;
3167 Item.DownType := gdtBoard;
3168 Item.ForceDownload := ForceDownload;
3169 FControlThread.AddItem(Item);
3170 if FWorkCount = 0 then begin
3172 Animate.Active := True;
3175 Screen.Cursor := crAppStart;
3183 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
3185 Item: TDownloadItem;
3187 Item := TDownloadItem.Create;
3189 Item.ThreadItem := ThreadItem;
3190 Item.DownType := gdtThread;
3191 Item.ForceDownload := ForceDownload;
3192 FControlThread.AddItem(Item);
3193 if FWorkCount = 0 then begin
3195 Animate.Active := True;
3198 Screen.Cursor := crAppStart;
3206 procedure TGikoForm.PlaySound(SoundEventName: string);
3210 if not GikoSys.Setting.Mute then begin
3211 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
3212 if FileExists(FileName) then begin
3213 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
3214 sndPlaySound(nil, SND_SYNC);
3215 Application.ProcessMessages;
3217 sndPlaySound(PChar(FileName), SND_ASYNC);
3223 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
3224 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3226 FHistoryList.DeleteHistory( threadItem, TreeView, TreeType );
3229 procedure TGikoForm.ShowBBSTreeOld(
3237 FavoriteTreeView.Visible := False;
3238 FavoriteToolBar.Hide;
3239 TreeView.Visible := True;
3241 b := CabinetSelectPopupMenu.Items.Count - 1;
3242 for i := 0 to b do begin
3243 item := CabinetSelectPopupMenu.Items[ i ];
3244 if item is TBBSMenuItem then begin
3245 if TBBSMenuItem( item ).Data = inBBS then begin
3246 item.Checked := True;
3247 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3248 CabinetMenu.Items[ i ].Checked := True;
3249 GikoSys.Setting.CabinetIndex := i;
3253 item.Checked := False;
3254 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3255 CabinetMenu.Items[ i ].Checked := False;
3257 CabinetSelectToolButton.Caption := inBBS.Title;
3259 GikoDM.CabinetHistoryAction.Checked := False;
3260 GikoDM.CabinetFavoriteAction.Checked := False;
3262 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3263 FTreeType := gtt2ch;
3264 HistoryToolBar.Hide;
3265 FActiveBBS := inBBS;
3266 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3267 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3268 //?c???[??g?b?v?????I????
3269 if GetActiveList = nil then
3270 TreeView.Selected := TreeView.Items[0]
3272 for i := 0 to TreeView.Items.Count - 1 do begin
3273 if TreeView.Items[i].Data = GetActiveList then begin
3274 TreeView.Selected := TreeView.Items[i];
3278 TreeView.Selected := TreeView.Items[0]
3286 procedure TGikoForm.ShowBBSTree(
3295 FavoriteTreeView.Visible := False;
3296 FavoriteToolBar.Hide;
3297 TreeView.Visible := True;
3299 b := CabinetSelectPopupMenu.Items.Count - 1;
3300 for i := 0 to b do begin
3301 item := CabinetSelectPopupMenu.Items[ i ];
3302 if item is TBBSMenuItem then begin
3303 if TBBSMenuItem( item ).Data = inBBS then begin
3304 item.Checked := True;
3305 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3306 CabinetMenu.Items[ i ].Checked := True;
3307 GikoSys.Setting.CabinetIndex := i;
3311 item.Checked := False;
3312 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3313 CabinetMenu.Items[ i ].Checked := False;
3315 CabinetSelectToolButton.Caption := inBBS.Title;
3317 GikoDM.CabinetHistoryAction.Checked := False;
3318 GikoDM.CabinetFavoriteAction.Checked := False;
3320 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3321 or (not (CabinetPanel.Visible)) then begin
3322 FTreeType := gtt2ch;
3323 HistoryToolBar.Hide;
3324 FActiveBBS := inBBS;
3325 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3326 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3327 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3328 if GetActiveList = nil then begin
3330 TreeClick( TreeView.Items[0] );
3334 for i := 0 to TreeView.Items.Count - 1 do begin
3335 if TreeView.Items[i].Data = GetActiveList then begin
3336 TreeClick( TreeView.Items[i] );
3340 TreeClick( TreeView.Items[0] );
3348 procedure TGikoForm.ShowHistoryTree;
3353 if CabinetPanel.Visible then begin
3354 if FTreeType = gttHistory then begin
3355 CabinetVisible( False );
3356 GikoDM.CabinetHistoryAction.Checked := False;
3358 GikoDM.CabinetHistoryAction.Checked := True;
3361 CabinetVisible( True );
3362 GikoDM.CabinetHistoryAction.Checked := True;
3365 // BBS...BBS, History, Favorite
3366 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3368 FavoriteTreeView.Visible := False;
3369 TreeView.Visible := True;
3371 GikoDM.CabinetBBSAction.Checked := False;
3372 GikoDM.CabinetFavoriteAction.Checked := False;
3374 if FTreeType <> gttHistory then begin
3375 b := CabinetSelectPopupMenu.Items.Count - 1;
3376 for i := 0 to b do begin
3377 item := CabinetSelectPopupMenu.Items[ i ];
3378 if item is TBBSMenuItem then begin
3379 item.Checked := False;
3380 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3381 CabinetMenu.Items[ i ].Checked := False;
3385 FTreeType := gttHistory;
3386 HistoryToolBar.Show;
3387 FavoriteToolBar.Hide;
3388 FHistoryList.SetTreeNode( TreeView );
3389 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3393 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3395 ChangeEvent: TTVChangedEvent;
3396 ChangingEvent: TTVChangingEvent;
3400 if Item is TCategory then
3401 bbs := TCategory( Item ).ParenTBBS
3402 else if Item is TBoard then
3403 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3407 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3408 if Item <> FActiveList then begin
3410 ChangingEvent := nil;
3412 if not CallEvent then begin
3413 ChangeEvent := TreeView.OnChange;
3414 ChangingEvent := TreeView.OnChanging;
3417 if not CallEvent then begin
3418 TreeView.OnChange := nil;
3419 TreeView.OnChanging := nil;
3421 //Application.ProcessMessages;
3422 for i := 0 to TreeView.Items.Count - 1 do begin
3423 if TreeView.Items[i].Data = Item then begin
3424 TreeView.Items[i].Selected := True;
3426 TreeClick(TreeView.Items[i]);
3430 //Application.ProcessMessages;
3432 if not CallEvent then begin
3433 TreeView.OnChange := ChangeEvent;
3434 TreeView.OnChanging := ChangingEvent;
3439 if Item <> FActiveList then begin
3440 ActiveListColumnSave;
3441 if (Item is TBBS) or (Item is TCategory) then begin
3442 ListView.Columns.Clear;
3443 SetActiveList( Item );
3444 end else if Item is TBoard then begin
3445 if not TBoard( Item ).IsThreadDatRead then begin
3446 Screen.Cursor := crHourGlass;
3448 if not TBoard( Item ).IsThreadDatRead then
3449 GikoSys.ReadSubjectFile(TBoard( Item ));
3451 Screen.Cursor := crDefault;
3454 Sort.SetSortDate(Now());
3455 SetActiveList( Item );
3460 if Item is TBoard then begin // not TCategory
3461 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3462 if GikoSys.Setting.ListWidthState = glsMax then begin
3463 GikoDM.BrowserMinAction.Execute;
3464 if GikoForm.Visible then
3468 if GikoSys.Setting.ListHeightState = glsMax then begin
3469 GikoDM.BrowserMinAction.Execute;
3470 if GikoForm.Visible then
3477 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3478 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3480 listItem : TListItem;
3481 threadItem : TThreadItem;
3488 if not (GetActiveList is TBoard) then Exit;
3489 listItem := ListView.GetItemAt( X, Y );
3490 if listItem = nil then Exit;
3491 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3493 threadItem := TThreadItem(ListItem.Data);
3494 InsertBrowserTab(threadItem, False);
3495 if threadItem.IsLogFile then
3496 ListView.UpdateItems(listItem.Index, listItem.Index);
3500 //
\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Å
3501 if (ssDouble in Shift) then
3502 ListDoubleClick(Shift)
3510 Windows.ClientToScreen( ListView.Handle, pos );
3511 ListPopupMenu.Popup( pos.X, pos.Y );
3517 procedure TGikoForm.ListClick;
3519 ListItem: TListItem;
3520 ThreadItem: TThreadItem;
3522 if ListView.SelCount <> 1 then Exit;
3523 ListItem := ListView.Selected;
3524 if ListItem = nil then Exit;
3525 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3527 ThreadItem := TThreadItem(ListItem.Data);
3528 if ThreadItem.IsLogFile then begin
3529 InsertBrowserTab(ThreadItem);
3530 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3532 InsertBrowserTab(ThreadItem);
3535 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3536 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3537 if GikoSys.Setting.ListWidthState = glsMin then begin
3538 GikoDM.BrowserMaxAndFocusAction.Execute;
3541 if GikoSys.Setting.ListHeightState = glsMin then begin
3542 GikoDM.BrowserMaxAndFocusAction.Execute;
3548 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3550 ThreadItem: TThreadItem;
3553 shiftDown := (ssShift in Shift);
3555 if ListView.Selected = nil then Exit;
3557 if TObject(ListView.Selected.Data) is TCategory then begin
3558 SelectTreeNode(ListView.Selected.Data, True);
3559 end else if TObject(ListView.Selected.Data) is TBoard then begin
3560 SelectTreeNode(ListView.Selected.Data, True)
3561 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3562 Application.ProcessMessages;
3563 ThreadItem := TThreadItem(ListView.Selected.Data);
3564 DownloadContent(ThreadItem, shiftDown);
3566 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3567 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3568 if GikoSys.Setting.ListWidthState = glsMin then begin
3569 GikoDM.BrowserMaxAction.Execute;
3570 GikoDM.SetFocusForBrowserAction.Execute;
3573 if GikoSys.Setting.ListHeightState = glsMin then begin
3574 GikoDM.BrowserMaxAction.Execute;
3575 GikoDM.SetFocusForBrowserAction.Execute;
3582 procedure TGikoForm.BrowserMovement(const AName: string);
3584 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3585 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3586 and (FActiveContent <> nil) then begin
3587 FActiveContent.Move(AName);
3590 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
3591 procedure TGikoForm.BrowserMovement(scroll: Integer);
3593 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3594 and (FActiveContent <> nil) then begin
3595 FActiveContent.Move(scroll);
3598 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3600 if TObject(Node.Data) is TBBS then begin
3601 TBBS(Node.Data).NodeExpand := False;
3602 end else if TObject(Node.Data) is TCategory then begin
3603 TCategory(Node.Data).NodeExpand := False;
3604 end else if TObject(Node.Data) is TBoard then begin
3605 TBoard(Node.Data).NodeExpand := False;
3607 if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3608 TreeClick(TreeView.Selected);
3612 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3614 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3616 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3618 TreeSplitter.Visible := isVisible;
3619 CabinetPanel.Visible := isVisible;
3620 GikoDM.CabinetVisibleAction.Checked := isVisible;
3623 procedure TGikoForm.SelectListItem(List: TList);
3625 TmpListItem: TListItem;
3629 TmpListItem := ListView.Selected;
3630 while TmpListItem <> nil do begin
3631 List.Add(TmpListItem.Data);
3632 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3637 procedure TGikoForm.FormResize(Sender: TObject);
3640 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3641 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3643 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3644 if GikoSys.Setting.ListWidthState = glsMin then begin
3645 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3646 ViewPanel.Width := ThreadMainPanel.Width - 80;
3649 if GikoSys.Setting.ListHeightState = glsMin then begin
3650 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3651 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3655 FIsIgnoreResize := rtResizing;
3656 PostMessage( Handle, USER_RESIZED, 0, 0 );
3661 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3665 FTabHintIndex := -1;
3666 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3667 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3668 DeleteTab(i, BrowserTab.TabIndex);
3673 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3677 FTabHintIndex := -1;
3678 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3679 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3680 DeleteTab(i, BrowserTab.TabIndex);
3685 procedure TGikoForm.DeleteTab(index, selectIndex: Integer);
3687 browserRec : TBrowserRecord;
3691 browserRec := TBrowserRecord(BrowserTab.Tabs.Objects[index]);
3693 if browserRec.Browser <> nil then begin
3694 doc := browserRec.Browser.OleObject.Document;
3695 browserRec.Thread.ScrollTop := doc.Body.ScrollTop;
3698 browserRec.Thread.ScrollTop := 0;
3701 if(FActiveContent = browserRec) then
3702 FActiveContent := nil;
3703 if browserRec.Browser <> nil then begin
3704 j := FBrowsers.IndexOf(browserRec.Browser);
3706 FBrowsers.Move(j, BROWSER_COUNT - 1);
3709 BrowserTab.Tabs.BeginUpdate;
3711 GikoSys.Setting.LastCloseTabURL := browserRec.Thread.URL;
3713 if ( BrowserTab.Tabs.Count - 1 = index ) and
3714 ( BrowserTab.TabRect(index).Left
3715 <= BrowserTab.DisplayRect.Left ) then begin
3716 BrowserTab.ScrollTabs(-1);
3718 BrowserTab.Tabs.Delete(index);
3719 if selectIndex > index then begin
3720 BrowserTab.TabIndex := selectIndex - 1;
3722 if BrowserTab.Tabs.Count -1 >= selectIndex then
3723 BrowserTab.TabIndex := selectIndex
3725 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3728 BrowserTab.Tabs.EndUpdate;
3730 if BrowserTab.Tabs.Count = 0 then begin
3731 BrowserNullTab.Thread := nil;
3734 if(BrowserTab.TabIndex <> -1) and
3735 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3736 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
3737 ReleaseOldestBrowser;
3739 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3740 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3741 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3742 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3745 if( FActiveContent = nil) then
3746 BrowserTab.OnChange(nil);
3748 function TGikoForm.Hook(var Message: TMessage): Boolean;
3750 //
\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Ì
3751 //
\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ð
3755 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3757 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3761 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3763 bBoard, bCategory : Boolean;
3765 bBoard := (GetActiveList is TBoard);
3766 bCategory := (GetActiveList is TCategory);
3767 ItemRoundPMenu.Visible := bBoard;
3768 ItemReservPMenu.Visible := bBoard;
3769 LPMSep01.Visible := bBoard;
3770 ListRoundPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3771 ListReservPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3772 LPMSep02.Visible := bCategory or bBoard;
3773 KidokuPMenu.Visible := bBoard;
3774 MidokuPMenu.Visible := bBoard;
3775 UrlCopyPMenu.Visible := bCategory or bBoard;
3776 NameUrlCopyPMenu.Visible := bCategory or bBoard;
3777 AllSelectPMenu.Visible := bCategory or bBoard;
3778 LPMSep05.Visible := bCategory or bBoard;
3779 DeletePMenu.Visible := bBoard;
3780 LPMSep06.Visible := bCategory or bBoard;
3781 BoardFavoriteAddMenu.Visible := bCategory;
3782 ThreadFavoriteAddMenu.Visible := bBoard;
3783 SaveThreadFile.Visible := bBoard;
3784 AddRoundNameMenu(ItemReservPMenu);
3785 AddRoundNameMenu(ListReservPMenu);
3788 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3790 FClickNode := TreeView.Selected;
3791 if FClickNode = nil then begin
3792 TreeSelectThreadPupupMenu.Visible := False;
3793 TreeSelectBoardPupupMenu.Visible := False;
3794 TPMSep01.Visible := False;
3795 TreeSelectURLPupupMenu.Visible := False;
3796 TreeSelectNamePupupMenu.Visible := False;
3797 TreeSelectNameURLPupupMenu.Visible := False;
3798 TreeSelectFavoriteAddPupupMenu.Visible := False;
3799 TreeSelectLogDeleteSeparator.Visible := False;
3800 TreeSelectLogDeletePopupMenu.Visible := False;
3801 end else if TObject(FClickNode.Data) is TBoard then begin
3802 TreeSelectThreadPupupMenu.Visible := False;
3803 TreeSelectBoardPupupMenu.Visible := True;
3804 TPMSep01.Visible := True;
3805 TreeSelectURLPupupMenu.Visible := True;
3806 TreeSelectNamePupupMenu.Visible := True;
3807 TreeSelectNameURLPupupMenu.Visible := True;
3808 TreeSelectFavoriteAddPupupMenu.Visible := True;
3809 TreeSelectLogDeleteSeparator.Visible := False;
3810 TreeSelectLogDeletePopupMenu.Visible := False;
3811 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3812 TreeSelectThreadPupupMenu.Visible := False;
3813 TreeSelectBoardPupupMenu.Visible := True;
3814 TPMSep01.Visible := True;
3815 TreeSelectURLPupupMenu.Visible := True;
3816 TreeSelectNamePupupMenu.Visible := True;
3817 TreeSelectNameURLPupupMenu.Visible := True;
3818 TreeSelectFavoriteAddPupupMenu.Visible := True;
3819 TreeSelectLogDeleteSeparator.Visible := False;
3820 TreeSelectLogDeletePopupMenu.Visible := False;
3821 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3822 TreeSelectThreadPupupMenu.Visible := True;
3823 TreeSelectBoardPupupMenu.Visible := False;
3824 TPMSep01.Visible := True;
3825 TreeSelectURLPupupMenu.Visible := True;
3826 TreeSelectNamePupupMenu.Visible := True;
3827 TreeSelectNameURLPupupMenu.Visible := True;
3828 TreeSelectFavoriteAddPupupMenu.Visible := True;
3829 TreeSelectLogDeleteSeparator.Visible := True;
3830 TreeSelectLogDeletePopupMenu.Visible := True;
3831 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3832 TreeSelectThreadPupupMenu.Visible := True;
3833 TreeSelectBoardPupupMenu.Visible := False;
3834 TPMSep01.Visible := True;
3835 TreeSelectURLPupupMenu.Visible := True;
3836 TreeSelectNamePupupMenu.Visible := True;
3837 TreeSelectNameURLPupupMenu.Visible := True;
3838 TreeSelectFavoriteAddPupupMenu.Visible := True;
3839 TreeSelectLogDeleteSeparator.Visible := True;
3840 TreeSelectLogDeletePopupMenu.Visible := True;
3841 end else if (TObject(FClickNode.Data) is TCategory) then begin
3842 TreeSelectThreadPupupMenu.Visible := False;
3843 TreeSelectBoardPupupMenu.Visible := False;
3844 TPMSep01.Visible := False;
3845 TreeSelectURLPupupMenu.Visible := False;
3846 TreeSelectNamePupupMenu.Visible := True;
3847 TreeSelectNameURLPupupMenu.Visible := False;
3848 TreeSelectFavoriteAddPupupMenu.Visible := False;
3849 TreeSelectLogDeleteSeparator.Visible := False;
3850 TreeSelectLogDeletePopupMenu.Visible := False;
3851 end else if FClickNode.IsFirstNode then begin
3852 TreeSelectThreadPupupMenu.Visible := False;
3853 TreeSelectBoardPupupMenu.Visible := False;
3854 TPMSep01.Visible := False;
3855 TreeSelectURLPupupMenu.Visible := False;
3856 TreeSelectNamePupupMenu.Visible := True;
3857 TreeSelectNameURLPupupMenu.Visible := False;
3858 TreeSelectFavoriteAddPupupMenu.Visible := False;
3859 TreeSelectLogDeleteSeparator.Visible := False;
3860 TreeSelectLogDeletePopupMenu.Visible := False;
3862 TreeSelectThreadPupupMenu.Visible := False;
3863 TreeSelectBoardPupupMenu.Visible := False;
3864 TPMSep01.Visible := False;
3865 TreeSelectURLPupupMenu.Visible := False;
3866 TreeSelectNamePupupMenu.Visible := False;
3867 TreeSelectNameURLPupupMenu.Visible := False;
3868 TreeSelectFavoriteAddPupupMenu.Visible := False;
3869 TreeSelectLogDeleteSeparator.Visible := False;
3870 TreeSelectLogDeletePopupMenu.Visible := False;
3874 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
3875 var ppDisp: IDispatch; var Cancel: WordBool);
3884 threadItem: TThreadItem;
3885 aElement : IHTMLElement;
3886 senderBrowser : TWebBrowser;
3887 doc : IHTMLDocument2;
3890 Writeln(IntToStr(Integer(ppDisp)));
3894 if not( TObject(Sender) is TWebBrowser )then
3897 senderBrowser := TWebBrowser(Sender);
3898 doc := senderBrowser.ControlInterface.Document as IHTMLDocument2;
3899 if not Assigned(doc) then
3902 aElement := doc.activeElement;
3903 if not Assigned(aElement) then
3906 Text := aElement.Get_outerText;
3907 Html := aElement.Get_outerHTML;
3909 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
3910 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
3911 if GikoSys.Setting.ResAnchorJamp then begin
3913 Text := ZenToHan(Trim(Text));
3915 if(AnsiPos('>>', Text) = 1) then begin
3916 //Text := Copy(Text, 3, Length(Text) - 2);
3919 //Text := Copy(Text, 2, Length(Text) - 1);
3923 if AnsiPos('-', Text) <> 0 then begin
3924 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
3925 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
3926 wkIntTo := StrToIntDef(Text, 0);
3927 if wkIntTo < wkIntSt then
3930 wkIntSt := StrToIntDef(Text, 0);
3933 if wkIntSt <> 0 then begin
3934 FActiveContent.IDAnchorPopup('');
3935 MoveHisotryManager.pushItem(FActiveContent);
3936 if (Sender is TResPopupBrowser) then begin
3937 TResPopupBrowser(Sender).ChildClear;
3939 GetActiveContent(true),
3940 GetActiveContent(true).URL + '&st=' +
3941 IntToStr(wkIntSt) + '&to=' + IntToStr(wkIntSt));
3943 BrowserMovement(IntToStr(wkIntSt));
3948 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
3950 URL := GikoSys.GetHRefText(Html);
3951 URL := GikoSys.HTMLDecode(URL);
3952 if AnsiPos('BE:', URL) = 1 then begin
3953 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
3954 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
3955 threadItem := FActiveContent.Thread;
3956 if threadItem = nil then Exit;
3957 URL := BE_PHP_URL + BNum + '&u=d'
3958 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
3961 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
3962 ( AnsiPos('ftp://', URL) = 1) then begin
3963 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
3964 if GikoSys.Setting.LinkAddAddressBar then begin
3965 idx := AddressComboBox.Items.IndexOf(URL);
3966 if idx = -1 then begin
3967 AddressComboBox.Items.Insert(0, URL);
3968 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
3969 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
3971 AddressComboBox.Items.Delete(idx);
3972 AddressComboBox.Items.Insert(0, URL);
3975 if (Sender is TResPopupBrowser) then begin
3976 TResPopupBrowser(Sender).ChildClear
3979 MoveHisotryManager.pushItem(FActiveContent);
3986 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
3988 if Mouse.Capture <> 0 then
3990 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3991 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
3992 FBrowserSizeWidth := ViewPanel.Width;
3994 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
3995 FBrowserSizeHeight := ViewPanel.Height;
3997 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3998 if ViewPanel.Width < 2 then begin
3999 ViewPanel.Width := 1;
4000 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
4001 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
4002 GikoSys.Setting.ListWidthState := glsMax;
4003 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
4004 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
4005 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
4006 GikoSys.Setting.ListWidthState := glsMin;
4008 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
4009 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
4010 GikoSys.Setting.ListWidthState := glsNormal;
4013 if ViewPanel.Height < 2 then begin
4014 ViewPanel.Height := 1;
4015 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4016 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4017 GikoSys.Setting.ListHeightState := glsMax;
4018 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
4019 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4020 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4021 GikoSys.Setting.ListHeightState := glsMin;
4023 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4024 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4025 GikoSys.Setting.ListHeightState := glsNormal;
4028 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
4029 FBrowserSizeHeight := ViewPanel.Height
4030 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
4031 FBrowserSizeWidth := ViewPanel.Width;}
4034 procedure TGikoForm.BrowserTabChange(Sender: TObject);
4039 BrowserTab.Tabs.BeginUpdate;
4041 if not BrowserTab.Dragging then begin
4042 FTabHintIndex := -1;
4043 BrowserTab.Hint := '';
4044 idx := BrowserTab.TabIndex;
4045 if idx = -1 then begin
4046 SetContent(BrowserNullTab);
4048 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
4049 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
4050 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
4052 FBrowsers.Move(j ,0);
4054 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
4055 (FActiveContent.Browser <> BrowserNullTab.Browser) and
4056 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
4057 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4059 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
4060 ReleaseOldestBrowser;
4062 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
4063 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
4064 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4066 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
4067 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
4068 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4070 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
4071 AddressComboBox.Text := GetActiveContent.URL;
4073 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
4074 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
4077 GikoDM.SetFocusForBrowserAction.Execute;
4081 BrowserTab.Tabs.EndUpdate;
4086 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
4087 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
4093 if Button = mbMiddle then begin
4094 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
4097 p := BrowserTab.ScreenToClient(p);
4098 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
4100 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4101 end else if Button = mbLeft then begin
4102 FDragWFirst := true;
4103 FMouseDownPos.X := X;
4104 FMouseDownPos.Y := Y;
4109 procedure TGikoForm.SetBrowserTabState;
4111 CoolBand: TCoolBand;
4113 BrowserBottomPanel.AutoSize := False;
4114 if GikoSys.Setting.BrowserTabVisible then begin
4116 BrowserTab.Tabs.BeginUpdate;
4118 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
4119 BrowserTab.Style := tsTabs;
4120 if GikoSys.Setting.BrowserTabPosition = gtpTop then
4121 BrowserTab.TabPosition := tpTop
4123 BrowserTab.TabPosition := tpBottom;
4124 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
4125 BrowserTab.TabPosition := tpTop;
4126 BrowserTab.Style := tsButtons;
4128 BrowserTab.TabPosition := tpTop;
4129 BrowserTab.Style := tsFlatButtons
4132 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
4133 BrowserTab.Parent := BrowserTabToolBar;
4134 BrowserBottomPanel.Hide;
4135 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4136 if CoolBand <> nil then
4137 CoolBand.Visible := True;
4139 BrowserTab.Parent := BrowserBottomPanel;
4140 BrowserTab.Top := 0;
4141 BrowserTab.Left := 0;
4142 BrowserBottomPanel.Show;
4143 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4144 if CoolBand <> nil then
4145 CoolBand.Visible := False;
4148 BrowserTab.Tabs.EndUpdate;
4152 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4153 if CoolBand <> nil then
4154 CoolBand.Visible := False;
4155 BrowserBottomPanel.Visible := False;
4156 GikoDM.AllTabCloseAction.Execute;
4160 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
4161 Y: Integer; State: TDragState; var Accept: Boolean);
4165 idx := BrowserTab.IndexOfTabAt(X, Y);
4166 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
4169 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
4174 FDragWFirst := False;
4175 idx := BrowserTab.IndexOfTabAt(X, Y);
4177 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
4180 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
4181 Shift: TShiftState; X, Y: Integer);
4184 ThreadItem: TThreadItem;
4187 TabIdx := BrowserTab.IndexOfTabAt(x, y);
4189 if ( ssLeft in Shift ) then begin
4190 if (FDragWFirst) then begin
4191 BrowserTab.EndDrag(false);
4192 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
4195 BrowserTab.EndDrag(false);
4196 FDragWFirst := false;
4199 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
4200 Application.CancelHint;
4201 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
4202 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
4203 BrowserTab.Hint := ThreadItem.Title;
4204 Application.ShowHint := True;
4206 BrowserTab.Hint := '';
4207 Application.ShowHint := True;
4209 FTabHintIndex := TabIdx;
4214 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
4215 const pDisp: IDispatch; var URL: OleVariant);
4217 BrowserRecord :TBrowserRecord;
4219 doc : IHTMLDocument2;
4220 threadItem : TThreadItem;
4222 if TObject(Sender) is TWebBrowser then begin
4223 BrowserRecord := nil;
4224 if TWebBrowser(Sender) <> Browser then begin
4225 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4226 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
4227 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
4231 if BrowserRecord <> nil then begin
4232 if BrowserRecord.Event <> nil then
4233 BrowserRecord.Event.Free;
4234 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, BrowserRecord.Browser.ControlInterface.Document, HTMLDocumentEvents2);
4235 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4236 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4239 if GetActiveContent <> nil then begin
4240 if FEvent <> nil then
4242 FEvent := THTMLDocumentEventSink.Create(Self, Browser.ControlInterface.Document, HTMLDocumentEvents2);
4243 FEvent.OnContextMenu := OnDocumentContextMenu;
4244 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4246 if FEvent <> nil then begin
4254 if (BrowserRecord <> nil) and
4255 Assigned( BrowserRecord.Thread ) then begin
4256 threadItem := BrowserRecord.Thread;
4258 if (threadItem.JumpAddress > 0) then begin
4259 if threadItem.UnRead then begin
4260 threadItem.UnRead := False;
4262 RefreshListView(threadItem);
4264 //
\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®
4265 //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4266 if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4267 BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4268 threadItem.JumpAddress := 0;
4270 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4273 end else if threadItem.UnRead then begin
4274 threadItem.UnRead := False;
4276 BrowserRecord.Move('new');
4277 RefreshListView(threadItem);
4278 end else if threadItem.ScrollTop <> 0 then begin
4280 doc := BrowserRecord.Browser.ControlInterface.Document as IHTMLDocument2;
4281 (doc.body as IHTMLElement2).ScrollTop := threadItem.ScrollTop;
4284 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4289 LockWindowUpdate(0);
4292 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4294 AddRoundNameMenu(RoundNamePopupMenu.Items);
4297 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4303 Item := TMenuItem.Create(Self);
4304 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4305 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4307 Item := TMenuItem.Create(Self);
4308 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4309 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4311 Item := TMenuItem.Create(Self);
4312 Item.Caption := '-';
4314 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4315 Item := TMenuItem.Create(Self);
4316 Item.Caption := RoundList.RoundNameList[i];
4317 Item.OnClick := SetSelectRoundName;
4322 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4324 threadItem : TThreadItem;
4326 if ParentName <> 'dummy1' then begin
4327 SetSelectItemRound(RoundFlag, RoundName);
4329 threadItem := GetActiveContent;
4330 if threadItem <> nil then begin
4331 threadItem.RoundName := RoundName;
4333 RoundList.RoundNameList.Add(RoundName);
4334 threadItem.Round := RoundFlag;
4339 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4344 List := TList.Create;
4346 SelectListItem(List);
4347 for i := 0 to List.Count - 1 do begin
4348 if TObject(List[i]) is TBoard then begin
4349 TBoard(List[i]).RoundName := RoundName;
4351 RoundList.RoundNameList.Add(RoundName);
4352 TBoard(List[i]).Round := RoundFlag;
4353 end else if TObject(List[i]) is TThreadItem then begin
4354 if TThreadItem(List[i]).IsLogFile then begin
4355 TThreadItem(List[i]).RoundName := RoundName;
4357 RoundList.RoundNameList.Add(RoundName);
4358 TThreadItem(List[i]).Round := RoundFlag;
4367 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4369 MenuItem: TMenuItem;
4371 if Sender is TMenuItem then begin
4372 MenuItem := TMenuItem(Sender);
4373 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4378 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4383 if CoolBar = nil then
4385 for i := 0 to CoolBar.Bands.Count - 1 do begin
4386 if CoolBar.Bands[i].Control = Control then begin
4387 Result := CoolBar.Bands[i];
4393 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4395 if BrowserTab.Parent = BrowserTabToolBar then
4396 BrowserTab.Width := BrowserTabToolBar.Width;
4399 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4404 procedure TGikoForm.SetMenuFont;
4406 // GikoSys.MenuFont(MenuToolBar.Font);
4407 // MenuToolBar.Buttons[0].AutoSize := False;
4408 // MenuToolBar.Buttons[0].AutoSize := True;
4409 // MenuToolBar.Font.Color := clMenuText;
4410 GikoSys.MenuFont(MainCoolBar.Font);
4411 MenuToolBar.Buttons[0].AutoSize := False;
4412 MenuToolBar.Buttons[0].AutoSize := True;
4413 MainCoolBar.AutoSize := False;
4414 MainCoolBar.AutoSize := True;
4415 GikoSys.MenuFont(ListCoolBar.Font);
4416 GikoSys.MenuFont(BrowserCoolBar.Font);
4417 // MenuToolBar.Font.Color := clMenuText;
4420 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4424 if FavoriteDM.Modified then begin
4427 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4428 NewMenu := TMenuItem.Create(MainMenu);
4429 NewMenu.Action := GikoDM.FavoriteAddAction;
4430 FavoriteMenu.Add(NewMenu);
4431 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4432 NewMenu := TMenuItem.Create(FavoriteMenu);
4433 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4434 FavoriteMenu.Add(NewMenu);
4435 //
\83Z
\83p
\83\8c\81[
\83^
4436 FavoriteMenu.InsertNewLineAfter(NewMenu);
4437 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4438 FavoriteDM.Modified := false;
4442 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4445 NewMenu: array of TMenuItem;
4447 SetLength(NewMenu, Node.Count);
4448 Node := Node.getFirstChild;
4450 while ( Node <> nil ) do begin
4451 NewMenu[i] := TFavoriteMenuItem.Create(nil);
4452 NewMenu[i].AutoHotkeys := maAutomatic;
4453 NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4454 TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4456 if TObject(Node.Data) is TFavoriteFolder then begin
4457 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4458 CreateFavMenu(Node, NewMenu[i]);
4459 end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4460 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4461 NewMenu[i].OnClick := FavoriteClick;
4462 end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4463 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4464 NewMenu[i].OnClick := FavoriteClick;
4467 Node := Node.getNextSibling;
4469 MenuItem.Add(NewMenu);
4472 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4474 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';
4475 TitleAdd: String = '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á';
4477 Dlg : TFavoriteAddDialog;
4483 if Item is TFavoriteBoardItem then
4484 Item := TFavoriteBoardItem( Item ).Item
4485 else if Item is TFavoriteThreadItem then
4486 Item := TFavoriteThreadItem( Item ).Item;
4488 Node := FavoriteTreeView.Items.GetFirstNode;
4489 if Item is TBoard then begin
4490 ItemURL := TBoard( Item ).URL;
4491 while Node <> nil do begin
4493 if TObject( Data ) is TFavoriteBoardItem then begin
4494 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4495 if Application.MessageBox(PChar(MsgAdd) , PChar(TitleAdd), MB_YESNO ) = IDNO then
4500 Node := Node.GetNext;
4502 Dlg := TFavoriteAddDialog.Create(Self);
4504 Dlg.SetBoard( TBoard( Item ) );
4509 end else if Item is TThreadItem then begin
4510 ItemURL := TThreadItem( Item ).URL;
4511 while Node <> nil do begin
4513 if TObject( Data ) is TFavoriteThreadItem then begin
4514 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
4515 if Application.MessageBox( PChar(MsgAdd), PChar(TitleAdd), MB_YESNO ) = IDNO then
4520 Node := Node.GetNext;
4522 Dlg := TFavoriteAddDialog.Create(Self);
4524 Dlg.SetThreadItem( TThreadItem( Item ) );
4534 procedure TGikoForm.FavoriteClick(Sender: TObject);
4536 FavoriteClick( Sender, True );
4539 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4542 ThreadItem: TThreadItem;
4543 FavBoard: TFavoriteBoardItem;
4544 FavThread: TFavoriteThreadItem;
4548 if Sender is TFavoriteMenuItem then
4549 Item := TFavoriteMenuItem(Sender).Data
4550 else if Sender is TLinkToolButton then
4551 Item := TLinkToolButton(Sender).Data
4552 else if Sender is TTreeNode then
4553 Item := TTreeNode( Sender ).Data
4557 if TObject(Item) is TFavoriteBoardItem then begin
4558 FavBoard := TFavoriteBoardItem(Item);
4559 Board := FavBoard.Item;
4560 if Board <> nil then begin
4561 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4562 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4563 SelectTreeNode(Board, True);
4565 end else if TObject(Item) is TFavoriteThreadItem then begin
4566 FavThread := TFavoriteThreadItem(Item);
4567 ThreadItem := FavThread.Item;
4568 if ThreadItem = nil then
4571 InsertBrowserTab(ThreadItem, ActiveTab);
4573 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4574 if GikoSys.Setting.ListWidthState = glsMin then begin
4575 GikoDM.BrowserMaxAndFocusAction.Execute;
4578 if GikoSys.Setting.ListHeightState = glsMin then begin
4579 GikoDM.BrowserMaxAndFocusAction.Execute;
4585 procedure TGikoForm.BBSMenuItemOnClick(
4590 if Sender is TBBSMenuItem then
4591 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4595 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4597 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4600 //!
\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é)
4601 procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4603 stRes, edRes : Int64;
4604 browserRec : TBrowserRecord;
4605 threadNumber : String;
4606 doc : IHTMLDocument2;
4610 Thread.JumpAddress := 0;
4611 //
\83^
\83u
\82ð
\90¶
\90¬
4612 browserRec := InsertBrowserTab(Thread);
4613 if (browserRec <> nil) then begin
4614 // JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N
\82·
\82é
4615 threadNumber := ChangeFileExt(Thread.FileName, '');
4616 GikoSys.GetPopupResNumber( URL, stRes, edRes );
4617 //
\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
4618 if (StrToInt64(threadNumber) = stRes) then begin
4619 if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4620 and (Pos('&st=' + threadNumber , URL) = 0) then begin
4624 if ( stRes > 0 ) then begin
4625 Thread.JumpAddress := stRes;
4627 //
\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é
4628 if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4629 DownloadContent(Thread);
4630 end else if (not browserRec.Repaint) and (stRes > 0) then begin
4631 browserRec.Move(IntToStr(stRes));
4632 Thread.JumpAddress := 0;
4634 doc := browserRec.Browser.ControlInterface.Document as IHTMLDocument2;
4635 if Assigned(doc) then
4636 Thread.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
4643 procedure TGikoForm.MoveToURL(const inURL: string);
4645 protocol, host, path, document, port, bookmark : string;
4646 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4648 BBSID, BBSKey: string;
4649 {tmpBoard,} Board: TBoard;
4650 ThreadItem: TThreadItem;
4653 tmpThread : TThreadItem;
4654 shiftDown : Boolean;
4658 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4659 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4662 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4663 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4664 if shiftDown then begin
4665 GikoSys.OpenBrowser(inURL, gbtUserApp);
4667 end else if ctrlDown then begin
4668 GikoSys.OpenBrowser(inURL, gbtIE);
4672 //=====
\83v
\83\89\83O
\83C
\83\93
4675 bi := Length(BoardGroups) - 1;
4676 for i := 1 to bi do begin
4677 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4678 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4681 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4682 Board := BBSsFindBoardFromURL( boardURL );
4685 if Board = nil then begin
4687 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4688 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4691 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4692 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4693 ShowBBSTree( BBSs[ 1 ] );
4696 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4697 if not Board.IsThreadDatRead then begin
4698 GikoSys.ReadSubjectFile( Board );
4702 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4703 if ThreadItem = nil then begin
4704 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4705 ThreadItem := tmpThread;
4706 Board.Insert( 0, ThreadItem );
4707 if ActiveList is TBoard then begin
4708 if TBoard(ActiveList) = Board then
4709 ListView.Items.Count := ListView.Items.Count + 1;
4714 OpenThreadItem(ThreadItem, inURL);
4721 Board := BBSsFindBoardFromURL(
4722 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4724 if Board <> nil then begin
4725 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4726 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4727 SelectTreeNode( Board, True );
4735 // 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¢
4739 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4740 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4741 Board := BBSsFindBoardFromURL( boardURL );
4742 if Board = nil then begin
4743 //
\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
4744 GikoSys.OpenBrowser(inURL, gbtUserApp);
4747 //
\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é
4749 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4750 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4751 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4752 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4753 GikoSys.OpenBrowser(inURL, gbtUserApp);
4758 if not Board.IsThreadDatRead then
4759 GikoSys.ReadSubjectFile(Board);
4760 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4761 ThreadItem := Board.FindThreadFromURL( URL );
4762 //
\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)
4763 if ThreadItem = nil then begin
4764 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4767 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ª
\82È
\82¢
\82È
\82ç
\90¶
\90¬
\82·
\82é
\81B
4768 if ThreadItem = nil then begin
4769 ThreadItem := TThreadItem.Create( nil, Board, URL );
4770 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4771 Board.Insert(0, ThreadItem);
4772 if ActiveList is TBoard then begin
4773 if TBoard(ActiveList) = Board then
4774 ListView.Items.Count := ListView.Items.Count + 1;
4777 //
\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é
4778 if (not ThreadItem.IsLogFile) then begin
4779 if AnsiPos(Host, Board.URL) = 0 then
4780 ThreadItem.DownloadHost := Host
4782 ThreadItem.DownloadHost := '';
4784 OpenThreadItem(ThreadItem, inURL);
4788 Board := BBSsFindBoardFromURL( inURL );
4789 if Board = nil then begin
4790 GikoSys.OpenBrowser(inURL, gbtAuto);
4792 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4793 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4794 SelectTreeNode( Board, True );
4799 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4801 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4802 CoolBarResized( Sender, MainCoolBar );
4805 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4806 Shift: TShiftState);
4808 if Key = VK_RETURN then
4809 GikoDM.MoveToAction.Execute;
4812 procedure TGikoForm.BrowserEnter(Sender: TObject);
4814 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4817 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4819 CDS:PCopyDataStruct;
4823 CDS := Message.CopyDataStruct;
4824 GetMem(PC, CDS^.cbData);
4826 lstrcpy(PC,CDS^.lpData);
4827 SetString(sURL, PC,lstrlen(PC));
4832 Message.Result := 1;
4835 procedure TGikoForm.WndProc(var Message: TMessage);
4837 senderBrowser : TWebBrowser;
4843 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4846 if Message.WParam = SC_MINIMIZE then begin
4848 PostMessage(Handle, USER_MINIMIZED, 0, 0);
4851 TreeClick( TreeView.Selected );
4856 if (GikoSys.Setting.StoredTaskTray) then begin
4863 USER_DOCUMENTCOMPLETE:
4864 if (Message.WParam <> 0) and
4865 (TObject(Message.WParam) is TWebBrowser) then begin
4866 senderBrowser := TWebBrowser( Message.WParam );
4867 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
4870 if (TObject(Message.WParam) is TResPopupBrowser) then begin
4872 TResPopupBrowser( Message.WParam ).Clear;
4883 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
4888 //
\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Í
4889 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
4890 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
4891 if Msg.CharCode in [VK_BACK] then begin
4892 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4893 if Msg.KeyData > 0 then begin
4896 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4900 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
4901 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
4904 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4907 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
4908 if Msg.CharCode in [VK_BACK] then begin
4909 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4910 if Msg.KeyData > 0 then begin
4913 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4916 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
4919 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4923 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
4927 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
4932 PreviewTimer.Enabled := False;
4936 ARect := FPreviewBrowser.GetWindowRect(p);
4938 FPreviewBrowser.PreviewImage(FPreviewURL);
4940 if ARect.Bottom > Screen.DesktopHeight then begin
4941 OffsetRect(ARect, 0, -(ARect.Bottom - Screen.DesktopHeight));
4943 if (ARect.Right > Screen.DesktopWidth) then begin
4944 OffsetRect(ARect, -(ARect.Right - Screen.DesktopWidth), 0);
4946 if (ARect.Left < Screen.DesktopLeft) then begin
4947 OffsetRect(ARect, +(Screen.DesktopLeft - ARect.Left), 0);
4949 if (ARect.Top < Screen.DesktopTop) then begin
4950 OffsetRect(ARect, 0, (Screen.DesktopTop - ARect.Top));
4953 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST,
4954 ARect.Left, ARect.Top,
4955 (ARect.Right - ARect.Left), (ARect.Bottom - ARect.Top),
4956 SWP_NOACTIVATE or SWP_HIDEWINDOW);
4958 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
4959 FPreviewBrowserRect := ARect;
4962 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
4966 if PreviewTimer.Enabled then
4967 PreviewTimer.Enabled := False;
4969 //Window
\8aO
\82É
\88Ú
\93®
\82µ
\82½
\82Æ
\82«
\82Í
\8fÁ
\82¦
\82é
\82æ
\82¤
\82É
\82·
\82é
\82½
\82ß
\95\9c\8a\88
4970 if (FResPopupBrowser <> nil) and (IsWindowVisible(FResPopupBrowser.Handle)) then begin
4971 //
\89E
\83N
\83\8a\83b
\83N
\82Ì
\8e\9e\82Í
\8fÁ
\82³
\82È
\82¢
\82æ
\82¤
\82É
\8fð
\8c\8f\92Ç
\89Á
4972 if (Message.MouseMsg <> WM_RBUTTONUP) then begin
4973 FResPopupBrowser.Clear;
4977 if (FPreviewBrowser <> nil)
4978 and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
4979 //
\82±
\82±
\82Å
\8fÁ
\82³
\82ê
\82é
\82Ì
\82ª
\96â
\91è
4980 //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Å
\95\
\8e¦
\94Í
\88Í
\94»
\92è
\82Å
\82«
\82Ä
\82¢
\82é
\82Í
\82¸
4981 Pos := Mouse.CursorPos;
4982 Pos.X := Pos.X + Left;
4983 Pos.Y := Pos.Y + Top;
4984 if (FPreviewBrowserRect.Left > Pos.X) or
4985 (FPreviewBrowserRect.Right < Pos.X) or
4986 (FPreviewBrowserRect.Top > Pos.Y) or
4987 (FPreviewBrowserRect.Bottom < Pos.Y) then begin
4988 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
4992 Message.Result := 1;
4995 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
4997 GikoDM.MsgBarCloseAction.Execute;
5000 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
5002 doc: IHtmlDocument2;
5003 Range: IHTMLTxtRange;
5006 ThreadItem: TThreadItem;
5009 FactiveContent.IDAnchorPopup('');
5011 doc := FactiveContent.Browser.ControlInterface.Document as IHtmlDocument2;
5012 if not Assigned(doc) then
5015 Range := doc.selection.createRange as IHTMLTxtRange;
5016 if not Assigned(Range) then
5019 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
5020 s := ZenToHan(Trim(s));
5021 if GikoSys.IsNumeric(s) then begin
5022 Num := StrToInt64Def(s, -1);
5023 ThreadItem := GetActiveContent(true);
5024 if (ThreadItem <> nil) and (Num <= ThreadItem.Count)
5025 and (Num > 0)then begin
5026 CreateResPopupBrowser;
5027 FResPopupBrowser.CreateNewBrowser.PopupType := gptThread;
5028 HTMLCreater.SetResPopupText(FResPopupBrowser.CreateNewBrowser, ThreadItem, Num, Num, False, False);
5029 FResPopupBrowser.Popup;
5038 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
5040 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
5041 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
5043 if FTreeType = gttHistory then begin
5044 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
5045 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
5048 TreeView.Items.Clear;
5052 procedure TGikoForm.SetLinkBar;
5056 ToolButton: TLinkToolButton;
5057 MenuItem: TMenuItem;
5058 oldIgnoreResize : TResizeType;
5060 oldIgnoreResize := FIsIgnoreResize;
5061 FIsIgnoreResize := rtResizing;
5062 MainCoolBar.Bands.BeginUpdate;
5064 LinkBarPopupMenu.Items.Clear;
5065 for i := LinkToolBar.ButtonCount - 1 downto 0 do
5066 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
5067 LinkToolBar.Buttons[i].Free;
5068 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5069 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5070 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5071 ToolButton := TLinkToolButton.Create(LinkToolBar);
5072 // ToolButton.Parent := LinkToolBar;
5073 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
5074 MenuItem := TMenuItem.Create(Self);
5075 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
5076 LinkBarPopupMenu.Items.Add(MenuItem);
5077 ToolButton.MenuItem := MenuItem;
5078 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
5079 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
5080 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
5081 ToolButton.OnClick := FavoriteClick;
5082 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
5083 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
5084 ToolButton.OnClick := FavoriteClick;
5086 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
5087 ToolButton.Left := 10000;
5088 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
5089 ToolButton.AutoSize := True;
5090 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
5091 ToolButton.OnDragOver := FavoriteDragOver;
5092 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
5093 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
5094 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
5095 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
5096 //ToolButton.DragMode := dmAutomatic;
5097 ToolButton.DragMode := dmManual;
5098 ToolButton.PopupMenu := FavoriteTreePopupMenu;
5100 LinkToolBar.InsertControl(ToolButton);
5105 { if LinkToolBar.ButtonCount = 0 then begin
5106 ToolButton := TLinkToolButton.Create(LinkToolBar);
5107 ToolButton.Style := tbsButton;
5108 ToolButton.ImageIndex := -1;
5109 ToolButton.Caption := '';
5110 LinkToolBar.InsertControl(ToolButton);
5113 MainCoolBar.Bands.EndUpdate;
5114 LoadCoolBarSettings;
5115 FIsIgnoreResize := oldIgnoreResize;
5119 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5127 if Sender = FavoriteTreeView then begin
5128 Node := FavoriteTreeView.GetNodeAt(X, Y);
5133 bound := Node.DisplayRect( False );
5134 height := bound.Bottom - bound.Top;
5135 if (bound.Top + height / 2) <= Y then
5136 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
5141 if Node.IsFirstNode then
5146 if FDropSpaceNode <> nil then
5147 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
5150 if Change then begin
5151 if FDropSpaceNode <> nil then
5152 FDropSpaceNode.Free;
5154 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
5155 FDropSpaceNode.MoveTo( Node, naInsert );
5156 FDropSpaceNode.ImageIndex := -1;
5157 FDropSpaceNode.SelectedIndex := -1;
5161 if Source = FavoriteTreeView then begin
5162 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
5167 end else if Source = BrowserTab then
5169 else if Source = ListView then
5171 else if Source is TLinkToolButton then
5173 else if Source = TreeView then
5179 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5182 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
5185 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
5187 // FDragging := true;
5190 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
5192 SenderNode: TTreeNode;
5193 LinkToolButton: TLinkToolButton;
5196 LinkToolButton := TLinkToolButton( Sender );
5197 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5198 SenderNode.Selected := False;
5199 FavoriteDragDrop( SenderNode, Source );
5205 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5207 favButton : TLinkToolButton;
5208 favThreadItem : TFavoriteThreadItem;
5214 if Sender is TLinkToolButton then begin
5215 favButton := TLinkToolButton( Sender );
5216 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5217 favThreadItem := TFavoriteThreadItem( favButton.Data );
5218 if favThreadItem.Item <> nil then
5219 InsertBrowserTab( favThreadItem.Item, False );
5227 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5231 TToolButton( Sender ).DragMode := dmManual;
5232 if ssLeft in Shift then begin
5233 // 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)
5234 if FDragTime = 0 then begin
5235 FDragTime := GetTickCount();
5237 Now := GetTickCount();
5238 if (Now - FDragTime) > 500 then begin
5239 if FDragButton <> TToolButton( Sender ) then begin
5241 FDragButton := TToolButton( Sender );
5242 TToolButton(Sender).BeginDrag(false ,5);
5245 {$IF Defined(debug)}
5246 ShowMessage('Error');
5257 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5262 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5267 for i := 0 to ToolBar.ButtonCount - 1 do
5268 if ToolBar.Buttons[i].Visible then
5269 Result := Result + ToolBar.Buttons[i].Width;
5272 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5274 Control : TWinControl;
5277 Control := FindControl(BandInfo^.hwndChild);
5278 if Control = nil then
5281 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5282 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5283 idx := MainCoolBar.Bands[ i ].ID;
5287 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5288 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
5289 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5290 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5291 BandInfo^.cxMinChild := 0;
5292 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
5293 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5294 end else if Control = LinkToolBar then begin
5295 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5296 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5297 BandInfo^.cxMinChild := 0;
5298 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5299 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5300 end else begin // AddressToolBar
5301 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5302 BandInfo^.cxMinChild := 0;
5303 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5307 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5313 ChevronPopupMenu.Items.Clear;
5315 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5316 if MainCoolBar.Bands[ i ].Visible then begin
5317 if Idx = Int64(RebarChevron^.uBand) then begin
5324 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5325 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5327 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5328 ToolBarChevronMenu(StdToolBar);
5329 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5333 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5334 ChevronPopupMenu.Popup(p.x, p.y);
5338 procedure TGikoForm.MenuBarChevronMenu;
5339 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5345 for i := 0 to MenuItem.Count - 1 do begin
5347 if MenuItem[i] is TFavoriteMenuItem then begin
5348 Item := TFavoriteMenuItem.Create(Self);
5349 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5351 Item := TMenuItem.Create(Self);
5352 Item.Caption := MenuItem[i].Caption;
5353 Item.Action := MenuItem[i].Action;
5354 Item.ImageIndex := MenuItem[i].ImageIndex;
5355 Item.OnClick := MenuItem[i].OnClick;
5356 PopupItem.Add(Item);
5357 if MenuItem[i].Count > 0 then
5358 SetSubMenu(MenuItem[i], Item);
5367 ChevronPopupMenu.Items.Clear;
5368 ChevronPopupMenu.Images := MainMenu.Images;
5369 bw := GetWidthAllToolButton(MenuToolBar);
5370 if MenuToolBar.Width < bw then begin
5372 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5373 w := w + MenuToolBar.Buttons[i].Width;
5374 if MenuToolBar.Width <= w then begin
5375 Item := TMenuItem.Create(Self);
5376 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5377 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5378 ChevronPopupMenu.Items.Add(Item);
5379 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5385 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5386 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5391 if Assigned(PopupMenu.OnPopup) then
5392 PopupMenu.OnPopup(nil);
5393 for i := 0 to PopupMenu.Items.Count - 1 do begin
5395 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5396 Item := TFavoriteMenuItem.Create(Self);
5397 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5399 Item := TMenuItem.Create(Self);
5400 Item.Caption := PopupMenu.Items[i].Caption;
5401 Item.Action := PopupMenu.Items[i].Action;
5402 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5403 Item.OnClick := PopupMenu.Items[i].OnClick;
5404 PopupItem.Add(Item);
5413 ChevronPopupMenu.Items.Clear;
5414 ChevronPopupMenu.Images := ToolBar.HotImages;
5415 bw := GetWidthAllToolButton(ToolBar);
5416 if ToolBar.Width < bw then begin
5418 for i := 0 to ToolBar.ButtonCount - 1 do begin
5419 if ToolBar.Buttons[i].Visible then
5420 w := w + ToolBar.Buttons[i].Width;
5421 if ToolBar.Width <= w then begin
5422 if ToolBar.Buttons[i].Tag = 0 then begin
5423 Item := TMenuItem.Create(Self);
5424 if ToolBar.Buttons[i].Style = tbsSeparator then
5427 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5428 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5431 Item.Caption := ToolBar.Buttons[i].Caption;
5432 Item.Action := ToolBar.Buttons[i].Action;
5434 //Item.Visible := True;
5436 ChevronPopupMenu.Items.Add(Item);
5437 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5439 Item.OnClick := nil;
5440 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5448 procedure TGikoForm.LinkBarChevronMenu;
5453 Item: TFavoriteMenuItem;
5455 Button: TLinkToolButton;
5457 ChevronPopupMenu.Items.Clear;
5458 ChevronPopupMenu.Images := LinkToolBar.Images;
5459 bw := GetWidthAllToolButton(LinkToolBar);
5460 if LinkToolBar.Width < bw then begin
5462 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5463 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5464 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5465 w := w + LinkToolBar.Buttons[j].Width;
5466 if LinkToolBar.Width <= w then begin
5467 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5468 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5469 Item := TFavoriteMenuItem.Create(Self);
5470 if TObject(Button.Data) is TFavoriteFolder then begin
5471 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5472 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5473 Item.OnClick := FavoriteClick;
5474 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5475 Item.OnClick := FavoriteClick;
5477 Item.Data := Button.Data;
5478 Item.Caption := LinkToolBar.Buttons[j].Caption;
5479 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5480 ChevronPopupMenu.Items.Add(Item);
5491 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5492 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5493 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5495 \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É
5496 \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
5498 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5500 bandInfo : tagREBARBANDINFOA;
5501 pBandInfo : PReBarBandInfoA;
5508 pBandInfo := @bandInfo;
5509 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5510 bandInfo.cbSize := sizeof( bandInfo );
5511 bandInfo.hwndChild := h;
5512 bandInfo.cyMinChild := bar.Height;
5513 bar.OnBandInfo( nil, pBandInfo );
5514 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5516 for i := bar.Bands.Count - 1 downto 0 do begin
5517 if bar.Bands[ i ].Control.Handle = h then begin
5523 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5527 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5529 Control: TWinControl;
5532 Control := FindControl(BandInfo^.hwndChild);
5533 if Control = nil then
5536 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5537 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5538 idx := ListCoolBar.Bands[ i ].ID;
5542 if Control = ListToolBar then begin
5543 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5544 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5545 BandInfo^.cxMinChild := 0;
5546 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5547 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5549 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5550 BandInfo^.cxMinChild := 0;
5551 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5555 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5560 ChevronPopupMenu.Items.Clear;
5561 Idx := RebarChevron^.uBand;
5562 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5563 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5564 ToolBarChevronMenu(ListToolBar);
5567 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5568 ChevronPopupMenu.Popup(p.x, p.y);
5572 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5574 Control: TWinControl;
5577 Control := FindControl(BandInfo^.hwndChild);
5578 if Control = nil then
5581 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5582 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5583 idx := BrowserCoolBar.Bands[ i ].ID;
5587 if Control = BrowserToolBar then begin
5588 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5589 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5590 BandInfo^.cxMinChild := 0;
5591 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5592 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5594 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5595 BandInfo^.cxMinChild := 0;
5596 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5600 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5605 ChevronPopupMenu.Items.Clear;
5606 Idx := RebarChevron^.uBand;
5607 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5608 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5609 ToolBarChevronMenu(BrowserToolBar)
5612 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5613 ChevronPopupMenu.Popup(p.x, p.y);
5617 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5619 if Column^.iImage = -1 then begin
5620 Column^.mask := Column^.mask or LVCF_FMT;
5622 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5623 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5627 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5632 for i := bar.ButtonCount - 1 downto 0 do begin
5633 if bar.Buttons[ i ].Action = action then begin
5634 Result := bar.Buttons[ i ];
5640 procedure TGikoForm.SetToolBarPopup;
5643 aIEButton : TToolButton;
5644 aCabinetBBSButton : TToolButton;
5645 aResRangeButton : TToolButton;
5646 aThreadRangeButton: TToolButton;
5648 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5650 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5651 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5652 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5653 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5654 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5656 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5657 if aIEButton <> nil then
5658 aIEButton.DropdownMenu := BrowserPopupMenu;
5659 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5660 if aCabinetBBSButton <> nil then
5661 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5662 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5663 if aResRangeButton <> nil then
5664 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5665 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5666 if aThreadRangeButton <> nil then
5667 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5670 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5671 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5675 // browserPos : TPoint;
5679 Wnd := WindowFromPoint(Mouse.CursorPos);
5681 if WheelDelta > 0 then
5686 if (Wnd = BrowserTab.Handle) or
5687 (Wnd = BrowserTab.Parent.Handle) then begin
5688 BrowserTab.ScrollTabs(Delta);
5690 if FIsHandledWheel then begin
5691 FIsHandledWheel := False;
5694 FIsHandledWheel := True;
5695 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5696 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5698 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5706 procedure TGikoForm.SetSelectWord( const text : string );
5708 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5709 ClearThreadRengeAction;
5711 if Length( text ) = 0 then
5713 GikoDM.AllItemAction.Checked := True;
5714 SetListViewType( gvtAll )
5716 SetListViewType( gvtUser, text, false );
5720 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5723 SetSelectWord( SelectComboBox.Text );
5727 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5728 Shift: TShiftState);
5736 if Key = VK_Return then
5739 end else if Key = 229 then begin
5740 if GikoSys.Setting.UseUndecided then begin
5741 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5742 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5743 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5744 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5745 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5746 SetLength(Str, Len);
5747 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5748 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5749 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5751 Str := SelectComboBox.Text + Str;
5753 if (Length(Str) > 0) then begin
5757 end else if Length( SelectComboBox.Text ) = 0 then
5759 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5760 *
\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
5761 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5764 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5765 ClearThreadRengeAction;
5769 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
5770 procedure TGikoForm.ClearThreadRengeAction;
5772 //
\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é
5773 if GikoDM.AllItemAction.Checked then
5774 GikoDM.AllItemAction.Checked := False;
5775 if GikoDM.LogItemAction.Checked then
5776 GikoDM.LogItemAction.Checked := False;
5777 if GikoDM.NewItemAction.Checked then
5778 GikoDM.NewItemaction.Checked := False;
5779 if GikoDM.LiveItemAction.Checked then
5780 GikoDM.LiveItemAction.Checked := False;
5781 if GikoDM.ArchiveItemAction.Checked then
5782 GikoDM.ArchiveItemAction.Checked := False;
5786 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5791 if Length( SelectComboBox.Text ) = 0 then
5793 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5794 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5799 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5800 procedure TGikoForm.ModifySelectList;
5807 if not SelectComboBoxPanel.Visible then
5810 if Length( SelectComboBox.Text ) > 0 then
5812 oldText := SelectComboBox.Text;
5813 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5815 GikoSys.Setting.SelectTextList.Delete( idx );
5816 idx := SelectComboBox.Items.IndexOf( oldText );
5818 SelectComboBox.Items.Delete( idx );
5819 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5820 SelectComboBox.Items.Insert( 0, oldText );
5821 SelectComboBox.Text := oldText;
5829 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5830 Shift: TShiftState; X, Y: Integer);
5835 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5838 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5839 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5840 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5842 If w <= 50 Then Begin
5843 //
\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
5844 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
5845 pos.X := pos.X + (50 - w);
5847 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
5851 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
5852 //If SelectComboBox.Width <> w Then Begin
5853 If SelectComboBoxPanel.Width <> w Then Begin
5854 SelectComboBoxPanel.Width := w;
5855 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
5856 GikoSys.Setting.SelectComboBoxWidth := w;
5857 DraggingSelectComboBoxPosition := pos;
5859 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
5860 ResetBandInfo( ListCoolBar, ListToolBar );
5866 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
5867 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5871 IsDraggingSelectComboBox := True;
5874 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
5878 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
5879 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5881 IsDraggingSelectComboBox := False;
5885 procedure TGikoForm.StatusBarResize(Sender: TObject);
5887 StatusBar.Panels[1].Width := StatusBar.Width -
5888 StatusBar.Panels[0].Width -
5889 StatusBar.Panels[THREADSIZE_PANEL].Width -
5890 StatusBar.Panels[NGWORDNAME_PANEL].Width;
5892 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
5895 if (Length( SelectComboBox.Text ) = 0) or
5896 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
5898 SelectComboBox.Text := '';
5899 SelectComboBox.Color := clWindow;
5904 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
5907 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
5910 if TObject(SenderNode.Data) is TFavoriteFolder then
5911 SourceNode.MoveTo(SenderNode, naAddChild)
5913 SourceNode.MoveTo(SenderNode, naInsert);
5917 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
5921 FavoBoardItem: TFavoriteBoardItem;
5922 FavoThreadItem: TFavoriteThreadItem;
5924 ThreadItem: TThreadItem;
5927 if (SenderNode = nil) or (Source = nil) then
5930 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5931 FavNode := SenderNode.Parent
5933 FavNode := SenderNode;
5937 if Source is TBoard then begin
5938 Board := TBoard( Source );
5939 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
5940 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
5941 Node.ImageIndex := 15;
5942 Node.SelectedIndex := 15;
5943 end else if Source is TFavoriteBoardItem then begin
5944 FavoBoardItem := TFavoriteBoardItem( Source );
5945 Board := FavoBoardItem.Item;
5946 if Board <> nil then
5947 if not Board.IsThreadDatRead then
5948 GikoSys.ReadSubjectFile(Board);
5949 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
5950 Node.ImageIndex := 15;
5951 Node.SelectedIndex := 15;
5952 end else if Source is TThreadItem then begin
5953 ThreadItem := TThreadItem( Source );
5954 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5955 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5956 Node.ImageIndex := 16;
5957 Node.SelectedIndex := 16;
5958 end else if Source is TBrowserRecord then begin
5959 ThreadItem := TBrowserRecord( Source ).Thread;
5960 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5961 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5962 Node.ImageIndex := 16;
5963 Node.SelectedIndex := 16;
5964 end else if Source is TFavoriteThreadItem then begin
5965 FavoThreadItem := TFavoriteThreadItem( Source );
5966 ThreadItem := FavoThreadItem.Item;
5967 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
5968 Node.ImageIndex := 16;
5969 Node.SelectedIndex := 16;
5972 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5974 FavoriteMoveTo( SenderNode, Node );
5978 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
5981 SourceNode: TTreeNode;
5982 LinkToolButton: TLinkToolButton;
5985 if SenderNode = nil then
5988 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
5989 if FDropSpaceNode <> nil then
5990 SenderNode := FDropSpaceNode;
5992 if Source = FavoriteTreeView then begin
5993 SourceNode := FavoriteTreeView.Selected;
5994 FavoriteMoveTo( SenderNode, SourceNode );
5995 end else if Source is TLinkToolButton then begin
5996 LinkToolButton := TLinkToolButton( Source );
5997 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5998 FavoriteMoveTo( SenderNode, SourceNode );
5999 end else if Source = BrowserTab then begin
6000 idx := BrowserTab.TabIndex;
6001 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
6002 end else if Source = ListView then begin
6003 FavoriteAddTo( SenderNode, ListView.Selected.Data );
6004 end else if Source = TreeView then begin
6005 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
6009 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
6012 SenderNode: TTreeNode;
6015 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
6016 if SenderNode <> nil then begin
6017 FavoriteDragDrop( SenderNode, Source );
6020 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
6021 if FDropSpaceNode <> nil then begin
6023 FDropSpaceNode.Delete;
6025 FDropSpaceNode := nil;
6028 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6029 FavoriteDM.Modified := true;
6035 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
6036 Node: TTreeNode; var S: String);
6038 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6039 FavoriteDM.Modified := true;
6041 FavoriteTreeView.ReadOnly := True;
6046 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
6047 Shift: TShiftState);
6049 if not TTreeView(Sender).IsEditing then begin
6053 FClickNode := FavoriteTreeView.Selected;
6054 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
6058 FClickNode := FavoriteTreeView.Selected;
6059 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
6063 FavoriteClick( FavoriteTreeView.Selected );
6064 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
6068 FClickNode := FavoriteTreeView.Selected;
6069 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
6073 //
\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·
6074 if Key = VK_ESCAPE then begin
6075 if (TTreeView(Sender).Selected <> nil) then begin
6076 TTreeView(Sender).Selected.Text := FOrigenCaption;
6078 TTreeView(Sender).Selected.Focused := False;
6084 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
6087 LinkToolButton: TLinkToolButton;
6090 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
6092 FClickNode := FavoriteTreeView.Selected;
6094 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
6096 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
6097 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6098 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6099 FClickNode := FavoriteTreeView.Items[i];
6103 for i := 0 to FClickNode.Count - 1 do begin
6104 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
6105 FClickNode := FClickNode.Item[i];
6112 if FClickNode = nil then begin
6113 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6114 FavoriteTreeDeletePopupMenu.Visible := False;
6115 FavoriteTreeRenamePopupMenu.Visible := False;
6116 FavoriteTreeNewFolderPopupMenu.Visible := False;
6117 FavoriteTreeURLCopyPopupMenu.Visible := False;
6118 FavoriteTreeNameCopyPopupMenu.Visible := False;
6119 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6120 FavoriteTreeReloadPopupMenu.Visible := False;
6121 FavoriteTreeLogDeletePopupMenu.Visible := False;
6122 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6123 end else if FClickNode.IsFirstNode then begin
6124 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6125 FavoriteTreeDeletePopupMenu.Visible := False;
6126 FavoriteTreeRenamePopupMenu.Visible := False;
6127 FavoriteTreeNewFolderPopupMenu.Visible := True;
6128 FavoriteTreeURLCopyPopupMenu.Visible := False;
6129 FavoriteTreeNameCopyPopupMenu.Visible := False;
6130 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6131 FavoriteTreeReloadPopupMenu.Visible := False;
6132 FavoriteTreeLogDeletePopupMenu.Visible := False;
6133 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6134 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
6135 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6136 FavoriteTreeDeletePopupMenu.Visible := True;
6137 FavoriteTreeRenamePopupMenu.Visible := False;
6138 FavoriteTreeNewFolderPopupMenu.Visible := True;
6139 FavoriteTreeURLCopyPopupMenu.Visible := False;
6140 FavoriteTreeNameCopyPopupMenu.Visible := False;
6141 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6142 FavoriteTreeReloadPopupMenu.Visible := False;
6143 FavoriteTreeLogDeletePopupMenu.Visible := False;
6144 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6145 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
6146 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6147 FavoriteTreeDeletePopupMenu.Visible := True;
6148 FavoriteTreeRenamePopupMenu.Visible := True;
6149 FavoriteTreeNewFolderPopupMenu.Visible := True;
6150 FavoriteTreeURLCopyPopupMenu.Visible := False;
6151 FavoriteTreeNameCopyPopupMenu.Visible := True;
6152 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6153 FavoriteTreeReloadPopupMenu.Visible := False;
6154 FavoriteTreeLogDeletePopupMenu.Visible := False;
6155 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6156 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
6157 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6158 FavoriteTreeDeletePopupMenu.Visible := True;
6159 FavoriteTreeRenamePopupMenu.Visible := True;
6160 FavoriteTreeNewFolderPopupMenu.Visible := True;
6161 FavoriteTreeURLCopyPopupMenu.Visible := True;
6162 FavoriteTreeNameCopyPopupMenu.Visible := True;
6163 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6164 FavoriteTreeReloadPopupMenu.Visible := True;
6165 FavoriteTreeLogDeletePopupMenu.Visible := True;
6166 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6167 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
6168 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6169 FavoriteTreeDeletePopupMenu.Visible := True;
6170 FavoriteTreeRenamePopupMenu.Visible := True;
6171 FavoriteTreeNewFolderPopupMenu.Visible := True;
6172 FavoriteTreeURLCopyPopupMenu.Visible := True;
6173 FavoriteTreeNameCopyPopupMenu.Visible := True;
6174 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6175 FavoriteTreeReloadPopupMenu.Visible := True;
6176 FavoriteTreeLogDeletePopupMenu.Visible := False;
6177 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6179 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6180 FavoriteTreeDeletePopupMenu.Visible := False;
6181 FavoriteTreeRenamePopupMenu.Visible := False;
6182 FavoriteTreeNewFolderPopupMenu.Visible := False;
6183 FavoriteTreeURLCopyPopupMenu.Visible := False;
6184 FavoriteTreeNameCopyPopupMenu.Visible := False;
6185 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6186 FavoriteTreeReloadPopupMenu.Visible := False;
6187 FavoriteTreeLogDeletePopupMenu.Visible := False;
6188 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6193 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
6198 if not (TObject(node.Data) is TFavoriteFolder) then
6201 for i := 0 to node.Count - 1 do
6203 if TObject(node.Item[i].Data) is TFavoriteFolder then
6204 FavoriteBrowseFolder( node.Item[i] )
6205 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
6206 FavoriteClick( node.Item[i], False );
6210 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6216 for i := 0 to Node.Count - 1 do begin
6217 if Node.Item[i].Data = FindPointer then begin
6218 Result := Node.Item[i];
6220 end else if Node.Item[i].Count > 0 then begin
6221 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6222 if Found <> nil then begin
6233 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6237 SenderNode: TTreeNode;
6241 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6242 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6243 SenderNode := FavoriteTreeView.Items[i];
6247 SenderNode.Selected := False;
6249 FavoriteDragDrop( SenderNode, Source );
6254 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6255 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6257 if FDragWFirst = true then
6258 FDragWFirst := false;
6260 //
\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@
6261 if Button <> mbMiddle then begin
6262 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6263 if GikoSys.Setting.ListWidthState = glsMin then begin
6264 GikoDM.BrowserMaxAndFocusAction.Execute;
6267 if GikoSys.Setting.ListHeightState = glsMin then begin
6268 GikoDM.BrowserMaxAndFocusAction.Execute;
6274 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6275 Y: Integer; State: TDragState; var Accept: Boolean);
6278 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6282 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6286 if FDropSpaceNode <> nil then begin
6288 FDropSpaceNode.Delete;
6290 FDropSpaceNode := nil;
6292 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6293 FavoriteDM.Modified := true;
6299 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6301 if FListViewBackGroundColor <> value then begin
6302 FListViewBackGroundColor := value;
6303 ListView.Color := FListViewBackGroundColor;
6306 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6308 threadItem : TThreadItem;
6312 if FClickNode = nil then Exit;
6314 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6316 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6317 if threadItem = nil then
6319 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6321 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6323 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6324 if boardItem = nil then
6326 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6332 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6333 MousePos: TPoint; var Handled: Boolean);
6337 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6338 if BrowserTab.TabIndex <> idx then begin
6339 BrowserTab.TabIndex := idx;
6340 BrowserTab.OnChange(nil);
6344 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6346 ThreadItem: TThreadItem;
6352 boardPlugIn : TBoardPlugIn;
6354 if Number = 0 then Exit;
6355 ThreadItem := GetActiveContent(True);
6357 if ThreadItem <> nil then begin
6358 //if ThreadItem.IsBoardPlugInAvailable then begin
6359 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6360 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6361 //boardPlugIn := ThreadItem.BoardPlugIn;
6362 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6364 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6365 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6366 //
\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
6367 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6369 FileName := ThreadItem.FilePath;
6370 tmp := GikoSys.ReadThreadFile(FileName, Number);
6372 if tmp <> '' then begin
6373 THTMLCreate.DivideStrLine(tmp, @Res);
6375 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6376 if ReplaceTag then begin
6377 Header := CustomStringReplace(Header, '</b>', '',true);
6378 Header := CustomStringReplace(Header, '<b>', '',true);
6379 Header := CustomStringReplace(Header, '<br>', '',true);
6380 Header := DeleteFontTag(Header);
6382 //if ThreadItem.IsBoardPlugInAvailable then begin
6383 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6384 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6385 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6387 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6388 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6389 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6390 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6393 Body := CustomStringReplace(Body, '</a>', '',true);
6395 Body := HTMLCreater.DeleteLink(Body);
6396 if ReplaceTag then begin
6397 Body := CustomStringReplace(Body, '<', '<');
6398 Body := CustomStringReplace(Body, '>', '>');
6399 Body := CustomStringReplace(Body, '"', '"');
6400 Body := CustomStringReplace(Body, '&', '&');
6401 //Body := CustomStringReplace(Body, ' ', ' ');
6404 Header := Header + Body;
6406 Clipboard.SetTextBuf( PChar(Header) );
6412 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6414 AddRoundNameMenu(dummy1);
6415 AddMenuSameBoardThread;
6417 //!
\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Á
6418 procedure TGikoForm.AddMenuSameBoardThread;
6423 SameBoardThreadItem.Clear;
6424 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6425 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6426 if (FActiveContent.Thread.ParentBoard =
6427 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6428 //
\8e©
\95ª
\82Í
\8aO
\82·
6429 if FActiveContent.Thread <>
6430 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6431 Item := TMenuItem.Create(Self);
6432 Item.Caption := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.Title;
6433 Item.OnClick := SameBoardThreadSubItemOnClick;
6434 SameBoardThreadItem.Add(Item);
6438 //
\89½
\82à
\96³
\82¢
\82È
\82ç
\8eg
\97p
\82Å
\82«
\82È
\82¢
\82æ
\82¤
\82É
\82·
\82é
6439 SameBoardThreadItem.Enabled := SameBoardThreadItem.Count > 0;
6441 //!
\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
6442 procedure TGikoForm.SameBoardThreadSubItemOnClick(Sender: TObject);
6445 MenuItem: TMenuItem;
6447 if Sender is TMenuItem then begin
6450 MenuItem := TMenuItem(Sender);
6451 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6452 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6453 if (FActiveContent.Thread.ParentBoard =
6454 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6455 if FActiveContent.Thread <>
6456 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6457 if (SameBoardThreadItem.Items[j] = MenuItem) then begin
6458 MoveToURL( TBrowserRecord(BrowserTab.Tabs.Objects[i])
6470 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6472 FavoriteDM.URLReplace(oldURLs, newURLs);
6475 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6477 RoundList.URLReplace(oldURLs, newURLs);
6480 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6482 Filename = 'tab.sav';
6483 bFilename = '~tab.sav';
6489 oldBoardName: string;
6491 newBoardName: string;
6492 TabList: TStringList;
6495 if oldURLs.Count <> newURLs.Count then begin
6498 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6499 TabList := TStringList.Create;
6501 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6503 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6504 //
\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
6505 for i := 0 to oldURLs.Count - 1 do begin
6506 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6507 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6508 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6509 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6510 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6511 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6513 for j := 0 to TabList.Count - 1 do begin
6514 tempString := TabList[j];
6515 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6516 tempString := StringReplace(tempString, oldHost, newHost,[]);
6517 TabList[j] := tempString;
6521 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6523 if FileExists( GikoSys.GetAppDir + Filename) then begin
6524 if FileExists( GikoSys.GetAppDir + bFilename) then
6525 DeleteFile(GikoSys.GetAppDir + bFilename);
6527 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6528 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6531 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6539 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6540 procedure TGikoForm.OnMinimize;
6542 doc: IHTMLDocument2;
6544 if FActiveContent <> nil then begin
6545 FIsMinimize := mtMinimizing;
6546 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6547 if Assigned(doc) then begin
6548 FActiveContent.Thread.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
6553 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6554 procedure TGikoForm.OnMinimized;
6556 FIsMinimize := mtMinimized;
6560 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6562 CoolBarResized( Sender, BrowserCoolBar );
6565 // *************************************************************************
6566 // ExternalBoardPlugInMain
6567 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6568 // *************************************************************************
6569 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6572 boardPlugIn : TBoardPlugIn;
6575 if not (Sender is TMenuItem) then
6578 item := TMenuItem( Sender );
6579 if not Assigned( Pointer( item.Tag ) ) then
6582 //
\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·
6583 boardPlugIn := TBoardPlugIn( item.Tag );
6584 boardPlugIn.PlugInMenu( item.Handle );
6587 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6588 procedure TGikoForm.TreeClick( Node : TTreeNode );
6594 if FTreeType = gttHistory then begin
6596 if TObject( Node.Data ) is TFavoriteThreadItem then
6597 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6598 FavoriteClick( Node );
6601 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6602 if ActiveList = Node.Data then
6605 ActiveListColumnSave;
6607 if TObject(Node.Data) is TBBS then begin
6608 SetActiveList(Node.data);
6609 end else if TObject(Node.Data) is TCategory then begin
6610 SetActiveList(Node.data);
6611 end else if TObject(Node.Data) is TBoard then begin
6612 if not TBoard(Node.Data).IsThreadDatRead then begin
6613 Screen.Cursor := crHourGlass;
6615 if not TBoard(Node.Data).IsThreadDatRead then
6616 GikoSys.ReadSubjectFile(Node.Data);
6618 Screen.Cursor := crDefault;
6621 Sort.SetSortDate(Now());
6622 SetActiveList(Node.data);
6625 if TObject( Node.Data ) is TBoard then begin // not TCategory
6626 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6627 if GikoSys.Setting.ListWidthState = glsMax then begin
6628 GikoDM.BrowserMinAction.Execute;
6629 if GikoForm.Visible then
6633 if GikoSys.Setting.ListHeightState = glsMax then begin
6634 GikoDM.BrowserMinAction.Execute;
6635 if GikoForm.Visible then
6643 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6644 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6647 ThreadItem : TThreadItem;
6648 shiftDown : Boolean;
6651 if Node = nil then Exit;
6653 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6655 if FTreeType = gtt2ch then begin
6656 if not (TObject(Node.Data) is TBoard) then Exit;
6657 Board := TBoard(Node.Data);
6658 DownloadList(Board, shiftDown);
6659 end else if FTreeType = gttHistory then begin
6660 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6661 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6662 DownloadContent(ThreadItem, shiftDown);
6666 // *************************************************************************
6667 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82ÌKeyDown
\83C
\83x
\83\93\83g
6668 // *************************************************************************
6669 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6670 Shift: TShiftState);
6672 if Key = VK_BACK then begin
6673 // UpFolderButtonClick(Sender);
6674 end else if Key = VK_SPACE then begin
6675 TreeDoubleClick( TreeView.Selected );
6676 end else if Key = VK_RETURN then begin
6677 TreeClick( TreeView.Selected );
6678 //
\97\9a\97ð
\82Ì
\8fê
\8d\87\81A
\8fÁ
\82³
\82ê
\82Ä
\82¢
\82é
\82Ì
\82Å
\83`
\83F
\83b
\83N
\82·
\82é
6679 if (TreeView.Selected <> nil) then begin
6680 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6684 //!
\82¨
\8bC
\82É
\93ü
\82è
\82ÌMouseDown
\83C
\83x
\83\93\83g
6685 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6686 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6688 favItem : TTreeNode;
6689 favThreadItem : TFavoriteThreadItem;
6695 if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6696 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6697 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6698 rect := FavoriteTreeView.Selected.DisplayRect(true);
6699 //
\83A
\83C
\83R
\83\93\95ª
\8d¶
\82É
\82¸
\82ç
\82·
6700 if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
6701 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6702 if ssDouble in Shift then begin
6703 FClickNode := FavoriteTreeView.Selected;
6704 GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6708 TObject(FavoriteTreeView.Selected));
6715 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6716 if favItem = nil then Exit;
6718 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6719 favThreadItem := TFavoriteThreadItem( favItem.Data );
6720 if favThreadItem.Item <> nil then
6721 InsertBrowserTab( favThreadItem.Item, False );
6728 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6731 if FIsIgnoreResize <> rtNone then
6734 if GikoSys.Setting.ListOrientation = gloVertical then begin
6735 if GikoSys.Setting.ListHeightState = glsMin then begin
6736 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6737 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6743 procedure TGikoForm.OnResized;
6745 doc : IHTMLDocument2;
6747 FOldFormWidth := Width;
6748 FIsIgnoreResize := rtNone;
6753 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6754 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6759 //
\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)
6760 if FActiveContent <> nil then begin
6761 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6762 (doc.body as IHTMLElement2).ScrollTop := FActiveContent.Thread.ScrollTop;
6764 FIsMinimize := mtNone;
6769 // *************************************************************************
6770 //!
\83X
\83\8c\83b
\83h
\83u
\83\89\83E
\83U
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6771 // *************************************************************************
6772 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6775 doc : IHTMLDocument2;
6776 FOleInPlaceActiveObject: IOleInPlaceActiveObject;
6779 stlist : TStringList;
6783 if not Assigned(FActiveContent) then
6785 if not Assigned(FActiveContent.Browser) then
6789 FOleInPlaceActiveObject := FActiveContent.Browser.ControlInterface as IOleInPlaceActiveObject;
6790 FOleInPlaceActiveObject.OnFrameWindowActivate(True);
6793 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6794 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6796 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6797 if not Assigned(doc) then
6800 e := doc.elementFromPoint(p.x, p.y);
6801 if not Assigned(e) then
6804 if (e.className = 'date') or (e.id = 'date') then begin
6806 if AnsiPos('id', AnsiLowerCase(AID)) > 0 then begin
6807 AID := Copy(AID, AnsiPos('id', AnsiLowerCase(AID)) - 1, 11);
6808 if AnsiPos(' be:', AnsiLowerCase(AID)) > 0 then begin
6809 AID := Copy(AID, 1, AnsiPos(' BE:', AnsiLowerCase(AID)) - 1)
6812 stlist := TStringList.Create;
6814 stList.DelimitedText := AID;
6816 for i := 0 to stList.Count - 1 do begin
6817 if Length(WideString(stList[i])) = 8 then begin
6818 if GikoSys.NotDateorTimeString(stList[i]) then begin
6828 ShowSameIDAncher(AID);
6833 procedure TGikoForm.ShowSameIDAncher(const AID: String);
6837 numbers : TStringList;
6840 numbers := TStringList.Create;
6843 GikoSys.GetSameIDRes(AID, FActiveContent.Thread, numbers);
6845 if not (GikoSys.Setting.LimitResCountMessage) then begin
6847 end else if (numbers.Count > LIMIT) then begin
6848 if (GikoUtil.MsgBox(Handle,
6849 IntToStr(LIMIT) + '
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6850 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6851 MB_YESNO or MB_ICONQUESTION) = ID_YES) then begin
6855 FActiveContent.IDAnchorPopup(
6856 GikoSys.CreateSameIDResAnchor(numbers, FActiveContent.Thread, limited));
6861 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
6862 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
6864 SelectTimer.Interval := 0;
6865 if not (ListView.Selected = nil) then
6866 if( FActiveContent = nil) or
6867 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
6872 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
6873 procedure TGikoForm.ActiveListColumnSave;
6875 ActivListObj : TObject;
6876 i, id, idx : Integer;
6877 BBSOrder : TGikoBBSColumnList;
6878 CategoryOrder : TGikoCategoryColumnList;
6879 BoardOrder : TGikoBoardColumnList;
6882 ActivListObj := ActiveList;
6883 if ActivListObj is TBBS then begin
6884 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6885 BBSOrder := TGikoBBSColumnList.Create;
6887 for i := 0 to ListView.Columns.Count - 1 do begin
6888 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6889 idx := ListView.Column[ i ].Tag;
6890 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
6891 BBSOrder.Add( TGikoBBSColumnID( id ) );
6892 //
\95\9d\82Ì
\95Û
\91¶
6893 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
6895 for i := 0 to ListView.Columns.Count - 1 do
6896 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6897 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
6901 end else if ActivListObj is TCategory then begin
6902 //=====
\94Â
\83\8a\83X
\83g =====
6903 CategoryOrder := TGikoCategoryColumnList.Create;
6905 for i := 0 to ListView.Columns.Count - 1 do begin
6906 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6907 idx := ListView.Column[ i ].Tag;
6908 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
6909 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
6910 //
\95\9d\82Ì
\95Û
\91¶
6911 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
6913 for i := 0 to ListView.Columns.Count - 1 do
6914 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6915 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
6919 end else if ActivListObj is TBoard then begin
6920 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6921 BoardOrder := TGikoBoardColumnList.Create;
6923 for i := 0 to ListView.Columns.Count - 1 do begin
6924 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6925 idx := ListView.Column[ i ].Tag;
6926 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
6927 BoardOrder.Add( TGikoBoardColumnID( id ) );
6928 //
\95\9d\82Ì
\95Û
\91¶
6929 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
6931 for i := 0 to ListView.Columns.Count - 1 do
6932 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6933 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
6941 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
6942 Column: TListColumn; Point: TPoint);
6948 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
6949 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
6950 ListColumnPopupMenu.Items.Items[ i ].Free;
6952 //
\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¢)
6953 if TObject( FActiveList ) is TBBS then begin
6955 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6956 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
6957 item := TMenuItem.Create( ListColumnPopupMenu );
6958 item.Caption := GikoBBSColumnCaption[ i ];
6960 item.OnClick := ListColumnPopupMenuOnClick;
6961 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
6962 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
6963 item.Checked := True;
6967 ListColumnPopupMenu.Items.Add( item );
6970 end else if TObject( FActiveList ) is TCategory then begin
6972 //=====
\94Â
\83\8a\83X
\83g =====
6973 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
6974 item := TMenuItem.Create( ListColumnPopupMenu );
6975 item.Caption := GikoCategoryColumnCaption[ i ];
6977 item.OnClick := ListColumnPopupMenuOnClick;
6978 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
6979 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
6980 item.Checked := True;
6984 ListColumnPopupMenu.Items.Add( item );
6987 end else if TObject( FActiveList ) is TBoard then begin
6989 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6990 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
6991 item := TMenuItem.Create( ListColumnPopupMenu );
6992 item.Caption := GikoBoardColumnCaption[ i ];
6994 item.OnClick := ListColumnPopupMenuOnClick;
6995 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
6996 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
6997 item.Checked := True;
7001 ListColumnPopupMenu.Items.Add( item );
7006 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
7007 Point := ListView.ClientToScreen( Point );
7008 if ListColumnPopupMenu.Items.Count > 0 then
7009 ListColumnPopupMenu.Popup( Point.X, Point.Y );
7013 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
7014 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
7021 if not (Sender is TMenuItem) then
7024 ActiveListColumnSave;
7025 item := TMenuItem( Sender );
7027 if TObject( FActiveList ) is TBBS then
7028 orderList := GikoSys.Setting.BBSColumnOrder
7029 else if TObject( FActiveList ) is TCategory then
7030 orderList := GikoSys.Setting.CategoryColumnOrder
7031 else if TObject( FActiveList ) is TBoard then
7032 orderList := GikoSys.Setting.BoardColumnOrder
7036 if item.Checked then begin
7037 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
7038 for i := orderList.Count - 1 downto 0 do begin
7039 if Integer( orderList[ i ] ) = item.Tag then begin
7040 orderList.Delete( i );
7045 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
7046 orderList.Add( Pointer( item.Tag ) );
7049 SetActiveList( FActiveList );
7053 procedure TGikoForm.OnGestureStart(Sender: TObject);
7058 procedure TGikoForm.OnGestureMove(Sender: TObject);
7065 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
7067 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
7068 s := MouseGesture.GetGestureStr;
7070 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7071 if Action <> nil then
7072 ActStr := '
\81i' + Action.Caption + '
\81j';
7073 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
7074 StatusBar.Panels[1].Text := s;
7077 procedure TGikoForm.OnGestureEnd(Sender: TObject);
7082 s := MouseGesture.GetGestureStr;
7084 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7085 if Action <> nil then
7087 StatusBar.Panels[1].Text := '';
7090 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
7091 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
7093 ThreadItem: TThreadItem;
7095 DefaultDraw := true;
7096 if TObject(Item.Data) is TThreadItem then begin
7097 ThreadItem := TThreadItem(Item.Data);
7098 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
7099 ListView.Canvas.Brush.Color := FOddColor;
7100 //
\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
7101 if (GikoSys.Setting.UnFocusedBold) and
7102 (Item.Selected) and (not ListView.Focused) then begin
7103 ListView.Canvas.Font.Style := [fsBold];
7106 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
7109 if ThreadItem.UnRead then
7110 ListView.Canvas.Font.Style := [fsBold];
7115 procedure TGikoForm.FormActivate(Sender: TObject);
7117 if GikoSys.Setting.GestureEnabled then begin
7118 GikoSys.Setting.Gestures.ClearGesture;
7119 GikoSys.Setting.Gestures.LoadGesture(
7120 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
7121 MouseGesture.UnHook;
7122 MouseGesture.OnGestureStart := OnGestureStart;
7123 MouseGesture.OnGestureMove := OnGestureMove;
7124 MouseGesture.OnGestureEnd := OnGestureEnd;
7125 MouseGesture.SetHook(Handle);
7127 //MouseGesture.UnHook;
7128 MouseGesture.OnGestureStart := nil;
7129 MouseGesture.OnGestureMove := nil;
7130 MouseGesture.OnGestureEnd := nil;
7134 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
7136 if (FIsMinimize <> mtMinimizing) then begin
7137 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
7138 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
7142 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
7147 affectedBand : TCoolBand;
7150 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
7151 FIsIgnoreResize := rtResizing;
7152 PostMessage( Handle, USER_RESIZED, 0, 0 );
7154 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
7155 if CoolBar = MainCoolBar then begin
7156 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
7157 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7158 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7159 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7160 GikoSys.Setting.MainCoolSet[i] := CoolSet;
7162 end else if CoolBar = ListCoolBar then begin
7163 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
7164 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7165 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7166 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7167 GikoSys.Setting.ListCoolSet[i] := CoolSet;
7169 end else if CoolBar = BrowserCoolBar then begin
7170 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
7171 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7172 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7173 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7174 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
7177 if not (Sender is TToolBar) or (CoolBar = nil) then
7179 toolbar := TToolBar( Sender );
7180 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
7181 affectedBand := nil;
7182 for i := CoolBar.Bands.Count - 1 downto 0 do begin
7183 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
7184 band := CoolBar.Bands[ i ];
7185 if band.Break or (i = 0) then begin
7186 if i + 1 < CoolBar.Bands.Count then
7187 if not CoolBar.Bands[ i + 1 ].Break then
7188 affectedBand := CoolBar.Bands[ i + 1 ];
7191 affectedBand := CoolBar.Bands[ i - 1 ];
7196 //
\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·
7197 if CoolBar = MainCoolBar then begin
7198 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
7199 coolSet.FCoolWidth := toolbar.Width + 25;
7200 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
7201 if affectedBand <> nil then begin
7202 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
7203 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7204 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
7206 end else if CoolBar = ListCoolBar then begin
7207 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
7208 coolSet.FCoolWidth := toolbar.Width + 25;
7209 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
7210 if affectedBand <> nil then begin
7211 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
7212 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7213 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
7215 end else if CoolBar = BrowserCoolBar then begin
7216 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
7217 coolSet.FCoolWidth := toolbar.Width + 25;
7218 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
7219 if affectedBand <> nil then begin
7220 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
7221 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7222 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
7229 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
7231 CoolBarResized( Sender, MainCoolBar );
7234 procedure TGikoForm.ListToolBarResize(Sender: TObject);
7236 CoolBarResized( Sender, ListCoolBar );
7239 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
7241 CoolBarResized( Sender, BrowserCoolBar );
7244 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
7245 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
7247 doc : IHTMLDocument2;
7248 ThreadItem : TThreadItem;
7249 ReadList : TStringList;
7250 wordCount : TWordCount;
7252 if not Assigned(FActiveContent) then
7254 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7255 if not Assigned(doc) then
7258 ThreadItem := GetActiveContent(True);
7259 ReadList := TStringList.Create;
7260 wordCount := TWordCount.Create;
7262 ThreadItem.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
7263 {$IFDEF SPAM_FILTER_ENABLED}
7264 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7265 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7266 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
7267 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7268 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7270 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7271 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7276 FActiveContent.Repaint := true;
7277 if ThreadItem <> nil then
7278 InsertBrowserTab( ThreadItem, True );
7280 //
\93¯
\88êID
\82ðNG
\83\8f\81[
\83h
\82É
\93o
\98^
7281 procedure TGikoForm.AddIDtoNGWord(invisible : boolean);
7283 doc : IHTMLDocument2;
7284 ThreadItem : TThreadItem;
7286 {$IFDEF SPAM_FILTER_ENABLED}
7288 ReadList : TStringList;
7289 wordCount : TWordCount;
7291 id, dateStr: String;
7293 No := KokoPopupMenu.Tag;
7294 if No = 0 then Exit;
7295 ThreadItem := GetActiveContent(True);
7296 if ThreadItem = nil then Exit;
7298 id := GikoSys.GetResID(No, ThreadItem);
7299 if (id <> '') and (not IsNoValidID(id)) then begin
7300 //
\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Á
7301 DateTimeToString(dateStr, 'yyyymmdd', Now);
7302 id := id + #9'>>add ' + dateStr + ',' + ThreadItem.Title;
7303 if (GikoSys.FAbon.AddToken(id, invisible)) then begin
7304 GikoSys.FAbon.ReLoadFromNGwordFile;
7305 FActiveContent.Repaint := True;
7308 ShowMessage('ID
\82ð
\8eæ
\93¾
\82Å
\82«
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B');
7310 {$IFDEF SPAM_FILTER_ENABLED}
7311 body := TStringList.Create;
7313 GikoSys.GetSameIDRes(id, ThreadItem, body);
7314 ReadList := TStringList.Create;
7315 wordCount := TWordCount.Create;
7317 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7318 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7319 for i := 0 to body.Count - 1 do begin
7320 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7321 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7322 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7332 if (FActiveContent.Repaint) then begin
7333 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7335 if not Assigned(doc) then
7337 ThreadItem.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
7338 if ThreadItem <> nil then
7339 InsertBrowserTab( ThreadItem, True );
7343 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
7344 procedure TGikoForm.IndividualAbonID(Atype : Integer);
7346 ThreadItem : TThreadItem;
7349 ReadList : TStringList;
7350 wordCount : TWordCount;
7352 No := KokoPopupMenu.Tag;
7353 if No = 0 then Exit;
7354 ThreadItem := GetActiveContent(True);
7355 if ThreadItem = nil then Exit;
7356 body := TStringList.Create;
7358 GikoSys.GetSameIDRes(No, ThreadItem, body);
7360 ReadList := TStringList.Create;
7361 wordCount := TWordCount.Create;
7363 ThreadItem.ScrollTop := FActiveContent.Browser.OleObject.Document.Body.ScrollTop;
7364 {$IFDEF SPAM_FILTER_ENABLED}
7365 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7366 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7368 for i := 0 to body.Count - 1 do begin
7369 {$IFDEF SPAM_FILTER_ENABLED}
7370 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7371 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7372 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7374 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7375 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7381 FActiveContent.Repaint := true;
7382 if ThreadItem <> nil then
7383 InsertBrowserTab( ThreadItem, True );
7390 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7392 firstElement: IHTMLElement;
7393 doc: IHTMLDocument2;
7396 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7397 if Assigned(doc) then
7398 firstElement := doc.all.item('idSearch', 0) as IHTMLElement;
7399 if Assigned(firstElement) then
7400 if firstElement.style.visibility <> 'hidden' then
7401 firstElement.style.visibility := 'hidden';
7406 procedure TGikoForm.RepaintAllTabsBrowser();
7409 ThreadItem: TThreadItem;
7411 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7412 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7414 ThreadItem := GetActiveContent;
7415 if ThreadItem <> nil then
7416 InsertBrowserTab( ThreadItem, True );
7420 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7421 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7422 Shift: TShiftState);
7424 //
\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Ì
7425 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7426 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7427 SelectTimer.Interval := 0;
7428 if not (GikoSys.Setting.BrowserTabVisible) then begin
7429 if (GetActiveList is TBoard) then begin
7430 //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
7431 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7432 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7433 (Key = VK_UP) or (Key = VK_DOWN)) then
7434 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7438 // *************************************************************************
7439 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7440 // *************************************************************************
7441 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7442 Node: TTreeNode; var AllowEdit: Boolean);
7444 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7445 FOrigenCaption := Node.Text;
7447 // *************************************************************************
7448 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7449 // *************************************************************************
7450 function TGikoForm.GetMainForm(): TComponent;
7452 Result := Application.MainForm;
7454 // *************************************************************************
7455 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7456 // *************************************************************************
7457 function TGikoForm.GetScreenCursor(): TCursor;
7459 Result := Screen.Cursor;
7461 // *************************************************************************
7462 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7463 // *************************************************************************
7464 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7466 if (Screen.Cursor <> Cursor) then
7467 Screen.Cursor := Cursor;
7469 // *************************************************************************
7470 //!
\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
7471 // *************************************************************************
7472 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7474 //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Ì
7475 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7476 if GikoDM.CabinetVisibleAction.Enabled then begin
7477 GikoDM.CabinetVisibleAction.Execute;
7480 // *************************************************************************
7481 //!
\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
7482 // *************************************************************************
7483 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7485 if GikoDM.FavoriteArrangeAction.Enabled then begin
7486 GikoDM.FavoriteArrangeAction.Execute;
7489 // *************************************************************************
7490 //!
\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
7491 // *************************************************************************
7492 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7493 var Handled: Boolean);
7497 //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ß
7498 if Self.Active then begin
7500 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7501 WM_KEYFIRST..WM_KEYLAST :
7503 //
\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ç
7504 if (Msg.message <> WM_KEYUP)
7505 and (Msg.message <> WM_CHAR)
7506 and (Msg.message <> WM_SYSKEYUP) then begin
7507 wmMsg.Msg := Msg.message;
7508 wmMsg.CharCode := Word(Msg.wParam);
7509 wmMsg.KeyData := Msg.lParam;
7510 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7511 Self.OnShortCut(wmMsg, Handled);
7516 // Explorer
\82ÌD&D
\82ð
\8eó
\82¯
\82é
\82Æ
\82Ì
\94ñ
\83A
\83N
\83e
\83B
\83u
7517 if Msg.message = WM_DROPFILES then begin
7518 AcceptDropFiles(Msg);
7523 // *************************************************************************
7524 //!
\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
7525 // *************************************************************************
7526 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7528 Application.ProcessMessages;
7529 if not Application.Terminated then begin
7530 if PreviewTimer.Enabled then
7531 PreviewTimer.Enabled := False;
7532 //
\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
7533 if (FResPopupBrowser <> nil) then
7534 FResPopupBrowser.Clear;
7536 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7537 if FPreviewBrowser <> nil then
7538 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7542 // *************************************************************************
7543 //!
\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
7544 // *************************************************************************
7545 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7550 if (Sender <> nil) then begin
7551 s := ' [' + Sender.ClassName + ']' + #13#10;
7553 s := ' [ Sender is nil ] ' + #13#10;
7556 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7558 // *************************************************************************
7559 //!
\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¬
7560 // *************************************************************************
7561 procedure TGikoForm.CreateControlThread();
7563 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7564 FControlThread := TThreadControl.Create(True);
7565 FControlThread.MaxThreadCount := 1;
7566 FControlThread.Resume;
7567 FControlThread.OnDownloadEnd := DownloadEnd;
7568 FControlThread.OnDownloadMsg := DownloadMsg;
7569 FControlThread.OnWork := Work;
7570 FControlThread.OnWorkBegin := WorkBegin;
7571 FControlThread.OnWorkEnd := WorkEnd;
7573 // *************************************************************************
7574 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7575 // *************************************************************************
7576 procedure TGikoForm.CreateBrowsers(count: Integer);
7579 newBrowser: TWebBrowser;
7581 BrowserNullTab := TBrowserRecord.Create;
7582 BrowserNullTab.Browser := Browser;
7583 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7585 FBrowsers := TList.Create;
7587 for i := 0 to count -1 do begin
7588 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7589 newBrowser := FBrowsers[FBrowsers.Count - 1];
7590 TOleControl(newBrowser).Parent := BrowserPanel;
7591 TOleControl(newBrowser).Align := alNone;
7592 TOleControl(newBrowser).Left := 0;
7593 TOleControl(newBrowser).Top := 0;
7594 newBrowser.RegisterAsDropTarget := False;
7595 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7596 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7597 newBrowser.OnEnter := BrowserEnter;
7598 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7599 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7600 newBrowser.Navigate(BLANK_HTML);
7601 ShowWindow(newBrowser.Handle, SW_HIDE);
7602 GikoSys.ShowRefCount('Browser' + IntToStr(i), newBrowser.ControlInterface);
7603 GikoSys.ShowRefCount('Document' + IntToStr(i), newBrowser.ControlInterface.Document);
7605 BrowserNullTab.Browser.BringToFront;
7606 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7608 //
\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Ì
7609 //
\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Å
7610 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7611 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7612 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7613 Application.ProcessMessages;
7616 // *************************************************************************
7617 //!
\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é
7618 // *************************************************************************
7619 procedure TGikoForm.SetSelectComboBox();
7621 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7624 ToolButton: TToolButton;
7626 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7627 SelectComboBoxPanel.Visible := False;
7629 for i := ListToolBar.ControlCount - 1 downto 0 do
7631 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7633 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7634 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7635 SelectComboBoxPanel.Parent := ListToolBar;
7636 SelectComboBoxPanel.Visible := True;
7638 SelectComboBox.Left := 0;
7639 SelectComboBox.Top := 0;
7640 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7641 SelectComboBox.Width := SelectComboBoxPanel.Width -
7642 SelectComboBoxSplitter.Width;
7644 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7645 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7646 if ToolButton = nil then begin
7647 ToolButton := TToolButton.Create(ListToolBar);
7648 ToolButton.Name := DUMMYCOMPNAME;
7650 ToolButton.Style := tbsSeparator;
7651 ToolButton.Width := 0;
7652 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7653 ListToolBar.InsertControl(ToolButton);
7654 ToolButton.Visible := False;
7656 //
\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·
7657 if (i + 1) < ListToolBar.ControlCount then
7658 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7659 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7660 ListToolBar.Controls[ i + 1 ].Visible := False;
7663 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7664 ListToolBar.Controls[ i ].Visible := False;
7672 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\83}
\83E
\83X
\83_
\83E
\83\93\83C
\83x
\83\93\83g
7673 procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7674 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7681 if (TreeView.Selected <> nil) and
7682 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7683 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
7684 rect := TreeView.Selected.DisplayRect(true);
7685 //
\83A
\83C
\83R
\83\93\95ª
\82¾
\82¯
\8d¶
\82É
\82¸
\82ç
\82·
7686 if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
7687 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7688 //
\83N
\83\8a\83b
\83N
\82Æ
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82ð
\83R
\83R
\82Å
\94»
\92è
7689 if ssDouble in Shift then begin
7690 TreeDoubleClick( TreeView.Selected );
7692 TreeClick(TreeView.Selected);
7699 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
7700 procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7704 if ActionList <> nil then begin
7705 SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7707 for i := 0 to ActionList.ActionCount - 1 do begin
7709 FActionListGroupIndexes[i] :=
7710 TCustomAction(ActionList.Actions[i]).GroupIndex;
7711 TCustomAction(ActionList.Actions[i]).GroupIndex
7714 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7720 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
7721 procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7725 if ActionList <> nil then begin
7726 if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7727 for i := 0 to ActionList.ActionCount - 1 do begin
7729 TCustomAction(ActionList.Actions[i]).GroupIndex
7730 := FActionListGroupIndexes[i];
7732 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7738 //!
\82±
\82Ì
\83\8c\83X
\82ÌURL
\8eæ
\93¾
7739 procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
7743 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
7744 procedure TGikoForm.RefreshListView(Thread: TThreadItem);
7746 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
7747 if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin
7752 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
7753 MousePos: TPoint; var Handled: Boolean);
7756 coolBar: TGikoCoolBar;
7759 if (Sender <> nil) and (Sender is TGikoCoolBar) then begin
7760 coolBar := TGikoCoolBar(Sender);
7761 if (coolBar = MainCoolBar) then begin
7762 FToolBarSettingSender := tssMain;
7763 end else if (coolBar = ListCoolBar) then begin
7764 FToolBarSettingSender := tssList;
7765 end else if (coolBar = BrowserCoolBar) then begin
7766 FToolBarSettingSender := tssBrowser;
7768 FToolBarSettingSender := tssNone;
7770 pos := coolBar.ClientToScreen( MousePos );
7771 MainCoolBarPopupMenu.Popup( pos.X, pos.Y );
7776 procedure TGikoForm.TaskTrayIconMessage(var Msg: TMsg);
7780 //
\8d¶
\83N
\83\8a\83b
\83N
\82È
\82ç
\95\9c\8c³
\82·
\82é
7781 if (Msg.wParam = WM_LBUTTONUP) then begin
7783 end else if (Msg.wParam=WM_RBUTTONUP) then begin
7784 //
\89E
\83N
\83\8a\83b
\83N
\82È
\82ç
\8fI
\97¹
\82·
\82é
7786 SetForegroundWindow ( Self.Handle );
7787 TaskTrayPopupMenu.Popup ( p.X, p.Y );
7790 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
7791 procedure TGikoForm.StoredTaskTray;
7794 if (FIconData.uID = 0) then begin
7795 FIconData.cbSize := SizeOf(TNotifyIconData);
7796 FIconData.uID := Self.Handle;
7797 FIconData.Wnd := Handle;
7798 FIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
7799 FIconData.uCallbackMessage := USER_TASKTRAY;
7800 FIconData.hIcon := Application.Icon.Handle; {
\83A
\83C
\83R
\83\93\8ew
\92è}
7801 FIconData.szTip := '
\83M
\83R
\83i
\83r'; {
\83q
\83\93\83g
\95¶
\8e\9a\97ñ}
7802 Shell_NotifyIcon(NIM_ADD, @FIconData);
7803 ShowEditors(SW_HIDE);
7804 ShowWindow(Self.Handle, SW_HIDE);
7809 //!
\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¦
7810 procedure TGikoForm.UnStoredTaskTray;
7814 Shell_NotifyIcon(NIM_DELETE, @FIconData);
7815 SetForegroundWindow(Application.Handle);
7820 // Action
\82©
\82ç
\8ai
\94[
\82µ
\82½
\82Æ
\82«
\82ÍTag
\82Ì
\92l
\82Í0
\88È
\8aO
7821 if (GikoDM.StoredTaskTrayAction.Tag = 0) then begin
7822 ShowWindow(Self.Handle, SW_RESTORE);
7824 ShowWindow(Self.Handle, SW_SHOW);
7826 ShowEditors(SW_SHOW);
7827 GikoDM.StoredTaskTrayAction.Tag := 0;
7831 \brief
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
7832 \param nCmdShow Windows.ShowWindow
\82É
\91\97\82é
\83p
\83\89\83\81\81[
\83^
\82Æ
\93¯
\82¶
7834 procedure TGikoForm.ShowEditors(nCmdShow: Integer);
7838 //
\83\8c\83X
\83G
\83f
\83B
\83^
\82ð
\92T
\82·
7839 for i := 0 to Screen.CustomFormCount - 1 do begin
7840 if TObject(Screen.CustomForms[i]) is TEditorForm then
7841 ShowWindow(Screen.CustomForms[i].Handle, nCmdShow);
7845 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83u
\83\89\83E
\83U
\8dì
\90¬
7846 procedure TGikoForm.CreateResPopupBrowser;
7848 if (FResPopupBrowser = nil) then begin
7849 FResPopupBrowser := TResPopupBrowser.Create(BrowserPanel);
7852 //! ListView
\82ÌD&D
\8eó
\82¯
\8eæ
\82è
7853 procedure TGikoForm.AcceptDropFiles(var Msg: TMsg);
7855 FileName: Array[0..MAX_PATH] of Char;
7859 datList: TStringList;
7862 //
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\94Â
\82Ì
\82Æ
\82«
\88È
\8aO
\82Í
\8b\91\94Û
7863 if GetActiveList is TBoard then begin
7864 Board := TBoard(GetActiveList);
7865 if MsgBox(Handle, Board.Title
7866 + '
\94Â
\82É
\93ü
\82ê
\82Ä
\82¢
\82¢
\82Å
\82·
\82©
\81H', '
\83M
\83R
\83i
\83r', MB_YESNO or MB_ICONQUESTION) = IDYES then begin
7867 //
\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
7868 datList := TStringList.Create;
7870 Cnt := DragQueryFile(Msg.WParam, $FFFFFFFF, FileName, SizeOf(FileName));
7871 for K := 0 to Cnt - 1 do begin
7872 DragQueryFile(Msg.WParam, K, FileName, SizeOf(FileName));
7873 // 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
7874 //
\83t
\83@
\83C
\83\8b\82Ì
\83`
\83F
\83b
\83N
7875 if (isValidFile(FileName)) then begin
7876 LogFolder := ExtractFilePath(Board.FilePath);
7877 if (FileExists( LogFolder + ExtractFileName(FileName))) then begin
7878 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);
7880 if (not DirectoryExists(LogFolder)) then begin
7881 if (not GikoSys.ForceDirectoriesEx(LogFolder) ) then begin
7882 GikoUtil.MsgBox(Handle, LogFolder + '
\82Ì
\90¶
\90¬
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7885 if (not Windows.CopyFile(FileName, PChar(LogFolder + ExtractFileName(FileName)), true)) then begin
7886 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);
7888 datList.Add(ExtractFileName(FileName));
7893 DragFinish(Msg.WParam);
7894 if (datList.Count > 0) then begin
7895 GikoSys.AddOutofIndexDat(Board, datList, False);
7896 ShowMessage(IntToStr(datList.Count) + '
\8cÂ
\82Ìdat
\83t
\83@
\83C
\83\8b\82ª
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82µ
\82½
\81B' );
7897 if GikoForm.TreeView.Visible then
7898 GikoForm.TreeView.Refresh;
7899 if GikoForm.ListView.Visible then
7900 GikoForm.ListView.Refresh;
7902 ShowMessage('
\88ê
\82Â
\82à
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B' );
7910 ShowMessage('
\94Â
\82ð
\95\
\8e¦
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
7914 //!
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
7915 function TGikoForm.isValidFile(FileName: String) : boolean;
7920 //
\91¶
\8dÝ
\82·
\82é
\82©
\81A
\8ag
\92£
\8eqdat
\81A
\83t
\83@
\83C
\83\8b\96¼
7921 if ( not FileExists(FileName) ) then begin
7923 GikoUtil.MsgBox(Handle, FileName + '
\82Í
\91¶
\8dÝ
\82µ
\82Ü
\82¹
\82ñ
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7924 end else if (ExtractFileExt(ExtractFileName(FileName)) <> '.dat' ) then begin
7926 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);
7928 //
\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
7930 dt := GikoSys.GetCreateDateFromName(FileName);
7931 if ((UnixToDateTime(ZERO_DATE) + OffsetFromUTC) = dt) then begin
7933 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);
7937 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);
7942 procedure TGikoForm.ResPopupClearTimerTimer(Sender: TObject);
7944 ResPopupClearTimer.Enabled := False;
7945 if ResPopupClearTimer.Tag = 0 then begin
7946 FResPopupBrowser.Clear;
7948 FResPopupBrowser.CurrentBrowser.ChildClear;