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;
423 UpdateGikonaviAction1: TMenuItem;
425 procedure FormCreate(Sender: TObject);
426 procedure FormDestroy(Sender: TObject);
427 procedure SaveSettingAll();
428 procedure BrowserStatusTextChange(Sender: TObject;
429 const Text: WideString);
430 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
431 procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
432 var AllowChange: Boolean);
433 procedure ListViewKeyDown(Sender: TObject; var Key: Word;
435 procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
436 procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
437 Button: TToolButton; State: TCustomDrawState;
438 var DefaultDraw: Boolean);
439 procedure BrowserBeforeNavigate2(Sender: TObject;
440 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
441 Headers: OleVariant; var Cancel: WordBool);
442 procedure TreeViewCustomDraw(Sender: TCustomTreeView;
443 const ARect: TRect; var DefaultDraw: Boolean);
444 procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
445 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
446 procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
447 procedure ListViewCustomDraw(Sender: TCustomListView;
448 const ARect: TRect; var DefaultDraw: Boolean);
449 procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
450 Shift: TShiftState; X, Y: Integer);
451 procedure TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
452 procedure MessageListViewResize(Sender: TObject);
453 procedure CabinetVisible( isVisible : Boolean );
454 procedure FormResize(Sender: TObject);
455 procedure ListPopupMenuPopup(Sender: TObject);
456 procedure TreePopupMenuPopup(Sender: TObject);
457 procedure BrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
458 var Cancel: WordBool);
459 procedure ListSplitterMoved(Sender: TObject);
460 procedure BrowserTabChange(Sender: TObject);
461 procedure BrowserTabMouseDown(Sender: TObject; Button: TMouseButton;
462 Shift: TShiftState; X, Y: Integer);
463 procedure BrowserTabDragOver(Sender, Source: TObject; X, Y: Integer;
464 State: TDragState; var Accept: Boolean);
465 procedure BrowserTabDragDrop(Sender, Source: TObject; X, Y: Integer);
466 procedure BrowserTabMouseMove(Sender: TObject; Shift: TShiftState; X,
468 procedure BrowserDocumentComplete(Sender: TObject;
469 const pDisp: IDispatch; var URL: OleVariant);
470 procedure RoundNamePopupMenuPopup(Sender: TObject);
471 procedure FormShow(Sender: TObject);
472 procedure BrowserTabToolBarResize(Sender: TObject);
473 procedure FavoriteMenuClick(Sender: TObject);
474 procedure MainCoolBarResize(Sender: TObject);
475 procedure AddressToolBarResize(Sender: TObject);
476 procedure AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
478 procedure BrowserEnter(Sender: TObject);
479 procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
480 procedure PreviewTimerTimer(Sender: TObject);
481 procedure MessageHideButtonClick(Sender: TObject);
482 procedure HistoryAllClearToolButtonClick(Sender: TObject);
483 procedure MainCoolBarBandInfo(Sender: TObject;
484 var BandInfo: PReBarBandInfoA);
485 procedure MainCoolBarChevronClick(Sender: TObject;
486 RebarChevron: PNMRebarChevron);
487 procedure ListCoolBarBandInfo(Sender: TObject;
488 var BandInfo: PReBarBandInfoA);
489 procedure ListCoolBarChevronClick(Sender: TObject;
490 RebarChevron: PNMRebarChevron);
491 procedure BrowserCoolBarBandInfo(Sender: TObject;
492 var BandInfo: PReBarBandInfoA);
493 procedure BrowserCoolBarChevronClick(Sender: TObject;
494 RebarChevron: PNMRebarChevron);
495 procedure ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
496 procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
497 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
498 procedure SelectComboBoxChange(Sender: TObject);
499 procedure SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
501 procedure SelectComboBoxExit(Sender: TObject);
502 procedure SelectComboBoxSplitterMouseMove(Sender: TObject;
503 Shift: TShiftState; X, Y: Integer);
504 procedure SelectComboBoxSplitterMouseDown(Sender: TObject;
505 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
506 procedure SelectComboBoxSplitterMouseUp(Sender: TObject;
507 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
508 procedure StatusBarResize(Sender: TObject);
509 procedure SelectComboBoxEnter(Sender: TObject);
510 procedure FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
512 procedure FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
513 procedure FavoriteTreeViewEdited(Sender: TObject; Node: TTreeNode;
515 procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
517 procedure FavoriteTreePopupMenuPopup(Sender: TObject);
518 procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
519 procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
520 Shift: TShiftState; X, Y: Integer);
521 procedure LinkToolBarDragOver(Sender, Source: TObject; X, Y: Integer;
522 State: TDragState; var Accept: Boolean);
523 procedure FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
525 procedure FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
526 procedure BrowserTabContextPopup(Sender: TObject; MousePos: TPoint;
527 var Handled: Boolean);
528 procedure BrowserTabPopupMenuPopup(Sender: TObject);
529 procedure BrowserTabResize(Sender: TObject);
530 procedure TreeViewKeyDown(Sender: TObject; var Key: Word;
532 procedure FavoriteTreeViewMouseDown(Sender: TObject;
533 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
534 procedure MessagePanelResize(Sender: TObject);
536 procedure SelectTimerTimer(Sender: TObject);
537 procedure ListViewColumnRightClick(Sender: TObject;
538 Column: TListColumn; Point: TPoint);
539 procedure ListViewCustomDrawItem(Sender: TCustomListView;
540 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
541 procedure FormActivate(Sender: TObject);
542 procedure BrowserPanelResize(Sender: TObject);
543 procedure MenuToolBarResize(Sender: TObject);
544 procedure ListToolBarResize(Sender: TObject);
545 procedure BrowserToolBarResize(Sender: TObject);
546 procedure KokoPopupMenuPopup(Sender: TObject);
547 procedure ListViewKeyUp(Sender: TObject; var Key: Word;
549 procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
550 var AllowEdit: Boolean);
551 procedure CabinetCloseSpeedButtonClick(Sender: TObject);
552 procedure FavoriteArrangeToolButtonClick(Sender: TObject);
553 procedure GikoApplicationEventsMessage(var Msg: tagMSG;
554 var Handled: Boolean);
555 procedure GikoApplicationEventsDeactivate(Sender: TObject);
556 procedure GikoApplicationEventsException(Sender: TObject; E: Exception);
557 procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
558 Shift: TShiftState; X, Y: Integer);
559 procedure GetResURLMenuClick(Sender: TObject);
560 procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
561 var Handled: Boolean);
562 procedure ResPopupClearTimerTimer(Sender: TObject);
565 FEnabledCloseButton: Boolean;
566 FClickNode: TTreeNode;
568 FPreviewBrowser: TPreviewBrowser;
570 FBrowserSizeHeight: Integer;
571 FBrowserSizeWidth: Integer;
572 FTabHintIndex: Integer;
573 FListStyle: TViewStyle; //
\83\8a\83X
\83g
\83A
\83C
\83R
\83\93\83X
\83^
\83C
\83\8b
574 FItemNoVisible: Boolean; //
\83\8a\83X
\83g
\94Ô
\8d\86\95\
\8e¦
\83t
\83\89\83O
575 FViewType: TGikoViewType; //
\83\8a\83X
\83g
\83A
\83C
\83e
\83\80\95\
\8e¦
\83^
\83C
\83v
576 FActiveList: TObject;
577 FActiveContent: TBrowserRecord; //
579 FHistoryList: THistoryList; //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
580 FTreeType: TGikoTreeType;
584 FDownloadTitle: string; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\83^
\83C
\83g
\83\8b\96¼
585 FDownloadMax: Integer; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\8dÅ
\91å
\83T
\83C
\83Y
586 FEvent: THTMLDocumentEventSink;//
\83u
\83\89\83E
\83U
\83h
\83L
\83\85\83\81\83\93\83g
\83C
\83x
\83\93\83g
587 IsDraggingSelectComboBox : Boolean;
588 DraggingSelectComboBoxPosition : TPoint;
589 FSearchDialog: TSearchDialog;
590 FDropSpaceNode: TTreeNode;
591 FDragTime : Cardinal; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
592 FDragButton : TToolButton; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
\82ÉDrag
\82µ
\82Ä
\82éButton
\95Û
\91¶
593 FDragWFirst : Boolean; ///< WebTab
\82ÌD&D
\97p
594 FListViewBackGroundColor : TColor; ///< ListView
\82ÌBackGroundColor
595 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¦
596 FOddColor : TColor; ///<
\82»
\82Ì
\90F
597 FSelectResWord : string; ///<
\83\8c\83X
\8di
\8d\9e\83\8f\81[
\83h
598 FIsIgnoreResize : TResizeType; ///<
\83\8a\83T
\83C
\83Y
\83C
\83x
\83\93\83g
\82ð
\96³
\8e\8b\82·
\82é
\82©
\82Ç
\82¤
\82©
599 FIsMinimize : TMinimizeType; ///<
\8dÅ
\8f¬
\89»
\82µ
\82Ä
\82¢
\82é
\8dÅ
\92\86\82©
600 FOldFormWidth : Integer; ///<
\92¼
\91O
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\95\9d
601 FToolBarSettingSender : TToolBarSettingSenderType; ///<
\83c
\81[
\83\8b\83o
\81[
\90Ý
\92è
\82ð
\83N
\83\8a\83b
\83N
\82µ
\82½
\83N
\81[
\83\8b\83o
\81[
602 FMouseDownPos : TPoint; ///<
\83u
\83\89\83E
\83U
\83^
\83u
\82Å
\83}
\83E
\83X
\82ð
\89\9f\82µ
\82½
\82Æ
\82«
\82Ì
\8dÀ
\95W
604 FResRangeMenuSelect : Longint; ///< ResRangeButton
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\8d\80\96Ú (
\83t
\83H
\81[
\83}
\83b
\83g
\82Í ResRange
\8cÝ
\8a·)
606 FIsHandledWheel : Boolean; ///<
\8aù
\82É
\8eó
\82¯
\8eæ
\82Á
\82½ WM_MOUSEWHEEL
\82©
\82Ç
\82¤
\82©
607 DiffComp: Boolean; //Add by Genyakun
\83X
\83\8c\82ª
\8dX
\90V
\82³
\82ê
\82½
\82Æ
\82«
\82ÉTrue
\82É
\82È
\82é
608 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ñ
609 FPreviewBrowserRect: TRect; ///<
\83v
\83\8c\83r
\83\85\81[
\82Ì
\95\
\8e¦
\88Ê
\92u
\82ð
\8bL
\89¯
\82·
\82é
610 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ñ
611 FResPopupBrowser: TResPopupBrowser;
612 FUpdateExePath: string; ///
\83M
\83R
\83i
\83r
\8dX
\90V
\83C
\83\93\83X
\83g
\81[
\83\89\83p
\83X
613 FUpdateExeArgs: string; ///
\83M
\83R
\83i
\83r
\8dX
\90V
\83C
\83\93\83X
\83g
\81[
\83\89\88ø
\90\94
614 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
615 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
616 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
617 procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
618 procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
620 procedure ListDoubleClick(Shift: TShiftState);
621 function Hook(var Message: TMessage): Boolean;
622 procedure AddRoundNameMenu(MenuItem: TMenuItem);
623 procedure SetMenuFont;
624 procedure CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
625 procedure FavoriteClick(Sender: TObject; ActiveTab: Boolean); overload;
626 procedure FavoriteClick(Sender: TObject); overload;
627 procedure FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
628 function OnDocumentContextMenu(Sender: TObject): WordBool;
629 function GetWidthAllToolButton(ToolBar: TToolBar): Integer;
630 procedure MenuBarChevronMenu;
631 procedure LinkBarChevronMenu;
632 procedure ToolBarChevronMenu(ToolBar: TToolBar);
633 procedure LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
634 procedure LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
635 procedure LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
636 procedure LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
637 procedure LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
638 function TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
639 procedure FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
640 procedure FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
641 procedure FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
643 procedure SetListViewBackGroundColor(value: TColor);
644 procedure BBSMenuItemOnClick( Sender : TObject );
645 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
646 procedure SaveCoolBarSettings;
647 procedure SaveMainCoolBarSettings;
648 procedure SaveBoardCoolBarSettings;
649 procedure SaveBrowserCoolBarSettings;
650 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
651 procedure LoadCoolBarSettings;
652 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
653 procedure OnMinimize;
654 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½
655 procedure OnMinimized;
656 /// TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
657 procedure TreeClick( Node : TTreeNode );
658 /// TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
659 procedure TreeDoubleClick( Node : TTreeNode );
660 ///
\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
661 procedure SetBBSMenu;
662 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
663 procedure ListColumnPopupMenuOnClick( Sender : TObject );
664 //!
\8di
\82è
\8d\9e\82Ý
\95¶
\8e\9a\97ñ
\90Ý
\92è
665 procedure SetSelectWord( const text : string );
666 //
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
667 function GetScreenCursor(): TCursor;
668 //
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
669 procedure SetScreenCursor(Cursor : TCursor);
670 //!
\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¬
671 procedure CreateControlThread();
672 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
673 procedure CreateBrowsers(count: Integer);
674 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
675 procedure GetGroupIndex(ActionList: TActionList);
676 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
677 procedure SetGroupIndex(ActionList: TActionList);
678 //!
\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é)
679 procedure OpenThreadItem(Thread: TThreadItem; URL: String);
680 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
681 procedure RefreshListView(Thread: TThreadItem);
682 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
683 procedure ClearThreadRengeAction;
684 //!
\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¦
685 procedure UnStoredTaskTray;
686 //!
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
687 procedure ShowEditors(nCmdShow: Integer);
688 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
689 procedure ReleaseOldestBrowser;
690 //!
\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Á
691 procedure AddMenuSameBoardThread;
692 //!
\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
693 procedure SameBoardThreadSubItemOnClick(Sender: TObject);
694 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83u
\83\89\83E
\83U
\8dì
\90¬
695 procedure CreateResPopupBrowser;
696 //!
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
697 function isValidFile(FileName: String) : boolean;
698 //! ListView
\82ÌD&D
\8eó
\82¯
\8eæ
\82è
699 procedure AcceptDropFiles(var Msg: TMsg);
700 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\8dX
\90V
\8f\88\97\9d
701 procedure UpdateListView();
702 //!
\83A
\83C
\83R
\83\93\93Ç
\82Ý
\8d\9e\82Ý
703 procedure LoadIcon();
705 procedure CreateParams(var Params: TCreateParams); override;
706 procedure WndProc(var Message: TMessage); override;
707 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
708 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
709 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
712 LastRoundTime: TDateTime;
713 BrowserNullTab: TBrowserRecord;
714 FControlThread: TThreadControl;
715 FIconData : TNotifyIconData;
716 procedure MoveToURL(const inURL: string);
717 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
719 function GetHttpState: Boolean;
720 procedure SetEnabledCloseButton(Enabled: Boolean);
721 function GetTreeNode(Data: TObject): TTreeNode;
722 procedure ListViewAllSelect;
723 property ListStyle: TViewStyle read FListStyle write FListStyle;
724 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
725 property ViewType: TGikoViewType read FViewType write FViewType;
726 property NameCookie: string read FNameCookie write FNameCookie;
727 property MailCookie: string read FMailCookie write FMailCookie;
728 property ClickNode: TTreeNode read FClickNode write FClickNode;
729 property TreeType: TGikoTreeType read FTreeType write FTreeType;
730 property ActiveContent: TBrowserRecord read FActiveContent write FActiveContent;
731 property ResRangeMenuSelect: Longint read FResRangeMenuSelect write FResRangeMenuSelect;
732 property SelectResWord : string read FSelectResWord write FSelectResWord;
733 property BrowserSizeWidth: Integer read FBrowserSizeWidth write FBrowserSizeWidth;
734 property BrowserSizeHeight: Integer read FBrowserSizeHeight write FBrowserSizeHeight;
735 property SearchDialog: TSearchDialog read FSearchDialog write FSearchDialog;
736 property ToolBarSettingSender : TToolBarSettingSenderType
737 read FToolBarSettingSender write FToolBarSettingSender;
738 property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
739 property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
740 property WorkCount: Integer read FWorkCount write FWorkCount;
741 property UpdateExePath: string read FUpdateExePath write FUpdateExePath;
742 property UpdateExeArgs: string read FUpdateExeArgs write FUpdateExeArgs;
744 procedure SetContent(inThread: TBrowserRecord);
745 function GetActiveContent(popup :Boolean = false): TThreadItem;
746 function GetActiveList: TObject;
748 procedure SetListViewType(AViewType: TGikoViewType); overload;
749 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
750 procedure PlaySound(SoundEventName: string);
751 procedure ShowBBSTree( inBBS : TBBS );
752 procedure ShowBBSTreeOld( inBBS : TBBS );
753 procedure ShowHistoryTree;
754 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
755 procedure SetBrowserTabState;
756 procedure SetToolBarPopup;
757 procedure ShowFavoriteAddDialog( Item : TObject );
758 procedure FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
759 procedure RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
760 property ListViewBackGroundColor: TColor read FListViewBackGroundColor write SetListViewBackGroundColor;
761 property UseOddResOddColor : Boolean read FUseOddResOddColor write FUseOddResOddColor;
762 property OddColor : TColor read FOddColor write FOddColor;
763 function FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
764 procedure OnPlugInMenuItem( Sender : TObject );
765 procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
766 /// 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Å
767 procedure ActiveListColumnSave;
768 procedure SetActiveList(Obj: TObject);
769 property ActiveList: TObject read GetActiveList write SetActiveList;
770 /// CoolBar
\82ª
\83T
\83C
\83Y
\95Ï
\8dX
\82³
\82ê
\82½
771 procedure CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
772 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
773 procedure IndividualAbonID(Atype : Integer);
774 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
775 procedure IndividualAbon(Atag, Atype : Integer);
776 //
\93¯
\88êID
\82ðNG
\83\8f\81[
\83h
\82É
\93o
\98^
777 procedure AddIDtoNGWord(invisible : boolean);
778 //
\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Ý
779 procedure RepaintAllTabsBrowser();
780 //
\83\8a\83\93\83N
\83o
\81[
\90Ý
\92è
781 procedure SetLinkBar;
782 procedure FavoriteBrowseFolder( node: TTreeNode );
783 //
\83X
\83\8c\83b
\83h
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
784 procedure DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
785 //
\94Â
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
786 procedure DownloadList(Board: TBoard; ForceDownload: Boolean = False);
787 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
788 procedure DeleteHistory( threadItem: TThreadItem );
789 //
\83^
\83u
\82ð
\8dí
\8f\9c \83X
\83\8c\83b
\83h
\8ew
\92è
790 procedure DeleteTab(ThreadItem: TThreadItem); overload;
791 //
\83^
\83u
\82ð
\8dí
\8f\9c \83u
\83\89\83E
\83U
\83\8c\83R
\81[
\83h
\81i
\83^
\83u
\81j
\8ew
\92è
792 procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
793 //
\83^
\83u
\8dí
\8f\9c\81i
\8eÀ
\91\95\95\94\81j
794 procedure DeleteTab(index, selectIndex: Integer); overload;
795 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
796 procedure BrowserMovement(const AName: string); overload;
797 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
798 procedure BrowserMovement(scroll: Integer); overload;
799 //Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
800 function GetMainForm(): TComponent;
801 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
802 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
803 procedure OnGestureStart(Sender: TObject);
804 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
805 procedure OnGestureMove(Sender: TObject);
806 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
807 procedure OnGestureEnd(Sender: TObject);
808 ///
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
809 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
810 //ListView
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\82ð
\8eæ
\93¾
\82·
\82é
811 procedure SelectListItem(List: TList);
812 //
\8ew
\92è
\82µ
\82½
\83\8c\83X
\82ð
\83R
\83s
\81[
\82·
\82é
813 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
815 procedure ModifySelectList;
817 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
819 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
821 procedure SetSelectRoundName(Sender: TObject);
823 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
825 function WebBrowserClick(Sender: TObject): WordBool;
826 //!
\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é
827 procedure SetSelectComboBox();
829 //!
\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
830 procedure TaskTrayIconMessage(var Msg : TMsg); message WM_USER + 2010;
831 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
832 procedure StoredTaskTray;
833 //!
\93¯ID
\83\8c\83X
\83A
\83\93\83J
\81[
\95\
\8e¦
834 procedure ShowSameIDAncher(const AID: String);
836 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
839 TFavoriteMenuItem = class(TMenuItem)
843 property Data: Pointer read FData write FData;
846 TBBSMenuItem = class(TMenuItem)
850 property Data: Pointer read FData write FData;
853 TLinkToolButton = class(TToolButton)
857 property Data: Pointer read FData write FData;
866 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
867 YofUtils, ToolBarUtil, ToolBarSetting,
868 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
869 FavoriteArrange, AddressHistory, Gesture,
870 About, Option, Round, Splash, Sort, ListSelect, Imm,
871 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
872 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
873 InputAssistDataModule, Types, ReplaceDataModule;
876 BLANK_HTML: string = 'about:blank';
877 BROWSER_COUNT = 5; //
\83u
\83\89\83E
\83U
\82Ì
\90\94
879 DandD_THRESHOLD = 5; //D&D
\82Ìè
\87\92l
\81ipixcel)
880 //
\83v
\83\8c\83r
\83\85\81[
\83t
\83@
\83C
\83\8b\96¼
881 HTML_FILE_NAME = 'temp_preview.html';
882 //
\83\81\83b
\83Z
\81[
\83WID
883 USER_TREECLICK = WM_USER + 2000;
884 USER_RESIZED = WM_USER + 2001;
885 USER_MINIMIZED = WM_USER + 2002;
886 USER_SETLINKBAR = WM_USER + 2003;
887 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
888 USER_TASKTRAY = WM_USER + 2010;
891 procedure TGikoForm.CreateParams(var Params: TCreateParams);
894 if FormStyle in [fsNormal, fsStayOnTop] then begin
895 if BorderStyle in [bsSingle, bsSizeable] then begin
896 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
897 Params.WndParent := 0;
902 procedure TGikoForm.FormCreate(Sender: TObject);
904 TVS_NOTOOLTIPS = $0080;
910 wp: TWindowPlacement;
914 Writeln('============================================================');
915 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
917 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
918 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¢');
919 Writeln('============================================================');
922 Sort.SetSortDate(Now());
924 FTreeType := gttNone;
925 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô
927 Application.HookMainWindow(Hook);
928 FIsIgnoreResize := rtResizing;
929 //ActionList
\82ÌGuoupIndex
\82ð
\95Û
\91¶
\82µ
\82Ä
\81A0
\82É
\83N
\83\8a\83A
\82·
\82é
\81B
930 //(
\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¢)
931 //
\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
932 GetGroupIndex(GikoDM.GikoFormActionList);
933 FSearchDialog := nil;
934 FResPopupBrowser := nil;
935 CreateBrowsers(BROWSER_COUNT);
937 FUpdateExePath := '';
938 FUpdateExeArgs := '';
940 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
943 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
944 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
946 //
\83A
\83C
\83R
\83\93\82Ì
\93Ç
\82Ý
\8eæ
\82è
949 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
950 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
952 EnabledCloseButton := True;
954 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
955 ListView.ViewStyle := GikoSys.Setting.ListStyle;
957 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
959 AnimePanel.Left := 0;
961 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
963 //
\83L
\83\83\83r
\83l
\83b
\83g
964 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
966 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
967 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
968 GikoDM.MsgBarVisibleActionExecute(nil);
969 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
971 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
972 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
973 GikoDM.StatusBarVisibleActionExecute(nil);
975 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
976 TreeView.Items.BeginUpdate;
977 FavoriteTreeView.Items.BeginUpdate;
978 ListView.Items.BeginUpdate;
980 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
981 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
982 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
983 TreeView.Color := GikoSys.Setting.CabinetBackColor;
984 FavoriteTreeView.Font.Assign(TreeView.Font);
985 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
987 ListView.Font.Name := GikoSys.Setting.ListFontName;
988 ListView.Font.Size := GikoSys.Setting.ListFontSize;
989 ListView.Font.Color := GikoSys.Setting.ListFontColor;
990 ListView.Font.Style := [];
991 if GikoSys.Setting.ListFontBold then
992 ListView.Font.Style := [fsbold];
993 if GikoSys.Setting.ListFontItalic then
994 ListView.Font.Style := ListView.Font.Style + [fsitalic];
996 ListViewBackGroundColor := clWhite; //
\83f
\83t
\83H
\83\8b\83g
\82É
\90Ý
\92è
\82µ
\82½
\82Ì
\82¿
997 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; //
\83\86\81[
\83U
\92è
\8b`
\82É
\95Ï
\8dX
998 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
999 FOddColor := GikoSys.Setting.OddColor;
1002 TreeView.Items.EndUpdate;
1003 FavoriteTreeView.Items.EndUpdate;
1004 ListView.Items.EndUpdate;
1006 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
1007 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
1009 //
\83~
\83\85\81[
\83g
\82Ì
\8fó
\91Ô
\82ð
\90Ý
\92è
1010 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
1012 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1013 FResRangeMenuSelect := GikoSys.ResRange;
1014 case GikoSys.ResRange of
1017 GikoDM.AllResAction.Execute;
1021 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
1022 GikoDM.SelectResAction.Checked := True;
1025 case FResRangeMenuSelect of
1026 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
1027 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
1028 100: GikoDM.OnlyAHundredResAction.Checked := True;
1032 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\95\
\8e¦
\94Í
\88Í
1033 case GikoSys.Setting.ThreadRange of
1036 GikoDM.AllItemAction.Checked := True;
1041 GikoDM.LogItemAction.Checked := True;
1046 GikoDM.NewItemAction.Checked := True;
1051 GikoDM.LiveItemAction.Checked := True;
1052 ViewType := gvtLive;
1056 GikoDM.ArchiveItemAction.Checked := True;
1057 ViewType := gvtArch;
1062 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
1063 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1064 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1065 BrowserTab.Font.Style := [];
1066 if GikoSys.Setting.BrowserTabFontBold then
1067 BrowserTab.Font.Style := [fsBold];
1068 if GikoSys.Setting.BrowserTabFontItalic then
1069 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1071 BrowserTab.DoubleBuffered := True;
1072 FDragWFirst := false;
1073 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1075 //
\83u
\83\89\83E
\83U
\83^
\83u
1076 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1078 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1079 GikoDM.BrowserTabTopAction.Checked := True;
1081 GikoDM.BrowserTabBottomAction.Checked := True;
1084 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1085 GikoDM.BrowserTabTabStyleAction.Checked := True;
1086 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1087 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1089 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1092 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1093 ProgressBar.Parent := StatusBar;
1094 ProgressBar.Top := 2;
1095 ProgressBar.Left := 0;
1096 ProgressBar.Width := StatusBar.Panels[0].Width;
1097 ProgressBar.Height := StatusBar.Height - 2;
1098 ProgressBar.Position := 0;
1100 //
\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Æ)
1101 InitializeBoardPlugIns;
1103 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1104 GikoSys.ListBoardFile;
1105 //
\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É
1107 //
\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è
1108 if (SplashWindow <> nil) then begin
1109 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1113 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1114 for i := Length(BBSs) - 1 downto 0 do begin
1115 if not BBSs[i].IsBoardFileRead then
1116 GikoSys.ReadBoardFile(BBSs[i]);
1118 if SplashWindow <> nil then begin
1119 SplashWindow.ProgressBar.StepBy(20);
1120 SplashWindow.Update;
1124 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1125 RoundList := TRoundList.Create;
1126 RoundList.LoadRoundBoardFile;
1127 RoundList.LoadRoundThreadFile;
1129 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1130 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1131 Style := Style or TVS_NOTOOLTIPS;
1132 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1134 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1135 TreeView.Align := alClient;
1136 FavoriteTreeView.Align := alClient;
1137 FavoriteTreeView.Visible := False;
1139 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1142 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1143 wp.length := sizeof(wp);
1144 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1145 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1146 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1147 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1148 wp.showCmd := SW_HIDE;
1149 SetWindowPlacement(Handle, @wp);
1152 if GikoSys.Setting.WindowMax then
1153 WindowState := wsMaximized;
1155 //
\83M
\83R
\83A
\83j
\83\81
1157 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1158 if FileExists(FileName) then
1159 Animate.FileName := FileName;
1167 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1168 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1169 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1172 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1173 FHistoryList := THistoryList.Create;
1175 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1176 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1177 TreeView, FTreeType);
1179 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1180 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1181 FavoriteDM.ReadFavorite;
1183 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1184 GikoDM.ArrangeAction.Execute;
1186 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1187 case GikoSys.Setting.ListWidthState of
1189 ViewPanel.Width := 1;
1190 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1191 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1194 ViewPanel.Width := GikoSys.Setting.ListWidth;
1195 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1196 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1199 ViewPanel.Width := GikoSys.Setting.ListWidth;
1200 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1201 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1205 case GikoSys.Setting.ListHeightState of
1207 ViewPanel.Height := 1;
1208 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1209 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1212 ViewPanel.Height := GikoSys.Setting.ListHeight;
1213 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1214 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1217 ViewPanel.Height := GikoSys.Setting.ListHeight;
1218 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1219 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1224 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1225 CreateControlThread();
1227 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1228 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1230 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1233 BrowserBoardNameLabel.Caption := '';
1234 BrowserNameLabel.Caption := '';
1237 FTabHintIndex := -1;
1239 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1240 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1241 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1243 MakeDefaultINIFile();
1244 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1245 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1246 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1247 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1250 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1251 SetSelectComboBox();
1253 //
\83A
\83h
\83\8c\83X
\83o
\81[
1254 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1256 //
\83\8a\83\93\83N
\83o
\81[
1258 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1260 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1261 if not FileExists(GikoSys.GetBoardFileName) then begin
1262 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
1263 + '
\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
1264 + '
\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';
1265 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1266 GikoDM.NewBoardAction.Execute;
1269 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1270 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1272 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1273 // FLastRoundTime := 0;
1275 ListView.OnData := TListViewUtils.ListViewData;
1277 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1278 CabinetVisible( False );
1279 if GikoSys.Setting.CabinetVisible then begin
1280 i := CabinetSelectPopupMenu.Items.Count - 1;
1281 if GikoSys.Setting.CabinetIndex = i - 1 then
1282 GikoDM.CabinetHistoryAction.Execute
1283 else if GikoSys.Setting.CabinetIndex = i then
1284 GikoDM.CabinetFavoriteAction.Execute
1286 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1287 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1288 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1289 FIsIgnoreResize := rtResizing;
1290 GikoDM.CabinetBBSAction.Execute;
1293 ShowBBSTreeOld( BBSs[ 0 ] );
1294 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1297 //
\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
1298 for i := 1 to ParamCount do begin
1299 MoveToURL(ParamStr(i));
1302 GikoDM.RepaintStatusBar;
1303 StatusBarResize(Sender);
1305 dummy1.Caption := ItemReservPMenu.Caption;
1306 dummy1.Hint := ItemReservPMenu.Hint;
1308 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1309 MouseGesture := TMouseGesture.Create;
1311 {$IFDEF SPAM_FILTER_ENABLED}
1312 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1313 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1316 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1317 GikoSys.SetGikoMessage;
1319 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1320 if GikoSys.Setting.AutoLogin then
1321 GikoDM.LoginAction.Execute;
1323 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1325 //
\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è
1326 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1327 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1329 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\8f\89\8aú
\89»
1330 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1332 //
\92u
\8a·
\90Ý
\92è
\83t
\83@
\83C
\83\8b\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1333 ReplaceDM.LoadFromFile(GikoSys.GetReplaceFileName);
1335 //
\83\8c\83X
\83|
\83b
\83v
\83A
\83b
\83v
\8fÁ
\8b\8e\83^
\83C
\83}
\81[
1336 ResPopupClearTimer.Interval := GikoSys.Setting.RespopupWait;
1338 // D&D
\82ð
\8eó
\82¯
\8eæ
\82é
1339 DragAcceptFiles(ListView.Handle, True);
1341 //
\8f\89\8aú
\89»
\82É
\8e¸
\94s
\82µ
\82½
\83\82\83W
\83\85\81[
\83\8b\83`
\83F
\83b
\83N
1342 if (FavoriteDM.AbEnd) then begin
1343 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',
1344 '
\8f\89\8aú
\89»
\88Ù
\8fí');
1350 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1351 procedure TGikoForm.SaveCoolBarSettings;
1354 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1356 SaveMainCoolBarSettings;
1357 SaveBoardCoolBarSettings;
1358 SaveBrowserCoolBarSettings;
1361 procedure TGikoForm.SaveMainCoolBarSettings;
1366 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1367 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1368 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1369 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1370 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1371 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1374 procedure TGikoForm.SaveBoardCoolBarSettings;
1379 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1380 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1381 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1382 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1383 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1384 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1387 procedure TGikoForm.SaveBrowserCoolBarSettings;
1392 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1393 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1394 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1395 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1396 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1397 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1400 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1401 procedure TGikoForm.LoadCoolBarSettings;
1407 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1408 MainCoolBar.Bands.BeginUpdate;
1410 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1411 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1412 CoolSet := GikoSys.Setting.MainCoolSet[i];
1413 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1414 FIsIgnoreResize := rtNone;
1415 SaveCoolBarSettings;
1418 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1419 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1420 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1423 MainCoolBar.Bands.EndUpdate;
1426 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1427 ListCoolBar.Bands.BeginUpdate;
1429 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1430 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1431 CoolSet := GikoSys.Setting.ListCoolSet[i];
1432 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1433 FIsIgnoreResize := rtNone;
1434 SaveCoolBarSettings;
1437 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1438 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1439 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1442 ListCoolBar.Bands.EndUpdate;
1445 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1446 BrowserCoolBar.Bands.BeginUpdate;
1448 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1449 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1450 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1451 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1452 FIsIgnoreResize := rtNone;
1453 SaveCoolBarSettings;
1456 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1457 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1458 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1461 BrowserCoolBar.Bands.EndUpdate;
1466 procedure TGikoForm.FormShow(Sender: TObject);
1470 if FStartUp then begin
1471 ShowWindow(Application.Handle, SW_HIDE);
1473 //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½
1474 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1475 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1476 GikoDM.StdToolBarVisibleActionExecute( nil );
1477 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1478 GikoDM.AddressBarVisibleActionExecute( nil );
1479 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1480 GikoDM.LinkBarVisibleActionExecute( nil );
1481 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1482 GikoDM.ListToolBarVisibleActionExecute( nil );
1483 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1484 GikoDM.ListNameBarVisibleActionExecute( nil );
1485 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1486 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1487 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1488 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1490 // CoolBar
\95\9c\8c³
1491 LoadCoolBarSettings;
1493 //
\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é
1494 // ResetBandInfo( ListCoolBar, ListToolBar );
1495 FIsIgnoreResize := rtNone;
1497 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1498 if GikoSys.Setting.TabAutoLoadSave then begin
1499 GikoDM.TabsOpenAction.Tag := 1;
1500 GikoDM.TabsOpenAction.Execute;
1501 GikoDM.TabsOpenAction.Tag := 0;
1502 if (GikoSys.Setting.LastCloseTabURL <> '') then begin
1503 if ( FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
1504 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( FActiveContent.Browser ), 0 );
1506 if ( FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
1507 while (FActiveContent.Browser.ReadyState <> READYSTATE_COMPLETE) and
1508 (FActiveContent.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
1509 Application.ProcessMessages;
1512 item := BBSsFindThreadFromURL( GikoSys.Setting.LastCloseTabURL );
1513 if (item <> nil) and (item.IsLogFile) then begin
1514 OpenThreadItem(item, item.URL);
1516 GikoSys.Setting.LastCloseTabURL := '';
1520 //ActionList
\82ÌGroupIndex
\82ð
\8c³
\82É
\96ß
\82·
1521 SetGroupIndex(GikoDM.GikoFormActionList);
1527 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1529 // if GikoForm.WindowState <> wsMinimized then
1530 // SaveCoolBarSettings;
1532 if ( GikoSys.Setting.ShowDialogForEnd ) and
1533 (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
1538 GikoSys.Setting.LastCloseTabURL := '';
1539 if GikoSys.Setting.TabAutoLoadSave then begin
1540 GikoDM.TabsSaveAction.Execute;
1541 if (GetActiveContent <> nil) and
1542 (GetActiveContent.IsLogFile) then begin
1543 GikoSys.Setting.LastCloseTabURL := GetActiveContent.URL;
1547 if (SearchDialog <> nil) then begin
1548 if (SearchDialog.Visible) then begin
1552 SearchDialog.Release;
1555 SearchDialog := nil;
1558 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82Ì
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81AEditorForm
\82ð
\95Â
\82¶
\82é
1559 GikoDM.CloseAllEditorAction.Execute;
1561 Application.UnhookMainWindow(Hook);
1562 //
\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·
1563 FControlThread.Terminate;
1565 //OnDestory
\82¾
\82Æ
\8dÄ
\8bN
\93®
\82ð
\82©
\82¯
\82½
\82Æ
\82«
\82È
\82Ç
\82É
\95Û
\91¶
\82³
\82ê
\82È
\82¢
\82Ì
\82ÅOnCloseQuery
\82Å
\90Ý
\92è
\95Û
\91¶
1568 Application.Terminate;
1571 procedure TGikoForm.SaveSettingAll();
1573 wp : TWindowPlacement;
1574 WindowPlacement: TWindowPlacement;
1577 ActiveListColumnSave;
1582 WindowPlacement.length := SizeOf(TWindowPlacement);
1583 GetWindowPlacement(Self.Handle, @WindowPlacement);
1585 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1586 wp.length := sizeof(wp);
1587 GetWindowPlacement(Handle, @wp);
1588 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1589 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1590 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1591 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1592 GikoSys.Setting.WindowMax := (WindowState = wsMaximized) or
1593 (WindowPlacement.flags = WPF_RESTORETOMAXIMIZED);
1594 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1595 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1596 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1597 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1598 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1599 if GikoDM.ArrangeAction.Checked then
1600 GikoSys.Setting.ListOrientation := gloVertical
1602 GikoSys.Setting.ListOrientation := gloHorizontal;
1603 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1608 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1609 if not GikoSys.Setting.ResRangeHold then
1610 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1614 //
\88ê
\8e\9e\93I
\82É
\92Ê
\8fí
\83X
\83^
\83C
\83\8b\82É
\96ß
\82µ
\82ÄCoolBar
\82Ì
\88Ê
\92u
\81A
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82ð
\95Û
\91¶
1615 //
\81¦
\92\8d\88Ó
\81FOnDestroy
\81AOnCloseQuery
\82Å
\8eg
\82¤
\82±
\82Æ
\82µ
\82©
\8dl
\97¶
\82³
\82ê
\82Ä
\82¢
\82È
\82¢
1616 if WindowState <> wsNormal then begin
1617 WindowState := wsNormal;
1621 SaveCoolBarSettings;
1626 GikoSys.Setting.WriteWindowSettingFile;
1627 GikoSys.Setting.WriteNameMailSettingFile;
1631 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\90Ý
\92è
\82Ì
\95Û
\91¶
1632 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1634 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1636 //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é
1637 //
\8f\89\8aú
\89»
\88Ù
\8fí
\8e\9e\82©
\82ç
\82Ì
\8fI
\97¹
\82Å
\82Í
\95Û
\91¶
\82µ
\82È
\82¢
1638 if not (FavoriteDM.AbEnd) then begin
1639 FavoriteDM.WriteFavorite;
1644 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1646 //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
1647 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1651 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
1653 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1657 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1659 RoundList.SaveRoundFile;
1664 procedure TGikoForm.FormDestroy(Sender: TObject);
1669 //
\83^
\83X
\83N
\83g
\83\8c\83C
\82Ì
\83A
\83C
\83R
\83\93\8dí
\8f\9c
1670 if (FIconData.uID <> 0) then begin
1671 Shell_NotifyIcon(NIM_DELETE, @FIconData);
1674 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1676 if GikoSys.Setting.GestureEnabled then begin
1677 MouseGesture.OnGestureStart := nil;
1678 MouseGesture.OnGestureMove := nil;
1679 MouseGesture.OnGestureEnd := nil;
1682 MouseGesture.UnHook;
1687 //
\82¨
\8bC
\82É
\93ü
\82è
\94j
\8aü
1694 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1695 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1696 GikoSys.Setting.ShowDialogForAllTabClose := false;
1697 GikoDM.AllTabCloseAction.Execute;
1698 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1703 for i := FBrowsers.Count - 1 downto 0 do begin
1704 GikoSys.ShowRefCount('browser' + IntToStr(i), TWebBrowser(FBrowsers[i]).ControlInterface);
1705 GikoSys.ShowRefCount('document' + IntToStr(i), TWebBrowser(FBrowsers[i]).ControlInterface.Document);
1708 for i := FBrowsers.Count - 1 downto 0 do begin
1709 TWebBrowser(FBrowsers[i]).Free;
1712 FBrowsers.Capacity := 0;
1718 if BrowserNullTab <> nil then begin
1719 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
1720 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
1722 BrowserNullTab.Free;
1728 TreeView.Items.BeginUpdate;
1729 TreeView.Items.GetFirstNode.Free;
1730 TreeView.Items.Clear;
1731 TreeView.Items.EndUpdate;
1756 FControlThread.DownloadAbort;
1757 FControlThread.Terminate;
1758 FControlThread.WaitFor;
1762 FControlThread.Free;
1764 //
\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é
1765 for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
1766 GikoForm.PlugInMenu.items[i].Free;
1768 GikoForm.PlugInMenu.Clear;
1771 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
1772 // 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Å
1773 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
1774 for i := Length(BoardGroups) - 1 downto 0 do begin
1775 //BoardGroups[i].Clear;
1776 BoardGroups[i].Free;
1780 for i := Length( BBSs ) - 1 downto 0 do begin
1781 if BBSs[ i ] <> nil then
1785 DestorySpecialBBS(BoardGroup.SpecialBBS);
1790 if FEvent <> nil then
1794 if FResPopupBrowser <> nil then begin
1795 TOleControl(FResPopupBrowser).Parent := nil;
1796 FResPopupBrowser.Free;
1802 if FPreviewBrowser <> nil then begin
1803 FPreviewBrowser.Free;
1804 FPreviewBrowser := nil;
1809 // Update
\82ª
\82¢
\82ê
\82Î
\8eÀ
\8ds
\82·
\82é
1810 if FileExists(FUpdateExePath) then begin
1811 //
\83A
\83b
\83v
\83f
\81[
\83g
\8eÀ
\8ds
1812 GikoSys.CreateProcess(FUpdateExePath, FUpdateExeArgs);
1816 //
\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
1817 procedure TGikoForm.SetBBSMenu;
1820 item : TBBSMenuItem;
1823 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
1824 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1826 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1827 CabinetSelectPopupMenu.Items[ i ].Free;
1828 CabinetMenu.Items[ i ].Free;
1829 BBSSelectPopupMenu.Items[ i ].Free;
1835 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
1836 for i := Length( BBSs ) - 1 downto 0 do begin
1838 item := TBBSMenuItem.Create( PopupMenu );
1839 item.Caption := BBSs[ i ].Title;
1840 item.Data := BBSs[ i ];
1841 item.OnClick := BBSMenuItemOnClick;
1842 CabinetSelectPopupMenu.Items.Insert( 0, item );
1843 item := TBBSMenuItem.Create( PopupMenu );
1844 item.Caption := BBSs[ i ].Title;
1845 item.Data := BBSs[ i ];
1846 item.OnClick := BBSMenuItemOnClick;
1847 CabinetMenu.Insert( 0, item );
1848 item := TBBSMenuItem.Create( PopupMenu );
1849 item.Caption := BBSs[ i ].Title;
1850 item.Data := BBSs[ i ];
1851 item.OnClick := BBSMenuItemOnClick;
1852 BBSSelectPopupMenu.Items.Insert( 0, Item );
1859 procedure TGikoForm.ReloadBBS;
1864 LockWindowUpdate(Self.Handle);
1866 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1867 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1868 GikoSys.Setting.ShowDialogForAllTabClose := false;
1869 GikoDM.AllTabCloseAction.Execute;
1870 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1871 SetContent(BrowserNullTab);
1872 //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
1873 TreeView.Items.Clear;
1875 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1877 RoundList.SaveRoundFile;
1880 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
1886 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1888 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1893 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1895 FavoriteDM.WriteFavorite;
1900 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
1901 for i := Length(BoardGroups) - 1 downto 0 do begin
1903 BoardGroups[i].Free;
1909 for i := Length( BBSs ) - 1 downto 0 do begin
1910 if BBSs[ i ] <> nil then
1919 FTreeType := gttNone;
1921 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
1923 //
\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Æ)
1924 InitializeBoardPlugIns;
1926 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1928 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1929 for i := Length(BBSs) - 1 downto 0 do begin
1930 if not BBSs[i].IsBoardFileRead then
1931 GikoSys.ReadBoardFile(BBSs[i]);
1934 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
1937 ShowBBSTree( BBSs[ 0 ] );
1939 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1940 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1941 TreeView, FTreeType);
1943 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1944 FavoriteDM.ReadFavorite;
1948 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1949 RoundList.LoadRoundBoardFile;
1950 RoundList.LoadRoundThreadFile;
1952 LockWindowUpdate(0);
1956 \todo
\89½
\8cÌ IE 7
\82Å
\82Í about:..
\82É
\82È
\82é
\82Ì
\82©
1957 (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©)
1958 \92²
\8d¸
\82·
\82é
\82±
\82Æ
1960 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1968 threadItem : TThreadItem;
1970 Protocol, Host, Path, Document, Port, Bookmark: string;
1975 ActiveFileName: string;
1980 cResPopup: TResPopupBrowser;
1981 senderBrowser :TWebBrowser;
1982 doc: IHTMLDocument2;
1984 //
\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ª
1985 // 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è)
1986 if Pos('about:..', Text) = 1 then
1987 Text2 := 'about:blank..' + Copy( Text, Length('about:..')+1, Length(Text) )
1991 if not( TObject(Sender) is TWebBrowser )then
1994 senderBrowser := TWebBrowser(Sender);
1995 doc := senderBrowser.ControlInterface.Document as IHTMLDocument2;
1999 if ((not senderBrowser.Busy) and Assigned(doc)) then begin
2000 if LowerCase(doc.charset) <> 'shift_jis' then begin
2001 doc.charset := 'shift_jis';
2009 if PreviewTimer.Enabled then
2010 PreviewTimer.Enabled := False;
2012 Application.CancelHint;
2015 if GetActiveContent <> nil then
2016 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
2018 ActiveFileName := '';
2020 FActiveContent := nil;
2024 //
\91O
\89ñ
\82Æ
\93¯
\82¶
\8fê
\8d\87\8fI
\97¹
2025 if (StatusBar.Panels[1].Text = Text2) then begin
2026 if Text2 = '' then begin
2027 if FResPopupBrowser <> nil then begin
2028 if not(Sender is TResPopupBrowser) then
2029 FResPopupBrowser.Clear
2031 TResPopupBrowser(Sender).ChildClear;
2037 StatusBar.Panels[1].Text := Text2;
2040 if FPreviewBrowser <> nil then
2041 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2043 if FResPopupBrowser <> nil then begin
2044 if not(Sender is TResPopupBrowser) then begin
2045 if (FResPopupBrowser.Visible) then begin
2046 if ResPopupClearTimer.Interval > 0 then begin
2047 ResPopupClearTimer.Enabled := True;
2048 ResPopupClearTimer.Tag := 0;
2050 FResPopupBrowser.Clear;
2054 if ResPopupClearTimer.Interval > 0 then begin
2055 ResPopupClearTimer.Enabled := True;
2056 ResPopupClearTimer.Tag := 1;
2058 TResPopupBrowser(Sender).ChildClear;
2064 if not(Sender is TResPopupBrowser) then
2065 if not GikoSys.Setting.UnActivePopup then
2066 if not GikoForm.Active then
2071 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
2072 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
2073 //
\91¼
\82Ì
\83A
\83v
\83\8a\82Å
\8f\88\97\9d\82·
\82éURL
\82©
\8am
\94F
2074 if (ExtPreviewDM.PreviewURL(Text2)) then begin
2078 Ext := AnsiLowerCase(ExtractFileExt(Text2));
2079 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
2080 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) then begin
2081 if FPreviewBrowser = nil then begin
2082 FPreviewBrowser := TPreviewBrowser.Create(Self);
2083 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2084 TOleControl(FPreviewBrowser).Parent := nil;
2086 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
2087 FPreviewURL := Text2;
2088 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
2089 PreviewTimer.Enabled := True;
2090 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
2091 if (Pos('mailto:', Text2) = 1) and (GikoSys.Setting.RespopupMailTo) then begin
2092 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
2093 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
2095 p.x := p.x - senderBrowser.ClientOrigin.x;
2096 p.y := p.y - senderBrowser.ClientOrigin.y;
2097 e := doc.elementFromPoint(p.x, p.y);
2098 if (Assigned(e)) then begin
2099 CreateResPopupBrowser;
2101 if not(Sender is TResPopupBrowser) then begin
2102 if (FResPopupBrowser.Visible) then begin
2103 FResPopupBrowser.Clear;
2106 TResPopupBrowser(Sender).ChildClear;
2109 cResPopup := FResPopupBrowser.CreateNewBrowser;
2110 tmp2 := Trim(ZenToHan(e.Get_outerText));
2111 if (GikoSys.IsNumeric(tmp2)) then begin
2112 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
2113 wkIntSt := StrToInt64(tmp2);
2114 wkIntTo := StrToInt64(tmp2);
2115 cResPopup.PopupType := gptThread;
2116 HTMLCreater.SetResPopupText(cResPopup, GetActiveContent(true), wkIntSt, wkIntTo, False, False);
2118 cResPopup.PopupType := gptRaw;
2119 cResPopup.Title := s;
2123 CreateResPopupBrowser;
2125 if not(Sender is TResPopupBrowser) then begin
2126 if (FResPopupBrowser.Visible) then begin
2127 FResPopupBrowser.Clear;
2130 TResPopupBrowser(Sender).ChildClear;
2133 threadItem := GetActiveContent(true);
2134 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
2135 PathRec := Gikosys.Parse2chURL2(URL);
2136 if (PathRec.FNoParam) then begin
2140 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
2142 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
2144 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
2146 URL := GikoSys.GetBrowsableThreadURL( URL );
2147 wkIntSt := PathRec.FSt;
2148 wkIntTo := PathRec.FTo;
2150 if (wkIntSt = 0) and (wkIntTo = 0) then begin
2153 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
2155 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
2157 end else if wkIntSt > wkIntTo then begin
2162 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
2167 threadItem := BBSsFindThreadFromURL( URL );
2169 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
2170 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
2171 if board <> nil then begin
2172 if not board.IsThreadDatRead then
2173 GikoSys.ReadSubjectFile( board );
2174 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
2178 if threadItem <> nil then begin
2179 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
2180 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
2181 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
2185 cResPopup := FResPopupBrowser.CreateNewBrowser;
2186 cResPopup.PopupType := gptThread;
2187 HTMLCreater.SetResPopupText(cResPopup, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
2191 if (cResPopup <> nil) then begin
2192 ResPopupClearTimer.Enabled := False;
2194 if cResPopup.PopupType = gptRaw then begin
2195 if cResPopup.Title <> '' then begin
2196 cResPopup.TitlePopup;
2199 if cResPopup.RawDocument <> '' then begin
2201 end else if cResPopup.Title <> '' then begin
2202 cResPopup.TitlePopup;
2209 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2213 FEnabledCloseButton := Enabled;
2214 SysMenu := GetSystemMenu(Handle, False);
2216 if Enabled then begin
2217 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2219 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2222 DrawMenuBar(Handle);
2225 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2226 var AllowChange: Boolean);
2228 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
2229 // if FTreeType = gtt2ch then
2230 // FSortIndex := -1;
2233 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2234 Shift: TShiftState);
2238 if GetActiveList is TBoard then begin
2240 VK_BACK:; // UpFolderButtonClick(Sender);
2241 VK_SPACE: ListDoubleClick(Shift);
2242 VK_RETURN: ListClick;
2245 if ListView.Selected <> nil then begin
2246 pos.X := ListView.Column[ 0 ].Width;
2247 pos.Y := ListView.Selected.Top;
2249 pos.X := ListView.Left;
2250 pos.Y := ListView.Top;
2252 Windows.ClientToScreen( ListView.Handle, pos );
2253 ListPopupMenu.Popup( pos.X, pos.Y );
2256 end else begin // TBBS, TCategory
2258 VK_BACK:; // UpFolderButtonClick(Sender);
2259 VK_SPACE: ListClick;
2260 VK_RETURN: ListDoubleClick(Shift);
2263 if ListView.Selected <> nil then begin
2264 pos.X := ListView.Column[ 0 ].Width;
2265 pos.Y := ListView.Selected.Top;
2267 pos.X := ListView.Left;
2268 pos.Y := ListView.Top;
2270 Windows.ClientToScreen( ListView.Handle, pos );
2271 ListPopupMenu.Popup( pos.X, pos.Y );
2277 function TGikoForm.GetHttpState: Boolean;
2279 Result := FHttpState;
2282 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2283 Column: TListColumn);
2287 vSortIndex : Integer;
2288 vSortOrder : Boolean;
2290 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2291 if TObject( FActiveList ) is TBBS then begin
2292 orderList := GikoSys.Setting.BBSColumnOrder;
2293 vSortIndex := GikoSys.Setting.BBSSortIndex;
2294 vSortOrder := GikoSys.Setting.BBSSortOrder;
2295 end else if TObject( FActiveList ) is TCategory then begin
2296 orderList := GikoSys.Setting.CategoryColumnOrder;
2297 vSortIndex := GikoSys.Setting.CategorySortIndex;
2298 vSortOrder := GikoSys.Setting.CategorySortOrder;
2299 end else if TObject( FActiveList ) is TBoard then begin
2300 orderList := GikoSys.Setting.BoardColumnOrder;
2301 vSortIndex := GikoSys.Setting.BoardSortIndex;
2302 vSortOrder := GikoSys.Setting.BoardSortOrder;
2306 id := Integer( orderList[ idx ] );
2309 if vSortIndex = id then
2310 vSortOrder := not vSortOrder
2312 vSortOrder := id = 0;
2315 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2318 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2319 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2323 DefaultDraw := True;
2324 //
\82È
\82º
\82©
\96³
\8fð
\8c\8f\82ÅExit
\82µ
\82Ä
\82¢
\82é
2326 DefaultDraw := False;
2327 if (cdsSelected in State) or (cdsHot in State) then begin
2328 Sender.Canvas.Brush.Color := clHighlight;
2329 Sender.Canvas.Font.Color := clHighlightText;
2331 Sender.Canvas.Brush.Color := clBtnFace;
2332 Sender.Canvas.Font.Color := clBtnText;
2334 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2335 Sender.Canvas.FillRect(ARect);
2336 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2339 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2344 Nodes := TreeView.Items;
2346 for i := 0 to Nodes.Count - 1 do begin
2347 if Nodes.Item[i].Data = Data then begin
2348 Result := Nodes.Item[i];
2355 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2356 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2357 Headers: OleVariant; var Cancel: WordBool);
2362 kMenuName: string = 'menu:';
2367 if Pos(kMenuName, URL) <> 0 then begin
2368 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2370 if not GikoSys.IsNumeric(sNo) then Exit;
2374 KokoPopupMenu.PopupComponent := nil;
2375 if (Sender is TComponent) then
2376 KokoPopupMenu.PopupComponent := TComponent(Sender);
2377 KokoPopupMenu.Tag := StrToInt(sNo);
2378 KokoPopupMenu.Popup(p.x, p.y);
2379 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2380 Cancel := not GikoSys.Setting.OpenMailer;
2382 //@
\82Æ.
\82ð
\8aÜ
\82Ü
\82È
\82¢URL
\82Í
\83\81\81[
\83\8b\83A
\83h
\83\8c\83X
\82Æ
\82Ý
\82È
\82³
\82È
\82¢
2383 //
\8eå
\82Éage
\81Asage
\91Î
\8dô
2384 if (Pos('@', URL) = 0) or (Pos('.', URL) = 0) then begin
2391 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2392 const ARect: TRect; var DefaultDraw: Boolean);
2396 IsBoardNode: Boolean;
2402 Category: TCategory;
2406 DefaultDraw := True;
2408 if FTreeType = gttHistory then Exit;
2410 TreeView.Canvas.Font.Color := clBlue;
2411 IsBoardNode := False;
2412 for i := 0 to TreeView.Items.Count - 1 do begin
2414 if not TreeView.Items[i].IsVisible then
2417 if TObject(TreeView.Items[i].Data) is TCategory then begin
2418 if TreeView.Items[i].Expanded then
2421 IsBoardNode := False;
2422 Category := TCategory(TreeView.Items[i].Data);
2423 for j := 0 to Category.Count - 1 do begin
2424 Board := Category.Items[j];
2425 if Board <> nil then begin
2426 if Board.UnRead > 0 then begin
2434 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2435 IsBoardNode := True;
2436 Board := TBoard(TreeView.Items[i].Data);
2438 Cnt := Board.UnRead;
2444 Bitmap := TBitmap.Create;
2446 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2447 Bitmap.Canvas.Font.Style := [fsBold];
2448 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2453 NodeRect := TreeView.Items[i].DisplayRect(True);
2456 CntText := '(' + IntToStr(Cnt) + ')'
2457 else if Cnt = 1 then
2461 TextWidth := TreeView.Canvas.TextWidth(CntText);
2463 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2465 NodeRect.Left + NodeWidth + TextWidth + 8,
2467 DrawText(TreeView.Canvas.Handle,
2471 DT_SINGLELINE or DT_VCENTER);
2473 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2476 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2477 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2480 Category: TCategory;
2483 DefaultDraw := True;
2485 if FTreeType = gttHistory then Exit;
2487 TreeView.Canvas.Font.Style := [];
2488 if Node <> nil then begin
2489 if TObject(Node.Data) is TCategory then begin
2490 Category := TCategory(Node.Data);
2491 for i := 0 to Category.Count - 1 do begin
2492 Board := Category.Items[i];
2493 if Board <> nil then begin
2494 if Board.UnRead > 0 then begin
2495 TreeView.Canvas.Font.Style := [fsBold];
2500 end else if TObject(Node.Data) is TBoard then begin
2501 Board := TBoard(Node.Data);
2502 if Board.UnRead > 0 then
2503 TreeView.Canvas.Font.Style := [fsBold];
2508 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2510 TreeView.Invalidate;
2512 if TObject(Node.Data) is TBBS then begin
2513 TBBS(Node.Data).NodeExpand := True;
2514 end else if TObject(Node.Data) is TCategory then begin
2515 TCategory(Node.Data).NodeExpand := True;
2516 end else if TObject(Node.Data) is TBoard then begin
2517 TBoard(Node.Data).NodeExpand := True;
2521 procedure TGikoForm.ListViewAllSelect;
2526 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2528 if csDestroying in Self.ComponentState then
2530 AddMessageList(Msg, nil, Icon);
2532 // *************************************************************************
2533 //!
\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
2534 // *************************************************************************
2535 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2539 boardPlugIn : TBoardPlugIn;
2544 if csDestroying in Self.ComponentState then
2546 if Item.DownType = gdtBoard then
2547 ATitle := Item.Board.Title
2549 ATitle := Item.ThreadItem.Title;
2551 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2553 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2555 if Item.DownType = gdtBoard then begin
2558 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2559 if GetActiveList = Item.Board then begin
2561 //
\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é
2562 if (GikoSys.Setting.AutoSortThreadList) then begin
2563 GikoSys.Setting.BoardSortIndex := 0;
2564 GikoSys.Setting.BoardSortOrder := True;
2566 Sort.SetSortDate(Now());
2567 SetActiveList(Item.Board);
2569 Item.Board.Modified := True;
2570 Item.Board.IsThreadDatRead := True;
2573 end else if Item.DownType = gdtThread then begin
2576 Item.ThreadItem.NewArrival := True;
2577 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2578 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2579 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2580 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2581 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2582 Item.ThreadItem.Title := Res.FTitle;
2583 ATitle := Item.ThreadItem.Title;
2584 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2585 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2586 ATitle := Res.FTitle;
2588 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2589 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2590 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2594 if GikoSys.Setting.BrowserTabVisible then begin
2595 if GetActiveContent = Item.ThreadItem then
2596 InsertBrowserTab(Item.ThreadItem)
2597 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2598 InsertBrowserTab(Item.ThreadItem, True)
2600 InsertBrowserTab(Item.ThreadItem, False);
2603 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2604 InsertBrowserTab(Item.ThreadItem);
2607 Application.ProcessMessages;
2609 if Item.State = gdsComplete then begin
2611 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2615 PlaySound('NewDiff');
2616 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2621 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2622 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2623 // 2ch
\88È
\8aO
\82Í
\81A1000
\82ª
\8dÅ
\8d\82\82©
\95s
\96¾
\82È
\82Ì
\82Å
\81A2ch
\8cÀ
\92è
\82É
\82·
\82é
2624 if (Item.ThreadItem.ParentBoard.Is2ch) then begin
2625 Item.ThreadItem.Round := False;
2626 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);
2630 //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
2632 RefreshListView(Item.ThreadItem);
2635 end else if Item.State = gdsNotModify then begin
2637 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2638 //SetContent(Item.ThreadItem);
2639 InsertBrowserTab(Item.ThreadItem);
2641 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2642 PlaySound('NoChange');
2643 Screen.Cursor := crDefault;
2644 end else if Item.State = gdsAbort then begin
2646 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2647 end else if Item.State = gdsError then begin
2652 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2653 // if Item.ResponseCode = 302 then
2654 // 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);
2660 if FWorkCount < 0 then FWorkCount := 0;
2661 if FWorkCount = 0 then begin
2663 Animate.Active := False;
2665 Screen.Cursor := crDefault;
2672 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2674 // SetProgressValue(Number, 0, AWorkCountMax);
2675 // ProgressBar.Visible := True;
2676 if csDestroying in Self.ComponentState then
2679 ProgressBar.Position := 0;
2680 ProgressBar.Max := AWorkCountMax;
2681 FDownloadTitle := AWorkTitle;
2682 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2683 FDownloadMax := AWorkCountMax;
2686 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2688 if csDestroying in Self.ComponentState then
2690 ProgressBar.Position := 0;
2691 if FDownloadMax <> 0 then
2692 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2695 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2697 if csDestroying in Self.ComponentState then
2699 ProgressBar.Position := AWorkCount;
2700 // SetProgressValue(Number, AWorkCount);
2701 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2704 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2706 ListItem: TListItem;
2708 MessageListView.Items.BeginUpdate;
2710 ListItem := MessageListView.Items.Add;
2711 ListItem.Caption := ACaption;
2712 ListItem.Data := AObject;
2713 ListItem.MakeVisible(False);
2715 gmiOK: ListItem.ImageIndex := 0;
2716 gmiSAD: ListItem.ImageIndex := 1;
2717 gmiNG: ListItem.ImageIndex := 2;
2718 gmiWhat: ListItem.ImageIndex := 3;
2721 MessageListView.Items.EndUpdate;
2725 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
2726 procedure TGikoForm.ReleaseOldestBrowser;
2730 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2731 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2732 TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2733 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2739 function TGikoForm.InsertBrowserTab(
2740 ThreadItem : TThreadItem;
2741 ActiveTab : Boolean = True
2744 i, j, idx : Integer;
2745 favItem : TFavoriteThreadItem;
2746 newBrowser : TBrowserRecord;
2751 if Threaditem = nil then Exit;
2753 if ThreadItem.IsLogFile then begin
2754 //
\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é
2755 //
\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é
2756 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2757 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2758 j := FBrowsers.IndexOf(FActiveContent.Browser);
2759 if j = BROWSER_COUNT - 1 then
2760 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2762 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2763 if not FHistoryList.AddHistory( favItem, TreeView, FTreeType ) then
2766 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2767 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2768 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2769 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2770 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2771 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2772 ReleaseOldestBrowser;
2773 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2774 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2775 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2777 if ActiveTab then begin
2778 BrowserTab.TabIndex := i;
2779 BrowserTab.OnChange(nil);
2786 idx := BrowserTab.TabIndex;
2787 newBrowser := TBrowserRecord.Create;
2788 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2789 ReleaseOldestBrowser;
2790 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2791 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2792 newBrowser.thread := ThreadItem;
2793 newBrowser.Repaint := true;
2795 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2796 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2797 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2798 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2802 if ActiveTab then begin
2803 BrowserTab.TabIndex := 0;
2805 end else if GikoSys.Setting.BrowserTabAppend = gtaLast then begin
2806 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2807 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2808 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2812 if ActiveTab then begin
2813 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2814 BrowserTab.TabIndex := 0
2816 BrowserTab.TabIndex := i;
2819 //
\83^
\83u
\88Ê
\92u
\82ð
\8eæ
\93¾
2821 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2822 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2823 TWebBrowser(FBrowsers[1]) then begin
2828 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2831 //
\83^
\83u
\82ª
\96³
\82¢
\82Æ
\82«
\82È
\82Ç
\91Î
\8dô
2832 if (ins < 0) then begin
2835 BrowserTab.Tabs.InsertObject(ins, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2836 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2837 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2838 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2840 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2845 if ActiveTab then begin
2846 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2847 BrowserTab.TabIndex := 0
2849 BrowserTab.TabIndex := ins;
2852 Result := newBrowser;
2853 if(ActiveTab) or (idx = -1) then begin
2854 BrowserTab.OnChange(nil);
2857 if BrowserNullTab = nil then begin
2858 BrowserNullTab := TBrowserRecord.Create;
2859 BrowserNullTab.Browser := Browser;
2861 // if BrowserNullTab.thread <> ThreadItem then begin
2862 // BrowserNullTab.Movement := '';
2864 BrowserNullTab.thread := ThreadItem;
2865 Result := BrowserNullTab;
2866 BrowserTab.TabIndex := -1;
2867 SetContent(BrowserNullTab);
2870 if GikoSys.Setting.URLDisplay then
2871 AddressComboBox.Text := ThreadItem.URL;
2875 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2883 ThreadItem: TThreadItem;
2884 Thread: TBrowserRecord;
2885 ThreadTitle, ThreadPTitle: string;
2886 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2889 idx := BrowserTab.TabIndex;
2890 if (not FStartUp) and
2891 (FActiveContent <> nil) and
2892 (FActiveContent.Thread <> Thread.Thread) and
2893 (FActiveContent.Browser <> nil) and
2894 (Assigned(FActiveContent.Browser.ControlInterface.Document)) then begin
2897 FActiveContent.Thread.ScrollTop := FActiveContent.Browser.OleObject.Document.Body.ScrollTop;
2900 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2905 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2906 Thread.Browser.Navigate(BLANK_HTML);
2907 BrowserBoardNameLabel.Caption := '';
2908 ItemBoardImage.Picture := nil;
2909 BrowserNameLabel.Caption := '';
2910 ItemImage.Picture := nil;
2911 BrowserNullTab.Thread := nil;
2912 //TOleControl(BrowserNullTab.Browser).Visible := true;
2913 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2914 FActiveContent := nil;
2916 end else if Thread.Browser = nil then begin
2917 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2918 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2919 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2920 ReleaseOldestBrowser;
2921 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2922 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2925 ThreadTitle := Thread.Thread.Title;
2926 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2927 //ThreadScrollTop := Thread.Thread.ScrollTop;
2928 if Thread.Thread.IsLogFile then begin
2929 if not FileExists(Thread.Thread.GetThreadFileName) then begin
2930 Thread.Thread.DeleteLogFile;
2934 ThreadIsLog := Thread.Thread.IsLogFile;
2935 ThreadItem := Thread.Thread;
2936 ThreadNewArraical := Thread.Thread.NewArrival;
2937 //ThreadUnRead := Thread.Thread.UnRead;
2938 BBSID := ThreadItem.ParentBoard.BBSID;
2939 FileName := ThreadItem.FileName;
2941 if GetCapture = ListView.Handle then
2944 Screen.Cursor := crHourGlass;
2948 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2949 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2950 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2952 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2953 if (not Assigned(Thread.Browser.ControlInterface.Document)) then begin
2954 Thread.Browser.Navigate('about:blank');
2956 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2957 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2958 Application.ProcessMessages;
2959 if idx <> BrowserTab.TabIndex then begin
2964 if (Thread <> nil) and (ThreadItem <>nil) then begin
2965 BrowserBoardNameLabel.Caption := ThreadPTitle;
2966 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2967 BrowserNameLabel.Caption := ThreadTitle;
2968 ItemImage.Picture := nil;
2970 if ThreadNewArraical then
2971 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
2973 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
2975 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
2977 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
2978 BrowserNameLabel.Left := ItemImage.Left + 20;
2981 //ActiveContent
\81@
\82Ì
\8dX
\90V
2982 FActiveContent := Thread;
2984 if not ThreadIsLog then begin
2985 Self.Caption := GikoDataModule.CAPTION_NAME ;
2986 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\8fÁ
\8b\8e
2987 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
2989 Thread.Browser.BringToFront;
2990 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
2991 doc := Thread.Browser.OleObject.Document;
2993 doc.charset := 'Shift_JIS';
3000 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
3001 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\95\
\8e¦
3002 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
3003 StatusBar.Panels[THREADSIZE_PANEL].Width :=
3004 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
3005 //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«
3006 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
3007 if Thread.Repaint then begin
3008 Thread.Repaint := false;
3010 Thread.Browser.OnStatusTextChange := nil;
3011 LockWindowUpdate(Thread.Browser.ParentWindow);
3012 HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
3013 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
3014 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
3018 RefreshListView(ThreadItem);
3020 Screen.Cursor := crDefault;
3024 function TGikoForm.GetActiveContent(popup :Boolean = false): TThreadItem;
3027 if FActiveContent <> nil then begin
3028 Result := FActiveContent.Thread;
3030 (FResPopupBrowser <> nil) and (FResPopupBrowser.CurrentBrowser.Visible = True) then
3031 if (FResPopupBrowser.CurrentBrowser.Thread <> nil) then begin
3032 Result := FResPopupBrowser.CurrentBrowser.Thread;
3042 procedure TGikoForm.SetActiveList(Obj: TObject);
3046 // if FActiveList <> Obj then begin
3049 if ListView.Selected <> nil then
3050 idx := ListView.Selected.Index
3056 ListView.Items.Count := 0;
3057 ListView.Items.Clear;
3058 ListView.Selected := nil;
3059 // ListView.Columns.Clear;
3060 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
3061 and (FActiveContent.Thread.IsLogFile) then begin
3063 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
3065 on E: Exception do begin
3066 //
\83X
\83\8c\88ê
\97\97DL
\8cã
\82È
\82Ç
\82ÉFActiveContent
\82Ì
\8e\9d\82ÂThread
\82ª
3067 //
\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é
3068 ReleaseBrowser(FActiveContent);
3069 FActiveContent.Thread := nil;
3070 Self.Caption := GikoDataModule.CAPTION_NAME;
3074 Self.Caption := GikoDataModule.CAPTION_NAME;
3075 //Application.Title := CAPTION_NAME;
3077 // ActiveListColumnSave;
3079 Screen.Cursor := crHourGlass;
3081 if Obj is TBBS then begin
3082 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3083 end else if Obj is TCategory then begin
3084 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3085 end else if Obj is TBoard then begin
3086 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3089 Screen.Cursor := crDefault;
3092 if idx >= 0 then begin
3093 if idx >= ListView.Items.Count then
3094 idx := ListView.Items.Count - 1;
3095 ListView.ItemIndex := idx;
3096 ListView.ItemFocused := ListView.Items.Item[ idx ];
3102 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
3103 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
3104 function TGikoForm.GetActiveList: TObject;
3106 Result := FActiveList;
3109 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
3111 SetListViewType(AViewType, '', False);
3114 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
3119 for i := Length( BBSs ) - 1 downto 0 do begin
3120 BBSs[i].SelectText := SelectText;
3121 BBSs[i].KubetsuChk := KubetsuChk;
3123 BoardGroup.SpecialBBS.SelectText := SelectText;
3124 BoardGroup.SpecialBBS.KubetsuChk := KubetsuChk;
3126 ViewType := AViewType;
3127 if ActiveList is TBoard then begin
3128 Board := TBoard(ActiveList);
3130 //gvtAll: ListView.Items.Count := Board.Count;
3131 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
3132 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
3133 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
3134 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
3135 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
3139 SetActiveList(Board);
3143 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
3144 const ARect: TRect; var DefaultDraw: Boolean);
3150 if ListView.Items.Count = 0 then begin
3151 DefaultDraw := true;
3152 ListView.Canvas.Brush.Color := ListView.Color;
3153 ListView.Canvas.FillRect(ARect);
3157 ListView.Canvas.Font.Color := clWindowText;
3158 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3161 ListView.Canvas.Font.Color := clBlue;
3162 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';
3165 ListView.Canvas.Font.Color := clGreen;
3166 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3169 ListView.Canvas.Font.Color := clFuchsia;
3170 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';
3173 ListView.Canvas.Font.Color := clMaroon;
3174 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90¶
\91¶
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3177 ListView.Canvas.Font.Color := clNavy;
3178 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';
3179 if GetActiveList is TBoard then
3180 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
3188 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
3189 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
3190 ListView.Canvas.TextOut(p.X, p.Y, s);
3192 DefaultDraw := True;
3196 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
3198 Item: TDownloadItem;
3200 if not Board.IsThreadDatRead then
3201 GikoSys.ReadSubjectFile(Board);
3202 Item := TDownloadItem.Create;
3204 Item.Board := Board;
3205 Item.DownType := gdtBoard;
3206 Item.ForceDownload := ForceDownload;
3207 FControlThread.AddItem(Item);
3208 if FWorkCount = 0 then begin
3210 Animate.Active := True;
3213 Screen.Cursor := crAppStart;
3221 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
3223 Item: TDownloadItem;
3225 Item := TDownloadItem.Create;
3227 Item.ThreadItem := ThreadItem;
3228 Item.DownType := gdtThread;
3229 Item.ForceDownload := ForceDownload;
3230 FControlThread.AddItem(Item);
3231 if FWorkCount = 0 then begin
3233 Animate.Active := True;
3236 Screen.Cursor := crAppStart;
3244 procedure TGikoForm.PlaySound(SoundEventName: string);
3248 if not GikoSys.Setting.Mute then begin
3249 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
3250 if FileExists(FileName) then begin
3251 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
3252 sndPlaySound(nil, SND_SYNC);
3253 Application.ProcessMessages;
3255 sndPlaySound(PChar(FileName), SND_ASYNC);
3261 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
3262 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3264 FHistoryList.DeleteHistory( threadItem, TreeView, TreeType );
3267 procedure TGikoForm.ShowBBSTreeOld(
3275 FavoriteTreeView.Visible := False;
3276 FavoriteToolBar.Hide;
3277 TreeView.Visible := True;
3279 b := CabinetSelectPopupMenu.Items.Count - 1;
3280 for i := 0 to b do begin
3281 item := CabinetSelectPopupMenu.Items[ i ];
3282 if item is TBBSMenuItem then begin
3283 if TBBSMenuItem( item ).Data = inBBS then begin
3284 item.Checked := True;
3285 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3286 CabinetMenu.Items[ i ].Checked := True;
3287 GikoSys.Setting.CabinetIndex := i;
3291 item.Checked := False;
3292 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3293 CabinetMenu.Items[ i ].Checked := False;
3295 CabinetSelectToolButton.Caption := inBBS.Title;
3297 GikoDM.CabinetHistoryAction.Checked := False;
3298 GikoDM.CabinetFavoriteAction.Checked := False;
3300 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3301 FTreeType := gtt2ch;
3302 HistoryToolBar.Hide;
3303 FActiveBBS := inBBS;
3304 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3305 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3306 //?c???[??g?b?v?????I????
3307 if GetActiveList = nil then
3308 TreeView.Selected := TreeView.Items[0]
3310 for i := 0 to TreeView.Items.Count - 1 do begin
3311 if TreeView.Items[i].Data = GetActiveList then begin
3312 TreeView.Selected := TreeView.Items[i];
3316 TreeView.Selected := TreeView.Items[0]
3324 procedure TGikoForm.ShowBBSTree(
3333 FavoriteTreeView.Visible := False;
3334 FavoriteToolBar.Hide;
3335 TreeView.Visible := True;
3337 b := CabinetSelectPopupMenu.Items.Count - 1;
3338 for i := 0 to b do begin
3339 item := CabinetSelectPopupMenu.Items[ i ];
3340 if item is TBBSMenuItem then begin
3341 if TBBSMenuItem( item ).Data = inBBS then begin
3342 item.Checked := True;
3343 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3344 CabinetMenu.Items[ i ].Checked := True;
3345 GikoSys.Setting.CabinetIndex := i;
3349 item.Checked := False;
3350 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3351 CabinetMenu.Items[ i ].Checked := False;
3353 CabinetSelectToolButton.Caption := inBBS.Title;
3355 GikoDM.CabinetHistoryAction.Checked := False;
3356 GikoDM.CabinetFavoriteAction.Checked := False;
3358 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3359 or (not (CabinetPanel.Visible)) then begin
3360 FTreeType := gtt2ch;
3361 HistoryToolBar.Hide;
3362 FActiveBBS := inBBS;
3363 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3364 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3365 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3366 if GetActiveList = nil then begin
3368 TreeClick( TreeView.Items[0] );
3372 for i := 0 to TreeView.Items.Count - 1 do begin
3373 if TreeView.Items[i].Data = GetActiveList then begin
3374 TreeClick( TreeView.Items[i] );
3378 TreeClick( TreeView.Items[0] );
3386 procedure TGikoForm.ShowHistoryTree;
3391 if CabinetPanel.Visible then begin
3392 if FTreeType = gttHistory then begin
3393 CabinetVisible( False );
3394 GikoDM.CabinetHistoryAction.Checked := False;
3396 GikoDM.CabinetHistoryAction.Checked := True;
3399 CabinetVisible( True );
3400 GikoDM.CabinetHistoryAction.Checked := True;
3403 // BBS...BBS, History, Favorite
3404 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3406 FavoriteTreeView.Visible := False;
3407 TreeView.Visible := True;
3409 GikoDM.CabinetBBSAction.Checked := False;
3410 GikoDM.CabinetFavoriteAction.Checked := False;
3412 if FTreeType <> gttHistory then begin
3413 b := CabinetSelectPopupMenu.Items.Count - 1;
3414 for i := 0 to b do begin
3415 item := CabinetSelectPopupMenu.Items[ i ];
3416 if item is TBBSMenuItem then begin
3417 item.Checked := False;
3418 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3419 CabinetMenu.Items[ i ].Checked := False;
3423 FTreeType := gttHistory;
3424 HistoryToolBar.Show;
3425 FavoriteToolBar.Hide;
3426 FHistoryList.SetTreeNode( TreeView );
3427 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3431 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3433 ChangeEvent: TTVChangedEvent;
3434 ChangingEvent: TTVChangingEvent;
3438 if Item is TCategory then
3439 bbs := TCategory( Item ).ParenTBBS
3440 else if Item is TBoard then
3441 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3445 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3446 if Item <> FActiveList then begin
3448 ChangingEvent := nil;
3450 if not CallEvent then begin
3451 ChangeEvent := TreeView.OnChange;
3452 ChangingEvent := TreeView.OnChanging;
3455 if not CallEvent then begin
3456 TreeView.OnChange := nil;
3457 TreeView.OnChanging := nil;
3459 //Application.ProcessMessages;
3460 for i := 0 to TreeView.Items.Count - 1 do begin
3461 if TreeView.Items[i].Data = Item then begin
3462 TreeView.Items[i].Selected := True;
3464 TreeClick(TreeView.Items[i]);
3468 //Application.ProcessMessages;
3470 if not CallEvent then begin
3471 TreeView.OnChange := ChangeEvent;
3472 TreeView.OnChanging := ChangingEvent;
3477 if Item <> FActiveList then begin
3478 ActiveListColumnSave;
3479 if (Item is TBBS) or (Item is TCategory) then begin
3480 ListView.Columns.Clear;
3481 SetActiveList( Item );
3482 end else if Item is TBoard then begin
3483 if not TBoard( Item ).IsThreadDatRead then begin
3484 Screen.Cursor := crHourGlass;
3486 if not TBoard( Item ).IsThreadDatRead then
3487 GikoSys.ReadSubjectFile(TBoard( Item ));
3489 Screen.Cursor := crDefault;
3492 Sort.SetSortDate(Now());
3493 SetActiveList( Item );
3498 if Item is TBoard then begin // not TCategory
3499 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3500 if GikoSys.Setting.ListWidthState = glsMax then begin
3501 GikoDM.BrowserMinAction.Execute;
3502 if GikoForm.Visible then
3506 if GikoSys.Setting.ListHeightState = glsMax then begin
3507 GikoDM.BrowserMinAction.Execute;
3508 if GikoForm.Visible then
3515 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3516 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3518 listItem : TListItem;
3519 threadItem : TThreadItem;
3526 if not (GetActiveList is TBoard) then Exit;
3527 listItem := ListView.GetItemAt( X, Y );
3528 if listItem = nil then Exit;
3529 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3531 threadItem := TThreadItem(ListItem.Data);
3532 InsertBrowserTab(threadItem, False);
3533 if threadItem.IsLogFile then
3534 ListView.UpdateItems(listItem.Index, listItem.Index);
3538 //
\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Å
3539 if (ssDouble in Shift) then
3540 ListDoubleClick(Shift)
3548 Windows.ClientToScreen( ListView.Handle, pos );
3549 ListPopupMenu.Popup( pos.X, pos.Y );
3555 procedure TGikoForm.ListClick;
3557 ListItem: TListItem;
3558 ThreadItem: TThreadItem;
3560 if ListView.SelCount <> 1 then Exit;
3561 ListItem := ListView.Selected;
3562 if ListItem = nil then Exit;
3563 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3565 ThreadItem := TThreadItem(ListItem.Data);
3566 if ThreadItem.IsLogFile then begin
3567 InsertBrowserTab(ThreadItem);
3568 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3570 InsertBrowserTab(ThreadItem);
3573 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3574 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3575 if GikoSys.Setting.ListWidthState = glsMin then begin
3576 GikoDM.BrowserMaxAndFocusAction.Execute;
3579 if GikoSys.Setting.ListHeightState = glsMin then begin
3580 GikoDM.BrowserMaxAndFocusAction.Execute;
3586 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3588 ThreadItem: TThreadItem;
3591 shiftDown := (ssShift in Shift);
3593 if ListView.Selected = nil then Exit;
3595 if TObject(ListView.Selected.Data) is TCategory then begin
3596 SelectTreeNode(ListView.Selected.Data, True);
3597 end else if TObject(ListView.Selected.Data) is TBoard then begin
3598 SelectTreeNode(ListView.Selected.Data, True)
3599 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3600 Application.ProcessMessages;
3601 ThreadItem := TThreadItem(ListView.Selected.Data);
3602 DownloadContent(ThreadItem, shiftDown);
3604 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3605 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3606 if GikoSys.Setting.ListWidthState = glsMin then begin
3607 GikoDM.BrowserMaxAction.Execute;
3608 GikoDM.SetFocusForBrowserAction.Execute;
3611 if GikoSys.Setting.ListHeightState = glsMin then begin
3612 GikoDM.BrowserMaxAction.Execute;
3613 GikoDM.SetFocusForBrowserAction.Execute;
3620 procedure TGikoForm.BrowserMovement(const AName: string);
3622 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3623 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3624 and (FActiveContent <> nil) then begin
3625 FActiveContent.Move(AName);
3628 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
3629 procedure TGikoForm.BrowserMovement(scroll: Integer);
3631 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3632 and (FActiveContent <> nil) then begin
3633 FActiveContent.Move(scroll);
3636 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3638 if TObject(Node.Data) is TBBS then begin
3639 TBBS(Node.Data).NodeExpand := False;
3640 end else if TObject(Node.Data) is TCategory then begin
3641 TCategory(Node.Data).NodeExpand := False;
3642 end else if TObject(Node.Data) is TBoard then begin
3643 TBoard(Node.Data).NodeExpand := False;
3645 if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3646 TreeClick(TreeView.Selected);
3650 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3652 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3654 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3656 TreeSplitter.Visible := isVisible;
3657 CabinetPanel.Visible := isVisible;
3658 GikoDM.CabinetVisibleAction.Checked := isVisible;
3661 procedure TGikoForm.SelectListItem(List: TList);
3663 TmpListItem: TListItem;
3667 TmpListItem := ListView.Selected;
3668 while TmpListItem <> nil do begin
3669 List.Add(TmpListItem.Data);
3670 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3675 procedure TGikoForm.FormResize(Sender: TObject);
3678 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3679 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3681 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3682 if GikoSys.Setting.ListWidthState = glsMin then begin
3683 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3684 ViewPanel.Width := ThreadMainPanel.Width - 80;
3687 if GikoSys.Setting.ListHeightState = glsMin then begin
3688 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3689 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3693 FIsIgnoreResize := rtResizing;
3694 PostMessage( Handle, USER_RESIZED, 0, 0 );
3699 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3703 FTabHintIndex := -1;
3704 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3705 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3706 DeleteTab(i, BrowserTab.TabIndex);
3711 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3715 FTabHintIndex := -1;
3716 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3717 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3718 DeleteTab(i, BrowserTab.TabIndex);
3723 procedure TGikoForm.DeleteTab(index, selectIndex: Integer);
3725 browserRec : TBrowserRecord;
3729 browserRec := TBrowserRecord(BrowserTab.Tabs.Objects[index]);
3731 if browserRec.Browser <> nil then begin
3732 doc := browserRec.Browser.OleObject.Document;
3733 browserRec.Thread.ScrollTop := doc.Body.ScrollTop;
3736 browserRec.Thread.ScrollTop := 0;
3739 if(FActiveContent = browserRec) then
3740 FActiveContent := nil;
3741 if browserRec.Browser <> nil then begin
3742 j := FBrowsers.IndexOf(browserRec.Browser);
3744 FBrowsers.Move(j, BROWSER_COUNT - 1);
3747 BrowserTab.Tabs.BeginUpdate;
3749 GikoSys.Setting.LastCloseTabURL := browserRec.Thread.URL;
3751 if ( BrowserTab.Tabs.Count - 1 = index ) and
3752 ( BrowserTab.TabRect(index).Left
3753 <= BrowserTab.DisplayRect.Left ) then begin
3754 BrowserTab.ScrollTabs(-1);
3756 BrowserTab.Tabs.Delete(index);
3757 if selectIndex > index then begin
3758 BrowserTab.TabIndex := selectIndex - 1;
3760 if BrowserTab.Tabs.Count -1 >= selectIndex then
3761 BrowserTab.TabIndex := selectIndex
3763 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3766 BrowserTab.Tabs.EndUpdate;
3768 if BrowserTab.Tabs.Count = 0 then begin
3769 BrowserNullTab.Thread := nil;
3772 if(BrowserTab.TabIndex <> -1) and
3773 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3774 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
3775 ReleaseOldestBrowser;
3777 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3778 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3779 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3780 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3783 if( FActiveContent = nil) then
3784 BrowserTab.OnChange(nil);
3786 function TGikoForm.Hook(var Message: TMessage): Boolean;
3788 //
\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Ì
3789 //
\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ð
3793 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3795 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3799 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3801 bBoard, bCategory : Boolean;
3803 bBoard := (GetActiveList is TBoard);
3804 bCategory := (GetActiveList is TCategory);
3805 ItemRoundPMenu.Visible := bBoard;
3806 ItemReservPMenu.Visible := bBoard;
3807 LPMSep01.Visible := bBoard;
3808 ListRoundPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3809 ListReservPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3810 LPMSep02.Visible := bCategory or bBoard;
3811 KidokuPMenu.Visible := bBoard;
3812 MidokuPMenu.Visible := bBoard;
3813 UrlCopyPMenu.Visible := bCategory or bBoard;
3814 NameUrlCopyPMenu.Visible := bCategory or bBoard;
3815 AllSelectPMenu.Visible := bCategory or bBoard;
3816 LPMSep05.Visible := bCategory or bBoard;
3817 DeletePMenu.Visible := bBoard;
3818 LPMSep06.Visible := bCategory or bBoard;
3819 BoardFavoriteAddMenu.Visible := bCategory;
3820 ThreadFavoriteAddMenu.Visible := bBoard;
3821 SaveThreadFile.Visible := bBoard;
3822 AddRoundNameMenu(ItemReservPMenu);
3823 AddRoundNameMenu(ListReservPMenu);
3826 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3828 FClickNode := TreeView.Selected;
3829 if FClickNode = nil then begin
3830 TreeSelectThreadPupupMenu.Visible := False;
3831 TreeSelectBoardPupupMenu.Visible := False;
3832 TPMSep01.Visible := False;
3833 TreeSelectURLPupupMenu.Visible := False;
3834 TreeSelectNamePupupMenu.Visible := False;
3835 TreeSelectNameURLPupupMenu.Visible := False;
3836 TreeSelectFavoriteAddPupupMenu.Visible := False;
3837 TreeSelectLogDeleteSeparator.Visible := False;
3838 TreeSelectLogDeletePopupMenu.Visible := False;
3839 end else if TObject(FClickNode.Data) is TBoard then begin
3840 TreeSelectThreadPupupMenu.Visible := False;
3841 TreeSelectBoardPupupMenu.Visible := True;
3842 TPMSep01.Visible := True;
3843 TreeSelectURLPupupMenu.Visible := True;
3844 TreeSelectNamePupupMenu.Visible := True;
3845 TreeSelectNameURLPupupMenu.Visible := True;
3846 TreeSelectFavoriteAddPupupMenu.Visible := True;
3847 TreeSelectLogDeleteSeparator.Visible := False;
3848 TreeSelectLogDeletePopupMenu.Visible := False;
3849 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3850 TreeSelectThreadPupupMenu.Visible := False;
3851 TreeSelectBoardPupupMenu.Visible := True;
3852 TPMSep01.Visible := True;
3853 TreeSelectURLPupupMenu.Visible := True;
3854 TreeSelectNamePupupMenu.Visible := True;
3855 TreeSelectNameURLPupupMenu.Visible := True;
3856 TreeSelectFavoriteAddPupupMenu.Visible := True;
3857 TreeSelectLogDeleteSeparator.Visible := False;
3858 TreeSelectLogDeletePopupMenu.Visible := False;
3859 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3860 TreeSelectThreadPupupMenu.Visible := True;
3861 TreeSelectBoardPupupMenu.Visible := False;
3862 TPMSep01.Visible := True;
3863 TreeSelectURLPupupMenu.Visible := True;
3864 TreeSelectNamePupupMenu.Visible := True;
3865 TreeSelectNameURLPupupMenu.Visible := True;
3866 TreeSelectFavoriteAddPupupMenu.Visible := True;
3867 TreeSelectLogDeleteSeparator.Visible := True;
3868 TreeSelectLogDeletePopupMenu.Visible := True;
3869 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3870 TreeSelectThreadPupupMenu.Visible := True;
3871 TreeSelectBoardPupupMenu.Visible := False;
3872 TPMSep01.Visible := True;
3873 TreeSelectURLPupupMenu.Visible := True;
3874 TreeSelectNamePupupMenu.Visible := True;
3875 TreeSelectNameURLPupupMenu.Visible := True;
3876 TreeSelectFavoriteAddPupupMenu.Visible := True;
3877 TreeSelectLogDeleteSeparator.Visible := True;
3878 TreeSelectLogDeletePopupMenu.Visible := True;
3879 end else if (TObject(FClickNode.Data) is TCategory) then begin
3880 TreeSelectThreadPupupMenu.Visible := False;
3881 TreeSelectBoardPupupMenu.Visible := False;
3882 TPMSep01.Visible := False;
3883 TreeSelectURLPupupMenu.Visible := False;
3884 TreeSelectNamePupupMenu.Visible := True;
3885 TreeSelectNameURLPupupMenu.Visible := False;
3886 TreeSelectFavoriteAddPupupMenu.Visible := False;
3887 TreeSelectLogDeleteSeparator.Visible := False;
3888 TreeSelectLogDeletePopupMenu.Visible := False;
3889 end else if FClickNode.IsFirstNode then begin
3890 TreeSelectThreadPupupMenu.Visible := False;
3891 TreeSelectBoardPupupMenu.Visible := False;
3892 TPMSep01.Visible := False;
3893 TreeSelectURLPupupMenu.Visible := False;
3894 TreeSelectNamePupupMenu.Visible := True;
3895 TreeSelectNameURLPupupMenu.Visible := False;
3896 TreeSelectFavoriteAddPupupMenu.Visible := False;
3897 TreeSelectLogDeleteSeparator.Visible := False;
3898 TreeSelectLogDeletePopupMenu.Visible := False;
3900 TreeSelectThreadPupupMenu.Visible := False;
3901 TreeSelectBoardPupupMenu.Visible := False;
3902 TPMSep01.Visible := False;
3903 TreeSelectURLPupupMenu.Visible := False;
3904 TreeSelectNamePupupMenu.Visible := False;
3905 TreeSelectNameURLPupupMenu.Visible := False;
3906 TreeSelectFavoriteAddPupupMenu.Visible := False;
3907 TreeSelectLogDeleteSeparator.Visible := False;
3908 TreeSelectLogDeletePopupMenu.Visible := False;
3912 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
3913 var ppDisp: IDispatch; var Cancel: WordBool);
3922 threadItem: TThreadItem;
3923 aElement : IHTMLElement;
3924 senderBrowser : TWebBrowser;
3925 doc : IHTMLDocument2;
3928 Writeln(IntToStr(Integer(ppDisp)));
3932 if not( TObject(Sender) is TWebBrowser )then
3935 senderBrowser := TWebBrowser(Sender);
3936 doc := senderBrowser.ControlInterface.Document as IHTMLDocument2;
3937 if not Assigned(doc) then
3940 aElement := doc.activeElement;
3941 if not Assigned(aElement) then
3944 Text := aElement.Get_outerText;
3945 Html := aElement.Get_outerHTML;
3947 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
3948 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
3949 if GikoSys.Setting.ResAnchorJamp then begin
3951 Text := ZenToHan(Trim(Text));
3953 if(AnsiPos('>>', Text) = 1) then begin
3954 //Text := Copy(Text, 3, Length(Text) - 2);
3957 //Text := Copy(Text, 2, Length(Text) - 1);
3961 if AnsiPos('-', Text) <> 0 then begin
3962 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
3963 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
3964 wkIntTo := StrToIntDef(Text, 0);
3965 if wkIntTo < wkIntSt then
3968 wkIntSt := StrToIntDef(Text, 0);
3971 if wkIntSt <> 0 then begin
3972 FActiveContent.IDAnchorPopup('');
3973 MoveHisotryManager.pushItem(FActiveContent);
3974 if (Sender is TResPopupBrowser) then begin
3975 TResPopupBrowser(Sender).ChildClear;
3977 GetActiveContent(true),
3978 GetActiveContent(true).URL + '&st=' +
3979 IntToStr(wkIntSt) + '&to=' + IntToStr(wkIntSt));
3981 BrowserMovement(IntToStr(wkIntSt));
3986 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
3988 URL := GikoSys.GetHRefText(Html);
3989 URL := GikoSys.HTMLDecode(URL);
3990 if AnsiPos('BE:', URL) = 1 then begin
3991 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
3992 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
3993 threadItem := FActiveContent.Thread;
3994 if threadItem = nil then Exit;
3995 URL := BE_PHP_URL + BNum + '&u=d'
3996 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
3999 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
4000 ( AnsiPos('ftp://', URL) = 1) then begin
4001 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
4002 if GikoSys.Setting.LinkAddAddressBar then begin
4003 idx := AddressComboBox.Items.IndexOf(URL);
4004 if idx = -1 then begin
4005 AddressComboBox.Items.Insert(0, URL);
4006 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
4007 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
4009 AddressComboBox.Items.Delete(idx);
4010 AddressComboBox.Items.Insert(0, URL);
4013 if (Sender is TResPopupBrowser) then begin
4014 TResPopupBrowser(Sender).ChildClear
4017 MoveHisotryManager.pushItem(FActiveContent);
4024 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
4026 if Mouse.Capture <> 0 then
4028 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4029 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
4030 FBrowserSizeWidth := ViewPanel.Width;
4032 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
4033 FBrowserSizeHeight := ViewPanel.Height;
4035 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4036 if ViewPanel.Width < 2 then begin
4037 ViewPanel.Width := 1;
4038 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
4039 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
4040 GikoSys.Setting.ListWidthState := glsMax;
4041 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
4042 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
4043 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
4044 GikoSys.Setting.ListWidthState := glsMin;
4046 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
4047 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
4048 GikoSys.Setting.ListWidthState := glsNormal;
4051 if ViewPanel.Height < 2 then begin
4052 ViewPanel.Height := 1;
4053 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4054 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4055 GikoSys.Setting.ListHeightState := glsMax;
4056 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
4057 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4058 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4059 GikoSys.Setting.ListHeightState := glsMin;
4061 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4062 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4063 GikoSys.Setting.ListHeightState := glsNormal;
4066 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
4067 FBrowserSizeHeight := ViewPanel.Height
4068 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
4069 FBrowserSizeWidth := ViewPanel.Width;}
4072 procedure TGikoForm.BrowserTabChange(Sender: TObject);
4077 BrowserTab.Tabs.BeginUpdate;
4079 if not BrowserTab.Dragging then begin
4080 FTabHintIndex := -1;
4081 BrowserTab.Hint := '';
4082 idx := BrowserTab.TabIndex;
4083 if idx = -1 then begin
4084 SetContent(BrowserNullTab);
4086 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
4087 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
4088 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
4090 FBrowsers.Move(j ,0);
4092 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
4093 (FActiveContent.Browser <> BrowserNullTab.Browser) and
4094 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
4095 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4097 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
4098 ReleaseOldestBrowser;
4100 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
4101 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
4102 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4104 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
4105 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
4106 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4108 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
4109 AddressComboBox.Text := GetActiveContent.URL;
4111 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
4112 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
4115 GikoDM.SetFocusForBrowserAction.Execute;
4119 BrowserTab.Tabs.EndUpdate;
4124 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
4125 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
4131 if Button = mbMiddle then begin
4132 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
4135 p := BrowserTab.ScreenToClient(p);
4136 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
4138 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4139 end else if Button = mbLeft then begin
4140 FDragWFirst := true;
4141 FMouseDownPos.X := X;
4142 FMouseDownPos.Y := Y;
4147 procedure TGikoForm.SetBrowserTabState;
4149 CoolBand: TCoolBand;
4151 BrowserBottomPanel.AutoSize := False;
4152 if GikoSys.Setting.BrowserTabVisible then begin
4154 BrowserTab.Tabs.BeginUpdate;
4156 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
4157 BrowserTab.Style := tsTabs;
4158 if GikoSys.Setting.BrowserTabPosition = gtpTop then
4159 BrowserTab.TabPosition := tpTop
4161 BrowserTab.TabPosition := tpBottom;
4162 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
4163 BrowserTab.TabPosition := tpTop;
4164 BrowserTab.Style := tsButtons;
4166 BrowserTab.TabPosition := tpTop;
4167 BrowserTab.Style := tsFlatButtons
4170 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
4171 BrowserTab.Parent := BrowserTabToolBar;
4172 BrowserBottomPanel.Hide;
4173 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4174 if CoolBand <> nil then
4175 CoolBand.Visible := True;
4177 BrowserTab.Parent := BrowserBottomPanel;
4178 BrowserTab.Top := 0;
4179 BrowserTab.Left := 0;
4180 BrowserBottomPanel.Show;
4181 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4182 if CoolBand <> nil then
4183 CoolBand.Visible := False;
4186 BrowserTab.Tabs.EndUpdate;
4190 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4191 if CoolBand <> nil then
4192 CoolBand.Visible := False;
4193 BrowserBottomPanel.Visible := False;
4194 GikoDM.AllTabCloseAction.Execute;
4198 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
4199 Y: Integer; State: TDragState; var Accept: Boolean);
4203 idx := BrowserTab.IndexOfTabAt(X, Y);
4204 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
4207 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
4212 FDragWFirst := False;
4213 idx := BrowserTab.IndexOfTabAt(X, Y);
4215 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
4218 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
4219 Shift: TShiftState; X, Y: Integer);
4222 ThreadItem: TThreadItem;
4225 TabIdx := BrowserTab.IndexOfTabAt(x, y);
4227 if ( ssLeft in Shift ) then begin
4228 if (FDragWFirst) then begin
4229 BrowserTab.EndDrag(false);
4230 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
4233 BrowserTab.EndDrag(false);
4234 FDragWFirst := false;
4237 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
4238 Application.CancelHint;
4239 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
4240 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
4241 BrowserTab.Hint := ThreadItem.Title;
4242 Application.ShowHint := True;
4244 BrowserTab.Hint := '';
4245 Application.ShowHint := True;
4247 FTabHintIndex := TabIdx;
4252 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
4253 const pDisp: IDispatch; var URL: OleVariant);
4255 BrowserRecord :TBrowserRecord;
4257 doc : IHTMLDocument2;
4258 threadItem : TThreadItem;
4260 if TObject(Sender) is TWebBrowser then begin
4261 BrowserRecord := nil;
4262 if TWebBrowser(Sender) <> Browser then begin
4263 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4264 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
4265 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
4269 if BrowserRecord <> nil then begin
4270 if BrowserRecord.Event <> nil then
4271 BrowserRecord.Event.Free;
4272 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, BrowserRecord.Browser.ControlInterface.Document, HTMLDocumentEvents2);
4273 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4274 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4277 if GetActiveContent <> nil then begin
4278 if FEvent <> nil then
4280 FEvent := THTMLDocumentEventSink.Create(Self, Browser.ControlInterface.Document, HTMLDocumentEvents2);
4281 FEvent.OnContextMenu := OnDocumentContextMenu;
4282 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4284 if FEvent <> nil then begin
4292 if (BrowserRecord <> nil) and
4293 Assigned( BrowserRecord.Thread ) then begin
4294 threadItem := BrowserRecord.Thread;
4296 if (threadItem.JumpAddress > 0) then begin
4297 if threadItem.UnRead then begin
4298 threadItem.UnRead := False;
4300 RefreshListView(threadItem);
4302 //
\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®
4303 //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4304 if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4305 BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4306 threadItem.JumpAddress := 0;
4308 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4311 end else if threadItem.UnRead then begin
4312 threadItem.UnRead := False;
4314 BrowserRecord.Move('new');
4315 RefreshListView(threadItem);
4316 end else if threadItem.ScrollTop <> 0 then begin
4318 doc := BrowserRecord.Browser.ControlInterface.Document as IHTMLDocument2;
4319 (doc.body as IHTMLElement2).ScrollTop := threadItem.ScrollTop;
4322 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4327 LockWindowUpdate(0);
4330 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4332 AddRoundNameMenu(RoundNamePopupMenu.Items);
4335 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4341 Item := TMenuItem.Create(Self);
4342 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4343 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4345 Item := TMenuItem.Create(Self);
4346 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4347 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4349 Item := TMenuItem.Create(Self);
4350 Item.Caption := '-';
4352 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4353 Item := TMenuItem.Create(Self);
4354 Item.Caption := RoundList.RoundNameList[i];
4355 Item.OnClick := SetSelectRoundName;
4360 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4362 threadItem : TThreadItem;
4364 if ParentName <> 'dummy1' then begin
4365 SetSelectItemRound(RoundFlag, RoundName);
4367 threadItem := GetActiveContent;
4368 if threadItem <> nil then begin
4369 threadItem.RoundName := RoundName;
4371 RoundList.RoundNameList.Add(RoundName);
4372 threadItem.Round := RoundFlag;
4377 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4382 List := TList.Create;
4384 SelectListItem(List);
4385 for i := 0 to List.Count - 1 do begin
4386 if TObject(List[i]) is TBoard then begin
4387 TBoard(List[i]).RoundName := RoundName;
4389 RoundList.RoundNameList.Add(RoundName);
4390 TBoard(List[i]).Round := RoundFlag;
4391 end else if TObject(List[i]) is TThreadItem then begin
4392 if TThreadItem(List[i]).IsLogFile then begin
4393 TThreadItem(List[i]).RoundName := RoundName;
4395 RoundList.RoundNameList.Add(RoundName);
4396 TThreadItem(List[i]).Round := RoundFlag;
4405 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4407 MenuItem: TMenuItem;
4409 if Sender is TMenuItem then begin
4410 MenuItem := TMenuItem(Sender);
4411 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4416 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4421 if CoolBar = nil then
4423 for i := 0 to CoolBar.Bands.Count - 1 do begin
4424 if CoolBar.Bands[i].Control = Control then begin
4425 Result := CoolBar.Bands[i];
4431 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4433 if BrowserTab.Parent = BrowserTabToolBar then
4434 BrowserTab.Width := BrowserTabToolBar.Width;
4437 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4442 procedure TGikoForm.SetMenuFont;
4444 // GikoSys.MenuFont(MenuToolBar.Font);
4445 // MenuToolBar.Buttons[0].AutoSize := False;
4446 // MenuToolBar.Buttons[0].AutoSize := True;
4447 // MenuToolBar.Font.Color := clMenuText;
4448 GikoSys.MenuFont(MainCoolBar.Font);
4449 MenuToolBar.Buttons[0].AutoSize := False;
4450 MenuToolBar.Buttons[0].AutoSize := True;
4451 MainCoolBar.AutoSize := False;
4452 MainCoolBar.AutoSize := True;
4453 GikoSys.MenuFont(ListCoolBar.Font);
4454 GikoSys.MenuFont(BrowserCoolBar.Font);
4455 // MenuToolBar.Font.Color := clMenuText;
4458 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4462 if FavoriteDM.Modified then begin
4465 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4466 NewMenu := TMenuItem.Create(MainMenu);
4467 NewMenu.Action := GikoDM.FavoriteAddAction;
4468 FavoriteMenu.Add(NewMenu);
4469 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4470 NewMenu := TMenuItem.Create(FavoriteMenu);
4471 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4472 FavoriteMenu.Add(NewMenu);
4473 //
\83Z
\83p
\83\8c\81[
\83^
4474 FavoriteMenu.InsertNewLineAfter(NewMenu);
4475 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4476 FavoriteDM.Modified := false;
4480 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4483 NewMenu: array of TMenuItem;
4485 SetLength(NewMenu, Node.Count);
4486 Node := Node.getFirstChild;
4488 while ( Node <> nil ) do begin
4489 NewMenu[i] := TFavoriteMenuItem.Create(nil);
4490 NewMenu[i].AutoHotkeys := maAutomatic;
4491 NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4492 TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4494 if TObject(Node.Data) is TFavoriteFolder then begin
4495 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4496 CreateFavMenu(Node, NewMenu[i]);
4497 end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4498 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4499 NewMenu[i].OnClick := FavoriteClick;
4500 end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4501 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4502 NewMenu[i].OnClick := FavoriteClick;
4505 Node := Node.getNextSibling;
4507 MenuItem.Add(NewMenu);
4510 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4512 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';
4513 TitleAdd: String = '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á';
4515 Dlg : TFavoriteAddDialog;
4521 if Item is TFavoriteBoardItem then
4522 Item := TFavoriteBoardItem( Item ).Item
4523 else if Item is TFavoriteThreadItem then
4524 Item := TFavoriteThreadItem( Item ).Item;
4526 Node := FavoriteTreeView.Items.GetFirstNode;
4527 if Item is TBoard then begin
4528 ItemURL := TBoard( Item ).URL;
4529 while Node <> nil do begin
4531 if TObject( Data ) is TFavoriteBoardItem then begin
4532 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4533 if Application.MessageBox(PChar(MsgAdd) , PChar(TitleAdd), MB_YESNO ) = IDNO then
4538 Node := Node.GetNext;
4540 Dlg := TFavoriteAddDialog.Create(Self);
4542 Dlg.SetBoard( TBoard( Item ) );
4547 end else if Item is TThreadItem then begin
4548 ItemURL := TThreadItem( Item ).URL;
4549 while Node <> nil do begin
4551 if TObject( Data ) is TFavoriteThreadItem then begin
4552 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
4553 if Application.MessageBox( PChar(MsgAdd), PChar(TitleAdd), MB_YESNO ) = IDNO then
4558 Node := Node.GetNext;
4560 Dlg := TFavoriteAddDialog.Create(Self);
4562 Dlg.SetThreadItem( TThreadItem( Item ) );
4572 procedure TGikoForm.FavoriteClick(Sender: TObject);
4574 FavoriteClick( Sender, True );
4577 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4580 ThreadItem: TThreadItem;
4581 FavBoard: TFavoriteBoardItem;
4582 FavThread: TFavoriteThreadItem;
4586 if Sender is TFavoriteMenuItem then
4587 Item := TFavoriteMenuItem(Sender).Data
4588 else if Sender is TLinkToolButton then
4589 Item := TLinkToolButton(Sender).Data
4590 else if Sender is TTreeNode then
4591 Item := TTreeNode( Sender ).Data
4595 if TObject(Item) is TFavoriteBoardItem then begin
4596 FavBoard := TFavoriteBoardItem(Item);
4597 Board := FavBoard.Item;
4598 if Board <> nil then begin
4599 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4600 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4601 SelectTreeNode(Board, True);
4603 end else if TObject(Item) is TFavoriteThreadItem then begin
4604 FavThread := TFavoriteThreadItem(Item);
4605 ThreadItem := FavThread.Item;
4606 if ThreadItem = nil then
4609 InsertBrowserTab(ThreadItem, ActiveTab);
4611 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4612 if GikoSys.Setting.ListWidthState = glsMin then begin
4613 GikoDM.BrowserMaxAndFocusAction.Execute;
4616 if GikoSys.Setting.ListHeightState = glsMin then begin
4617 GikoDM.BrowserMaxAndFocusAction.Execute;
4623 procedure TGikoForm.BBSMenuItemOnClick(
4628 if Sender is TBBSMenuItem then
4629 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4633 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4635 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4638 //!
\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é)
4639 procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4641 stRes, edRes : Int64;
4642 browserRec : TBrowserRecord;
4643 threadNumber : String;
4644 doc : IHTMLDocument2;
4648 Thread.JumpAddress := 0;
4649 //
\83^
\83u
\82ð
\90¶
\90¬
4650 browserRec := InsertBrowserTab(Thread);
4651 if (browserRec <> nil) then begin
4652 // JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N
\82·
\82é
4653 threadNumber := ChangeFileExt(Thread.FileName, '');
4654 GikoSys.GetPopupResNumber( URL, stRes, edRes );
4655 //
\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
4656 if (StrToInt64(threadNumber) = stRes) then begin
4657 if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4658 and (Pos('&st=' + threadNumber , URL) = 0) then begin
4662 if ( stRes > 0 ) then begin
4663 Thread.JumpAddress := stRes;
4665 //
\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é
4666 if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4667 DownloadContent(Thread);
4668 end else if (not browserRec.Repaint) and (stRes > 0) then begin
4669 browserRec.Move(IntToStr(stRes));
4670 Thread.JumpAddress := 0;
4672 doc := browserRec.Browser.ControlInterface.Document as IHTMLDocument2;
4673 if Assigned(doc) then
4674 Thread.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
4681 procedure TGikoForm.MoveToURL(const inURL: string);
4683 protocol, host, path, document, port, bookmark : string;
4684 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4686 BBSID, BBSKey: string;
4687 {tmpBoard,} Board: TBoard;
4688 ThreadItem: TThreadItem;
4691 tmpThread : TThreadItem;
4692 shiftDown : Boolean;
4696 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4697 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4700 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4701 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4702 if shiftDown then begin
4703 GikoSys.OpenBrowser(inURL, gbtUserApp);
4705 end else if ctrlDown then begin
4706 GikoSys.OpenBrowser(inURL, gbtIE);
4710 //=====
\83v
\83\89\83O
\83C
\83\93
4713 bi := Length(BoardGroups) - 1;
4714 for i := 1 to bi do begin
4715 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4716 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4719 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4720 Board := BBSsFindBoardFromURL( boardURL );
4723 if Board = nil then begin
4725 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4726 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4729 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4730 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4731 ShowBBSTree( BBSs[ 1 ] );
4734 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4735 if not Board.IsThreadDatRead then begin
4736 GikoSys.ReadSubjectFile( Board );
4740 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4741 if ThreadItem = nil then begin
4742 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4743 ThreadItem := tmpThread;
4744 Board.Insert( 0, ThreadItem );
4745 if ActiveList is TBoard then begin
4746 if TBoard(ActiveList) = Board then
4747 ListView.Items.Count := ListView.Items.Count + 1;
4752 OpenThreadItem(ThreadItem, inURL);
4759 Board := BBSsFindBoardFromURL(
4760 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4762 if Board <> nil then begin
4763 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4764 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4765 SelectTreeNode( Board, True );
4773 // 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¢
4777 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4778 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4779 Board := BBSsFindBoardFromURL( boardURL );
4780 if Board = nil then begin
4781 //
\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
4782 GikoSys.OpenBrowser(inURL, gbtUserApp);
4785 //
\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é
4787 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4788 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4789 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4790 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4791 GikoSys.OpenBrowser(inURL, gbtUserApp);
4796 if not Board.IsThreadDatRead then
4797 GikoSys.ReadSubjectFile(Board);
4798 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4799 ThreadItem := Board.FindThreadFromURL( URL );
4800 //
\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)
4801 if ThreadItem = nil then begin
4802 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4805 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ª
\82È
\82¢
\82È
\82ç
\90¶
\90¬
\82·
\82é
\81B
4806 if ThreadItem = nil then begin
4807 ThreadItem := TThreadItem.Create( nil, Board, URL );
4808 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4809 Board.Insert(0, ThreadItem);
4810 if ActiveList is TBoard then begin
4811 if TBoard(ActiveList) = Board then
4812 ListView.Items.Count := ListView.Items.Count + 1;
4815 //
\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é
4816 if (not ThreadItem.IsLogFile) then begin
4817 if AnsiPos(Host, Board.URL) = 0 then
4818 ThreadItem.DownloadHost := Host
4820 ThreadItem.DownloadHost := '';
4822 OpenThreadItem(ThreadItem, inURL);
4826 Board := BBSsFindBoardFromURL( inURL );
4827 if Board = nil then begin
4828 GikoSys.OpenBrowser(inURL, gbtAuto);
4830 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4831 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4832 SelectTreeNode( Board, True );
4837 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4839 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4840 CoolBarResized( Sender, MainCoolBar );
4843 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4844 Shift: TShiftState);
4846 if Key = VK_RETURN then
4847 GikoDM.MoveToAction.Execute;
4850 procedure TGikoForm.BrowserEnter(Sender: TObject);
4852 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4855 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4857 CDS:PCopyDataStruct;
4861 CDS := Message.CopyDataStruct;
4862 GetMem(PC, CDS^.cbData);
4864 lstrcpy(PC,CDS^.lpData);
4865 SetString(sURL, PC,lstrlen(PC));
4870 Message.Result := 1;
4873 procedure TGikoForm.WndProc(var Message: TMessage);
4875 senderBrowser : TWebBrowser;
4881 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4884 if Message.WParam = SC_MINIMIZE then begin
4886 PostMessage(Handle, USER_MINIMIZED, 0, 0);
4889 TreeClick( TreeView.Selected );
4894 if (GikoSys.Setting.StoredTaskTray) then begin
4901 USER_DOCUMENTCOMPLETE:
4902 if (Message.WParam <> 0) and
4903 (TObject(Message.WParam) is TWebBrowser) then begin
4904 senderBrowser := TWebBrowser( Message.WParam );
4905 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
4908 if (TObject(Message.WParam) is TResPopupBrowser) then begin
4910 TResPopupBrowser( Message.WParam ).Clear;
4921 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
4926 //
\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Í
4927 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
4928 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
4929 if Msg.CharCode in [VK_BACK] then begin
4930 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4931 if Msg.KeyData > 0 then begin
4934 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4938 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
4939 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
4942 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4945 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
4946 if Msg.CharCode in [VK_BACK] then begin
4947 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4948 if Msg.KeyData > 0 then begin
4951 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4954 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
4957 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4961 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
4965 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
4970 PreviewTimer.Enabled := False;
4974 ARect := FPreviewBrowser.GetWindowRect(p);
4976 FPreviewBrowser.PreviewImage(FPreviewURL);
4978 if ARect.Bottom > Screen.DesktopHeight then begin
4979 OffsetRect(ARect, 0, -(ARect.Bottom - Screen.DesktopHeight));
4981 if (ARect.Right > Screen.DesktopWidth) then begin
4982 OffsetRect(ARect, -(ARect.Right - Screen.DesktopWidth), 0);
4984 if (ARect.Left < Screen.DesktopLeft) then begin
4985 OffsetRect(ARect, +(Screen.DesktopLeft - ARect.Left), 0);
4987 if (ARect.Top < Screen.DesktopTop) then begin
4988 OffsetRect(ARect, 0, (Screen.DesktopTop - ARect.Top));
4991 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST,
4992 ARect.Left, ARect.Top,
4993 (ARect.Right - ARect.Left), (ARect.Bottom - ARect.Top),
4994 SWP_NOACTIVATE or SWP_HIDEWINDOW);
4996 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
4997 FPreviewBrowserRect := ARect;
5000 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
5004 if PreviewTimer.Enabled then
5005 PreviewTimer.Enabled := False;
5007 //Window
\8aO
\82É
\88Ú
\93®
\82µ
\82½
\82Æ
\82«
\82Í
\8fÁ
\82¦
\82é
\82æ
\82¤
\82É
\82·
\82é
\82½
\82ß
\95\9c\8a\88
5008 if (FResPopupBrowser <> nil) and (IsWindowVisible(FResPopupBrowser.Handle)) then begin
5009 //
\89E
\83N
\83\8a\83b
\83N
\82Ì
\8e\9e\82Í
\8fÁ
\82³
\82È
\82¢
\82æ
\82¤
\82É
\8fð
\8c\8f\92Ç
\89Á
5010 if (Message.MouseMsg <> WM_RBUTTONUP) then begin
5011 FResPopupBrowser.Clear;
5015 if (FPreviewBrowser <> nil)
5016 and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
5017 //
\82±
\82±
\82Å
\8fÁ
\82³
\82ê
\82é
\82Ì
\82ª
\96â
\91è
5018 //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Å
\95\
\8e¦
\94Í
\88Í
\94»
\92è
\82Å
\82«
\82Ä
\82¢
\82é
\82Í
\82¸
5019 Pos := Mouse.CursorPos;
5020 Pos.X := Pos.X + Left;
5021 Pos.Y := Pos.Y + Top;
5022 if (FPreviewBrowserRect.Left > Pos.X) or
5023 (FPreviewBrowserRect.Right < Pos.X) or
5024 (FPreviewBrowserRect.Top > Pos.Y) or
5025 (FPreviewBrowserRect.Bottom < Pos.Y) then begin
5026 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
5030 Message.Result := 1;
5033 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
5035 GikoDM.MsgBarCloseAction.Execute;
5038 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
5040 doc: IHtmlDocument2;
5041 Range: IHTMLTxtRange;
5044 ThreadItem: TThreadItem;
5047 FactiveContent.IDAnchorPopup('');
5049 doc := FactiveContent.Browser.ControlInterface.Document as IHtmlDocument2;
5050 if not Assigned(doc) then
5053 Range := doc.selection.createRange as IHTMLTxtRange;
5054 if not Assigned(Range) then
5057 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
5058 s := ZenToHan(Trim(s));
5059 if GikoSys.IsNumeric(s) then begin
5060 Num := StrToInt64Def(s, -1);
5061 ThreadItem := GetActiveContent(true);
5062 if (ThreadItem <> nil) and (Num <= ThreadItem.Count)
5063 and (Num > 0)then begin
5064 CreateResPopupBrowser;
5065 FResPopupBrowser.CreateNewBrowser.PopupType := gptThread;
5066 HTMLCreater.SetResPopupText(FResPopupBrowser.CreateNewBrowser, ThreadItem, Num, Num, False, False);
5067 FResPopupBrowser.Popup;
5076 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
5078 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
5079 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
5081 if FTreeType = gttHistory then begin
5082 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
5083 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
5086 TreeView.Items.Clear;
5090 procedure TGikoForm.SetLinkBar;
5094 ToolButton: TLinkToolButton;
5095 MenuItem: TMenuItem;
5096 oldIgnoreResize : TResizeType;
5098 oldIgnoreResize := FIsIgnoreResize;
5099 FIsIgnoreResize := rtResizing;
5100 MainCoolBar.Bands.BeginUpdate;
5102 LinkBarPopupMenu.Items.Clear;
5103 for i := LinkToolBar.ButtonCount - 1 downto 0 do
5104 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
5105 LinkToolBar.Buttons[i].Free;
5106 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5107 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5108 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5109 ToolButton := TLinkToolButton.Create(LinkToolBar);
5110 // ToolButton.Parent := LinkToolBar;
5111 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
5112 MenuItem := TMenuItem.Create(Self);
5113 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
5114 LinkBarPopupMenu.Items.Add(MenuItem);
5115 ToolButton.MenuItem := MenuItem;
5116 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
5117 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
5118 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
5119 ToolButton.OnClick := FavoriteClick;
5120 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
5121 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
5122 ToolButton.OnClick := FavoriteClick;
5124 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
5125 ToolButton.Left := 10000;
5126 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
5127 ToolButton.AutoSize := True;
5128 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
5129 ToolButton.OnDragOver := FavoriteDragOver;
5130 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
5131 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
5132 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
5133 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
5134 //ToolButton.DragMode := dmAutomatic;
5135 ToolButton.DragMode := dmManual;
5136 ToolButton.PopupMenu := FavoriteTreePopupMenu;
5138 LinkToolBar.InsertControl(ToolButton);
5143 { if LinkToolBar.ButtonCount = 0 then begin
5144 ToolButton := TLinkToolButton.Create(LinkToolBar);
5145 ToolButton.Style := tbsButton;
5146 ToolButton.ImageIndex := -1;
5147 ToolButton.Caption := '';
5148 LinkToolBar.InsertControl(ToolButton);
5151 MainCoolBar.Bands.EndUpdate;
5152 LoadCoolBarSettings;
5153 FIsIgnoreResize := oldIgnoreResize;
5157 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5165 if Sender = FavoriteTreeView then begin
5166 Node := FavoriteTreeView.GetNodeAt(X, Y);
5171 bound := Node.DisplayRect( False );
5172 height := bound.Bottom - bound.Top;
5173 if (bound.Top + height / 2) <= Y then
5174 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
5179 if Node.IsFirstNode then
5184 if FDropSpaceNode <> nil then
5185 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
5188 if Change then begin
5189 if FDropSpaceNode <> nil then
5190 FDropSpaceNode.Free;
5192 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
5193 FDropSpaceNode.MoveTo( Node, naInsert );
5194 FDropSpaceNode.ImageIndex := -1;
5195 FDropSpaceNode.SelectedIndex := -1;
5199 if Source = FavoriteTreeView then begin
5200 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
5205 end else if Source = BrowserTab then
5207 else if Source = ListView then
5209 else if Source is TLinkToolButton then
5211 else if Source = TreeView then
5217 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5220 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
5223 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
5225 // FDragging := true;
5228 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
5230 SenderNode: TTreeNode;
5231 LinkToolButton: TLinkToolButton;
5234 LinkToolButton := TLinkToolButton( Sender );
5235 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5236 SenderNode.Selected := False;
5237 FavoriteDragDrop( SenderNode, Source );
5243 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5245 favButton : TLinkToolButton;
5246 favThreadItem : TFavoriteThreadItem;
5252 if Sender is TLinkToolButton then begin
5253 favButton := TLinkToolButton( Sender );
5254 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5255 favThreadItem := TFavoriteThreadItem( favButton.Data );
5256 if favThreadItem.Item <> nil then
5257 InsertBrowserTab( favThreadItem.Item, False );
5265 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5269 TToolButton( Sender ).DragMode := dmManual;
5270 if ssLeft in Shift then begin
5271 // 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)
5272 if FDragTime = 0 then begin
5273 FDragTime := GetTickCount();
5275 Now := GetTickCount();
5276 if (Now - FDragTime) > 500 then begin
5277 if FDragButton <> TToolButton( Sender ) then begin
5279 FDragButton := TToolButton( Sender );
5280 TToolButton(Sender).BeginDrag(false ,5);
5283 {$IF Defined(debug)}
5284 ShowMessage('Error');
5295 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5300 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5305 for i := 0 to ToolBar.ButtonCount - 1 do
5306 if ToolBar.Buttons[i].Visible then
5307 Result := Result + ToolBar.Buttons[i].Width;
5310 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5312 Control : TWinControl;
5315 Control := FindControl(BandInfo^.hwndChild);
5316 if Control = nil then
5319 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5320 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5321 idx := MainCoolBar.Bands[ i ].ID;
5325 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5326 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
5327 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5328 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5329 BandInfo^.cxMinChild := 0;
5330 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
5331 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5332 end else if Control = LinkToolBar then begin
5333 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5334 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5335 BandInfo^.cxMinChild := 0;
5336 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5337 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5338 end else begin // AddressToolBar
5339 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5340 BandInfo^.cxMinChild := 0;
5341 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5345 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5351 ChevronPopupMenu.Items.Clear;
5353 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5354 if MainCoolBar.Bands[ i ].Visible then begin
5355 if Idx = Int64(RebarChevron^.uBand) then begin
5362 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5363 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5365 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5366 ToolBarChevronMenu(StdToolBar);
5367 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5371 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5372 ChevronPopupMenu.Popup(p.x, p.y);
5376 procedure TGikoForm.MenuBarChevronMenu;
5377 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5383 for i := 0 to MenuItem.Count - 1 do begin
5385 if MenuItem[i] is TFavoriteMenuItem then begin
5386 Item := TFavoriteMenuItem.Create(Self);
5387 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5389 Item := TMenuItem.Create(Self);
5390 Item.Caption := MenuItem[i].Caption;
5391 Item.Action := MenuItem[i].Action;
5392 Item.ImageIndex := MenuItem[i].ImageIndex;
5393 Item.OnClick := MenuItem[i].OnClick;
5394 PopupItem.Add(Item);
5395 if MenuItem[i].Count > 0 then
5396 SetSubMenu(MenuItem[i], Item);
5405 ChevronPopupMenu.Items.Clear;
5406 ChevronPopupMenu.Images := MainMenu.Images;
5407 bw := GetWidthAllToolButton(MenuToolBar);
5408 if MenuToolBar.Width < bw then begin
5410 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5411 w := w + MenuToolBar.Buttons[i].Width;
5412 if MenuToolBar.Width <= w then begin
5413 Item := TMenuItem.Create(Self);
5414 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5415 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5416 ChevronPopupMenu.Items.Add(Item);
5417 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5423 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5424 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5429 if Assigned(PopupMenu.OnPopup) then
5430 PopupMenu.OnPopup(nil);
5431 for i := 0 to PopupMenu.Items.Count - 1 do begin
5433 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5434 Item := TFavoriteMenuItem.Create(Self);
5435 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5437 Item := TMenuItem.Create(Self);
5438 Item.Caption := PopupMenu.Items[i].Caption;
5439 Item.Action := PopupMenu.Items[i].Action;
5440 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5441 Item.OnClick := PopupMenu.Items[i].OnClick;
5442 PopupItem.Add(Item);
5451 ChevronPopupMenu.Items.Clear;
5452 ChevronPopupMenu.Images := ToolBar.HotImages;
5453 bw := GetWidthAllToolButton(ToolBar);
5454 if ToolBar.Width < bw then begin
5456 for i := 0 to ToolBar.ButtonCount - 1 do begin
5457 if ToolBar.Buttons[i].Visible then
5458 w := w + ToolBar.Buttons[i].Width;
5459 if ToolBar.Width <= w then begin
5460 if ToolBar.Buttons[i].Tag = 0 then begin
5461 Item := TMenuItem.Create(Self);
5462 if ToolBar.Buttons[i].Style = tbsSeparator then
5465 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5466 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5469 Item.Caption := ToolBar.Buttons[i].Caption;
5470 Item.Action := ToolBar.Buttons[i].Action;
5472 //Item.Visible := True;
5474 ChevronPopupMenu.Items.Add(Item);
5475 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5477 Item.OnClick := nil;
5478 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5486 procedure TGikoForm.LinkBarChevronMenu;
5491 Item: TFavoriteMenuItem;
5493 Button: TLinkToolButton;
5495 ChevronPopupMenu.Items.Clear;
5496 ChevronPopupMenu.Images := LinkToolBar.Images;
5497 bw := GetWidthAllToolButton(LinkToolBar);
5498 if LinkToolBar.Width < bw then begin
5500 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5501 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5502 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5503 w := w + LinkToolBar.Buttons[j].Width;
5504 if LinkToolBar.Width <= w then begin
5505 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5506 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5507 Item := TFavoriteMenuItem.Create(Self);
5508 if TObject(Button.Data) is TFavoriteFolder then begin
5509 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5510 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5511 Item.OnClick := FavoriteClick;
5512 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5513 Item.OnClick := FavoriteClick;
5515 Item.Data := Button.Data;
5516 Item.Caption := LinkToolBar.Buttons[j].Caption;
5517 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5518 ChevronPopupMenu.Items.Add(Item);
5529 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5530 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5531 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5533 \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É
5534 \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
5536 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5538 bandInfo : tagREBARBANDINFOA;
5539 pBandInfo : PReBarBandInfoA;
5546 pBandInfo := @bandInfo;
5547 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5548 bandInfo.cbSize := sizeof( bandInfo );
5549 bandInfo.hwndChild := h;
5550 bandInfo.cyMinChild := bar.Height;
5551 bar.OnBandInfo( nil, pBandInfo );
5552 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5554 for i := bar.Bands.Count - 1 downto 0 do begin
5555 if bar.Bands[ i ].Control.Handle = h then begin
5561 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5565 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5567 Control: TWinControl;
5570 Control := FindControl(BandInfo^.hwndChild);
5571 if Control = nil then
5574 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5575 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5576 idx := ListCoolBar.Bands[ i ].ID;
5580 if Control = ListToolBar then begin
5581 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5582 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5583 BandInfo^.cxMinChild := 0;
5584 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5585 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5587 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5588 BandInfo^.cxMinChild := 0;
5589 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5593 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5598 ChevronPopupMenu.Items.Clear;
5599 Idx := RebarChevron^.uBand;
5600 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5601 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5602 ToolBarChevronMenu(ListToolBar);
5605 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5606 ChevronPopupMenu.Popup(p.x, p.y);
5610 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5612 Control: TWinControl;
5615 Control := FindControl(BandInfo^.hwndChild);
5616 if Control = nil then
5619 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5620 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5621 idx := BrowserCoolBar.Bands[ i ].ID;
5625 if Control = BrowserToolBar then begin
5626 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5627 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5628 BandInfo^.cxMinChild := 0;
5629 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5630 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5632 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5633 BandInfo^.cxMinChild := 0;
5634 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5638 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5643 ChevronPopupMenu.Items.Clear;
5644 Idx := RebarChevron^.uBand;
5645 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5646 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5647 ToolBarChevronMenu(BrowserToolBar)
5650 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5651 ChevronPopupMenu.Popup(p.x, p.y);
5655 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5657 if Column^.iImage = -1 then begin
5658 Column^.mask := Column^.mask or LVCF_FMT;
5660 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5661 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5665 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5670 for i := bar.ButtonCount - 1 downto 0 do begin
5671 if bar.Buttons[ i ].Action = action then begin
5672 Result := bar.Buttons[ i ];
5678 procedure TGikoForm.SetToolBarPopup;
5681 aIEButton : TToolButton;
5682 aCabinetBBSButton : TToolButton;
5683 aResRangeButton : TToolButton;
5684 aThreadRangeButton: TToolButton;
5686 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5688 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5689 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5690 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5691 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5692 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5694 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5695 if aIEButton <> nil then
5696 aIEButton.DropdownMenu := BrowserPopupMenu;
5697 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5698 if aCabinetBBSButton <> nil then
5699 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5700 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5701 if aResRangeButton <> nil then
5702 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5703 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5704 if aThreadRangeButton <> nil then
5705 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5708 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5709 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5713 // browserPos : TPoint;
5717 Wnd := WindowFromPoint(Mouse.CursorPos);
5719 if WheelDelta > 0 then
5724 if (Wnd = BrowserTab.Handle) or
5725 (Wnd = BrowserTab.Parent.Handle) then begin
5726 BrowserTab.ScrollTabs(Delta);
5728 if FIsHandledWheel then begin
5729 FIsHandledWheel := False;
5732 FIsHandledWheel := True;
5733 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5734 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5736 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5744 procedure TGikoForm.SetSelectWord( const text : string );
5746 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5747 ClearThreadRengeAction;
5749 if Length( text ) = 0 then
5751 GikoDM.AllItemAction.Checked := True;
5752 SetListViewType( gvtAll )
5754 SetListViewType( gvtUser, text, false );
5758 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5761 SetSelectWord( SelectComboBox.Text );
5765 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5766 Shift: TShiftState);
5774 if Key = VK_Return then
5777 end else if Key = 229 then begin
5778 if GikoSys.Setting.UseUndecided then begin
5779 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5780 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5781 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5782 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5783 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5784 SetLength(Str, Len);
5785 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5786 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5787 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5789 Str := SelectComboBox.Text + Str;
5791 if (Length(Str) > 0) then begin
5795 end else if (Key = Windows.VK_DELETE) and (ssCtrl in Shift) then begin
5796 // Ctrl + DEL
\82Å
\8dí
\8f\9c\82·
\82é
5797 Str := SelectComboBox.Text;
5798 idx := GikoSys.Setting.SelectTextList.IndexOf( Str );
5799 if idx <> -1 then begin
5800 GikoSys.Setting.SelectTextList.Delete( idx );
5802 idx := SelectComboBox.Items.IndexOf( Str );
5803 if idx <> -1 then begin
5804 SelectComboBox.Items.Delete( idx );
5806 SelectComboBox.Text := '';
5807 //
\8di
\8d\9e\82Ý
\82ð
\89ð
\8f\9c\82·
\82é
\82½
\82ß
\82É
\95Ï
\8dX
\83C
\83x
\83\93\83g
\82ð
\8cÄ
\82Ñ
\8fo
\82·
5808 SelectComboBox.OnChange(Sender);
5809 end else if Length( SelectComboBox.Text ) = 0 then
5811 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5812 *
\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
5813 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5816 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5817 ClearThreadRengeAction;
5821 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
5822 procedure TGikoForm.ClearThreadRengeAction;
5824 //
\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é
5825 if GikoDM.AllItemAction.Checked then
5826 GikoDM.AllItemAction.Checked := False;
5827 if GikoDM.LogItemAction.Checked then
5828 GikoDM.LogItemAction.Checked := False;
5829 if GikoDM.NewItemAction.Checked then
5830 GikoDM.NewItemaction.Checked := False;
5831 if GikoDM.LiveItemAction.Checked then
5832 GikoDM.LiveItemAction.Checked := False;
5833 if GikoDM.ArchiveItemAction.Checked then
5834 GikoDM.ArchiveItemAction.Checked := False;
5838 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5843 if Length( SelectComboBox.Text ) = 0 then
5845 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5846 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5851 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5852 procedure TGikoForm.ModifySelectList;
5859 if not SelectComboBoxPanel.Visible then
5862 if Length( SelectComboBox.Text ) > 0 then
5864 oldText := SelectComboBox.Text;
5865 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5867 GikoSys.Setting.SelectTextList.Delete( idx );
5868 idx := SelectComboBox.Items.IndexOf( oldText );
5870 SelectComboBox.Items.Delete( idx );
5871 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5872 SelectComboBox.Items.Insert( 0, oldText );
5873 SelectComboBox.Text := oldText;
5881 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5882 Shift: TShiftState; X, Y: Integer);
5887 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5890 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5891 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5892 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5894 If w <= 50 Then Begin
5895 //
\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
5896 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
5897 pos.X := pos.X + (50 - w);
5899 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
5903 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
5904 //If SelectComboBox.Width <> w Then Begin
5905 If SelectComboBoxPanel.Width <> w Then Begin
5906 SelectComboBoxPanel.Width := w;
5907 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
5908 GikoSys.Setting.SelectComboBoxWidth := w;
5909 DraggingSelectComboBoxPosition := pos;
5911 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
5912 ResetBandInfo( ListCoolBar, ListToolBar );
5918 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
5919 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5923 IsDraggingSelectComboBox := True;
5926 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
5930 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
5931 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5933 IsDraggingSelectComboBox := False;
5937 procedure TGikoForm.StatusBarResize(Sender: TObject);
5939 StatusBar.Panels[1].Width := StatusBar.Width -
5940 StatusBar.Panels[0].Width -
5941 StatusBar.Panels[THREADSIZE_PANEL].Width -
5942 StatusBar.Panels[NGWORDNAME_PANEL].Width;
5944 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
5947 if (Length( SelectComboBox.Text ) = 0) or
5948 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
5950 SelectComboBox.Text := '';
5951 SelectComboBox.Color := clWindow;
5956 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
5959 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
5962 if TObject(SenderNode.Data) is TFavoriteFolder then
5963 SourceNode.MoveTo(SenderNode, naAddChild)
5965 SourceNode.MoveTo(SenderNode, naInsert);
5969 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
5973 FavoBoardItem: TFavoriteBoardItem;
5974 FavoThreadItem: TFavoriteThreadItem;
5976 ThreadItem: TThreadItem;
5979 if (SenderNode = nil) or (Source = nil) then
5982 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5983 FavNode := SenderNode.Parent
5985 FavNode := SenderNode;
5989 if Source is TBoard then begin
5990 Board := TBoard( Source );
5991 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
5992 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
5993 Node.ImageIndex := 15;
5994 Node.SelectedIndex := 15;
5995 end else if Source is TFavoriteBoardItem then begin
5996 FavoBoardItem := TFavoriteBoardItem( Source );
5997 Board := FavoBoardItem.Item;
5998 if Board <> nil then
5999 if not Board.IsThreadDatRead then
6000 GikoSys.ReadSubjectFile(Board);
6001 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
6002 Node.ImageIndex := 15;
6003 Node.SelectedIndex := 15;
6004 end else if Source is TThreadItem then begin
6005 ThreadItem := TThreadItem( Source );
6006 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
6007 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
6008 Node.ImageIndex := 16;
6009 Node.SelectedIndex := 16;
6010 end else if Source is TBrowserRecord then begin
6011 ThreadItem := TBrowserRecord( Source ).Thread;
6012 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
6013 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
6014 Node.ImageIndex := 16;
6015 Node.SelectedIndex := 16;
6016 end else if Source is TFavoriteThreadItem then begin
6017 FavoThreadItem := TFavoriteThreadItem( Source );
6018 ThreadItem := FavoThreadItem.Item;
6019 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
6020 Node.ImageIndex := 16;
6021 Node.SelectedIndex := 16;
6024 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
6026 FavoriteMoveTo( SenderNode, Node );
6030 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
6033 SourceNode: TTreeNode;
6034 LinkToolButton: TLinkToolButton;
6037 if SenderNode = nil then
6040 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
6041 if FDropSpaceNode <> nil then
6042 SenderNode := FDropSpaceNode;
6044 if Source = FavoriteTreeView then begin
6045 SourceNode := FavoriteTreeView.Selected;
6046 FavoriteMoveTo( SenderNode, SourceNode );
6047 end else if Source is TLinkToolButton then begin
6048 LinkToolButton := TLinkToolButton( Source );
6049 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
6050 FavoriteMoveTo( SenderNode, SourceNode );
6051 end else if Source = BrowserTab then begin
6052 idx := BrowserTab.TabIndex;
6053 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
6054 end else if Source = ListView then begin
6055 FavoriteAddTo( SenderNode, ListView.Selected.Data );
6056 end else if Source = TreeView then begin
6057 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
6061 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
6064 SenderNode: TTreeNode;
6067 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
6068 if SenderNode <> nil then begin
6069 FavoriteDragDrop( SenderNode, Source );
6072 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
6073 if FDropSpaceNode <> nil then begin
6075 FDropSpaceNode.Delete;
6077 FDropSpaceNode := nil;
6080 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6081 FavoriteDM.Modified := true;
6087 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
6088 Node: TTreeNode; var S: String);
6090 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6091 FavoriteDM.Modified := true;
6093 FavoriteTreeView.ReadOnly := True;
6098 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
6099 Shift: TShiftState);
6101 if not TTreeView(Sender).IsEditing then begin
6105 FClickNode := FavoriteTreeView.Selected;
6106 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
6110 FClickNode := FavoriteTreeView.Selected;
6111 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
6115 FavoriteClick( FavoriteTreeView.Selected );
6116 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
6120 FClickNode := FavoriteTreeView.Selected;
6121 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
6125 //
\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·
6126 if Key = VK_ESCAPE then begin
6127 if (TTreeView(Sender).Selected <> nil) then begin
6128 TTreeView(Sender).Selected.Text := FOrigenCaption;
6130 TTreeView(Sender).Selected.Focused := False;
6136 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
6139 LinkToolButton: TLinkToolButton;
6142 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
6144 FClickNode := FavoriteTreeView.Selected;
6146 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
6148 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
6149 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6150 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6151 FClickNode := FavoriteTreeView.Items[i];
6155 for i := 0 to FClickNode.Count - 1 do begin
6156 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
6157 FClickNode := FClickNode.Item[i];
6164 if FClickNode = nil then begin
6165 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6166 FavoriteTreeDeletePopupMenu.Visible := False;
6167 FavoriteTreeRenamePopupMenu.Visible := False;
6168 FavoriteTreeNewFolderPopupMenu.Visible := False;
6169 FavoriteTreeURLCopyPopupMenu.Visible := False;
6170 FavoriteTreeNameCopyPopupMenu.Visible := False;
6171 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6172 FavoriteTreeReloadPopupMenu.Visible := False;
6173 FavoriteTreeLogDeletePopupMenu.Visible := False;
6174 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6175 end else if FClickNode.IsFirstNode then begin
6176 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6177 FavoriteTreeDeletePopupMenu.Visible := False;
6178 FavoriteTreeRenamePopupMenu.Visible := False;
6179 FavoriteTreeNewFolderPopupMenu.Visible := True;
6180 FavoriteTreeURLCopyPopupMenu.Visible := False;
6181 FavoriteTreeNameCopyPopupMenu.Visible := False;
6182 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6183 FavoriteTreeReloadPopupMenu.Visible := False;
6184 FavoriteTreeLogDeletePopupMenu.Visible := False;
6185 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6186 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
6187 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6188 FavoriteTreeDeletePopupMenu.Visible := True;
6189 FavoriteTreeRenamePopupMenu.Visible := False;
6190 FavoriteTreeNewFolderPopupMenu.Visible := True;
6191 FavoriteTreeURLCopyPopupMenu.Visible := False;
6192 FavoriteTreeNameCopyPopupMenu.Visible := False;
6193 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6194 FavoriteTreeReloadPopupMenu.Visible := False;
6195 FavoriteTreeLogDeletePopupMenu.Visible := False;
6196 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6197 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
6198 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6199 FavoriteTreeDeletePopupMenu.Visible := True;
6200 FavoriteTreeRenamePopupMenu.Visible := True;
6201 FavoriteTreeNewFolderPopupMenu.Visible := True;
6202 FavoriteTreeURLCopyPopupMenu.Visible := False;
6203 FavoriteTreeNameCopyPopupMenu.Visible := True;
6204 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6205 FavoriteTreeReloadPopupMenu.Visible := False;
6206 FavoriteTreeLogDeletePopupMenu.Visible := False;
6207 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6208 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
6209 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6210 FavoriteTreeDeletePopupMenu.Visible := True;
6211 FavoriteTreeRenamePopupMenu.Visible := True;
6212 FavoriteTreeNewFolderPopupMenu.Visible := True;
6213 FavoriteTreeURLCopyPopupMenu.Visible := True;
6214 FavoriteTreeNameCopyPopupMenu.Visible := True;
6215 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6216 FavoriteTreeReloadPopupMenu.Visible := True;
6217 FavoriteTreeLogDeletePopupMenu.Visible := True;
6218 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6219 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
6220 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6221 FavoriteTreeDeletePopupMenu.Visible := True;
6222 FavoriteTreeRenamePopupMenu.Visible := True;
6223 FavoriteTreeNewFolderPopupMenu.Visible := True;
6224 FavoriteTreeURLCopyPopupMenu.Visible := True;
6225 FavoriteTreeNameCopyPopupMenu.Visible := True;
6226 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6227 FavoriteTreeReloadPopupMenu.Visible := True;
6228 FavoriteTreeLogDeletePopupMenu.Visible := False;
6229 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6231 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6232 FavoriteTreeDeletePopupMenu.Visible := False;
6233 FavoriteTreeRenamePopupMenu.Visible := False;
6234 FavoriteTreeNewFolderPopupMenu.Visible := False;
6235 FavoriteTreeURLCopyPopupMenu.Visible := False;
6236 FavoriteTreeNameCopyPopupMenu.Visible := False;
6237 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6238 FavoriteTreeReloadPopupMenu.Visible := False;
6239 FavoriteTreeLogDeletePopupMenu.Visible := False;
6240 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6245 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
6250 if not (TObject(node.Data) is TFavoriteFolder) then
6253 for i := 0 to node.Count - 1 do
6255 if TObject(node.Item[i].Data) is TFavoriteFolder then
6256 FavoriteBrowseFolder( node.Item[i] )
6257 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
6258 FavoriteClick( node.Item[i], False );
6262 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6268 for i := 0 to Node.Count - 1 do begin
6269 if Node.Item[i].Data = FindPointer then begin
6270 Result := Node.Item[i];
6272 end else if Node.Item[i].Count > 0 then begin
6273 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6274 if Found <> nil then begin
6285 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6289 SenderNode: TTreeNode;
6293 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6294 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6295 SenderNode := FavoriteTreeView.Items[i];
6299 SenderNode.Selected := False;
6301 FavoriteDragDrop( SenderNode, Source );
6306 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6307 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6309 if FDragWFirst = true then
6310 FDragWFirst := false;
6312 //
\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@
6313 if Button <> mbMiddle then begin
6314 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6315 if GikoSys.Setting.ListWidthState = glsMin then begin
6316 GikoDM.BrowserMaxAndFocusAction.Execute;
6319 if GikoSys.Setting.ListHeightState = glsMin then begin
6320 GikoDM.BrowserMaxAndFocusAction.Execute;
6326 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6327 Y: Integer; State: TDragState; var Accept: Boolean);
6330 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6334 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6338 if FDropSpaceNode <> nil then begin
6340 FDropSpaceNode.Delete;
6342 FDropSpaceNode := nil;
6344 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6345 FavoriteDM.Modified := true;
6351 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6353 if FListViewBackGroundColor <> value then begin
6354 FListViewBackGroundColor := value;
6355 ListView.Color := FListViewBackGroundColor;
6358 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6360 threadItem : TThreadItem;
6364 if FClickNode = nil then Exit;
6366 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6368 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6369 if threadItem = nil then
6371 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6373 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6375 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6376 if boardItem = nil then
6378 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6384 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6385 MousePos: TPoint; var Handled: Boolean);
6389 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6390 if BrowserTab.TabIndex <> idx then begin
6391 BrowserTab.TabIndex := idx;
6392 BrowserTab.OnChange(nil);
6396 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6398 ThreadItem: TThreadItem;
6404 boardPlugIn : TBoardPlugIn;
6406 if Number = 0 then Exit;
6407 ThreadItem := GetActiveContent(True);
6409 if ThreadItem <> nil then begin
6410 //if ThreadItem.IsBoardPlugInAvailable then begin
6411 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6412 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6413 //boardPlugIn := ThreadItem.BoardPlugIn;
6414 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6416 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6417 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6418 //
\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
6419 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6421 FileName := ThreadItem.FilePath;
6422 tmp := GikoSys.ReadThreadFile(FileName, Number);
6424 if tmp <> '' then begin
6425 THTMLCreate.DivideStrLine(tmp, @Res);
6427 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6428 if ReplaceTag then begin
6429 Header := CustomStringReplace(Header, '</b>', '',true);
6430 Header := CustomStringReplace(Header, '<b>', '',true);
6431 Header := CustomStringReplace(Header, '<br>', '',true);
6432 Header := DeleteFontTag(Header);
6434 //if ThreadItem.IsBoardPlugInAvailable then begin
6435 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6436 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6437 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6439 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6440 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6441 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6442 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6445 Body := CustomStringReplace(Body, '</a>', '',true);
6447 Body := HTMLCreater.DeleteLink(Body);
6448 if ReplaceTag then begin
6449 Body := CustomStringReplace(Body, '<', '<');
6450 Body := CustomStringReplace(Body, '>', '>');
6451 Body := CustomStringReplace(Body, '"', '"');
6452 Body := CustomStringReplace(Body, '&', '&');
6453 //Body := CustomStringReplace(Body, ' ', ' ');
6456 Header := Header + Body;
6458 Clipboard.SetTextBuf( PChar(Header) );
6464 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6466 AddRoundNameMenu(dummy1);
6467 AddMenuSameBoardThread;
6469 //!
\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Á
6470 procedure TGikoForm.AddMenuSameBoardThread;
6475 SameBoardThreadItem.Clear;
6476 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6477 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6478 if (FActiveContent.Thread.ParentBoard =
6479 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6480 //
\8e©
\95ª
\82Í
\8aO
\82·
6481 if FActiveContent.Thread <>
6482 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6483 Item := TMenuItem.Create(Self);
6484 Item.Caption := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.Title;
6485 Item.OnClick := SameBoardThreadSubItemOnClick;
6486 SameBoardThreadItem.Add(Item);
6490 //
\89½
\82à
\96³
\82¢
\82È
\82ç
\8eg
\97p
\82Å
\82«
\82È
\82¢
\82æ
\82¤
\82É
\82·
\82é
6491 SameBoardThreadItem.Enabled := SameBoardThreadItem.Count > 0;
6493 //!
\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
6494 procedure TGikoForm.SameBoardThreadSubItemOnClick(Sender: TObject);
6497 MenuItem: TMenuItem;
6499 if Sender is TMenuItem then begin
6502 MenuItem := TMenuItem(Sender);
6503 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6504 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6505 if (FActiveContent.Thread.ParentBoard =
6506 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6507 if FActiveContent.Thread <>
6508 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6509 if (SameBoardThreadItem.Items[j] = MenuItem) then begin
6510 MoveToURL( TBrowserRecord(BrowserTab.Tabs.Objects[i])
6522 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6524 FavoriteDM.URLReplace(oldURLs, newURLs);
6527 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6529 RoundList.URLReplace(oldURLs, newURLs);
6532 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6534 Filename = 'tab.sav';
6535 bFilename = '~tab.sav';
6541 oldBoardName: string;
6543 newBoardName: string;
6544 TabList: TStringList;
6547 if oldURLs.Count <> newURLs.Count then begin
6550 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6551 TabList := TStringList.Create;
6553 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6555 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6556 //
\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
6557 for i := 0 to oldURLs.Count - 1 do begin
6558 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6559 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6560 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6561 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6562 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6563 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6565 for j := 0 to TabList.Count - 1 do begin
6566 tempString := TabList[j];
6567 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6568 tempString := StringReplace(tempString, oldHost, newHost,[]);
6569 TabList[j] := tempString;
6573 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6575 if FileExists( GikoSys.GetAppDir + Filename) then begin
6576 if FileExists( GikoSys.GetAppDir + bFilename) then
6577 DeleteFile(GikoSys.GetAppDir + bFilename);
6579 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6580 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6583 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6591 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6592 procedure TGikoForm.OnMinimize;
6594 doc: IHTMLDocument2;
6596 if FActiveContent <> nil then begin
6597 FIsMinimize := mtMinimizing;
6598 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6599 if Assigned(doc) then begin
6600 FActiveContent.Thread.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
6605 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6606 procedure TGikoForm.OnMinimized;
6608 FIsMinimize := mtMinimized;
6612 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6614 CoolBarResized( Sender, BrowserCoolBar );
6617 // *************************************************************************
6618 // ExternalBoardPlugInMain
6619 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6620 // *************************************************************************
6621 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6624 boardPlugIn : TBoardPlugIn;
6627 if not (Sender is TMenuItem) then
6630 item := TMenuItem( Sender );
6631 if not Assigned( Pointer( item.Tag ) ) then
6634 //
\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·
6635 boardPlugIn := TBoardPlugIn( item.Tag );
6636 boardPlugIn.PlugInMenu( item.Handle );
6639 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6640 procedure TGikoForm.TreeClick( Node : TTreeNode );
6646 if FTreeType = gttHistory then begin
6648 if TObject( Node.Data ) is TFavoriteThreadItem then
6649 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6650 FavoriteClick( Node );
6653 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6654 if ActiveList = Node.Data then
6657 ActiveListColumnSave;
6659 if TObject(Node.Data) is TBBS then begin
6660 SetActiveList(Node.data);
6661 end else if TObject(Node.Data) is TCategory then begin
6662 SetActiveList(Node.data);
6663 end else if TObject(Node.Data) is TBoard then begin
6664 if not TBoard(Node.Data).IsThreadDatRead then begin
6665 Screen.Cursor := crHourGlass;
6667 if not TBoard(Node.Data).IsThreadDatRead then
6668 GikoSys.ReadSubjectFile(Node.Data);
6670 Screen.Cursor := crDefault;
6673 Sort.SetSortDate(Now());
6674 SetActiveList(Node.data);
6677 if TObject( Node.Data ) is TBoard then begin // not TCategory
6678 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6679 if GikoSys.Setting.ListWidthState = glsMax then begin
6680 GikoDM.BrowserMinAction.Execute;
6681 if GikoForm.Visible then
6685 if GikoSys.Setting.ListHeightState = glsMax then begin
6686 GikoDM.BrowserMinAction.Execute;
6687 if GikoForm.Visible then
6695 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6696 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6699 ThreadItem : TThreadItem;
6700 shiftDown : Boolean;
6703 if Node = nil then Exit;
6705 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6707 if FTreeType = gtt2ch then begin
6708 if not (TObject(Node.Data) is TBoard) then Exit;
6709 Board := TBoard(Node.Data);
6710 DownloadList(Board, shiftDown);
6711 end else if FTreeType = gttHistory then begin
6712 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6713 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6714 DownloadContent(ThreadItem, shiftDown);
6718 // *************************************************************************
6719 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82ÌKeyDown
\83C
\83x
\83\93\83g
6720 // *************************************************************************
6721 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6722 Shift: TShiftState);
6724 if Key = VK_BACK then begin
6725 // UpFolderButtonClick(Sender);
6726 end else if Key = VK_SPACE then begin
6727 TreeDoubleClick( TreeView.Selected );
6728 end else if Key = VK_RETURN then begin
6729 TreeClick( TreeView.Selected );
6730 //
\97\9a\97ð
\82Ì
\8fê
\8d\87\81A
\8fÁ
\82³
\82ê
\82Ä
\82¢
\82é
\82Ì
\82Å
\83`
\83F
\83b
\83N
\82·
\82é
6731 if (TreeView.Selected <> nil) then begin
6732 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6736 //!
\82¨
\8bC
\82É
\93ü
\82è
\82ÌMouseDown
\83C
\83x
\83\93\83g
6737 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6738 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6740 favItem : TTreeNode;
6741 favThreadItem : TFavoriteThreadItem;
6747 if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6748 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6749 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6750 rect := FavoriteTreeView.Selected.DisplayRect(true);
6751 //
\83A
\83C
\83R
\83\93\95ª
\8d¶
\82É
\82¸
\82ç
\82·
6752 if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
6753 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6754 if ssDouble in Shift then begin
6755 FClickNode := FavoriteTreeView.Selected;
6756 GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6760 TObject(FavoriteTreeView.Selected));
6767 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6768 if favItem = nil then Exit;
6770 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6771 favThreadItem := TFavoriteThreadItem( favItem.Data );
6772 if favThreadItem.Item <> nil then
6773 InsertBrowserTab( favThreadItem.Item, False );
6780 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6783 if FIsIgnoreResize <> rtNone then
6786 if GikoSys.Setting.ListOrientation = gloVertical then begin
6787 if GikoSys.Setting.ListHeightState = glsMin then begin
6788 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6789 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6795 procedure TGikoForm.OnResized;
6797 doc : IHTMLDocument2;
6799 FOldFormWidth := Width;
6800 FIsIgnoreResize := rtNone;
6805 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6806 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6811 //
\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)
6812 if FActiveContent <> nil then begin
6813 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6814 (doc.body as IHTMLElement2).ScrollTop := FActiveContent.Thread.ScrollTop;
6816 FIsMinimize := mtNone;
6821 // *************************************************************************
6822 //!
\83X
\83\8c\83b
\83h
\83u
\83\89\83E
\83U
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6823 // *************************************************************************
6824 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6827 doc : IHTMLDocument2;
6828 FOleInPlaceActiveObject: IOleInPlaceActiveObject;
6833 if not Assigned(FActiveContent) then
6835 if not Assigned(FActiveContent.Browser) then
6839 FOleInPlaceActiveObject := FActiveContent.Browser.ControlInterface as IOleInPlaceActiveObject;
6840 FOleInPlaceActiveObject.OnFrameWindowActivate(True);
6843 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6844 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6846 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6847 if not Assigned(doc) then
6850 e := doc.elementFromPoint(p.x, p.y);
6851 if not Assigned(e) then
6854 if (e.className = 'date') or (e.id = 'date') then begin
6855 AID := GikoSys.ExtructResID(e.innerText);
6856 ShowSameIDAncher(AID);
6861 procedure TGikoForm.ShowSameIDAncher(const AID: String);
6865 numbers : TStringList;
6868 numbers := TStringList.Create;
6871 GikoSys.GetSameIDRes(AID, FActiveContent.Thread, numbers);
6873 if not (GikoSys.Setting.LimitResCountMessage) then begin
6875 end else if (numbers.Count > LIMIT) then begin
6876 if (GikoUtil.MsgBox(Handle,
6877 IntToStr(LIMIT) + '
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6878 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6879 MB_YESNO or MB_ICONQUESTION) = ID_YES) then begin
6883 FActiveContent.IDAnchorPopup(
6884 GikoSys.CreateResAnchor(numbers, FActiveContent.Thread, limited));
6889 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
6890 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
6892 SelectTimer.Interval := 0;
6893 if not (ListView.Selected = nil) then
6894 if( FActiveContent = nil) or
6895 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
6900 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
6901 procedure TGikoForm.ActiveListColumnSave;
6903 ActivListObj : TObject;
6904 i, id, idx : Integer;
6905 BBSOrder : TGikoBBSColumnList;
6906 CategoryOrder : TGikoCategoryColumnList;
6907 BoardOrder : TGikoBoardColumnList;
6910 ActivListObj := ActiveList;
6911 if ActivListObj is TBBS then begin
6912 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6913 BBSOrder := TGikoBBSColumnList.Create;
6915 for i := 0 to ListView.Columns.Count - 1 do begin
6916 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6917 idx := ListView.Column[ i ].Tag;
6918 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
6919 BBSOrder.Add( TGikoBBSColumnID( id ) );
6920 //
\95\9d\82Ì
\95Û
\91¶
6921 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
6923 for i := 0 to ListView.Columns.Count - 1 do
6924 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6925 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
6929 end else if ActivListObj is TCategory then begin
6930 //=====
\94Â
\83\8a\83X
\83g =====
6931 CategoryOrder := TGikoCategoryColumnList.Create;
6933 for i := 0 to ListView.Columns.Count - 1 do begin
6934 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6935 idx := ListView.Column[ i ].Tag;
6936 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
6937 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
6938 //
\95\9d\82Ì
\95Û
\91¶
6939 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
6941 for i := 0 to ListView.Columns.Count - 1 do
6942 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6943 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
6947 end else if ActivListObj is TBoard then begin
6948 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6949 BoardOrder := TGikoBoardColumnList.Create;
6951 for i := 0 to ListView.Columns.Count - 1 do begin
6952 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6953 idx := ListView.Column[ i ].Tag;
6954 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
6955 BoardOrder.Add( TGikoBoardColumnID( id ) );
6956 //
\95\9d\82Ì
\95Û
\91¶
6957 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
6959 for i := 0 to ListView.Columns.Count - 1 do
6960 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6961 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
6969 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
6970 Column: TListColumn; Point: TPoint);
6976 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
6977 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
6978 ListColumnPopupMenu.Items.Items[ i ].Free;
6980 //
\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¢)
6981 if TObject( FActiveList ) is TBBS then begin
6983 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6984 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
6985 item := TMenuItem.Create( ListColumnPopupMenu );
6986 item.Caption := GikoBBSColumnCaption[ i ];
6988 item.OnClick := ListColumnPopupMenuOnClick;
6989 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
6990 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
6991 item.Checked := True;
6995 ListColumnPopupMenu.Items.Add( item );
6998 end else if TObject( FActiveList ) is TCategory then begin
7000 //=====
\94Â
\83\8a\83X
\83g =====
7001 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
7002 item := TMenuItem.Create( ListColumnPopupMenu );
7003 item.Caption := GikoCategoryColumnCaption[ i ];
7005 item.OnClick := ListColumnPopupMenuOnClick;
7006 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
7007 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
7008 item.Checked := True;
7012 ListColumnPopupMenu.Items.Add( item );
7015 end else if TObject( FActiveList ) is TBoard then begin
7017 //=====
\83X
\83\8c\83\8a\83X
\83g =====
7018 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
7019 item := TMenuItem.Create( ListColumnPopupMenu );
7020 item.Caption := GikoBoardColumnCaption[ i ];
7022 item.OnClick := ListColumnPopupMenuOnClick;
7023 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
7024 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
7025 item.Checked := True;
7029 ListColumnPopupMenu.Items.Add( item );
7034 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
7035 Point := ListView.ClientToScreen( Point );
7036 if ListColumnPopupMenu.Items.Count > 0 then
7037 ListColumnPopupMenu.Popup( Point.X, Point.Y );
7041 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
7042 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
7049 if not (Sender is TMenuItem) then
7052 ActiveListColumnSave;
7053 item := TMenuItem( Sender );
7055 if TObject( FActiveList ) is TBBS then
7056 orderList := GikoSys.Setting.BBSColumnOrder
7057 else if TObject( FActiveList ) is TCategory then
7058 orderList := GikoSys.Setting.CategoryColumnOrder
7059 else if TObject( FActiveList ) is TBoard then
7060 orderList := GikoSys.Setting.BoardColumnOrder
7064 if item.Checked then begin
7065 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
7066 for i := orderList.Count - 1 downto 0 do begin
7067 if Integer( orderList[ i ] ) = item.Tag then begin
7068 orderList.Delete( i );
7073 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
7074 orderList.Add( Pointer( item.Tag ) );
7077 SetActiveList( FActiveList );
7081 procedure TGikoForm.OnGestureStart(Sender: TObject);
7086 procedure TGikoForm.OnGestureMove(Sender: TObject);
7093 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
7095 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
7096 s := MouseGesture.GetGestureStr;
7098 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7099 if Action <> nil then
7100 ActStr := '
\81i' + Action.Caption + '
\81j';
7101 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
7102 StatusBar.Panels[1].Text := s;
7105 procedure TGikoForm.OnGestureEnd(Sender: TObject);
7110 s := MouseGesture.GetGestureStr;
7112 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7113 if Action <> nil then
7115 StatusBar.Panels[1].Text := '';
7118 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
7119 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
7121 ThreadItem: TThreadItem;
7123 DefaultDraw := true;
7124 if TObject(Item.Data) is TThreadItem then begin
7125 ThreadItem := TThreadItem(Item.Data);
7126 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
7127 ListView.Canvas.Brush.Color := FOddColor;
7128 //
\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
7129 if (GikoSys.Setting.UnFocusedBold) and
7130 (Item.Selected) and (not ListView.Focused) then begin
7131 ListView.Canvas.Font.Style := [fsBold];
7134 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
7137 if ThreadItem.UnRead then
7138 ListView.Canvas.Font.Style := [fsBold];
7143 procedure TGikoForm.FormActivate(Sender: TObject);
7145 if GikoSys.Setting.GestureEnabled then begin
7146 GikoSys.Setting.Gestures.ClearGesture;
7147 GikoSys.Setting.Gestures.LoadGesture(
7148 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
7149 MouseGesture.UnHook;
7150 MouseGesture.OnGestureStart := OnGestureStart;
7151 MouseGesture.OnGestureMove := OnGestureMove;
7152 MouseGesture.OnGestureEnd := OnGestureEnd;
7153 MouseGesture.SetHook(Handle);
7155 //MouseGesture.UnHook;
7156 MouseGesture.OnGestureStart := nil;
7157 MouseGesture.OnGestureMove := nil;
7158 MouseGesture.OnGestureEnd := nil;
7162 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
7164 if (FIsMinimize <> mtMinimizing) then begin
7165 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
7166 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
7170 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
7175 affectedBand : TCoolBand;
7178 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
7179 FIsIgnoreResize := rtResizing;
7180 PostMessage( Handle, USER_RESIZED, 0, 0 );
7182 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
7183 if CoolBar = MainCoolBar then begin
7184 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
7185 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7186 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7187 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7188 GikoSys.Setting.MainCoolSet[i] := CoolSet;
7190 end else if CoolBar = ListCoolBar then begin
7191 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
7192 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7193 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7194 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7195 GikoSys.Setting.ListCoolSet[i] := CoolSet;
7197 end else if CoolBar = BrowserCoolBar then begin
7198 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
7199 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7200 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7201 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7202 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
7205 if not (Sender is TToolBar) or (CoolBar = nil) then
7207 toolbar := TToolBar( Sender );
7208 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
7209 affectedBand := nil;
7210 for i := CoolBar.Bands.Count - 1 downto 0 do begin
7211 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
7212 band := CoolBar.Bands[ i ];
7213 if band.Break or (i = 0) then begin
7214 if i + 1 < CoolBar.Bands.Count then
7215 if not CoolBar.Bands[ i + 1 ].Break then
7216 affectedBand := CoolBar.Bands[ i + 1 ];
7219 affectedBand := CoolBar.Bands[ i - 1 ];
7224 //
\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·
7225 if CoolBar = MainCoolBar then begin
7226 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
7227 coolSet.FCoolWidth := toolbar.Width + 25;
7228 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
7229 if affectedBand <> nil then begin
7230 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
7231 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7232 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
7234 end else if CoolBar = ListCoolBar then begin
7235 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
7236 coolSet.FCoolWidth := toolbar.Width + 25;
7237 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
7238 if affectedBand <> nil then begin
7239 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
7240 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7241 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
7243 end else if CoolBar = BrowserCoolBar then begin
7244 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
7245 coolSet.FCoolWidth := toolbar.Width + 25;
7246 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
7247 if affectedBand <> nil then begin
7248 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
7249 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7250 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
7257 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
7259 CoolBarResized( Sender, MainCoolBar );
7262 procedure TGikoForm.ListToolBarResize(Sender: TObject);
7264 CoolBarResized( Sender, ListCoolBar );
7267 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
7269 CoolBarResized( Sender, BrowserCoolBar );
7272 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
7273 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
7275 doc : IHTMLDocument2;
7276 ThreadItem : TThreadItem;
7277 ReadList : TStringList;
7278 wordCount : TWordCount;
7280 if not Assigned(FActiveContent) then
7282 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7283 if not Assigned(doc) then
7286 ThreadItem := GetActiveContent(True);
7287 ReadList := TStringList.Create;
7288 wordCount := TWordCount.Create;
7290 ThreadItem.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
7291 {$IFDEF SPAM_FILTER_ENABLED}
7292 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7293 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7294 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
7295 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7296 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7298 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7299 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7304 FActiveContent.Repaint := true;
7305 if ThreadItem <> nil then
7306 InsertBrowserTab( ThreadItem, True );
7308 //
\93¯
\88êID
\82ðNG
\83\8f\81[
\83h
\82É
\93o
\98^
7309 procedure TGikoForm.AddIDtoNGWord(invisible : boolean);
7311 doc : IHTMLDocument2;
7312 ThreadItem : TThreadItem;
7314 {$IFDEF SPAM_FILTER_ENABLED}
7316 ReadList : TStringList;
7317 wordCount : TWordCount;
7319 id, dateStr: String;
7321 No := KokoPopupMenu.Tag;
7322 if No = 0 then Exit;
7323 ThreadItem := GetActiveContent(True);
7324 if ThreadItem = nil then Exit;
7326 id := GikoSys.GetResID(No, ThreadItem);
7327 if (id <> '') and (not IsNoValidID(id)) then begin
7328 //
\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Á
7329 DateTimeToString(dateStr, 'yyyymmdd', Now);
7330 id := id + #9'>>add ' + dateStr + ',' + ThreadItem.Title;
7331 if (GikoSys.FAbon.AddToken(id, invisible)) then begin
7332 GikoSys.FAbon.ReLoadFromNGwordFile;
7333 FActiveContent.Repaint := True;
7336 ShowMessage('ID
\82ð
\8eæ
\93¾
\82Å
\82«
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B');
7338 {$IFDEF SPAM_FILTER_ENABLED}
7339 body := TStringList.Create;
7341 GikoSys.GetSameIDRes(id, ThreadItem, body);
7342 ReadList := TStringList.Create;
7343 wordCount := TWordCount.Create;
7345 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7346 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7347 for i := 0 to body.Count - 1 do begin
7348 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7349 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7350 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7360 if (FActiveContent.Repaint) then begin
7361 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7363 if not Assigned(doc) then
7365 ThreadItem.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
7366 if ThreadItem <> nil then
7367 InsertBrowserTab( ThreadItem, True );
7371 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
7372 procedure TGikoForm.IndividualAbonID(Atype : Integer);
7374 ThreadItem : TThreadItem;
7377 ReadList : TStringList;
7378 wordCount : TWordCount;
7380 No := KokoPopupMenu.Tag;
7381 if No = 0 then Exit;
7382 ThreadItem := GetActiveContent(True);
7383 if ThreadItem = nil then Exit;
7384 body := TStringList.Create;
7386 GikoSys.GetSameIDRes(No, ThreadItem, body);
7388 ReadList := TStringList.Create;
7389 wordCount := TWordCount.Create;
7391 ThreadItem.ScrollTop := FActiveContent.Browser.OleObject.Document.Body.ScrollTop;
7392 {$IFDEF SPAM_FILTER_ENABLED}
7393 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7394 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7396 for i := 0 to body.Count - 1 do begin
7397 {$IFDEF SPAM_FILTER_ENABLED}
7398 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7399 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7400 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7402 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7403 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7409 FActiveContent.Repaint := true;
7410 if ThreadItem <> nil then
7411 InsertBrowserTab( ThreadItem, True );
7418 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7420 firstElement: IHTMLElement;
7421 doc: IHTMLDocument2;
7424 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7425 if Assigned(doc) then
7426 firstElement := doc.all.item('idSearch', 0) as IHTMLElement;
7427 if Assigned(firstElement) then
7428 if firstElement.style.visibility <> 'hidden' then
7429 firstElement.style.visibility := 'hidden';
7434 procedure TGikoForm.RepaintAllTabsBrowser();
7437 ThreadItem: TThreadItem;
7439 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7440 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7442 ThreadItem := GetActiveContent;
7443 if ThreadItem <> nil then
7444 InsertBrowserTab( ThreadItem, True );
7448 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7449 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7450 Shift: TShiftState);
7452 //
\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Ì
7453 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7454 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7455 SelectTimer.Interval := 0;
7456 if not (GikoSys.Setting.BrowserTabVisible) then begin
7457 if (GetActiveList is TBoard) then begin
7458 //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
7459 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7460 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7461 (Key = VK_UP) or (Key = VK_DOWN)) then
7462 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7466 // *************************************************************************
7467 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7468 // *************************************************************************
7469 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7470 Node: TTreeNode; var AllowEdit: Boolean);
7472 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7473 FOrigenCaption := Node.Text;
7475 // *************************************************************************
7476 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7477 // *************************************************************************
7478 function TGikoForm.GetMainForm(): TComponent;
7480 Result := Application.MainForm;
7482 // *************************************************************************
7483 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7484 // *************************************************************************
7485 function TGikoForm.GetScreenCursor(): TCursor;
7487 Result := Screen.Cursor;
7489 // *************************************************************************
7490 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7491 // *************************************************************************
7492 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7494 if (Screen.Cursor <> Cursor) then
7495 Screen.Cursor := Cursor;
7497 // *************************************************************************
7498 //!
\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
7499 // *************************************************************************
7500 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7502 //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Ì
7503 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7504 if GikoDM.CabinetVisibleAction.Enabled then begin
7505 GikoDM.CabinetVisibleAction.Execute;
7508 // *************************************************************************
7509 //!
\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
7510 // *************************************************************************
7511 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7513 if GikoDM.FavoriteArrangeAction.Enabled then begin
7514 GikoDM.FavoriteArrangeAction.Execute;
7517 // *************************************************************************
7518 //!
\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
7519 // *************************************************************************
7520 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7521 var Handled: Boolean);
7525 //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ß
7526 if Self.Active then begin
7528 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7529 WM_KEYFIRST..WM_KEYLAST :
7531 //
\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ç
7532 if (Msg.message <> WM_KEYUP)
7533 and (Msg.message <> WM_CHAR)
7534 and (Msg.message <> WM_SYSKEYUP) then begin
7535 wmMsg.Msg := Msg.message;
7536 wmMsg.CharCode := Word(Msg.wParam);
7537 wmMsg.KeyData := Msg.lParam;
7538 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7539 Self.OnShortCut(wmMsg, Handled);
7544 // Explorer
\82ÌD&D
\82ð
\8eó
\82¯
\82é
\82Æ
\82Ì
\94ñ
\83A
\83N
\83e
\83B
\83u
7545 if Msg.message = WM_DROPFILES then begin
7546 AcceptDropFiles(Msg);
7551 // *************************************************************************
7552 //!
\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
7553 // *************************************************************************
7554 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7556 Application.ProcessMessages;
7557 if not Application.Terminated then begin
7558 if PreviewTimer.Enabled then
7559 PreviewTimer.Enabled := False;
7560 //
\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
7561 if (FResPopupBrowser <> nil) then
7562 FResPopupBrowser.Clear;
7564 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7565 if FPreviewBrowser <> nil then
7566 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7570 // *************************************************************************
7571 //!
\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
7572 // *************************************************************************
7573 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7578 if (Sender <> nil) then begin
7579 s := ' [' + Sender.ClassName + ']' + #13#10;
7581 s := ' [ Sender is nil ] ' + #13#10;
7584 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7586 // *************************************************************************
7587 //!
\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¬
7588 // *************************************************************************
7589 procedure TGikoForm.CreateControlThread();
7591 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7592 FControlThread := TThreadControl.Create(True);
7593 FControlThread.MaxThreadCount := 1;
7594 FControlThread.Resume;
7595 FControlThread.OnDownloadEnd := DownloadEnd;
7596 FControlThread.OnDownloadMsg := DownloadMsg;
7597 FControlThread.OnWork := Work;
7598 FControlThread.OnWorkBegin := WorkBegin;
7599 FControlThread.OnWorkEnd := WorkEnd;
7601 // *************************************************************************
7602 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7603 // *************************************************************************
7604 procedure TGikoForm.CreateBrowsers(count: Integer);
7607 newBrowser: TWebBrowser;
7609 BrowserNullTab := TBrowserRecord.Create;
7610 BrowserNullTab.Browser := Browser;
7611 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7613 FBrowsers := TList.Create;
7615 for i := 0 to count -1 do begin
7616 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7617 newBrowser := FBrowsers[FBrowsers.Count - 1];
7618 TOleControl(newBrowser).Parent := BrowserPanel;
7619 TOleControl(newBrowser).Align := alNone;
7620 TOleControl(newBrowser).Left := 0;
7621 TOleControl(newBrowser).Top := 0;
7622 newBrowser.RegisterAsDropTarget := False;
7623 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7624 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7625 newBrowser.OnEnter := BrowserEnter;
7626 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7627 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7628 newBrowser.Navigate(BLANK_HTML);
7629 ShowWindow(newBrowser.Handle, SW_HIDE);
7630 GikoSys.ShowRefCount('Browser' + IntToStr(i), newBrowser.ControlInterface);
7631 GikoSys.ShowRefCount('Document' + IntToStr(i), newBrowser.ControlInterface.Document);
7633 BrowserNullTab.Browser.BringToFront;
7634 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7636 //
\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Ì
7637 //
\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Å
7638 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7639 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7640 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7641 Application.ProcessMessages;
7644 // *************************************************************************
7645 //!
\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é
7646 // *************************************************************************
7647 procedure TGikoForm.SetSelectComboBox();
7649 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7652 ToolButton: TToolButton;
7654 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7655 SelectComboBoxPanel.Visible := False;
7657 for i := ListToolBar.ControlCount - 1 downto 0 do
7659 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7661 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7662 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7663 SelectComboBoxPanel.Parent := ListToolBar;
7664 SelectComboBoxPanel.Visible := True;
7666 SelectComboBox.Left := 0;
7667 SelectComboBox.Top := 0;
7668 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7669 SelectComboBox.Width := SelectComboBoxPanel.Width -
7670 SelectComboBoxSplitter.Width;
7672 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7673 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7674 if ToolButton = nil then begin
7675 ToolButton := TToolButton.Create(ListToolBar);
7676 ToolButton.Name := DUMMYCOMPNAME;
7678 ToolButton.Style := tbsSeparator;
7679 ToolButton.Width := 0;
7680 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7681 ListToolBar.InsertControl(ToolButton);
7682 ToolButton.Visible := False;
7684 //
\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·
7685 if (i + 1) < ListToolBar.ControlCount then
7686 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7687 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7688 ListToolBar.Controls[ i + 1 ].Visible := False;
7691 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7692 ListToolBar.Controls[ i ].Visible := False;
7700 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\83}
\83E
\83X
\83_
\83E
\83\93\83C
\83x
\83\93\83g
7701 procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7702 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7709 if (TreeView.Selected <> nil) and
7710 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7711 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
7712 rect := TreeView.Selected.DisplayRect(true);
7713 //
\83A
\83C
\83R
\83\93\95ª
\82¾
\82¯
\8d¶
\82É
\82¸
\82ç
\82·
7714 if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
7715 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7716 //
\83N
\83\8a\83b
\83N
\82Æ
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82ð
\83R
\83R
\82Å
\94»
\92è
7717 if ssDouble in Shift then begin
7718 TreeDoubleClick( TreeView.Selected );
7720 TreeClick(TreeView.Selected);
7727 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
7728 procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7732 if ActionList <> nil then begin
7733 SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7735 for i := 0 to ActionList.ActionCount - 1 do begin
7737 FActionListGroupIndexes[i] :=
7738 TCustomAction(ActionList.Actions[i]).GroupIndex;
7739 TCustomAction(ActionList.Actions[i]).GroupIndex
7742 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7748 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
7749 procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7753 if ActionList <> nil then begin
7754 if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7755 for i := 0 to ActionList.ActionCount - 1 do begin
7757 TCustomAction(ActionList.Actions[i]).GroupIndex
7758 := FActionListGroupIndexes[i];
7760 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7766 //!
\82±
\82Ì
\83\8c\83X
\82ÌURL
\8eæ
\93¾
7767 procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
7771 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
7772 procedure TGikoForm.RefreshListView(Thread: TThreadItem);
7774 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
7775 if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin
7780 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
7781 MousePos: TPoint; var Handled: Boolean);
7784 coolBar: TGikoCoolBar;
7787 if (Sender <> nil) and (Sender is TGikoCoolBar) then begin
7788 coolBar := TGikoCoolBar(Sender);
7789 if (coolBar = MainCoolBar) then begin
7790 FToolBarSettingSender := tssMain;
7791 end else if (coolBar = ListCoolBar) then begin
7792 FToolBarSettingSender := tssList;
7793 end else if (coolBar = BrowserCoolBar) then begin
7794 FToolBarSettingSender := tssBrowser;
7796 FToolBarSettingSender := tssNone;
7798 pos := coolBar.ClientToScreen( MousePos );
7799 MainCoolBarPopupMenu.Popup( pos.X, pos.Y );
7804 procedure TGikoForm.TaskTrayIconMessage(var Msg: TMsg);
7808 //
\8d¶
\83N
\83\8a\83b
\83N
\82È
\82ç
\95\9c\8c³
\82·
\82é
7809 if (Msg.wParam = WM_LBUTTONUP) then begin
7811 end else if (Msg.wParam=WM_RBUTTONUP) then begin
7812 //
\89E
\83N
\83\8a\83b
\83N
\82È
\82ç
\8fI
\97¹
\82·
\82é
7814 SetForegroundWindow ( Self.Handle );
7815 TaskTrayPopupMenu.Popup ( p.X, p.Y );
7818 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
7819 procedure TGikoForm.StoredTaskTray;
7822 if (FIconData.uID = 0) then begin
7823 FIconData.cbSize := SizeOf(TNotifyIconData);
7824 FIconData.uID := Self.Handle;
7825 FIconData.Wnd := Handle;
7826 FIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
7827 FIconData.uCallbackMessage := USER_TASKTRAY;
7828 FIconData.hIcon := Application.Icon.Handle; {
\83A
\83C
\83R
\83\93\8ew
\92è}
7829 FIconData.szTip := '
\83M
\83R
\83i
\83r'; {
\83q
\83\93\83g
\95¶
\8e\9a\97ñ}
7830 Shell_NotifyIcon(NIM_ADD, @FIconData);
7831 ShowEditors(SW_HIDE);
7832 ShowWindow(Self.Handle, SW_HIDE);
7837 //!
\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¦
7838 procedure TGikoForm.UnStoredTaskTray;
7842 Shell_NotifyIcon(NIM_DELETE, @FIconData);
7843 SetForegroundWindow(Application.Handle);
7848 // Action
\82©
\82ç
\8ai
\94[
\82µ
\82½
\82Æ
\82«
\82ÍTag
\82Ì
\92l
\82Í0
\88È
\8aO
7849 if (GikoDM.StoredTaskTrayAction.Tag = 0) then begin
7850 ShowWindow(Self.Handle, SW_RESTORE);
7852 ShowWindow(Self.Handle, SW_SHOW);
7854 ShowEditors(SW_SHOW);
7855 GikoDM.StoredTaskTrayAction.Tag := 0;
7859 \brief
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
7860 \param nCmdShow Windows.ShowWindow
\82É
\91\97\82é
\83p
\83\89\83\81\81[
\83^
\82Æ
\93¯
\82¶
7862 procedure TGikoForm.ShowEditors(nCmdShow: Integer);
7866 //
\83\8c\83X
\83G
\83f
\83B
\83^
\82ð
\92T
\82·
7867 for i := 0 to Screen.CustomFormCount - 1 do begin
7868 if TObject(Screen.CustomForms[i]) is TEditorForm then
7869 ShowWindow(Screen.CustomForms[i].Handle, nCmdShow);
7873 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83u
\83\89\83E
\83U
\8dì
\90¬
7874 procedure TGikoForm.CreateResPopupBrowser;
7876 if (FResPopupBrowser = nil) then begin
7877 FResPopupBrowser := TResPopupBrowser.Create(BrowserPanel);
7880 //! ListView
\82ÌD&D
\8eó
\82¯
\8eæ
\82è
7881 procedure TGikoForm.AcceptDropFiles(var Msg: TMsg);
7883 FileName: Array[0..MAX_PATH] of Char;
7887 datList: TStringList;
7889 //
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\94Â
\82Ì
\82Æ
\82«
\88È
\8aO
\82Í
\8b\91\94Û
7890 if GetActiveList is TBoard then begin
7891 Board := TBoard(GetActiveList);
7892 if MsgBox(Handle, Board.Title
7893 + '
\94Â
\82É
\93ü
\82ê
\82Ä
\82¢
\82¢
\82Å
\82·
\82©
\81H', '
\83M
\83R
\83i
\83r', MB_YESNO or MB_ICONQUESTION) = IDYES then begin
7894 //
\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
7895 datList := TStringList.Create;
7897 Cnt := DragQueryFile(Msg.WParam, $FFFFFFFF, FileName, SizeOf(FileName));
7898 for K := 0 to Cnt - 1 do begin
7899 DragQueryFile(Msg.WParam, K, FileName, SizeOf(FileName));
7900 // 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
7901 //
\83t
\83@
\83C
\83\8b\82Ì
\83`
\83F
\83b
\83N
7902 if (isValidFile(FileName)) then begin
7903 LogFolder := ExtractFilePath(Board.FilePath);
7904 if (FileExists( LogFolder + ExtractFileName(FileName))) then begin
7905 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);
7907 if (not DirectoryExists(LogFolder)) then begin
7908 if (not GikoSys.ForceDirectoriesEx(LogFolder) ) then begin
7909 GikoUtil.MsgBox(Handle, LogFolder + '
\82Ì
\90¶
\90¬
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7912 if (not Windows.CopyFile(FileName, PChar(LogFolder + ExtractFileName(FileName)), true)) then begin
7913 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);
7915 datList.Add(ExtractFileName(FileName));
7920 DragFinish(Msg.WParam);
7921 if (datList.Count > 0) then begin
7922 GikoSys.AddOutofIndexDat(Board, datList, False);
7923 ShowMessage(IntToStr(datList.Count) + '
\8cÂ
\82Ìdat
\83t
\83@
\83C
\83\8b\82ª
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82µ
\82½
\81B' );
7924 if GikoForm.TreeView.Visible then begin
7925 GikoForm.TreeView.Refresh;
7927 if GikoForm.ListView.Visible then begin
7931 ShowMessage('
\88ê
\82Â
\82à
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B' );
7939 ShowMessage('
\94Â
\82ð
\95\
\8e¦
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
7942 procedure TGikoForm.UpdateListView();
7944 //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
7945 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
7946 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
7947 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
7948 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
7949 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
7950 case GikoForm.ViewType of
7951 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
7952 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
7953 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
7954 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
7955 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
7956 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
7961 //!
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
7962 function TGikoForm.isValidFile(FileName: String) : boolean;
7967 //
\91¶
\8dÝ
\82·
\82é
\82©
\81A
\8ag
\92£
\8eqdat
\81A
\83t
\83@
\83C
\83\8b\96¼
7968 if ( not FileExists(FileName) ) then begin
7970 GikoUtil.MsgBox(Handle, FileName + '
\82Í
\91¶
\8dÝ
\82µ
\82Ü
\82¹
\82ñ
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7971 end else if (ExtractFileExt(ExtractFileName(FileName)) <> '.dat' ) then begin
7973 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);
7975 //
\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
7977 dt := GikoSys.GetCreateDateFromName(ExtractFileName(FileName));
7978 if ((UnixToDateTime(ZERO_DATE) + OffsetFromUTC) = dt) then begin
7980 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);
7984 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);
7989 procedure TGikoForm.ResPopupClearTimerTimer(Sender: TObject);
7991 ResPopupClearTimer.Enabled := False;
7992 if ResPopupClearTimer.Tag = 0 then begin
7993 FResPopupBrowser.Clear;
7995 FResPopupBrowser.CurrentBrowser.ChildClear;
7998 //!
\83A
\83C
\83R
\83\93\93Ç
\82Ý
\8d\9e\82Ý
7999 procedure TGikoForm.LoadIcon();
8001 ICONI6 = 'icon16.bmp';
8002 ICON32 = 'icon32.bmp';
8003 ICONSTAT = 'state_icon.bmp';
8004 ICONMES = 'message_icon.bmp';
8005 ICONADD = 'address_icon.bmp';
8006 ICONITEM = 'item_icon.bmp';
8007 ICONTOOL = 'hottoolbar_icon.bmp';
8009 if FileExists(GikoSys.Setting.GetAppDir + ICONI6) then begin
8011 ItemIcon16.FileLoad(rtBitmap,
8012 GikoSys.Setting.GetAppDir + ICONI6, clPurple);
8014 if FileExists(GikoSys.Setting.GetAppDir + ICON32) then begin
8016 ItemIcon32.FileLoad(rtBitmap,
8017 GikoSys.Setting.GetAppDir + ICON32, clPurple);
8019 if FileExists(GikoSys.Setting.GetAppDir + ICONSTAT) then begin
8020 StateIconImageList.Clear;
8021 StateIconImageList.FileLoad(rtBitmap,
8022 GikoSys.Setting.GetAppDir + ICONSTAT, clPurple);
8024 if FileExists(GikoSys.Setting.GetAppDir + ICONMES) then begin
8025 MessageImageList.Clear;
8026 MessageImageList.FileLoad(rtBitmap,
8027 GikoSys.Setting.GetAppDir + ICONMES, clPurple);
8029 if FileExists(GikoSys.Setting.GetAppDir + ICONADD) then begin
8030 AddressImageList.Clear;
8031 AddressImageList.FileLoad(rtBitmap,
8032 GikoSys.Setting.GetAppDir + ICONADD, clPurple);
8034 if FileExists(GikoSys.Setting.GetAppDir + ICONITEM) then begin
8035 ItemImageList.Clear;
8036 ItemImageList.FileLoad(rtBitmap,
8037 GikoSys.Setting.GetAppDir + ICONITEM, clPurple);
8039 if FileExists(GikoSys.Setting.GetAppDir + ICONTOOL) then begin
8040 HotToobarImageList.Clear;
8041 HotToobarImageList.FileLoad(rtBitmap,
8042 GikoSys.Setting.GetAppDir + ICONTOOL, clPurple);