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_POPUPCLEAR = WM_USER + 2005; ///< wParam : TWebBrowser
30 TToolBarSettingSenderType = (tssNone, tssMain, tssList, tssBrowser);
31 TMinimizeType = (mtNone, mtMinimizing, mtMinimized);
32 TResizeType = (rtNone, rtResizing);
34 // TBrowserRecord = class;
36 TGikoForm = class(TForm)
37 StatusBar: TStatusBar;
40 TreeSplitter: TSplitter;
43 ThreadMainPanel: TPanel;
44 ListSplitter: TSplitter;
46 ListView: TGikoListView;
50 MessageHideButton: TSpeedButton;
51 MessageListView: TListView;
52 MessageSplitter: TSplitter;
54 CabinetCloseSpeedButton: TSpeedButton;
56 CabinetSelectToolButton: TToolButton;
57 HistoryToolBar: TToolBar;
58 HistoryShowToolButton: TToolButton;
59 HistoryAllClearToolButton: TToolButton;
60 ItemIcon16: TImageList;
61 ItemIcon32: TImageList;
62 HotToobarImageList: TImageList;
63 ItemImageList: TImageList;
66 DeleteMenu: TMenuItem;
68 KidokuMenu: TMenuItem;
69 MidokuMenu: TMenuItem;
70 AllSelectMenu: TMenuItem;
72 StdToolBarMenu: TMenuItem;
73 CabinetMenu: TMenuItem;
76 CabinetVisibleMenu: TMenuItem;
77 MessageMenu: TMenuItem;
78 StatusBarMenu: TMenuItem;
80 LargeIconMenu: TMenuItem;
81 SmallIconMenu: TMenuItem;
83 DetailMenu: TMenuItem;
88 OptionMenu: TMenuItem;
93 BrowserPopupMenu: TPopupMenu;
94 ShowThreadMenu: TMenuItem;
95 ShowBoardMenu: TMenuItem;
96 ListIconPopupMenu: TPopupMenu;
97 LargeIconPMenu: TMenuItem;
98 SmallIconPMenu: TMenuItem;
100 DetailPMenu: TMenuItem;
101 ClosePopupMenu: TPopupMenu;
102 CloseMenu: TMenuItem;
112 ListPopupMenu: TPopupMenu;
113 ListRoundPMenu: TMenuItem;
114 ListReservPMenu: TMenuItem;
116 ItemRoundPMenu: TMenuItem;
118 KidokuPMenu: TMenuItem;
119 MidokuPMenu: TMenuItem;
120 AllSelectPMenu: TMenuItem;
121 UrlCopyPMenu: TMenuItem;
123 DeletePMenu: TMenuItem;
125 ViewPMenu: TMenuItem;
126 LargeIconLPMenu: TMenuItem;
127 SmallIconLPMenu: TMenuItem;
128 ListLPMenu: TMenuItem;
129 DetailLPMenu: TMenuItem;
147 KokoPopupMenu: TPopupMenu;
148 KokomadePMenu: TMenuItem;
150 MenuItem1: TMenuItem;
151 MenuItem2: TMenuItem;
152 BrowserTabPopupMenu: TPopupMenu;
157 TreePopupMenu: TPopupMenu;
158 TreeSelectThreadPupupMenu: TMenuItem;
159 TreeSelectBoardPupupMenu: TMenuItem;
161 TreeSelectURLPupupMenu: TMenuItem;
165 BrowserBottomPanel: TGikoPanel;
166 CabinetSelectPopupMenu: TPopupMenu;
168 ItemReservPMenu: TMenuItem;
169 RoundNamePopupMenu: TPopupMenu;
181 MessageImageList: TImageList;
182 ProgressBar: TProgressBar;
184 NameUrlCopyPMenu: TMenuItem;
191 ListCoolBar: TGikoCoolBar;
192 ListToolBar: TToolBar;
193 BrowserCoolBar: TGikoCoolBar;
194 BrowserToolBar: TToolBar;
195 ListNameToolBar: TToolBar;
196 ListNameLabel: TLabel;
198 BrowserNameToolBar: TToolBar;
199 ItemBoardImage: TImage;
200 BrowserBoardNameLabel: TLabel;
202 BrowserNameLabel: TLabel;
209 TreeSelectNameURLPupupMenu: TMenuItem;
213 BrowserTabToolBar: TToolBar;
214 BrowserTab: TTabControl;
225 FavoriteMenu: TMenuItem;
227 BoardFavoriteAddMenu: TMenuItem;
228 ThreadFavoriteAddMenu: TMenuItem;
230 TreeSelectFavoriteAddPupupMenu: TMenuItem;
231 FavoriteTreeView: TTreeView;
232 StateIconImageList: TImageList;
234 TopRightPanel: TPanel;
237 TopCoolPanel: TPanel;
238 MainCoolBar: TGikoCoolBar;
239 MenuToolBar: TToolBar;
240 StdToolBar: TToolBar;
241 AddressToolBar: TToolBar;
242 AddressComboBox: TComboBox;
243 MoveToToolButton: TToolButton;
244 AddressImageList: TImageList;
245 AddressToolBarMenu: TMenuItem;
255 PreviewTimer: TTimer;
256 MonazillaWebPageAction1: TMenuItem;
263 ChevronPopupMenu: TPopupMenu;
267 LinkToolBar: TToolBar;
272 LinkBarPopupMenu: TPopupMenu;
274 ThreadPopupMenu: TPopupMenu;
275 MenuItem4: TMenuItem;
276 MenuItem5: TMenuItem;
277 MenuItem6: TMenuItem;
280 SelectItemNameCopyAction1: TMenuItem;
283 NameCopyPMenu: TMenuItem;
284 SelectComboBox: TComboBox;
285 MainCoolBarPopupMenu: TPopupMenu;
286 StdToolBarVisiblePMenu: TMenuItem;
287 AddressToolBarVisiblePMenu: TMenuItem;
288 LinkToolBarVisiblePMenu: TMenuItem;
315 IndividualAbon1: TMenuItem;
317 IndividualAbon2: TMenuItem;
318 AntiIndivAbonMenuItem: TMenuItem;
319 AntiIndividualAbon: TMenuItem;
323 SearchBoardName: TMenuItem;
324 TreeSelectLogDeleteSeparator: TMenuItem;
327 FavoriteTreePopupMenu: TPopupMenu;
328 FavoriteTreeRenamePopupMenu: TMenuItem;
329 FavoriteTreeNewFolderPopupMenu: TMenuItem;
331 FavoriteTreeDeletePopupMenu: TMenuItem;
332 FavoriteToolBar: TToolBar;
333 FavoriteAddToolButton: TToolButton;
334 FavoriteArrangeToolButton: TToolButton;
335 FavoriteTreeBrowseFolderPopupMenu: TMenuItem;
337 FavoriteTreeReloadPopupMenu: TMenuItem;
339 FavoriteTreeURLCopyPopupMenu: TMenuItem;
340 FavoriteTreeNameCopyPopupMenu: TMenuItem;
341 FavoriteTreeLogDeletePopupMenu: TMenuItem;
343 FavoriteTreeNameURLCopyPopupMenu: TMenuItem;
345 ExportFavoriteFileAction1: TMenuItem;
356 TreeSelectLogDeletePopupMenu: TMenuItem;
358 BBSSelectPopupMenu: TPopupMenu;
359 PlugInMenu: TMenuItem;
360 TreeSelectNamePupupMenu: TMenuItem;
361 BrowserPanel: TPanel;
363 SelectThreadSave: TMenuItem;
367 OpenLogFolder: TMenuItem;
368 Browser: TWebBrowser;
371 ResRangePopupMenu: TPopupMenu;
372 ResRangeHundPMenuItem: TMenuItem;
373 ResRangeKokoPMenuItem: TMenuItem;
374 ResRangeNewPMenuItem: TMenuItem;
375 ResRangeAllPMenuItem: TMenuItem;
376 BrowsBoradHeadAction1: TMenuItem;
377 ThreadRangePopupMenu: TPopupMenu;
384 ResRangeSelectPMenuItem: TMenuItem;
385 ListColumnPopupMenu: TPopupMenu;
394 SelectComboBoxPanel: TPanel;
395 SelectComboBoxSplitter: TImage;
398 GikoApplicationEvents: TApplicationEvents;
405 FavoriteTreeItemNameCopyPopupMenu: TMenuItem;
408 SaveThreadFile: TMenuItem;
413 SameBoardThreadItem: TMenuItem;
418 ResPopupClearTimer: TTimer;
419 TaskTrayPopupMenu: TPopupMenu;
422 UpdateGikonaviAction1: TMenuItem;
424 procedure FormCreate(Sender: TObject);
425 procedure FormDestroy(Sender: TObject);
426 procedure SaveSettingAll();
427 procedure BrowserStatusTextChange(Sender: TObject;
428 const Text: WideString);
429 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
430 procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
431 var AllowChange: Boolean);
432 procedure ListViewKeyDown(Sender: TObject; var Key: Word;
434 procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
435 procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
436 Button: TToolButton; State: TCustomDrawState;
437 var DefaultDraw: Boolean);
438 procedure BrowserBeforeNavigate2(Sender: TObject;
439 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
440 Headers: OleVariant; var Cancel: WordBool);
441 procedure TreeViewCustomDraw(Sender: TCustomTreeView;
442 const ARect: TRect; var DefaultDraw: Boolean);
443 procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
444 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
445 procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
446 procedure ListViewCustomDraw(Sender: TCustomListView;
447 const ARect: TRect; var DefaultDraw: Boolean);
448 procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
449 Shift: TShiftState; X, Y: Integer);
450 procedure TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
451 procedure MessageListViewResize(Sender: TObject);
452 procedure CabinetVisible( isVisible : Boolean );
453 procedure FormResize(Sender: TObject);
454 procedure ListPopupMenuPopup(Sender: TObject);
455 procedure TreePopupMenuPopup(Sender: TObject);
456 procedure BrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
457 var Cancel: WordBool);
458 procedure ListSplitterMoved(Sender: TObject);
459 procedure BrowserTabChange(Sender: TObject);
460 procedure BrowserTabMouseDown(Sender: TObject; Button: TMouseButton;
461 Shift: TShiftState; X, Y: Integer);
462 procedure BrowserTabDragOver(Sender, Source: TObject; X, Y: Integer;
463 State: TDragState; var Accept: Boolean);
464 procedure BrowserTabDragDrop(Sender, Source: TObject; X, Y: Integer);
465 procedure BrowserTabMouseMove(Sender: TObject; Shift: TShiftState; X,
467 procedure BrowserDocumentComplete(Sender: TObject;
468 const pDisp: IDispatch; var URL: OleVariant);
469 procedure RoundNamePopupMenuPopup(Sender: TObject);
470 procedure FormShow(Sender: TObject);
471 procedure BrowserTabToolBarResize(Sender: TObject);
472 procedure FavoriteMenuClick(Sender: TObject);
473 procedure MainCoolBarResize(Sender: TObject);
474 procedure AddressToolBarResize(Sender: TObject);
475 procedure AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
477 procedure BrowserEnter(Sender: TObject);
478 procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
479 procedure PreviewTimerTimer(Sender: TObject);
480 procedure MessageHideButtonClick(Sender: TObject);
481 procedure HistoryAllClearToolButtonClick(Sender: TObject);
482 procedure MainCoolBarBandInfo(Sender: TObject;
483 var BandInfo: PReBarBandInfoA);
484 procedure MainCoolBarChevronClick(Sender: TObject;
485 RebarChevron: PNMRebarChevron);
486 procedure ListCoolBarBandInfo(Sender: TObject;
487 var BandInfo: PReBarBandInfoA);
488 procedure ListCoolBarChevronClick(Sender: TObject;
489 RebarChevron: PNMRebarChevron);
490 procedure BrowserCoolBarBandInfo(Sender: TObject;
491 var BandInfo: PReBarBandInfoA);
492 procedure BrowserCoolBarChevronClick(Sender: TObject;
493 RebarChevron: PNMRebarChevron);
494 procedure ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
495 procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
496 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
497 procedure SelectComboBoxChange(Sender: TObject);
498 procedure SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
500 procedure SelectComboBoxExit(Sender: TObject);
501 procedure SelectComboBoxSplitterMouseMove(Sender: TObject;
502 Shift: TShiftState; X, Y: Integer);
503 procedure SelectComboBoxSplitterMouseDown(Sender: TObject;
504 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
505 procedure SelectComboBoxSplitterMouseUp(Sender: TObject;
506 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
507 procedure StatusBarResize(Sender: TObject);
508 procedure SelectComboBoxEnter(Sender: TObject);
509 procedure FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
511 procedure FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
512 procedure FavoriteTreeViewEdited(Sender: TObject; Node: TTreeNode;
514 procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
516 procedure FavoriteTreePopupMenuPopup(Sender: TObject);
517 procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
518 procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
519 Shift: TShiftState; X, Y: Integer);
520 procedure LinkToolBarDragOver(Sender, Source: TObject; X, Y: Integer;
521 State: TDragState; var Accept: Boolean);
522 procedure FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
524 procedure FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
525 procedure BrowserTabContextPopup(Sender: TObject; MousePos: TPoint;
526 var Handled: Boolean);
527 procedure BrowserTabPopupMenuPopup(Sender: TObject);
528 procedure BrowserTabResize(Sender: TObject);
529 procedure TreeViewKeyDown(Sender: TObject; var Key: Word;
531 procedure FavoriteTreeViewMouseDown(Sender: TObject;
532 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
533 procedure MessagePanelResize(Sender: TObject);
535 procedure SelectTimerTimer(Sender: TObject);
536 procedure ListViewColumnRightClick(Sender: TObject;
537 Column: TListColumn; Point: TPoint);
538 procedure ListViewCustomDrawItem(Sender: TCustomListView;
539 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
540 procedure FormActivate(Sender: TObject);
541 procedure BrowserPanelResize(Sender: TObject);
542 procedure MenuToolBarResize(Sender: TObject);
543 procedure ListToolBarResize(Sender: TObject);
544 procedure BrowserToolBarResize(Sender: TObject);
545 procedure KokoPopupMenuPopup(Sender: TObject);
546 procedure ListViewKeyUp(Sender: TObject; var Key: Word;
548 procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
549 var AllowEdit: Boolean);
550 procedure CabinetCloseSpeedButtonClick(Sender: TObject);
551 procedure FavoriteArrangeToolButtonClick(Sender: TObject);
552 procedure GikoApplicationEventsMessage(var Msg: tagMSG;
553 var Handled: Boolean);
554 procedure GikoApplicationEventsDeactivate(Sender: TObject);
555 procedure GikoApplicationEventsException(Sender: TObject; E: Exception);
556 procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
557 Shift: TShiftState; X, Y: Integer);
558 procedure GetResURLMenuClick(Sender: TObject);
559 procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
560 var Handled: Boolean);
561 procedure ResPopupClearTimerTimer(Sender: TObject);
564 FEnabledCloseButton: Boolean;
565 FClickNode: TTreeNode;
567 FPreviewBrowser: TPreviewBrowser;
569 FBrowserSizeHeight: Integer;
570 FBrowserSizeWidth: Integer;
571 FTabHintIndex: Integer;
572 FListStyle: TViewStyle; //
\83\8a\83X
\83g
\83A
\83C
\83R
\83\93\83X
\83^
\83C
\83\8b
573 FItemNoVisible: Boolean; //
\83\8a\83X
\83g
\94Ô
\8d\86\95\
\8e¦
\83t
\83\89\83O
574 FViewType: TGikoViewType; //
\83\8a\83X
\83g
\83A
\83C
\83e
\83\80\95\
\8e¦
\83^
\83C
\83v
575 FActiveList: TObject;
576 FActiveContent: TBrowserRecord; //
578 FHistoryList: THistoryList; //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
579 FTreeType: TGikoTreeType;
583 FDownloadTitle: string; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\83^
\83C
\83g
\83\8b\96¼
584 FDownloadMax: Integer; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\8dÅ
\91å
\83T
\83C
\83Y
585 FEvent: THTMLDocumentEventSink;//
\83u
\83\89\83E
\83U
\83h
\83L
\83\85\83\81\83\93\83g
\83C
\83x
\83\93\83g
586 IsDraggingSelectComboBox : Boolean;
587 DraggingSelectComboBoxPosition : TPoint;
588 FSearchDialog: TSearchDialog;
589 FDropSpaceNode: TTreeNode;
590 FDragTime : Cardinal; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
591 FDragButton : TToolButton; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
\82ÉDrag
\82µ
\82Ä
\82éButton
\95Û
\91¶
592 FDragWFirst : Boolean; ///< WebTab
\82ÌD&D
\97p
593 FListViewBackGroundColor : TColor; ///< ListView
\82ÌBackGroundColor
594 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¦
595 FOddColor : TColor; ///<
\82»
\82Ì
\90F
596 FSelectResWord : string; ///<
\83\8c\83X
\8di
\8d\9e\83\8f\81[
\83h
597 FIsIgnoreResize : TResizeType; ///<
\83\8a\83T
\83C
\83Y
\83C
\83x
\83\93\83g
\82ð
\96³
\8e\8b\82·
\82é
\82©
\82Ç
\82¤
\82©
598 FIsMinimize : TMinimizeType; ///<
\8dÅ
\8f¬
\89»
\82µ
\82Ä
\82¢
\82é
\8dÅ
\92\86\82©
599 FOldFormWidth : Integer; ///<
\92¼
\91O
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\95\9d
600 FToolBarSettingSender : TToolBarSettingSenderType; ///<
\83c
\81[
\83\8b\83o
\81[
\90Ý
\92è
\82ð
\83N
\83\8a\83b
\83N
\82µ
\82½
\83N
\81[
\83\8b\83o
\81[
601 FMouseDownPos : TPoint; ///<
\83u
\83\89\83E
\83U
\83^
\83u
\82Å
\83}
\83E
\83X
\82ð
\89\9f\82µ
\82½
\82Æ
\82«
\82Ì
\8dÀ
\95W
603 FResRangeMenuSelect : Longint; ///< ResRangeButton
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\8d\80\96Ú (
\83t
\83H
\81[
\83}
\83b
\83g
\82Í ResRange
\8cÝ
\8a·)
605 FIsHandledWheel : Boolean; ///<
\8aù
\82É
\8eó
\82¯
\8eæ
\82Á
\82½ WM_MOUSEWHEEL
\82©
\82Ç
\82¤
\82©
606 DiffComp: Boolean; //Add by Genyakun
\83X
\83\8c\82ª
\8dX
\90V
\82³
\82ê
\82½
\82Æ
\82«
\82ÉTrue
\82É
\82È
\82é
607 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ñ
608 FPreviewBrowserRect: TRect; ///<
\83v
\83\8c\83r
\83\85\81[
\82Ì
\95\
\8e¦
\88Ê
\92u
\82ð
\8bL
\89¯
\82·
\82é
609 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ñ
610 FResPopupBrowser: TResPopupBrowser;
611 FUpdateExePath: string; ///
\83M
\83R
\83i
\83r
\8dX
\90V
\83C
\83\93\83X
\83g
\81[
\83\89\83p
\83X
612 FUpdateExeArgs: string; ///
\83M
\83R
\83i
\83r
\8dX
\90V
\83C
\83\93\83X
\83g
\81[
\83\89\88ø
\90\94
613 FKokoPopupThreadItem: TThreadItem;
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 //!
\83\8c\83X
\83\81\83j
\83\85\81[
\83A
\83N
\83e
\83B
\83u
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80
764 property KokoPopupThreadItem : TThreadItem read FKokoPopupThreadItem;
766 function FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
767 procedure OnPlugInMenuItem( Sender : TObject );
768 procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
769 /// 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Å
770 procedure ActiveListColumnSave;
771 procedure SetActiveList(Obj: TObject);
772 property ActiveList: TObject read GetActiveList write SetActiveList;
773 /// CoolBar
\82ª
\83T
\83C
\83Y
\95Ï
\8dX
\82³
\82ê
\82½
774 procedure CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
775 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
776 procedure IndividualAbonID(Atype : Integer);
777 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
778 procedure IndividualAbon(Atag, Atype : Integer);
779 //
\93¯
\88êID
\82ðNG
\83\8f\81[
\83h
\82É
\93o
\98^
780 procedure AddIDtoNGWord(invisible : boolean);
781 //
\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Ý
782 procedure RepaintAllTabsBrowser();
783 //
\83\8a\83\93\83N
\83o
\81[
\90Ý
\92è
784 procedure SetLinkBar;
785 procedure FavoriteBrowseFolder( node: TTreeNode );
786 //
\83X
\83\8c\83b
\83h
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
787 procedure DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
788 //
\94Â
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
789 procedure DownloadList(Board: TBoard; ForceDownload: Boolean = False);
790 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
791 procedure DeleteHistory( threadItem: TThreadItem );
792 //
\83^
\83u
\82ð
\8dí
\8f\9c \83X
\83\8c\83b
\83h
\8ew
\92è
793 procedure DeleteTab(ThreadItem: TThreadItem); overload;
794 //
\83^
\83u
\82ð
\8dí
\8f\9c \83u
\83\89\83E
\83U
\83\8c\83R
\81[
\83h
\81i
\83^
\83u
\81j
\8ew
\92è
795 procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
796 //
\83^
\83u
\8dí
\8f\9c\81i
\8eÀ
\91\95\95\94\81j
797 procedure DeleteTab(index, selectIndex: Integer); overload;
798 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
799 procedure BrowserMovement(const AName: string); overload;
800 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
801 procedure BrowserMovement(scroll: Integer); overload;
802 //Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
803 function GetMainForm(): TComponent;
804 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
805 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
806 procedure OnGestureStart(Sender: TObject);
807 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
808 procedure OnGestureMove(Sender: TObject);
809 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
810 procedure OnGestureEnd(Sender: TObject);
811 ///
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
812 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
813 //ListView
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\82ð
\8eæ
\93¾
\82·
\82é
814 procedure SelectListItem(List: TList);
815 //
\8ew
\92è
\82µ
\82½
\83\8c\83X
\82ð
\83R
\83s
\81[
\82·
\82é
816 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
818 procedure ModifySelectList;
820 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
822 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
824 procedure SetSelectRoundName(Sender: TObject);
826 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
828 function WebBrowserClick(Sender: TObject): WordBool;
829 //!
\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é
830 procedure SetSelectComboBox();
832 //!
\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
833 procedure TaskTrayIconMessage(var Msg : TMsg); message WM_USER + 2010;
834 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
835 procedure StoredTaskTray;
836 //!
\93¯ID
\83\8c\83X
\83A
\83\93\83J
\81[
\95\
\8e¦
837 procedure ShowSameIDAncher(const AID: String);
839 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
842 TFavoriteMenuItem = class(TMenuItem)
846 property Data: Pointer read FData write FData;
849 TBBSMenuItem = class(TMenuItem)
853 property Data: Pointer read FData write FData;
856 TLinkToolButton = class(TToolButton)
860 property Data: Pointer read FData write FData;
869 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
870 YofUtils, ToolBarUtil, ToolBarSetting,
871 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
872 FavoriteArrange, AddressHistory, Gesture,
873 About, Option, Round, Splash, Sort, ListSelect, Imm,
874 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
875 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
876 InputAssistDataModule, Types, ReplaceDataModule;
879 BLANK_HTML: string = 'about:blank';
880 BROWSER_COUNT = 5; //
\83u
\83\89\83E
\83U
\82Ì
\90\94
882 DandD_THRESHOLD = 5; //D&D
\82Ìè
\87\92l
\81ipixcel)
883 //
\83v
\83\8c\83r
\83\85\81[
\83t
\83@
\83C
\83\8b\96¼
884 HTML_FILE_NAME = 'temp_preview.html';
885 //
\83\81\83b
\83Z
\81[
\83WID
886 USER_TREECLICK = WM_USER + 2000;
887 USER_RESIZED = WM_USER + 2001;
888 USER_MINIMIZED = WM_USER + 2002;
889 USER_SETLINKBAR = WM_USER + 2003;
890 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
891 USER_TASKTRAY = WM_USER + 2010;
894 procedure TGikoForm.CreateParams(var Params: TCreateParams);
897 if FormStyle in [fsNormal, fsStayOnTop] then begin
898 if BorderStyle in [bsSingle, bsSizeable] then begin
899 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
900 Params.WndParent := 0;
905 procedure TGikoForm.FormCreate(Sender: TObject);
907 TVS_NOTOOLTIPS = $0080;
913 wp: TWindowPlacement;
917 Writeln('============================================================');
918 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
920 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
921 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¢');
922 Writeln('============================================================');
925 Sort.SetSortDate(Now());
927 FTreeType := gttNone;
928 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô
930 Application.HookMainWindow(Hook);
931 FIsIgnoreResize := rtResizing;
932 //ActionList
\82ÌGuoupIndex
\82ð
\95Û
\91¶
\82µ
\82Ä
\81A0
\82É
\83N
\83\8a\83A
\82·
\82é
\81B
933 //(
\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¢)
934 //
\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
935 GetGroupIndex(GikoDM.GikoFormActionList);
936 FSearchDialog := nil;
937 FResPopupBrowser := nil;
938 CreateBrowsers(BROWSER_COUNT);
940 FUpdateExePath := '';
941 FUpdateExeArgs := '';
943 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
946 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
947 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
949 //
\83A
\83C
\83R
\83\93\82Ì
\93Ç
\82Ý
\8eæ
\82è
952 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
953 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
955 EnabledCloseButton := True;
957 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
958 ListView.ViewStyle := GikoSys.Setting.ListStyle;
960 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
962 AnimePanel.Left := 0;
964 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
966 //
\83L
\83\83\83r
\83l
\83b
\83g
967 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
969 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
970 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
971 GikoDM.MsgBarVisibleActionExecute(nil);
972 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
974 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
975 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
976 GikoDM.StatusBarVisibleActionExecute(nil);
978 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
979 TreeView.Items.BeginUpdate;
980 FavoriteTreeView.Items.BeginUpdate;
981 ListView.Items.BeginUpdate;
983 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
984 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
985 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
986 TreeView.Color := GikoSys.Setting.CabinetBackColor;
987 FavoriteTreeView.Font.Assign(TreeView.Font);
988 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
990 ListView.Font.Name := GikoSys.Setting.ListFontName;
991 ListView.Font.Size := GikoSys.Setting.ListFontSize;
992 ListView.Font.Color := GikoSys.Setting.ListFontColor;
993 ListView.Font.Style := [];
994 if GikoSys.Setting.ListFontBold then
995 ListView.Font.Style := [fsbold];
996 if GikoSys.Setting.ListFontItalic then
997 ListView.Font.Style := ListView.Font.Style + [fsitalic];
999 ListViewBackGroundColor := clWhite; //
\83f
\83t
\83H
\83\8b\83g
\82É
\90Ý
\92è
\82µ
\82½
\82Ì
\82¿
1000 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; //
\83\86\81[
\83U
\92è
\8b`
\82É
\95Ï
\8dX
1001 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
1002 FOddColor := GikoSys.Setting.OddColor;
1005 TreeView.Items.EndUpdate;
1006 FavoriteTreeView.Items.EndUpdate;
1007 ListView.Items.EndUpdate;
1009 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
1010 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
1012 //
\83~
\83\85\81[
\83g
\82Ì
\8fó
\91Ô
\82ð
\90Ý
\92è
1013 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
1015 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1016 FResRangeMenuSelect := GikoSys.ResRange;
1017 case GikoSys.ResRange of
1020 GikoDM.AllResAction.Execute;
1024 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
1025 GikoDM.SelectResAction.Checked := True;
1028 case FResRangeMenuSelect of
1029 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
1030 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
1033 GikoDM.OnlyAHundredResAction.Checked := True;
1034 GikoSys.ResRange := GikoSys.Setting.ResRangeExCount;
1039 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\95\
\8e¦
\94Í
\88Í
1040 case GikoSys.Setting.ThreadRange of
1043 GikoDM.AllItemAction.Checked := True;
1048 GikoDM.LogItemAction.Checked := True;
1053 GikoDM.NewItemAction.Checked := True;
1058 GikoDM.LiveItemAction.Checked := True;
1059 ViewType := gvtLive;
1063 GikoDM.ArchiveItemAction.Checked := True;
1064 ViewType := gvtArch;
1069 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
1070 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1071 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1072 BrowserTab.Font.Style := [];
1073 if GikoSys.Setting.BrowserTabFontBold then
1074 BrowserTab.Font.Style := [fsBold];
1075 if GikoSys.Setting.BrowserTabFontItalic then
1076 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1078 BrowserTab.DoubleBuffered := True;
1079 FDragWFirst := false;
1080 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1082 //
\83u
\83\89\83E
\83U
\83^
\83u
1083 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1085 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1086 GikoDM.BrowserTabTopAction.Checked := True;
1088 GikoDM.BrowserTabBottomAction.Checked := True;
1091 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1092 GikoDM.BrowserTabTabStyleAction.Checked := True;
1093 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1094 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1096 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1099 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1100 ProgressBar.Parent := StatusBar;
1101 ProgressBar.Top := 2;
1102 ProgressBar.Left := 0;
1103 ProgressBar.Width := StatusBar.Panels[0].Width;
1104 ProgressBar.Height := StatusBar.Height - 2;
1105 ProgressBar.Position := 0;
1107 //
\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Æ)
1108 InitializeBoardPlugIns;
1110 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1111 GikoSys.ListBoardFile;
1112 //
\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É
1114 //
\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è
1115 if (SplashWindow <> nil) then begin
1116 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1120 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1121 for i := Length(BBSs) - 1 downto 0 do begin
1122 if not BBSs[i].IsBoardFileRead then
1123 GikoSys.ReadBoardFile(BBSs[i]);
1125 if SplashWindow <> nil then begin
1126 SplashWindow.ProgressBar.StepBy(20);
1127 SplashWindow.Update;
1131 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1132 RoundList := TRoundList.Create;
1133 RoundList.LoadRoundBoardFile;
1134 RoundList.LoadRoundThreadFile;
1136 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1137 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1138 Style := Style or TVS_NOTOOLTIPS;
1139 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1141 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1142 TreeView.Align := alClient;
1143 FavoriteTreeView.Align := alClient;
1144 FavoriteTreeView.Visible := False;
1146 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1149 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1150 wp.length := sizeof(wp);
1151 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1152 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1153 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1154 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1155 wp.showCmd := SW_HIDE;
1156 SetWindowPlacement(Handle, @wp);
1159 if GikoSys.Setting.WindowMax then
1160 WindowState := wsMaximized;
1162 //
\83M
\83R
\83A
\83j
\83\81
1164 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1165 if FileExists(FileName) then
1166 Animate.FileName := FileName;
1174 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1175 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1176 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1179 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1180 FHistoryList := THistoryList.Create;
1182 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1183 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1184 TreeView, FTreeType);
1186 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1187 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1188 FavoriteDM.ReadFavorite;
1190 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1191 GikoDM.ArrangeAction.Execute;
1193 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1194 case GikoSys.Setting.ListWidthState of
1196 ViewPanel.Width := 1;
1197 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1198 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1201 ViewPanel.Width := GikoSys.Setting.ListWidth;
1202 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1203 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1206 ViewPanel.Width := GikoSys.Setting.ListWidth;
1207 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1208 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1212 case GikoSys.Setting.ListHeightState of
1214 ViewPanel.Height := 1;
1215 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1216 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1219 ViewPanel.Height := GikoSys.Setting.ListHeight;
1220 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1221 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1224 ViewPanel.Height := GikoSys.Setting.ListHeight;
1225 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1226 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1231 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1232 CreateControlThread();
1234 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1235 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1237 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1240 BrowserBoardNameLabel.Caption := '';
1241 BrowserNameLabel.Caption := '';
1244 FTabHintIndex := -1;
1246 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1247 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1248 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1250 MakeDefaultINIFile();
1251 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1252 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1253 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1254 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1257 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1258 SetSelectComboBox();
1260 //
\83A
\83h
\83\8c\83X
\83o
\81[
1261 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1263 //
\83\8a\83\93\83N
\83o
\81[
1265 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1267 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1268 if not FileExists(GikoSys.GetBoardFileName) then begin
1269 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
1270 + '
\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
1271 + '
\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';
1272 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1273 GikoDM.NewBoardAction.Execute;
1276 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1277 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1279 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1280 // FLastRoundTime := 0;
1282 ListView.OnData := TListViewUtils.ListViewData;
1284 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1285 CabinetVisible( False );
1286 if GikoSys.Setting.CabinetVisible then begin
1287 i := CabinetSelectPopupMenu.Items.Count - 1;
1288 if GikoSys.Setting.CabinetIndex = i - 1 then
1289 GikoDM.CabinetHistoryAction.Execute
1290 else if GikoSys.Setting.CabinetIndex = i then
1291 GikoDM.CabinetFavoriteAction.Execute
1293 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1294 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1295 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1296 FIsIgnoreResize := rtResizing;
1297 GikoDM.CabinetBBSAction.Execute;
1300 ShowBBSTreeOld( BBSs[ 0 ] );
1301 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1304 //
\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
1305 for i := 1 to ParamCount do begin
1306 MoveToURL(ParamStr(i));
1309 GikoDM.RepaintStatusBar;
1310 StatusBarResize(Sender);
1312 dummy1.Caption := ItemReservPMenu.Caption;
1313 dummy1.Hint := ItemReservPMenu.Hint;
1315 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1316 MouseGesture := TMouseGesture.Create;
1318 {$IFDEF SPAM_FILTER_ENABLED}
1319 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1320 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1323 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1324 GikoSys.SetGikoMessage;
1326 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1327 if GikoSys.Setting.AutoLogin then
1328 GikoDM.LoginAction.Execute;
1330 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1332 //
\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è
1333 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1334 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1336 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\8f\89\8aú
\89»
1337 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1339 //
\92u
\8a·
\90Ý
\92è
\83t
\83@
\83C
\83\8b\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1340 ReplaceDM.LoadFromFile(GikoSys.GetReplaceFileName);
1342 //
\83\8c\83X
\83|
\83b
\83v
\83A
\83b
\83v
\8fÁ
\8b\8e\83^
\83C
\83}
\81[
1343 ResPopupClearTimer.Interval := GikoSys.Setting.RespopupWait;
1345 // D&D
\82ð
\8eó
\82¯
\8eæ
\82é
1346 DragAcceptFiles(ListView.Handle, True);
1348 //
\8f\89\8aú
\89»
\82É
\8e¸
\94s
\82µ
\82½
\83\82\83W
\83\85\81[
\83\8b\83`
\83F
\83b
\83N
1349 if (FavoriteDM.AbEnd) then begin
1350 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',
1351 '
\8f\89\8aú
\89»
\88Ù
\8fí');
1357 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1358 procedure TGikoForm.SaveCoolBarSettings;
1361 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1363 SaveMainCoolBarSettings;
1364 SaveBoardCoolBarSettings;
1365 SaveBrowserCoolBarSettings;
1368 procedure TGikoForm.SaveMainCoolBarSettings;
1373 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1374 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1375 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1376 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1377 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1378 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1381 procedure TGikoForm.SaveBoardCoolBarSettings;
1386 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1387 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1388 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1389 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1390 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1391 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1394 procedure TGikoForm.SaveBrowserCoolBarSettings;
1399 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1400 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1401 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1402 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1403 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1404 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1407 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1408 procedure TGikoForm.LoadCoolBarSettings;
1414 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1415 MainCoolBar.Bands.BeginUpdate;
1417 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1418 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1419 CoolSet := GikoSys.Setting.MainCoolSet[i];
1420 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1421 FIsIgnoreResize := rtNone;
1422 SaveCoolBarSettings;
1425 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1426 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1427 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1430 MainCoolBar.Bands.EndUpdate;
1433 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1434 ListCoolBar.Bands.BeginUpdate;
1436 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1437 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1438 CoolSet := GikoSys.Setting.ListCoolSet[i];
1439 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1440 FIsIgnoreResize := rtNone;
1441 SaveCoolBarSettings;
1444 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1445 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1446 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1449 ListCoolBar.Bands.EndUpdate;
1452 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1453 BrowserCoolBar.Bands.BeginUpdate;
1455 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1456 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1457 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1458 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1459 FIsIgnoreResize := rtNone;
1460 SaveCoolBarSettings;
1463 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1464 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1465 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1468 BrowserCoolBar.Bands.EndUpdate;
1473 procedure TGikoForm.FormShow(Sender: TObject);
1477 if FStartUp then begin
1479 ShowWindow(Application.Handle, SW_HIDE);
1480 //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½
1481 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1482 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1483 GikoDM.StdToolBarVisibleActionExecute( nil );
1484 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1485 GikoDM.AddressBarVisibleActionExecute( nil );
1486 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1487 GikoDM.LinkBarVisibleActionExecute( nil );
1488 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1489 GikoDM.ListToolBarVisibleActionExecute( nil );
1490 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1491 GikoDM.ListNameBarVisibleActionExecute( nil );
1492 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1493 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1494 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1495 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1497 // CoolBar
\95\9c\8c³
1498 LoadCoolBarSettings;
1500 //
\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é
1501 // ResetBandInfo( ListCoolBar, ListToolBar );
1502 FIsIgnoreResize := rtNone;
1504 //ActionList
\82ÌGroupIndex
\82ð
\8c³
\82É
\96ß
\82·
1505 SetGroupIndex(GikoDM.GikoFormActionList);
1507 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1508 if GikoSys.Setting.TabAutoLoadSave then begin
1509 GikoDM.TabsOpenAction.Tag := 1;
1510 GikoDM.TabsOpenAction.Execute;
1511 GikoDM.TabsOpenAction.Tag := 0;
1512 if (GikoSys.Setting.LastCloseTabURL <> '') then begin
1513 if ( FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
1514 while (FActiveContent.Browser.ReadyState <> READYSTATE_COMPLETE) and
1515 (FActiveContent.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
1516 //
\83\81\83b
\83Z
\81[
\83W
\82ð
\8eó
\82¯
\8eæ
\82ç
\82È
\82¢
\82æ
\82¤
\82É
\83X
\83\8a\81[
\83v
\82É
\95Ï
\8dX
1520 item := BBSsFindThreadFromURL( GikoSys.Setting.LastCloseTabURL );
1521 GikoSys.Setting.LastCloseTabURL := '';
1522 if (item <> nil) and (item.IsLogFile) then begin
1523 OpenThreadItem(item, item.URL);
1525 //ShowWindow(Self.Handle, SW_SHOW);
1531 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1533 // if GikoForm.WindowState <> wsMinimized then
1534 // SaveCoolBarSettings;
1536 if ( GikoSys.Setting.ShowDialogForEnd ) and
1537 (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
1542 GikoSys.Setting.LastCloseTabURL := '';
1543 if GikoSys.Setting.TabAutoLoadSave then begin
1544 GikoDM.TabsSaveAction.Execute;
1545 if (GetActiveContent <> nil) and
1546 (GetActiveContent.IsLogFile) then begin
1547 GikoSys.Setting.LastCloseTabURL := GetActiveContent.URL;
1551 if (SearchDialog <> nil) then begin
1552 if (SearchDialog.Visible) then begin
1556 SearchDialog.Release;
1559 SearchDialog := nil;
1562 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82Ì
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81AEditorForm
\82ð
\95Â
\82¶
\82é
1563 GikoDM.CloseAllEditorAction.Execute;
1565 Application.UnhookMainWindow(Hook);
1566 //
\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·
1567 FControlThread.DownloadAbort;
1568 FControlThread.Terminate;
1570 //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¶
1573 Application.Terminate;
1576 procedure TGikoForm.SaveSettingAll();
1578 wp : TWindowPlacement;
1579 WindowPlacement: TWindowPlacement;
1582 ActiveListColumnSave;
1587 WindowPlacement.length := SizeOf(TWindowPlacement);
1588 GetWindowPlacement(Self.Handle, @WindowPlacement);
1590 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1591 wp.length := sizeof(wp);
1592 GetWindowPlacement(Handle, @wp);
1593 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1594 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1595 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1596 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1597 GikoSys.Setting.WindowMax := (WindowState = wsMaximized) or
1598 (WindowPlacement.flags = WPF_RESTORETOMAXIMIZED);
1599 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1600 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1601 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1602 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1603 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1604 if GikoDM.ArrangeAction.Checked then
1605 GikoSys.Setting.ListOrientation := gloVertical
1607 GikoSys.Setting.ListOrientation := gloHorizontal;
1608 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1613 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1614 if not GikoSys.Setting.ResRangeHold then
1615 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1618 //
\8d¡
\82Ìwinodw
\82Ì
\83X
\83^
\83C
\83\8b\82ÅCoolBar
\82Ì
\88Ê
\92u
\81A
\83E
\83B
\83\93\83h
\83E
\82Ì
\88Ê
\92u
\82ð
\95Û
\91¶
1619 SaveCoolBarSettings;
1620 GikoSys.Setting.WriteWindowSettingFile;
1621 //
\96¼
\91O
\82Æ
\83\81\81[
\83\8b\82Ì
\95Û
\91¶
\82È
\82Ì
\82Å
\83G
\83f
\83B
\83^
\82ª
\95Â
\82¶
\82½
\8cã
\82È
\82ç
\82¢
\82Â
\82Å
\82à
\82¢
\82¢
1622 GikoSys.Setting.WriteNameMailSettingFile;
1624 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\90Ý
\92è
\82Ì
\95Û
\91¶
1625 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1627 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1629 //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é
1630 //
\8f\89\8aú
\89»
\88Ù
\8fí
\8e\9e\82©
\82ç
\82Ì
\8fI
\97¹
\82Å
\82Í
\95Û
\91¶
\82µ
\82È
\82¢
1631 if not (FavoriteDM.AbEnd) then begin
1632 FavoriteDM.WriteFavorite;
1637 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1639 //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
1640 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1644 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
1646 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1650 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1652 RoundList.SaveRoundFile;
1656 //
\83^
\83X
\83N
\83g
\83\8c\83C
\82Ì
\83A
\83C
\83R
\83\93\8dí
\8f\9c
1657 if (FIconData.uID <> 0) then begin
1658 Shell_NotifyIcon(NIM_DELETE, @FIconData);
1663 procedure TGikoForm.FormDestroy(Sender: TObject);
1668 //
\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¶
1669 //
\81¦
\92\8d\88Ó
\81FOnDestroy
\82Å
\8eg
\82¤
\82±
\82Æ
\82µ
\82©
\8dl
\97¶
\82³
\82ê
\82Ä
\82¢
\82È
\82¢
1670 //
\91¼
\82Å
\82â
\82é
\82Æ
\8dÄ
\95`
\89æ
\82ª
\94
\90¶
\82·
\82é
1671 if WindowState <> wsNormal then begin
1672 WindowState := wsNormal;
1674 SaveCoolBarSettings;
1675 GikoSys.Setting.WriteWindowSettingFile;
1680 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1682 if GikoSys.Setting.GestureEnabled then begin
1683 MouseGesture.OnGestureStart := nil;
1684 MouseGesture.OnGestureMove := nil;
1685 MouseGesture.OnGestureEnd := nil;
1688 MouseGesture.UnHook;
1693 //
\82¨
\8bC
\82É
\93ü
\82è
\94j
\8aü
1700 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1701 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1702 GikoSys.Setting.ShowDialogForAllTabClose := false;
1703 GikoDM.AllTabCloseAction.Execute;
1704 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1709 for i := FBrowsers.Count - 1 downto 0 do begin
1710 GikoSys.ShowRefCount('browser' + IntToStr(i), TWebBrowser(FBrowsers[i]).ControlInterface);
1711 GikoSys.ShowRefCount('document' + IntToStr(i), TWebBrowser(FBrowsers[i]).ControlInterface.Document);
1714 for i := FBrowsers.Count - 1 downto 0 do begin
1715 TWebBrowser(FBrowsers[i]).Free;
1718 FBrowsers.Capacity := 0;
1724 if BrowserNullTab <> nil then begin
1725 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
1726 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
1728 BrowserNullTab.Free;
1734 TreeView.Items.BeginUpdate;
1735 TreeView.Items.GetFirstNode.Free;
1736 TreeView.Items.Clear;
1737 TreeView.Items.EndUpdate;
1762 //FControlThread.DownloadAbort;
1763 FControlThread.Terminate;
1764 FControlThread.WaitFor;
1768 FControlThread.Free;
1770 //
\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é
1771 for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
1772 GikoForm.PlugInMenu.items[i].Free;
1774 GikoForm.PlugInMenu.Clear;
1777 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
1778 // 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Å
1779 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
1780 for i := Length(BoardGroups) - 1 downto 0 do begin
1781 //BoardGroups[i].Clear;
1782 BoardGroups[i].Free;
1786 for i := Length( BBSs ) - 1 downto 0 do begin
1787 if BBSs[ i ] <> nil then
1791 DestorySpecialBBS(BoardGroup.SpecialBBS);
1796 if FEvent <> nil then
1800 if FResPopupBrowser <> nil then begin
1801 TOleControl(FResPopupBrowser).Parent := nil;
1802 FResPopupBrowser.Free;
1808 if FPreviewBrowser <> nil then begin
1809 FPreviewBrowser.Free;
1810 FPreviewBrowser := nil;
1815 // Update
\82ª
\82¢
\82ê
\82Î
\8eÀ
\8ds
\82·
\82é
1816 if FileExists(FUpdateExePath) then begin
1817 //
\83A
\83b
\83v
\83f
\81[
\83g
\8eÀ
\8ds
1818 GikoSys.CreateProcess(FUpdateExePath, FUpdateExeArgs);
1822 //
\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
1823 procedure TGikoForm.SetBBSMenu;
1826 item : TBBSMenuItem;
1829 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
1830 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1832 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1833 CabinetSelectPopupMenu.Items[ i ].Free;
1834 CabinetMenu.Items[ i ].Free;
1835 BBSSelectPopupMenu.Items[ i ].Free;
1841 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
1842 for i := Length( BBSs ) - 1 downto 0 do begin
1844 item := TBBSMenuItem.Create( PopupMenu );
1845 item.Caption := BBSs[ i ].Title;
1846 item.Data := BBSs[ i ];
1847 item.OnClick := BBSMenuItemOnClick;
1848 CabinetSelectPopupMenu.Items.Insert( 0, item );
1849 item := TBBSMenuItem.Create( PopupMenu );
1850 item.Caption := BBSs[ i ].Title;
1851 item.Data := BBSs[ i ];
1852 item.OnClick := BBSMenuItemOnClick;
1853 CabinetMenu.Insert( 0, item );
1854 item := TBBSMenuItem.Create( PopupMenu );
1855 item.Caption := BBSs[ i ].Title;
1856 item.Data := BBSs[ i ];
1857 item.OnClick := BBSMenuItemOnClick;
1858 BBSSelectPopupMenu.Items.Insert( 0, Item );
1865 procedure TGikoForm.ReloadBBS;
1870 LockWindowUpdate(Self.Handle);
1872 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1873 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1874 GikoSys.Setting.ShowDialogForAllTabClose := false;
1875 GikoDM.AllTabCloseAction.Execute;
1876 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1877 SetContent(BrowserNullTab);
1878 //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
1879 TreeView.Items.Clear;
1881 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1883 RoundList.SaveRoundFile;
1886 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
1892 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1894 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1899 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1901 FavoriteDM.WriteFavorite;
1906 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
1907 for i := Length(BoardGroups) - 1 downto 0 do begin
1909 BoardGroups[i].Free;
1915 for i := Length( BBSs ) - 1 downto 0 do begin
1916 if BBSs[ i ] <> nil then
1925 FTreeType := gttNone;
1927 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
1929 //
\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Æ)
1930 InitializeBoardPlugIns;
1932 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1934 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1935 for i := Length(BBSs) - 1 downto 0 do begin
1936 if not BBSs[i].IsBoardFileRead then
1937 GikoSys.ReadBoardFile(BBSs[i]);
1940 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
1943 ShowBBSTree( BBSs[ 0 ] );
1945 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1946 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1947 TreeView, FTreeType);
1949 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1950 FavoriteDM.ReadFavorite;
1954 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1955 RoundList.LoadRoundBoardFile;
1956 RoundList.LoadRoundThreadFile;
1958 LockWindowUpdate(0);
1962 \todo
\89½
\8cÌ IE 7
\82Å
\82Í about:..
\82É
\82È
\82é
\82Ì
\82©
1963 (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©)
1964 \92²
\8d¸
\82·
\82é
\82±
\82Æ
1966 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1974 threadItem : TThreadItem;
1976 Protocol, Host, Path, Document, Port, Bookmark: string;
1981 ActiveFileName: string;
1986 cResPopup: TResPopupBrowser;
1987 senderBrowser :TWebBrowser;
1988 doc: IHTMLDocument2;
1990 //
\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ª
1991 // 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è)
1992 if Pos('about:..', Text) = 1 then
1993 Text2 := 'about:blank..' + Copy( Text, Length('about:..')+1, Length(Text) )
1997 if not( TObject(Sender) is TWebBrowser )then
2000 senderBrowser := TWebBrowser(Sender);
2001 doc := senderBrowser.ControlInterface.Document as IHTMLDocument2;
2005 if ((not senderBrowser.Busy) and Assigned(doc)) then begin
2006 if LowerCase(doc.charset) <> 'shift_jis' then begin
2007 doc.charset := 'shift_jis';
2015 if PreviewTimer.Enabled then
2016 PreviewTimer.Enabled := False;
2018 Application.CancelHint;
2021 if GetActiveContent <> nil then
2022 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
2024 ActiveFileName := '';
2026 FActiveContent := nil;
2030 //
\91O
\89ñ
\82Æ
\93¯
\82¶
\8fê
\8d\87\8fI
\97¹
2031 if (StatusBar.Panels[1].Text = Text2) then begin
2032 if Text2 = '' then begin
2033 if FResPopupBrowser <> nil then begin
2034 if not(Sender is TResPopupBrowser) then
2035 FResPopupBrowser.Clear
2037 TResPopupBrowser(Sender).ChildClear;
2043 StatusBar.Panels[1].Text := Text2;
2046 if FPreviewBrowser <> nil then
2047 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2049 if FResPopupBrowser <> nil then begin
2050 if not(Sender is TResPopupBrowser) then begin
2051 if (FResPopupBrowser.Visible) then begin
2052 if ResPopupClearTimer.Interval > 0 then begin
2053 ResPopupClearTimer.Enabled := True;
2054 ResPopupClearTimer.Tag := 0;
2056 FResPopupBrowser.Clear;
2060 if ResPopupClearTimer.Interval > 0 then begin
2061 ResPopupClearTimer.Enabled := True;
2062 ResPopupClearTimer.Tag := 1;
2064 TResPopupBrowser(Sender).ChildClear;
2070 if not(Sender is TResPopupBrowser) then
2071 if not GikoSys.Setting.UnActivePopup then
2072 if not GikoForm.Active then
2077 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
2078 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
2079 //
\91¼
\82Ì
\83A
\83v
\83\8a\82Å
\8f\88\97\9d\82·
\82éURL
\82©
\8am
\94F
2080 if (ExtPreviewDM.PreviewURL(Text2)) then begin
2084 Ext := AnsiLowerCase(ExtractFileExt(Text2));
2085 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
2086 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) or
2087 (Pos('http://www.nicovideo.jp/watch/', Text2) = 1) then begin
2088 if FPreviewBrowser = nil then begin
2089 FPreviewBrowser := TPreviewBrowser.Create(Self);
2090 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
2091 TOleControl(FPreviewBrowser).Parent := nil;
2093 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
2094 FPreviewURL := Text2;
2095 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
2096 PreviewTimer.Enabled := True;
2097 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
2098 if (Pos('mailto:', Text2) = 1) and (GikoSys.Setting.RespopupMailTo) then begin
2099 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
2100 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
2102 p.x := p.x - senderBrowser.ClientOrigin.x;
2103 p.y := p.y - senderBrowser.ClientOrigin.y;
2104 e := doc.elementFromPoint(p.x, p.y);
2105 if (Assigned(e)) then begin
2106 CreateResPopupBrowser;
2108 if not(Sender is TResPopupBrowser) then begin
2109 if (FResPopupBrowser.Visible) then begin
2110 FResPopupBrowser.Clear;
2113 TResPopupBrowser(Sender).ChildClear;
2116 cResPopup := FResPopupBrowser.CreateNewBrowser;
2117 tmp2 := Trim(ZenToHan(e.Get_outerText));
2118 if (GikoSys.IsNumeric(tmp2)) then begin
2119 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
2120 wkIntSt := StrToInt64(tmp2);
2121 wkIntTo := StrToInt64(tmp2);
2122 cResPopup.PopupType := gptThread;
2123 HTMLCreater.SetResPopupText(cResPopup, GetActiveContent(true), wkIntSt, wkIntTo, False, False);
2125 cResPopup.PopupType := gptRaw;
2126 cResPopup.Title := s;
2130 CreateResPopupBrowser;
2132 if not(Sender is TResPopupBrowser) then begin
2133 if (FResPopupBrowser.Visible) then begin
2134 FResPopupBrowser.Clear;
2137 TResPopupBrowser(Sender).ChildClear;
2140 threadItem := GetActiveContent(true);
2141 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
2142 PathRec := Gikosys.Parse2chURL2(URL);
2143 if (PathRec.FNoParam) then begin
2147 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
2149 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
2151 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
2153 URL := GikoSys.GetBrowsableThreadURL( URL );
2154 wkIntSt := PathRec.FSt;
2155 wkIntTo := PathRec.FTo;
2157 if (wkIntSt = 0) and (wkIntTo = 0) then begin
2160 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
2162 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
2164 end else if wkIntSt > wkIntTo then begin
2169 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
2174 threadItem := BBSsFindThreadFromURL( URL );
2176 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
2177 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
2178 if board <> nil then begin
2179 if not board.IsThreadDatRead then
2180 GikoSys.ReadSubjectFile( board );
2181 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
2185 if threadItem <> nil then begin
2186 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
2187 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
2188 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
2192 cResPopup := FResPopupBrowser.CreateNewBrowser;
2193 cResPopup.PopupType := gptThread;
2194 HTMLCreater.SetResPopupText(cResPopup, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
2198 if (cResPopup <> nil) then begin
2199 ResPopupClearTimer.Enabled := False;
2201 if cResPopup.PopupType = gptRaw then begin
2202 if cResPopup.Title <> '' then begin
2203 cResPopup.TitlePopup;
2206 if cResPopup.RawDocument <> '' then begin
2208 end else if cResPopup.Title <> '' then begin
2209 cResPopup.TitlePopup;
2216 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2220 FEnabledCloseButton := Enabled;
2221 SysMenu := GetSystemMenu(Handle, False);
2223 if Enabled then begin
2224 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2226 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2229 DrawMenuBar(Handle);
2232 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2233 var AllowChange: Boolean);
2235 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
2236 // if FTreeType = gtt2ch then
2237 // FSortIndex := -1;
2240 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2241 Shift: TShiftState);
2245 if GetActiveList is TBoard then begin
2247 VK_BACK:; // UpFolderButtonClick(Sender);
2248 VK_SPACE: ListDoubleClick(Shift);
2249 VK_RETURN: ListClick;
2252 if ListView.Selected <> nil then begin
2253 pos.X := ListView.Column[ 0 ].Width;
2254 pos.Y := ListView.Selected.Top;
2256 pos.X := ListView.Left;
2257 pos.Y := ListView.Top;
2259 Windows.ClientToScreen( ListView.Handle, pos );
2260 ListPopupMenu.Popup( pos.X, pos.Y );
2263 end else begin // TBBS, TCategory
2265 VK_BACK:; // UpFolderButtonClick(Sender);
2266 VK_SPACE: ListClick;
2267 VK_RETURN: ListDoubleClick(Shift);
2270 if ListView.Selected <> nil then begin
2271 pos.X := ListView.Column[ 0 ].Width;
2272 pos.Y := ListView.Selected.Top;
2274 pos.X := ListView.Left;
2275 pos.Y := ListView.Top;
2277 Windows.ClientToScreen( ListView.Handle, pos );
2278 ListPopupMenu.Popup( pos.X, pos.Y );
2284 function TGikoForm.GetHttpState: Boolean;
2286 Result := FHttpState;
2289 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2290 Column: TListColumn);
2294 vSortIndex : Integer;
2295 vSortOrder : Boolean;
2297 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2298 if TObject( FActiveList ) is TBBS then begin
2299 orderList := GikoSys.Setting.BBSColumnOrder;
2300 vSortIndex := GikoSys.Setting.BBSSortIndex;
2301 vSortOrder := GikoSys.Setting.BBSSortOrder;
2302 end else if TObject( FActiveList ) is TCategory then begin
2303 orderList := GikoSys.Setting.CategoryColumnOrder;
2304 vSortIndex := GikoSys.Setting.CategorySortIndex;
2305 vSortOrder := GikoSys.Setting.CategorySortOrder;
2306 end else if TObject( FActiveList ) is TBoard then begin
2307 orderList := GikoSys.Setting.BoardColumnOrder;
2308 vSortIndex := GikoSys.Setting.BoardSortIndex;
2309 vSortOrder := GikoSys.Setting.BoardSortOrder;
2313 id := Integer( orderList[ idx ] );
2316 if vSortIndex = id then
2317 vSortOrder := not vSortOrder
2319 vSortOrder := id = 0;
2322 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2325 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2326 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2330 DefaultDraw := True;
2331 //
\82È
\82º
\82©
\96³
\8fð
\8c\8f\82ÅExit
\82µ
\82Ä
\82¢
\82é
2333 DefaultDraw := False;
2334 if (cdsSelected in State) or (cdsHot in State) then begin
2335 Sender.Canvas.Brush.Color := clHighlight;
2336 Sender.Canvas.Font.Color := clHighlightText;
2338 Sender.Canvas.Brush.Color := clBtnFace;
2339 Sender.Canvas.Font.Color := clBtnText;
2341 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2342 Sender.Canvas.FillRect(ARect);
2343 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2346 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2351 Nodes := TreeView.Items;
2353 for i := 0 to Nodes.Count - 1 do begin
2354 if Nodes.Item[i].Data = Data then begin
2355 Result := Nodes.Item[i];
2362 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2363 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2364 Headers: OleVariant; var Cancel: WordBool);
2369 kMenuName: string = 'menu:';
2374 FKokoPopupThreadItem := nil;
2375 if Pos(kMenuName, URL) <> 0 then begin
2376 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2378 if not GikoSys.IsNumeric(sNo) then Exit;
2382 KokoPopupMenu.PopupComponent := nil;
2383 if (Sender is TComponent) then
2384 KokoPopupMenu.PopupComponent := TComponent(Sender);
2385 //
\8cë
\94\9a\91Î
\8dô
\83N
\83\8a\83b
\83N
\82µ
\82½
\83u
\83\89\83E
\83U
\82Æ
\88Ù
\82È
\82é
\82Æ
\82«
\82É
\8fÁ
\82·
\8f\88\97\9d\82ð
\92Ç
\89Á
2386 if not (Sender is TResPopupBrowser) then begin
2387 if (FResPopupBrowser <> nil) and (FResPopupBrowser.CurrentBrowser.Visible = True) then begin
2388 FResPopupBrowser.Clear;
2391 if (Sender <> FResPopupBrowser.CurrentBrowser) then begin
2392 TResPopupBrowser(Sender).ChildClear;
2395 FKokoPopupThreadItem := GetActiveContent(true);
2396 KokoPopupMenu.Tag := StrToInt(sNo);
2397 KokoPopupMenu.Popup(p.x, p.y);
2398 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2399 Cancel := not GikoSys.Setting.OpenMailer;
2401 //@
\82Æ.
\82ð
\8aÜ
\82Ü
\82È
\82¢URL
\82Í
\83\81\81[
\83\8b\83A
\83h
\83\8c\83X
\82Æ
\82Ý
\82È
\82³
\82È
\82¢
2402 //
\8eå
\82Éage
\81Asage
\91Î
\8dô
2403 if (Pos('@', URL) = 0) or (Pos('.', URL) = 0) then begin
2410 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2411 const ARect: TRect; var DefaultDraw: Boolean);
2415 IsBoardNode: Boolean;
2421 Category: TCategory;
2425 DefaultDraw := True;
2427 if FTreeType = gttHistory then Exit;
2429 TreeView.Canvas.Font.Color := clBlue;
2430 IsBoardNode := False;
2431 for i := 0 to TreeView.Items.Count - 1 do begin
2433 if not TreeView.Items[i].IsVisible then
2436 if TObject(TreeView.Items[i].Data) is TCategory then begin
2437 if TreeView.Items[i].Expanded then
2440 IsBoardNode := False;
2441 Category := TCategory(TreeView.Items[i].Data);
2442 for j := 0 to Category.Count - 1 do begin
2443 Board := Category.Items[j];
2444 if Board <> nil then begin
2445 if Board.UnRead > 0 then begin
2453 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2454 IsBoardNode := True;
2455 Board := TBoard(TreeView.Items[i].Data);
2457 Cnt := Board.UnRead;
2463 Bitmap := TBitmap.Create;
2465 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2466 Bitmap.Canvas.Font.Style := [fsBold];
2467 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2472 NodeRect := TreeView.Items[i].DisplayRect(True);
2475 CntText := '(' + IntToStr(Cnt) + ')'
2476 else if Cnt = 1 then
2480 TextWidth := TreeView.Canvas.TextWidth(CntText);
2482 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2484 NodeRect.Left + NodeWidth + TextWidth + 8,
2486 DrawText(TreeView.Canvas.Handle,
2490 DT_SINGLELINE or DT_VCENTER);
2492 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2495 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2496 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2499 Category: TCategory;
2502 DefaultDraw := True;
2504 if FTreeType = gttHistory then Exit;
2506 TreeView.Canvas.Font.Style := [];
2507 if Node <> nil then begin
2508 if TObject(Node.Data) is TCategory then begin
2509 Category := TCategory(Node.Data);
2510 for i := 0 to Category.Count - 1 do begin
2511 Board := Category.Items[i];
2512 if Board <> nil then begin
2513 if Board.UnRead > 0 then begin
2514 TreeView.Canvas.Font.Style := [fsBold];
2519 end else if TObject(Node.Data) is TBoard then begin
2520 Board := TBoard(Node.Data);
2521 if Board.UnRead > 0 then
2522 TreeView.Canvas.Font.Style := [fsBold];
2527 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2529 TreeView.Invalidate;
2531 if TObject(Node.Data) is TBBS then begin
2532 TBBS(Node.Data).NodeExpand := True;
2533 end else if TObject(Node.Data) is TCategory then begin
2534 TCategory(Node.Data).NodeExpand := True;
2535 end else if TObject(Node.Data) is TBoard then begin
2536 TBoard(Node.Data).NodeExpand := True;
2540 procedure TGikoForm.ListViewAllSelect;
2545 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2547 if csDestroying in Self.ComponentState then
2549 AddMessageList(Msg, nil, Icon);
2551 // *************************************************************************
2552 //!
\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
2553 // *************************************************************************
2554 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2558 boardPlugIn : TBoardPlugIn;
2563 if csDestroying in Self.ComponentState then
2565 if Item.DownType = gdtBoard then
2566 ATitle := Item.Board.Title
2568 ATitle := Item.ThreadItem.Title;
2570 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2572 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2574 if Item.DownType = gdtBoard then begin
2577 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2578 if GetActiveList = Item.Board then begin
2580 //
\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é
2581 if (GikoSys.Setting.AutoSortThreadList) then begin
2582 GikoSys.Setting.BoardSortIndex := 0;
2583 GikoSys.Setting.BoardSortOrder := True;
2585 Sort.SetSortDate(Now());
2586 SetActiveList(Item.Board);
2588 Item.Board.Modified := True;
2589 Item.Board.IsThreadDatRead := True;
2592 end else if Item.DownType = gdtThread then begin
2595 Item.ThreadItem.NewArrival := True;
2596 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2597 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2598 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2599 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2600 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2601 Item.ThreadItem.Title := Res.FTitle;
2602 ATitle := Item.ThreadItem.Title;
2603 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2604 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2605 ATitle := Res.FTitle;
2607 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2608 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2609 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2613 if GikoSys.Setting.BrowserTabVisible then begin
2614 if GetActiveContent = Item.ThreadItem then
2615 InsertBrowserTab(Item.ThreadItem)
2616 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2617 InsertBrowserTab(Item.ThreadItem, True)
2619 InsertBrowserTab(Item.ThreadItem, False);
2622 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2623 InsertBrowserTab(Item.ThreadItem);
2626 Application.ProcessMessages;
2628 if Item.State = gdsComplete then begin
2630 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2634 PlaySound('NewDiff');
2635 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2640 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2641 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2642 // 2ch
\88È
\8aO
\82Í
\81A1000
\82ª
\8dÅ
\8d\82\82©
\95s
\96¾
\82È
\82Ì
\82Å
\81A2ch
\8cÀ
\92è
\82É
\82·
\82é
2643 if (Item.ThreadItem.ParentBoard.Is2ch) then begin
2644 Item.ThreadItem.Round := False;
2645 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);
2649 //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
2651 RefreshListView(Item.ThreadItem);
2654 end else if Item.State = gdsNotModify then begin
2656 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2657 //SetContent(Item.ThreadItem);
2658 InsertBrowserTab(Item.ThreadItem);
2660 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2661 PlaySound('NoChange');
2662 Screen.Cursor := crDefault;
2663 end else if Item.State = gdsAbort then begin
2665 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2666 end else if Item.State = gdsError then begin
2671 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2672 // if Item.ResponseCode = 302 then
2673 // 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);
2679 if FWorkCount < 0 then FWorkCount := 0;
2680 if FWorkCount = 0 then begin
2682 Animate.Active := False;
2684 Screen.Cursor := crDefault;
2691 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2693 // SetProgressValue(Number, 0, AWorkCountMax);
2694 // ProgressBar.Visible := True;
2695 if csDestroying in Self.ComponentState then
2698 ProgressBar.Position := 0;
2699 ProgressBar.Max := AWorkCountMax;
2700 FDownloadTitle := AWorkTitle;
2701 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2702 FDownloadMax := AWorkCountMax;
2705 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2707 if csDestroying in Self.ComponentState then
2709 ProgressBar.Position := 0;
2710 if FDownloadMax <> 0 then
2711 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2714 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2716 if csDestroying in Self.ComponentState then
2718 ProgressBar.Position := AWorkCount;
2719 // SetProgressValue(Number, AWorkCount);
2720 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2723 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2725 ListItem: TListItem;
2727 MessageListView.Items.BeginUpdate;
2729 ListItem := MessageListView.Items.Add;
2730 ListItem.Caption := ACaption;
2731 ListItem.Data := AObject;
2732 ListItem.MakeVisible(False);
2734 gmiOK: ListItem.ImageIndex := 0;
2735 gmiSAD: ListItem.ImageIndex := 1;
2736 gmiNG: ListItem.ImageIndex := 2;
2737 gmiWhat: ListItem.ImageIndex := 3;
2740 MessageListView.Items.EndUpdate;
2744 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
2745 procedure TGikoForm.ReleaseOldestBrowser;
2749 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2750 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2751 TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2752 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2758 function TGikoForm.InsertBrowserTab(
2759 ThreadItem : TThreadItem;
2760 ActiveTab : Boolean = True
2763 i, j, idx : Integer;
2764 favItem : TFavoriteThreadItem;
2765 newBrowser : TBrowserRecord;
2770 if Threaditem = nil then Exit;
2772 if ThreadItem.IsLogFile then begin
2773 //
\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é
2774 //
\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é
2775 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2776 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2777 j := FBrowsers.IndexOf(FActiveContent.Browser);
2778 if j = BROWSER_COUNT - 1 then
2779 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2781 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2782 if not FHistoryList.AddHistory( favItem, TreeView, FTreeType ) then
2785 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2786 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2787 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2788 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2789 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2790 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2791 ReleaseOldestBrowser;
2792 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2793 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2794 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2796 if ActiveTab then begin
2797 BrowserTab.TabIndex := i;
2798 BrowserTab.OnChange(nil);
2805 idx := BrowserTab.TabIndex;
2806 newBrowser := TBrowserRecord.Create;
2807 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2808 ReleaseOldestBrowser;
2809 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2810 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2811 newBrowser.thread := ThreadItem;
2812 newBrowser.Repaint := true;
2814 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2815 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2816 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2817 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2821 if ActiveTab then begin
2822 BrowserTab.TabIndex := 0;
2824 end else if GikoSys.Setting.BrowserTabAppend = gtaLast then begin
2825 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2826 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2827 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2831 if ActiveTab then begin
2832 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2833 BrowserTab.TabIndex := 0
2835 BrowserTab.TabIndex := i;
2838 //
\83^
\83u
\88Ê
\92u
\82ð
\8eæ
\93¾
2840 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2841 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2842 TWebBrowser(FBrowsers[1]) then begin
2847 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2850 //
\83^
\83u
\82ª
\96³
\82¢
\82Æ
\82«
\82È
\82Ç
\91Î
\8dô
2851 if (ins < 0) then begin
2854 BrowserTab.Tabs.InsertObject(ins, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2855 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2856 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2857 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2859 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2864 if ActiveTab then begin
2865 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2866 BrowserTab.TabIndex := 0
2868 BrowserTab.TabIndex := ins;
2871 Result := newBrowser;
2872 if(ActiveTab) or (idx = -1) then begin
2873 BrowserTab.OnChange(nil);
2876 if BrowserNullTab = nil then begin
2877 BrowserNullTab := TBrowserRecord.Create;
2878 BrowserNullTab.Browser := Browser;
2880 // if BrowserNullTab.thread <> ThreadItem then begin
2881 // BrowserNullTab.Movement := '';
2883 BrowserNullTab.thread := ThreadItem;
2884 Result := BrowserNullTab;
2885 BrowserTab.TabIndex := -1;
2886 SetContent(BrowserNullTab);
2889 if GikoSys.Setting.URLDisplay then
2890 AddressComboBox.Text := ThreadItem.URL;
2894 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2902 ThreadItem: TThreadItem;
2903 Thread: TBrowserRecord;
2904 ThreadTitle, ThreadPTitle: string;
2905 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2908 idx := BrowserTab.TabIndex;
2909 if (not FStartUp) and
2910 (FActiveContent <> nil) and
2911 (FActiveContent.Thread <> Thread.Thread) and
2912 (FActiveContent.Browser <> nil) and
2913 (Assigned(FActiveContent.Browser.ControlInterface.Document)) then begin
2916 FActiveContent.Thread.ScrollTop := FActiveContent.Browser.OleObject.Document.Body.ScrollTop;
2919 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2924 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2925 Thread.Browser.Navigate(BLANK_HTML);
2926 BrowserBoardNameLabel.Caption := '';
2927 ItemBoardImage.Picture := nil;
2928 BrowserNameLabel.Caption := '';
2929 ItemImage.Picture := nil;
2930 BrowserNullTab.Thread := nil;
2931 //TOleControl(BrowserNullTab.Browser).Visible := true;
2932 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2933 FActiveContent := nil;
2935 end else if Thread.Browser = nil then begin
2936 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2937 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2938 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2939 ReleaseOldestBrowser;
2940 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2941 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2944 ThreadTitle := Thread.Thread.Title;
2945 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2946 //ThreadScrollTop := Thread.Thread.ScrollTop;
2947 if Thread.Thread.IsLogFile then begin
2948 if not FileExists(Thread.Thread.GetThreadFileName) then begin
2949 Thread.Thread.DeleteLogFile;
2953 ThreadIsLog := Thread.Thread.IsLogFile;
2954 ThreadItem := Thread.Thread;
2955 ThreadNewArraical := Thread.Thread.NewArrival;
2956 //ThreadUnRead := Thread.Thread.UnRead;
2957 BBSID := ThreadItem.ParentBoard.BBSID;
2958 FileName := ThreadItem.FileName;
2960 if GetCapture = ListView.Handle then
2963 Screen.Cursor := crHourGlass;
2967 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2968 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2969 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2971 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2972 if (not Assigned(Thread.Browser.ControlInterface.Document)) then begin
2973 Thread.Browser.Navigate('about:blank');
2975 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2976 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2977 Application.ProcessMessages;
2978 if idx <> BrowserTab.TabIndex then begin
2983 if (Thread <> nil) and (ThreadItem <>nil) then begin
2984 BrowserBoardNameLabel.Caption := ThreadPTitle;
2985 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2986 BrowserNameLabel.Caption := ThreadTitle;
2987 ItemImage.Picture := nil;
2989 if ThreadNewArraical then
2990 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
2992 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
2994 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
2996 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
2997 BrowserNameLabel.Left := ItemImage.Left + 20;
3000 //ActiveContent
\81@
\82Ì
\8dX
\90V
3001 FActiveContent := Thread;
3003 if not ThreadIsLog then begin
3004 Self.Caption := GikoDataModule.CAPTION_NAME ;
3005 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\8fÁ
\8b\8e
3006 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
3008 Thread.Browser.BringToFront;
3009 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
3010 doc := Thread.Browser.OleObject.Document;
3012 doc.charset := 'Shift_JIS';
3019 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
3020 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\95\
\8e¦
3021 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
3022 StatusBar.Panels[THREADSIZE_PANEL].Width :=
3023 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
3024 //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«
3025 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
3026 if Thread.Repaint then begin
3027 Thread.Repaint := false;
3029 Thread.Browser.OnStatusTextChange := nil;
3030 LockWindowUpdate(Thread.Browser.ParentWindow);
3031 HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
3032 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
3033 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
3037 RefreshListView(ThreadItem);
3039 Screen.Cursor := crDefault;
3043 function TGikoForm.GetActiveContent(popup :Boolean = false): TThreadItem;
3046 if FActiveContent <> nil then begin
3047 Result := FActiveContent.Thread;
3049 (FResPopupBrowser <> nil) and (FResPopupBrowser.CurrentBrowser.Visible = True) then
3050 if (FResPopupBrowser.CurrentBrowser.Thread <> nil) then begin
3051 Result := FResPopupBrowser.CurrentBrowser.Thread;
3061 procedure TGikoForm.SetActiveList(Obj: TObject);
3065 // if FActiveList <> Obj then begin
3068 if ListView.Selected <> nil then
3069 idx := ListView.Selected.Index
3075 ListView.Items.Count := 0;
3076 ListView.Items.Clear;
3077 ListView.Selected := nil;
3078 // ListView.Columns.Clear;
3079 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
3080 and (FActiveContent.Thread.IsLogFile) then begin
3082 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
3084 on E: Exception do begin
3085 //
\83X
\83\8c\88ê
\97\97DL
\8cã
\82È
\82Ç
\82ÉFActiveContent
\82Ì
\8e\9d\82ÂThread
\82ª
3086 //
\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é
3087 ReleaseBrowser(FActiveContent);
3088 FActiveContent.Thread := nil;
3089 Self.Caption := GikoDataModule.CAPTION_NAME;
3093 Self.Caption := GikoDataModule.CAPTION_NAME;
3094 //Application.Title := CAPTION_NAME;
3096 // ActiveListColumnSave;
3098 Screen.Cursor := crHourGlass;
3100 if Obj is TBBS then begin
3101 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3102 end else if Obj is TCategory then begin
3103 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3104 end else if Obj is TBoard then begin
3105 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
3108 Screen.Cursor := crDefault;
3111 if idx >= 0 then begin
3112 if idx >= ListView.Items.Count then
3113 idx := ListView.Items.Count - 1;
3114 ListView.ItemIndex := idx;
3115 ListView.ItemFocused := ListView.Items.Item[ idx ];
3121 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
3122 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
3123 function TGikoForm.GetActiveList: TObject;
3125 Result := FActiveList;
3128 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
3130 SetListViewType(AViewType, '', False);
3133 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
3138 for i := Length( BBSs ) - 1 downto 0 do begin
3139 BBSs[i].SelectText := SelectText;
3140 BBSs[i].KubetsuChk := KubetsuChk;
3142 BoardGroup.SpecialBBS.SelectText := SelectText;
3143 BoardGroup.SpecialBBS.KubetsuChk := KubetsuChk;
3145 ViewType := AViewType;
3146 if ActiveList is TBoard then begin
3147 Board := TBoard(ActiveList);
3149 //gvtAll: ListView.Items.Count := Board.Count;
3150 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
3151 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
3152 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
3153 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
3154 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
3158 SetActiveList(Board);
3162 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
3163 const ARect: TRect; var DefaultDraw: Boolean);
3169 if ListView.Items.Count = 0 then begin
3170 DefaultDraw := true;
3171 ListView.Canvas.Brush.Color := ListView.Color;
3172 ListView.Canvas.FillRect(ARect);
3176 ListView.Canvas.Font.Color := clWindowText;
3177 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3180 ListView.Canvas.Font.Color := clBlue;
3181 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';
3184 ListView.Canvas.Font.Color := clGreen;
3185 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3188 ListView.Canvas.Font.Color := clFuchsia;
3189 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';
3192 ListView.Canvas.Font.Color := clMaroon;
3193 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90¶
\91¶
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3196 ListView.Canvas.Font.Color := clNavy;
3197 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';
3198 if GetActiveList is TBoard then
3199 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
3207 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
3208 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
3209 ListView.Canvas.TextOut(p.X, p.Y, s);
3211 DefaultDraw := True;
3215 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
3217 Item: TDownloadItem;
3219 if not Board.IsThreadDatRead then
3220 GikoSys.ReadSubjectFile(Board);
3221 Item := TDownloadItem.Create;
3223 Item.Board := Board;
3224 Item.DownType := gdtBoard;
3225 Item.ForceDownload := ForceDownload;
3226 FControlThread.AddItem(Item);
3227 if FWorkCount = 0 then begin
3229 Animate.Active := True;
3232 Screen.Cursor := crAppStart;
3240 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
3242 Item: TDownloadItem;
3244 Item := TDownloadItem.Create;
3246 Item.ThreadItem := ThreadItem;
3247 Item.DownType := gdtThread;
3248 Item.ForceDownload := ForceDownload;
3249 FControlThread.AddItem(Item);
3250 if FWorkCount = 0 then begin
3252 Animate.Active := True;
3255 Screen.Cursor := crAppStart;
3263 procedure TGikoForm.PlaySound(SoundEventName: string);
3267 if not GikoSys.Setting.Mute then begin
3268 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
3269 if FileExists(FileName) then begin
3270 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
3271 sndPlaySound(nil, SND_SYNC);
3272 Application.ProcessMessages;
3274 sndPlaySound(PChar(FileName), SND_ASYNC);
3280 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
3281 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3283 FHistoryList.DeleteHistory( threadItem, TreeView, TreeType );
3286 procedure TGikoForm.ShowBBSTreeOld(
3294 FavoriteTreeView.Visible := False;
3295 FavoriteToolBar.Hide;
3296 TreeView.Visible := True;
3298 b := CabinetSelectPopupMenu.Items.Count - 1;
3299 for i := 0 to b do begin
3300 item := CabinetSelectPopupMenu.Items[ i ];
3301 if item is TBBSMenuItem then begin
3302 if TBBSMenuItem( item ).Data = inBBS then begin
3303 item.Checked := True;
3304 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3305 CabinetMenu.Items[ i ].Checked := True;
3306 GikoSys.Setting.CabinetIndex := i;
3310 item.Checked := False;
3311 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3312 CabinetMenu.Items[ i ].Checked := False;
3314 CabinetSelectToolButton.Caption := inBBS.Title;
3316 GikoDM.CabinetHistoryAction.Checked := False;
3317 GikoDM.CabinetFavoriteAction.Checked := False;
3319 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3320 FTreeType := gtt2ch;
3321 HistoryToolBar.Hide;
3322 FActiveBBS := inBBS;
3323 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3324 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3325 //?c???[??g?b?v?????I????
3326 if GetActiveList = nil then
3327 TreeView.Selected := TreeView.Items[0]
3329 for i := 0 to TreeView.Items.Count - 1 do begin
3330 if TreeView.Items[i].Data = GetActiveList then begin
3331 TreeView.Selected := TreeView.Items[i];
3335 TreeView.Selected := TreeView.Items[0]
3343 procedure TGikoForm.ShowBBSTree(
3352 FavoriteTreeView.Visible := False;
3353 FavoriteToolBar.Hide;
3354 TreeView.Visible := True;
3356 b := CabinetSelectPopupMenu.Items.Count - 1;
3357 for i := 0 to b do begin
3358 item := CabinetSelectPopupMenu.Items[ i ];
3359 if item is TBBSMenuItem then begin
3360 if TBBSMenuItem( item ).Data = inBBS then begin
3361 item.Checked := True;
3362 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3363 CabinetMenu.Items[ i ].Checked := True;
3364 GikoSys.Setting.CabinetIndex := i;
3368 item.Checked := False;
3369 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3370 CabinetMenu.Items[ i ].Checked := False;
3372 CabinetSelectToolButton.Caption := inBBS.Title;
3374 GikoDM.CabinetHistoryAction.Checked := False;
3375 GikoDM.CabinetFavoriteAction.Checked := False;
3377 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3378 or (not (CabinetPanel.Visible)) then begin
3379 FTreeType := gtt2ch;
3380 HistoryToolBar.Hide;
3381 FActiveBBS := inBBS;
3382 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3383 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3384 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3385 if GetActiveList = nil then begin
3387 TreeClick( TreeView.Items[0] );
3391 for i := 0 to TreeView.Items.Count - 1 do begin
3392 if TreeView.Items[i].Data = GetActiveList then begin
3393 TreeClick( TreeView.Items[i] );
3397 TreeClick( TreeView.Items[0] );
3405 procedure TGikoForm.ShowHistoryTree;
3410 if CabinetPanel.Visible then begin
3411 if FTreeType = gttHistory then begin
3412 CabinetVisible( False );
3413 GikoDM.CabinetHistoryAction.Checked := False;
3415 GikoDM.CabinetHistoryAction.Checked := True;
3418 CabinetVisible( True );
3419 GikoDM.CabinetHistoryAction.Checked := True;
3422 // BBS...BBS, History, Favorite
3423 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3425 FavoriteTreeView.Visible := False;
3426 TreeView.Visible := True;
3428 GikoDM.CabinetBBSAction.Checked := False;
3429 GikoDM.CabinetFavoriteAction.Checked := False;
3431 if FTreeType <> gttHistory then begin
3432 b := CabinetSelectPopupMenu.Items.Count - 1;
3433 for i := 0 to b do begin
3434 item := CabinetSelectPopupMenu.Items[ i ];
3435 if item is TBBSMenuItem then begin
3436 item.Checked := False;
3437 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3438 CabinetMenu.Items[ i ].Checked := False;
3442 FTreeType := gttHistory;
3443 HistoryToolBar.Show;
3444 FavoriteToolBar.Hide;
3445 FHistoryList.SetTreeNode( TreeView );
3446 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3450 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3452 ChangeEvent: TTVChangedEvent;
3453 ChangingEvent: TTVChangingEvent;
3457 if Item is TCategory then
3458 bbs := TCategory( Item ).ParenTBBS
3459 else if Item is TBoard then
3460 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3464 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3465 if Item <> FActiveList then begin
3467 ChangingEvent := nil;
3469 if not CallEvent then begin
3470 ChangeEvent := TreeView.OnChange;
3471 ChangingEvent := TreeView.OnChanging;
3474 if not CallEvent then begin
3475 TreeView.OnChange := nil;
3476 TreeView.OnChanging := nil;
3478 //Application.ProcessMessages;
3479 for i := 0 to TreeView.Items.Count - 1 do begin
3480 if TreeView.Items[i].Data = Item then begin
3481 TreeView.Items[i].Selected := True;
3483 TreeClick(TreeView.Items[i]);
3487 //Application.ProcessMessages;
3489 if not CallEvent then begin
3490 TreeView.OnChange := ChangeEvent;
3491 TreeView.OnChanging := ChangingEvent;
3496 if Item <> FActiveList then begin
3497 ActiveListColumnSave;
3498 if (Item is TBBS) or (Item is TCategory) then begin
3499 ListView.Columns.Clear;
3500 SetActiveList( Item );
3501 end else if Item is TBoard then begin
3502 if not TBoard( Item ).IsThreadDatRead then begin
3503 Screen.Cursor := crHourGlass;
3505 if not TBoard( Item ).IsThreadDatRead then
3506 GikoSys.ReadSubjectFile(TBoard( Item ));
3508 Screen.Cursor := crDefault;
3511 Sort.SetSortDate(Now());
3512 SetActiveList( Item );
3517 if Item is TBoard then begin // not TCategory
3518 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3519 if GikoSys.Setting.ListWidthState = glsMax then begin
3520 GikoDM.BrowserMinAction.Execute;
3521 if GikoForm.Visible then
3525 if GikoSys.Setting.ListHeightState = glsMax then begin
3526 GikoDM.BrowserMinAction.Execute;
3527 if GikoForm.Visible then
3534 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3535 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3537 listItem : TListItem;
3538 threadItem : TThreadItem;
3545 if not (GetActiveList is TBoard) then Exit;
3546 listItem := ListView.GetItemAt( X, Y );
3547 if listItem = nil then Exit;
3548 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3550 threadItem := TThreadItem(ListItem.Data);
3551 InsertBrowserTab(threadItem, False);
3552 if threadItem.IsLogFile then
3553 ListView.UpdateItems(listItem.Index, listItem.Index);
3557 //
\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Å
3558 if (ssDouble in Shift) then
3559 ListDoubleClick(Shift)
3567 Windows.ClientToScreen( ListView.Handle, pos );
3568 ListPopupMenu.Popup( pos.X, pos.Y );
3574 procedure TGikoForm.ListClick;
3576 ListItem: TListItem;
3577 ThreadItem: TThreadItem;
3579 if ListView.SelCount <> 1 then Exit;
3580 ListItem := ListView.Selected;
3581 if ListItem = nil then Exit;
3582 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3584 ThreadItem := TThreadItem(ListItem.Data);
3585 if ThreadItem.IsLogFile then begin
3586 InsertBrowserTab(ThreadItem);
3587 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3589 InsertBrowserTab(ThreadItem);
3592 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3593 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3594 if GikoSys.Setting.ListWidthState = glsMin then begin
3595 GikoDM.BrowserMaxAndFocusAction.Execute;
3598 if GikoSys.Setting.ListHeightState = glsMin then begin
3599 GikoDM.BrowserMaxAndFocusAction.Execute;
3605 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3607 ThreadItem: TThreadItem;
3610 shiftDown := (ssShift in Shift);
3612 if ListView.Selected = nil then Exit;
3614 if TObject(ListView.Selected.Data) is TCategory then begin
3615 SelectTreeNode(ListView.Selected.Data, True);
3616 end else if TObject(ListView.Selected.Data) is TBoard then begin
3617 SelectTreeNode(ListView.Selected.Data, True)
3618 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3619 Application.ProcessMessages;
3620 ThreadItem := TThreadItem(ListView.Selected.Data);
3621 DownloadContent(ThreadItem, shiftDown);
3623 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3624 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3625 if GikoSys.Setting.ListWidthState = glsMin then begin
3626 GikoDM.BrowserMaxAction.Execute;
3627 GikoDM.SetFocusForBrowserAction.Execute;
3630 if GikoSys.Setting.ListHeightState = glsMin then begin
3631 GikoDM.BrowserMaxAction.Execute;
3632 GikoDM.SetFocusForBrowserAction.Execute;
3639 procedure TGikoForm.BrowserMovement(const AName: string);
3641 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3642 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3643 and (FActiveContent <> nil) then begin
3644 FActiveContent.Move(AName);
3647 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
3648 procedure TGikoForm.BrowserMovement(scroll: Integer);
3650 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3651 and (FActiveContent <> nil) then begin
3652 FActiveContent.Move(scroll);
3655 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3657 if TObject(Node.Data) is TBBS then begin
3658 TBBS(Node.Data).NodeExpand := False;
3659 end else if TObject(Node.Data) is TCategory then begin
3660 TCategory(Node.Data).NodeExpand := False;
3661 end else if TObject(Node.Data) is TBoard then begin
3662 TBoard(Node.Data).NodeExpand := False;
3664 if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3665 TreeClick(TreeView.Selected);
3669 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3671 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3673 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3675 TreeSplitter.Visible := isVisible;
3676 CabinetPanel.Visible := isVisible;
3677 GikoDM.CabinetVisibleAction.Checked := isVisible;
3680 procedure TGikoForm.SelectListItem(List: TList);
3682 TmpListItem: TListItem;
3686 TmpListItem := ListView.Selected;
3687 while TmpListItem <> nil do begin
3688 List.Add(TmpListItem.Data);
3689 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3694 procedure TGikoForm.FormResize(Sender: TObject);
3697 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3698 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3700 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3701 if GikoSys.Setting.ListWidthState = glsMin then begin
3702 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3703 ViewPanel.Width := ThreadMainPanel.Width - 80;
3706 if GikoSys.Setting.ListHeightState = glsMin then begin
3707 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3708 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3712 FIsIgnoreResize := rtResizing;
3713 PostMessage( Handle, USER_RESIZED, 0, 0 );
3718 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3722 FTabHintIndex := -1;
3723 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3724 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3725 DeleteTab(i, BrowserTab.TabIndex);
3730 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3734 FTabHintIndex := -1;
3735 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3736 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3737 DeleteTab(i, BrowserTab.TabIndex);
3742 procedure TGikoForm.DeleteTab(index, selectIndex: Integer);
3744 browserRec : TBrowserRecord;
3748 browserRec := TBrowserRecord(BrowserTab.Tabs.Objects[index]);
3750 if browserRec.Browser <> nil then begin
3751 doc := browserRec.Browser.OleObject.Document;
3752 browserRec.Thread.ScrollTop := doc.Body.ScrollTop;
3755 browserRec.Thread.ScrollTop := 0;
3758 if(FActiveContent = browserRec) then
3759 FActiveContent := nil;
3760 if browserRec.Browser <> nil then begin
3761 j := FBrowsers.IndexOf(browserRec.Browser);
3763 FBrowsers.Move(j, BROWSER_COUNT - 1);
3766 BrowserTab.Tabs.BeginUpdate;
3768 GikoSys.Setting.LastCloseTabURL := browserRec.Thread.URL;
3770 if ( BrowserTab.Tabs.Count - 1 = index ) and
3771 ( BrowserTab.TabRect(index).Left
3772 <= BrowserTab.DisplayRect.Left ) then begin
3773 BrowserTab.ScrollTabs(-1);
3775 BrowserTab.Tabs.Delete(index);
3776 if selectIndex > index then begin
3777 BrowserTab.TabIndex := selectIndex - 1;
3779 if BrowserTab.Tabs.Count -1 >= selectIndex then
3780 BrowserTab.TabIndex := selectIndex
3782 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3785 BrowserTab.Tabs.EndUpdate;
3787 if BrowserTab.Tabs.Count = 0 then begin
3788 BrowserNullTab.Thread := nil;
3791 if(BrowserTab.TabIndex <> -1) and
3792 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3793 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
3794 ReleaseOldestBrowser;
3796 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3797 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3798 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3799 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3802 if( FActiveContent = nil) then
3803 BrowserTab.OnChange(nil);
3805 function TGikoForm.Hook(var Message: TMessage): Boolean;
3807 //
\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Ì
3808 //
\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ð
3812 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3814 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3818 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3820 bBoard, bCategory : Boolean;
3822 bBoard := (GetActiveList is TBoard);
3823 bCategory := (GetActiveList is TCategory);
3824 ItemRoundPMenu.Visible := bBoard;
3825 ItemReservPMenu.Visible := bBoard;
3826 LPMSep01.Visible := bBoard;
3827 ListRoundPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3828 ListReservPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3829 LPMSep02.Visible := bCategory or bBoard;
3830 KidokuPMenu.Visible := bBoard;
3831 MidokuPMenu.Visible := bBoard;
3832 UrlCopyPMenu.Visible := bCategory or bBoard;
3833 NameUrlCopyPMenu.Visible := bCategory or bBoard;
3834 AllSelectPMenu.Visible := bCategory or bBoard;
3835 LPMSep05.Visible := bCategory or bBoard;
3836 DeletePMenu.Visible := bBoard;
3837 LPMSep06.Visible := bCategory or bBoard;
3838 BoardFavoriteAddMenu.Visible := bCategory;
3839 ThreadFavoriteAddMenu.Visible := bBoard;
3840 SaveThreadFile.Visible := bBoard;
3841 AddRoundNameMenu(ItemReservPMenu);
3842 AddRoundNameMenu(ListReservPMenu);
3845 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3847 FClickNode := TreeView.Selected;
3848 if FClickNode = nil then begin
3849 TreeSelectThreadPupupMenu.Visible := False;
3850 TreeSelectBoardPupupMenu.Visible := False;
3851 TPMSep01.Visible := False;
3852 TreeSelectURLPupupMenu.Visible := False;
3853 TreeSelectNamePupupMenu.Visible := False;
3854 TreeSelectNameURLPupupMenu.Visible := False;
3855 TreeSelectFavoriteAddPupupMenu.Visible := False;
3856 TreeSelectLogDeleteSeparator.Visible := False;
3857 TreeSelectLogDeletePopupMenu.Visible := False;
3858 end else if TObject(FClickNode.Data) is TBoard then begin
3859 TreeSelectThreadPupupMenu.Visible := False;
3860 TreeSelectBoardPupupMenu.Visible := True;
3861 TPMSep01.Visible := True;
3862 TreeSelectURLPupupMenu.Visible := True;
3863 TreeSelectNamePupupMenu.Visible := True;
3864 TreeSelectNameURLPupupMenu.Visible := True;
3865 TreeSelectFavoriteAddPupupMenu.Visible := True;
3866 TreeSelectLogDeleteSeparator.Visible := False;
3867 TreeSelectLogDeletePopupMenu.Visible := False;
3868 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3869 TreeSelectThreadPupupMenu.Visible := False;
3870 TreeSelectBoardPupupMenu.Visible := True;
3871 TPMSep01.Visible := True;
3872 TreeSelectURLPupupMenu.Visible := True;
3873 TreeSelectNamePupupMenu.Visible := True;
3874 TreeSelectNameURLPupupMenu.Visible := True;
3875 TreeSelectFavoriteAddPupupMenu.Visible := True;
3876 TreeSelectLogDeleteSeparator.Visible := False;
3877 TreeSelectLogDeletePopupMenu.Visible := False;
3878 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3879 TreeSelectThreadPupupMenu.Visible := True;
3880 TreeSelectBoardPupupMenu.Visible := False;
3881 TPMSep01.Visible := True;
3882 TreeSelectURLPupupMenu.Visible := True;
3883 TreeSelectNamePupupMenu.Visible := True;
3884 TreeSelectNameURLPupupMenu.Visible := True;
3885 TreeSelectFavoriteAddPupupMenu.Visible := True;
3886 TreeSelectLogDeleteSeparator.Visible := True;
3887 TreeSelectLogDeletePopupMenu.Visible := True;
3888 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3889 TreeSelectThreadPupupMenu.Visible := True;
3890 TreeSelectBoardPupupMenu.Visible := False;
3891 TPMSep01.Visible := True;
3892 TreeSelectURLPupupMenu.Visible := True;
3893 TreeSelectNamePupupMenu.Visible := True;
3894 TreeSelectNameURLPupupMenu.Visible := True;
3895 TreeSelectFavoriteAddPupupMenu.Visible := True;
3896 TreeSelectLogDeleteSeparator.Visible := True;
3897 TreeSelectLogDeletePopupMenu.Visible := True;
3898 end else if (TObject(FClickNode.Data) is TCategory) then begin
3899 TreeSelectThreadPupupMenu.Visible := False;
3900 TreeSelectBoardPupupMenu.Visible := False;
3901 TPMSep01.Visible := False;
3902 TreeSelectURLPupupMenu.Visible := False;
3903 TreeSelectNamePupupMenu.Visible := True;
3904 TreeSelectNameURLPupupMenu.Visible := False;
3905 TreeSelectFavoriteAddPupupMenu.Visible := False;
3906 TreeSelectLogDeleteSeparator.Visible := False;
3907 TreeSelectLogDeletePopupMenu.Visible := False;
3908 end else if FClickNode.IsFirstNode then begin
3909 TreeSelectThreadPupupMenu.Visible := False;
3910 TreeSelectBoardPupupMenu.Visible := False;
3911 TPMSep01.Visible := False;
3912 TreeSelectURLPupupMenu.Visible := False;
3913 TreeSelectNamePupupMenu.Visible := True;
3914 TreeSelectNameURLPupupMenu.Visible := False;
3915 TreeSelectFavoriteAddPupupMenu.Visible := False;
3916 TreeSelectLogDeleteSeparator.Visible := False;
3917 TreeSelectLogDeletePopupMenu.Visible := False;
3919 TreeSelectThreadPupupMenu.Visible := False;
3920 TreeSelectBoardPupupMenu.Visible := False;
3921 TPMSep01.Visible := False;
3922 TreeSelectURLPupupMenu.Visible := False;
3923 TreeSelectNamePupupMenu.Visible := False;
3924 TreeSelectNameURLPupupMenu.Visible := False;
3925 TreeSelectFavoriteAddPupupMenu.Visible := False;
3926 TreeSelectLogDeleteSeparator.Visible := False;
3927 TreeSelectLogDeletePopupMenu.Visible := False;
3931 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
3932 var ppDisp: IDispatch; var Cancel: WordBool);
3941 threadItem: TThreadItem;
3942 aElement : IHTMLElement;
3943 senderBrowser : TWebBrowser;
3944 doc : IHTMLDocument2;
3947 Writeln(IntToStr(Integer(ppDisp)));
3951 if not( TObject(Sender) is TWebBrowser )then
3954 senderBrowser := TWebBrowser(Sender);
3955 doc := senderBrowser.ControlInterface.Document as IHTMLDocument2;
3956 if not Assigned(doc) then
3959 aElement := doc.activeElement;
3960 if not Assigned(aElement) then
3963 Text := aElement.Get_outerText;
3964 Html := aElement.Get_outerHTML;
3966 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
3967 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
3968 if GikoSys.Setting.ResAnchorJamp then begin
3970 Text := ZenToHan(Trim(Text));
3972 if(AnsiPos('>>', Text) = 1) then begin
3973 //Text := Copy(Text, 3, Length(Text) - 2);
3976 //Text := Copy(Text, 2, Length(Text) - 1);
3980 if AnsiPos('-', Text) <> 0 then begin
3981 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
3982 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
3983 wkIntTo := StrToIntDef(Text, 0);
3984 if wkIntTo < wkIntSt then
3987 wkIntSt := StrToIntDef(Text, 0);
3990 if wkIntSt <> 0 then begin
3991 FActiveContent.IDAnchorPopup('');
3992 MoveHisotryManager.pushItem(FActiveContent);
3993 if (Sender is TResPopupBrowser) then begin
3994 TResPopupBrowser(Sender).ChildClear;
3996 GetActiveContent(true),
3997 GetActiveContent(true).URL + '&st=' +
3998 IntToStr(wkIntSt) + '&to=' + IntToStr(wkIntSt));
4000 BrowserMovement(IntToStr(wkIntSt));
4005 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
4007 URL := GikoSys.GetHRefText(Html);
4008 URL := GikoSys.HTMLDecode(URL);
4009 if AnsiPos('BE:', URL) = 1 then begin
4010 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
4011 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
4012 threadItem := FActiveContent.Thread;
4013 if threadItem = nil then Exit;
4014 URL := BE_PHP_URL + BNum + '&u=d'
4015 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
4018 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
4019 ( AnsiPos('ftp://', URL) = 1) then begin
4020 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
4021 if GikoSys.Setting.LinkAddAddressBar then begin
4022 idx := AddressComboBox.Items.IndexOf(URL);
4023 if idx = -1 then begin
4024 AddressComboBox.Items.Insert(0, URL);
4025 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
4026 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
4028 AddressComboBox.Items.Delete(idx);
4029 AddressComboBox.Items.Insert(0, URL);
4032 if (Sender is TResPopupBrowser) then begin
4033 TResPopupBrowser(Sender).ChildClear
4036 MoveHisotryManager.pushItem(FActiveContent);
4043 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
4045 if Mouse.Capture <> 0 then
4047 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4048 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
4049 FBrowserSizeWidth := ViewPanel.Width;
4051 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
4052 FBrowserSizeHeight := ViewPanel.Height;
4054 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4055 if ViewPanel.Width < 2 then begin
4056 ViewPanel.Width := 1;
4057 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
4058 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
4059 GikoSys.Setting.ListWidthState := glsMax;
4060 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
4061 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
4062 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
4063 GikoSys.Setting.ListWidthState := glsMin;
4065 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
4066 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
4067 GikoSys.Setting.ListWidthState := glsNormal;
4070 if ViewPanel.Height < 2 then begin
4071 ViewPanel.Height := 1;
4072 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4073 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4074 GikoSys.Setting.ListHeightState := glsMax;
4075 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
4076 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4077 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4078 GikoSys.Setting.ListHeightState := glsMin;
4080 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4081 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4082 GikoSys.Setting.ListHeightState := glsNormal;
4085 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
4086 FBrowserSizeHeight := ViewPanel.Height
4087 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
4088 FBrowserSizeWidth := ViewPanel.Width;}
4091 procedure TGikoForm.BrowserTabChange(Sender: TObject);
4096 BrowserTab.Tabs.BeginUpdate;
4098 if not BrowserTab.Dragging then begin
4099 FTabHintIndex := -1;
4100 BrowserTab.Hint := '';
4101 idx := BrowserTab.TabIndex;
4102 if idx = -1 then begin
4103 SetContent(BrowserNullTab);
4105 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
4106 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
4107 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
4109 FBrowsers.Move(j ,0);
4111 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
4112 (FActiveContent.Browser <> BrowserNullTab.Browser) and
4113 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
4114 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4116 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
4117 ReleaseOldestBrowser;
4119 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
4120 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
4121 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4123 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
4124 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
4125 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4127 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
4128 AddressComboBox.Text := GetActiveContent.URL;
4130 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
4131 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
4134 GikoDM.SetFocusForBrowserAction.Execute;
4138 BrowserTab.Tabs.EndUpdate;
4143 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
4144 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
4150 if Button = mbMiddle then begin
4151 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
4154 p := BrowserTab.ScreenToClient(p);
4155 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
4157 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4158 end else if Button = mbLeft then begin
4159 FDragWFirst := true;
4160 FMouseDownPos.X := X;
4161 FMouseDownPos.Y := Y;
4166 procedure TGikoForm.SetBrowserTabState;
4168 CoolBand: TCoolBand;
4170 BrowserBottomPanel.AutoSize := False;
4171 if GikoSys.Setting.BrowserTabVisible then begin
4173 BrowserTab.Tabs.BeginUpdate;
4175 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
4176 BrowserTab.Style := tsTabs;
4177 if GikoSys.Setting.BrowserTabPosition = gtpTop then
4178 BrowserTab.TabPosition := tpTop
4180 BrowserTab.TabPosition := tpBottom;
4181 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
4182 BrowserTab.TabPosition := tpTop;
4183 BrowserTab.Style := tsButtons;
4185 BrowserTab.TabPosition := tpTop;
4186 BrowserTab.Style := tsFlatButtons
4189 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
4190 BrowserTab.Parent := BrowserTabToolBar;
4191 BrowserBottomPanel.Hide;
4192 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4193 if CoolBand <> nil then
4194 CoolBand.Visible := True;
4196 BrowserTab.Parent := BrowserBottomPanel;
4197 BrowserTab.Top := 0;
4198 BrowserTab.Left := 0;
4199 BrowserBottomPanel.Show;
4200 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4201 if CoolBand <> nil then
4202 CoolBand.Visible := False;
4205 BrowserTab.Tabs.EndUpdate;
4209 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4210 if CoolBand <> nil then
4211 CoolBand.Visible := False;
4212 BrowserBottomPanel.Visible := False;
4213 GikoDM.AllTabCloseAction.Execute;
4217 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
4218 Y: Integer; State: TDragState; var Accept: Boolean);
4222 idx := BrowserTab.IndexOfTabAt(X, Y);
4223 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
4226 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
4231 FDragWFirst := False;
4232 idx := BrowserTab.IndexOfTabAt(X, Y);
4234 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
4237 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
4238 Shift: TShiftState; X, Y: Integer);
4241 ThreadItem: TThreadItem;
4244 TabIdx := BrowserTab.IndexOfTabAt(x, y);
4246 if ( ssLeft in Shift ) then begin
4247 if (FDragWFirst) then begin
4248 BrowserTab.EndDrag(false);
4249 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
4252 BrowserTab.EndDrag(false);
4253 FDragWFirst := false;
4256 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
4257 Application.CancelHint;
4258 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
4259 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
4260 BrowserTab.Hint := ThreadItem.Title;
4261 Application.ShowHint := True;
4263 BrowserTab.Hint := '';
4264 Application.ShowHint := True;
4266 FTabHintIndex := TabIdx;
4271 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
4272 const pDisp: IDispatch; var URL: OleVariant);
4274 BrowserRecord :TBrowserRecord;
4276 doc : IHTMLDocument2;
4277 threadItem : TThreadItem;
4279 if TObject(Sender) is TWebBrowser then begin
4280 BrowserRecord := nil;
4281 if TWebBrowser(Sender) <> Browser then begin
4282 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4283 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
4284 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
4288 if BrowserRecord <> nil then begin
4289 if BrowserRecord.Event <> nil then
4290 BrowserRecord.Event.Free;
4291 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, BrowserRecord.Browser.ControlInterface.Document, HTMLDocumentEvents2);
4292 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4293 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4296 if GetActiveContent <> nil then begin
4297 if FEvent <> nil then
4299 FEvent := THTMLDocumentEventSink.Create(Self, Browser.ControlInterface.Document, HTMLDocumentEvents2);
4300 FEvent.OnContextMenu := OnDocumentContextMenu;
4301 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4303 if FEvent <> nil then begin
4311 if (BrowserRecord <> nil) and
4312 Assigned( BrowserRecord.Thread ) then begin
4313 threadItem := BrowserRecord.Thread;
4315 if (threadItem.JumpAddress > 0) then begin
4316 if threadItem.UnRead then begin
4317 threadItem.UnRead := False;
4319 RefreshListView(threadItem);
4321 //
\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®
4322 //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4323 if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4324 BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4325 threadItem.JumpAddress := 0;
4327 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4330 end else if threadItem.UnRead then begin
4331 threadItem.UnRead := False;
4333 BrowserRecord.Move('new');
4334 RefreshListView(threadItem);
4335 end else if threadItem.ScrollTop <> 0 then begin
4337 doc := BrowserRecord.Browser.ControlInterface.Document as IHTMLDocument2;
4338 (doc.body as IHTMLElement2).ScrollTop := threadItem.ScrollTop;
4341 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4346 LockWindowUpdate(0);
4349 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4351 AddRoundNameMenu(RoundNamePopupMenu.Items);
4354 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4360 Item := TMenuItem.Create(Self);
4361 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4362 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4364 Item := TMenuItem.Create(Self);
4365 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4366 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4368 Item := TMenuItem.Create(Self);
4369 Item.Caption := '-';
4371 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4372 Item := TMenuItem.Create(Self);
4373 Item.Caption := RoundList.RoundNameList[i];
4374 Item.OnClick := SetSelectRoundName;
4379 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4381 threadItem : TThreadItem;
4383 if ParentName <> 'dummy1' then begin
4384 SetSelectItemRound(RoundFlag, RoundName);
4386 threadItem := GetActiveContent;
4387 if threadItem <> nil then begin
4388 threadItem.RoundName := RoundName;
4390 RoundList.RoundNameList.Add(RoundName);
4391 threadItem.Round := RoundFlag;
4396 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4401 List := TList.Create;
4403 SelectListItem(List);
4404 for i := 0 to List.Count - 1 do begin
4405 if TObject(List[i]) is TBoard then begin
4406 TBoard(List[i]).RoundName := RoundName;
4408 RoundList.RoundNameList.Add(RoundName);
4409 TBoard(List[i]).Round := RoundFlag;
4410 end else if TObject(List[i]) is TThreadItem then begin
4411 if TThreadItem(List[i]).IsLogFile then begin
4412 TThreadItem(List[i]).RoundName := RoundName;
4414 RoundList.RoundNameList.Add(RoundName);
4415 TThreadItem(List[i]).Round := RoundFlag;
4424 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4426 MenuItem: TMenuItem;
4428 if Sender is TMenuItem then begin
4429 MenuItem := TMenuItem(Sender);
4430 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4435 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4440 if CoolBar = nil then
4442 for i := 0 to CoolBar.Bands.Count - 1 do begin
4443 if CoolBar.Bands[i].Control = Control then begin
4444 Result := CoolBar.Bands[i];
4450 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4452 if BrowserTab.Parent = BrowserTabToolBar then
4453 BrowserTab.Width := BrowserTabToolBar.Width;
4456 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4461 procedure TGikoForm.SetMenuFont;
4463 // GikoSys.MenuFont(MenuToolBar.Font);
4464 // MenuToolBar.Buttons[0].AutoSize := False;
4465 // MenuToolBar.Buttons[0].AutoSize := True;
4466 // MenuToolBar.Font.Color := clMenuText;
4467 GikoSys.MenuFont(MainCoolBar.Font);
4468 MenuToolBar.Buttons[0].AutoSize := False;
4469 MenuToolBar.Buttons[0].AutoSize := True;
4470 MainCoolBar.AutoSize := False;
4471 MainCoolBar.AutoSize := True;
4472 GikoSys.MenuFont(ListCoolBar.Font);
4473 GikoSys.MenuFont(BrowserCoolBar.Font);
4474 // MenuToolBar.Font.Color := clMenuText;
4477 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4481 if FavoriteDM.Modified then begin
4484 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4485 NewMenu := TMenuItem.Create(MainMenu);
4486 NewMenu.Action := GikoDM.FavoriteAddAction;
4487 FavoriteMenu.Add(NewMenu);
4488 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4489 NewMenu := TMenuItem.Create(FavoriteMenu);
4490 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4491 FavoriteMenu.Add(NewMenu);
4492 //
\83Z
\83p
\83\8c\81[
\83^
4493 FavoriteMenu.InsertNewLineAfter(NewMenu);
4494 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4495 FavoriteDM.Modified := false;
4499 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4502 NewMenu: array of TMenuItem;
4504 SetLength(NewMenu, Node.Count);
4505 Node := Node.getFirstChild;
4507 while ( Node <> nil ) do begin
4508 NewMenu[i] := TFavoriteMenuItem.Create(nil);
4509 NewMenu[i].AutoHotkeys := maAutomatic;
4510 NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4511 TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4513 if TObject(Node.Data) is TFavoriteFolder then begin
4514 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4515 CreateFavMenu(Node, NewMenu[i]);
4516 end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4517 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4518 NewMenu[i].OnClick := FavoriteClick;
4519 end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4520 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4521 NewMenu[i].OnClick := FavoriteClick;
4524 Node := Node.getNextSibling;
4526 MenuItem.Add(NewMenu);
4529 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4531 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';
4532 TitleAdd: String = '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á';
4534 Dlg : TFavoriteAddDialog;
4540 if Item is TFavoriteBoardItem then
4541 Item := TFavoriteBoardItem( Item ).Item
4542 else if Item is TFavoriteThreadItem then
4543 Item := TFavoriteThreadItem( Item ).Item;
4545 Node := FavoriteTreeView.Items.GetFirstNode;
4546 if Item is TBoard then begin
4547 ItemURL := TBoard( Item ).URL;
4548 while Node <> nil do begin
4550 if TObject( Data ) is TFavoriteBoardItem then begin
4551 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4552 if Application.MessageBox(PChar(MsgAdd) , PChar(TitleAdd), MB_YESNO ) = IDNO then
4557 Node := Node.GetNext;
4559 Dlg := TFavoriteAddDialog.Create(Self);
4561 Dlg.SetBoard( TBoard( Item ) );
4566 end else if Item is TThreadItem then begin
4567 ItemURL := TThreadItem( Item ).URL;
4568 while Node <> nil do begin
4570 if TObject( Data ) is TFavoriteThreadItem then begin
4571 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
4572 if Application.MessageBox( PChar(MsgAdd), PChar(TitleAdd), MB_YESNO ) = IDNO then
4577 Node := Node.GetNext;
4579 Dlg := TFavoriteAddDialog.Create(Self);
4581 Dlg.SetThreadItem( TThreadItem( Item ) );
4591 procedure TGikoForm.FavoriteClick(Sender: TObject);
4593 FavoriteClick( Sender, True );
4596 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4599 ThreadItem: TThreadItem;
4600 FavBoard: TFavoriteBoardItem;
4601 FavThread: TFavoriteThreadItem;
4605 if Sender is TFavoriteMenuItem then
4606 Item := TFavoriteMenuItem(Sender).Data
4607 else if Sender is TLinkToolButton then
4608 Item := TLinkToolButton(Sender).Data
4609 else if Sender is TTreeNode then
4610 Item := TTreeNode( Sender ).Data
4614 if TObject(Item) is TFavoriteBoardItem then begin
4615 FavBoard := TFavoriteBoardItem(Item);
4616 Board := FavBoard.Item;
4617 if Board <> nil then begin
4618 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4619 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4620 SelectTreeNode(Board, True);
4622 end else if TObject(Item) is TFavoriteThreadItem then begin
4623 FavThread := TFavoriteThreadItem(Item);
4624 ThreadItem := FavThread.Item;
4625 if ThreadItem = nil then
4628 InsertBrowserTab(ThreadItem, ActiveTab);
4630 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4631 if GikoSys.Setting.ListWidthState = glsMin then begin
4632 GikoDM.BrowserMaxAndFocusAction.Execute;
4635 if GikoSys.Setting.ListHeightState = glsMin then begin
4636 GikoDM.BrowserMaxAndFocusAction.Execute;
4642 procedure TGikoForm.BBSMenuItemOnClick(
4647 if Sender is TBBSMenuItem then
4648 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4652 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4654 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4657 //!
\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é)
4658 procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4660 stRes, edRes : Int64;
4661 browserRec : TBrowserRecord;
4662 threadNumber : String;
4663 doc : IHTMLDocument2;
4667 Thread.JumpAddress := 0;
4668 //
\83^
\83u
\82ð
\90¶
\90¬
4669 browserRec := InsertBrowserTab(Thread);
4670 if (browserRec <> nil) then begin
4671 // JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N
\82·
\82é
4672 threadNumber := ChangeFileExt(Thread.FileName, '');
4673 GikoSys.GetPopupResNumber( URL, stRes, edRes );
4674 //
\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
4675 if (StrToInt64(threadNumber) = stRes) then begin
4676 if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4677 and (Pos('&st=' + threadNumber , URL) = 0) then begin
4681 if ( stRes > 0 ) then begin
4682 Thread.JumpAddress := stRes;
4684 //
\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é
4685 if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4686 DownloadContent(Thread);
4687 end else if (not browserRec.Repaint) and (stRes > 0) then begin
4688 browserRec.Move(IntToStr(stRes));
4689 Thread.JumpAddress := 0;
4691 doc := browserRec.Browser.ControlInterface.Document as IHTMLDocument2;
4692 if Assigned(doc) then
4693 Thread.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
4700 procedure TGikoForm.MoveToURL(const inURL: string);
4702 protocol, host, path, document, port, bookmark : string;
4703 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4705 BBSID, BBSKey: string;
4706 {tmpBoard,} Board: TBoard;
4707 ThreadItem: TThreadItem;
4710 tmpThread : TThreadItem;
4711 shiftDown : Boolean;
4715 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4716 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4719 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4720 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4721 if shiftDown then begin
4722 GikoSys.OpenBrowser(inURL, gbtUserApp);
4724 end else if ctrlDown then begin
4725 GikoSys.OpenBrowser(inURL, gbtIE);
4729 //=====
\83v
\83\89\83O
\83C
\83\93
4732 bi := Length(BoardGroups) - 1;
4733 for i := 1 to bi do begin
4734 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4735 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4738 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4739 Board := BBSsFindBoardFromURL( boardURL );
4742 if Board = nil then begin
4744 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4745 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4748 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4749 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4750 ShowBBSTree( BBSs[ 1 ] );
4753 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4754 if not Board.IsThreadDatRead then begin
4755 GikoSys.ReadSubjectFile( Board );
4759 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4760 if ThreadItem = nil then begin
4761 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4762 ThreadItem := tmpThread;
4763 Board.Insert( 0, ThreadItem );
4764 if ActiveList is TBoard then begin
4765 if TBoard(ActiveList) = Board then
4766 ListView.Items.Count := ListView.Items.Count + 1;
4771 OpenThreadItem(ThreadItem, inURL);
4778 Board := BBSsFindBoardFromURL(
4779 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4781 if Board <> nil then begin
4782 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4783 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4784 SelectTreeNode( Board, True );
4792 // 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¢
4796 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4797 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4798 Board := BBSsFindBoardFromURL( boardURL );
4799 if Board = nil then begin
4800 //
\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
4801 GikoSys.OpenBrowser(inURL, gbtUserApp);
4804 //
\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é
4806 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4807 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4808 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4809 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4810 GikoSys.OpenBrowser(inURL, gbtUserApp);
4815 if not Board.IsThreadDatRead then
4816 GikoSys.ReadSubjectFile(Board);
4817 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4818 ThreadItem := Board.FindThreadFromURL( URL );
4819 //
\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)
4820 if ThreadItem = nil then begin
4821 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4824 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ª
\82È
\82¢
\82È
\82ç
\90¶
\90¬
\82·
\82é
\81B
4825 if ThreadItem = nil then begin
4826 ThreadItem := TThreadItem.Create( nil, Board, URL );
4827 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4828 Board.Insert(0, ThreadItem);
4829 if ActiveList is TBoard then begin
4830 if TBoard(ActiveList) = Board then
4831 ListView.Items.Count := ListView.Items.Count + 1;
4834 //
\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é
4835 if (not ThreadItem.IsLogFile) then begin
4836 if AnsiPos(Host, Board.URL) = 0 then
4837 ThreadItem.DownloadHost := Host
4839 ThreadItem.DownloadHost := '';
4841 OpenThreadItem(ThreadItem, inURL);
4845 Board := BBSsFindBoardFromURL( inURL );
4846 if Board = nil then begin
4847 GikoSys.OpenBrowser(inURL, gbtAuto);
4849 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4850 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4851 SelectTreeNode( Board, True );
4856 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4858 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4859 CoolBarResized( Sender, MainCoolBar );
4862 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4863 Shift: TShiftState);
4865 if Key = VK_RETURN then
4866 GikoDM.MoveToAction.Execute;
4869 procedure TGikoForm.BrowserEnter(Sender: TObject);
4871 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4874 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4876 CDS:PCopyDataStruct;
4880 CDS := Message.CopyDataStruct;
4881 GetMem(PC, CDS^.cbData);
4883 lstrcpy(PC,CDS^.lpData);
4884 SetString(sURL, PC,lstrlen(PC));
4889 Message.Result := 1;
4892 procedure TGikoForm.WndProc(var Message: TMessage);
4894 senderBrowser : TWebBrowser;
4900 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4903 if Message.WParam = SC_MINIMIZE then begin
4905 PostMessage(Handle, USER_MINIMIZED, 0, 0);
4908 TreeClick( TreeView.Selected );
4913 if (GikoSys.Setting.StoredTaskTray) then begin
4920 USER_DOCUMENTCOMPLETE:
4921 if (Message.WParam <> 0) and
4922 (TObject(Message.WParam) is TWebBrowser) then begin
4923 senderBrowser := TWebBrowser( Message.WParam );
4924 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
4927 if (TObject(Message.WParam) is TResPopupBrowser) then begin
4929 TResPopupBrowser( Message.WParam ).Clear;
4932 end else if (TObject(Message.WParam) is TPreviewBrowser) then begin
4933 if FPreviewBrowser <> nil then begin
4934 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
4944 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
4949 //
\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Í
4950 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
4951 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
4952 if Msg.CharCode in [VK_BACK] then begin
4953 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4954 if Msg.KeyData > 0 then begin
4957 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4961 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
4962 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
4965 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4968 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
4969 if Msg.CharCode in [VK_BACK] then begin
4970 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4971 if Msg.KeyData > 0 then begin
4974 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4977 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
4980 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4984 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
4988 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
4993 PreviewTimer.Enabled := False;
4997 ARect := FPreviewBrowser.GetWindowRect(p);
4999 FPreviewBrowser.PreviewImage(FPreviewURL);
5001 if ARect.Bottom > Screen.DesktopHeight then begin
5002 OffsetRect(ARect, 0, -(ARect.Bottom - Screen.DesktopHeight));
5004 if (ARect.Right > Screen.DesktopWidth) then begin
5005 OffsetRect(ARect, -(ARect.Right - Screen.DesktopWidth), 0);
5007 if (ARect.Left < Screen.DesktopLeft) then begin
5008 OffsetRect(ARect, +(Screen.DesktopLeft - ARect.Left), 0);
5010 if (ARect.Top < Screen.DesktopTop) then begin
5011 OffsetRect(ARect, 0, (Screen.DesktopTop - ARect.Top));
5014 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST,
5015 ARect.Left, ARect.Top,
5016 (ARect.Right - ARect.Left), (ARect.Bottom - ARect.Top),
5017 SWP_NOACTIVATE or SWP_HIDEWINDOW);
5019 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
5020 FPreviewBrowserRect := ARect;
5023 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
5027 if PreviewTimer.Enabled then
5028 PreviewTimer.Enabled := False;
5030 //Window
\8aO
\82É
\88Ú
\93®
\82µ
\82½
\82Æ
\82«
\82Í
\8fÁ
\82¦
\82é
\82æ
\82¤
\82É
\82·
\82é
\82½
\82ß
\95\9c\8a\88
5031 if (FResPopupBrowser <> nil) and (IsWindowVisible(FResPopupBrowser.Handle)) then begin
5032 //
\89E
\83N
\83\8a\83b
\83N
\82Ì
\8e\9e\82Í
\8fÁ
\82³
\82È
\82¢
\82æ
\82¤
\82É
\8fð
\8c\8f\92Ç
\89Á
5033 if (Message.MouseMsg <> WM_RBUTTONUP) then begin
5034 FResPopupBrowser.Clear;
5038 if (FPreviewBrowser <> nil)
5039 and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
5040 //
\82±
\82±
\82Å
\8fÁ
\82³
\82ê
\82é
\82Ì
\82ª
\96â
\91è
5041 //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Å
\95\
\8e¦
\94Í
\88Í
\94»
\92è
\82Å
\82«
\82Ä
\82¢
\82é
\82Í
\82¸
5042 Pos := Mouse.CursorPos;
5043 Pos.X := Pos.X + Left;
5044 Pos.Y := Pos.Y + Top;
5045 if (FPreviewBrowserRect.Left > Pos.X) or
5046 (FPreviewBrowserRect.Right < Pos.X) or
5047 (FPreviewBrowserRect.Top > Pos.Y) or
5048 (FPreviewBrowserRect.Bottom < Pos.Y) then begin
5049 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
5053 Message.Result := 1;
5056 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
5058 GikoDM.MsgBarCloseAction.Execute;
5061 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
5063 doc: IHtmlDocument2;
5064 Range: IHTMLTxtRange;
5067 ThreadItem: TThreadItem;
5070 FactiveContent.IDAnchorPopup('');
5072 doc := FactiveContent.Browser.ControlInterface.Document as IHtmlDocument2;
5073 if not Assigned(doc) then
5076 Range := doc.selection.createRange as IHTMLTxtRange;
5077 if not Assigned(Range) then
5080 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
5081 s := ZenToHan(Trim(s));
5082 if GikoSys.IsNumeric(s) then begin
5083 Num := StrToInt64Def(s, -1);
5084 ThreadItem := GetActiveContent(true);
5085 if (ThreadItem <> nil) and (Num <= ThreadItem.Count)
5086 and (Num > 0)then begin
5087 CreateResPopupBrowser;
5088 FResPopupBrowser.CreateNewBrowser.PopupType := gptThread;
5089 HTMLCreater.SetResPopupText(FResPopupBrowser.CreateNewBrowser, ThreadItem, Num, Num, False, False);
5090 FResPopupBrowser.Popup;
5099 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
5101 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
5102 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
5104 if FTreeType = gttHistory then begin
5105 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
5106 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
5109 TreeView.Items.Clear;
5113 procedure TGikoForm.SetLinkBar;
5117 ToolButton: TLinkToolButton;
5118 MenuItem: TMenuItem;
5119 oldIgnoreResize : TResizeType;
5121 oldIgnoreResize := FIsIgnoreResize;
5122 FIsIgnoreResize := rtResizing;
5123 MainCoolBar.Bands.BeginUpdate;
5125 LinkBarPopupMenu.Items.Clear;
5126 for i := LinkToolBar.ButtonCount - 1 downto 0 do
5127 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
5128 LinkToolBar.Buttons[i].Free;
5129 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5130 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5131 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5132 ToolButton := TLinkToolButton.Create(LinkToolBar);
5133 // ToolButton.Parent := LinkToolBar;
5134 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
5135 MenuItem := TMenuItem.Create(Self);
5136 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
5137 LinkBarPopupMenu.Items.Add(MenuItem);
5138 ToolButton.MenuItem := MenuItem;
5139 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
5140 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
5141 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
5142 ToolButton.OnClick := FavoriteClick;
5143 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
5144 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
5145 ToolButton.OnClick := FavoriteClick;
5147 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
5148 ToolButton.Left := 10000;
5149 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
5150 ToolButton.AutoSize := True;
5151 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
5152 ToolButton.OnDragOver := FavoriteDragOver;
5153 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
5154 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
5155 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
5156 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
5157 //ToolButton.DragMode := dmAutomatic;
5158 ToolButton.DragMode := dmManual;
5159 ToolButton.PopupMenu := FavoriteTreePopupMenu;
5161 LinkToolBar.InsertControl(ToolButton);
5166 { if LinkToolBar.ButtonCount = 0 then begin
5167 ToolButton := TLinkToolButton.Create(LinkToolBar);
5168 ToolButton.Style := tbsButton;
5169 ToolButton.ImageIndex := -1;
5170 ToolButton.Caption := '';
5171 LinkToolBar.InsertControl(ToolButton);
5174 MainCoolBar.Bands.EndUpdate;
5175 LoadCoolBarSettings;
5176 FIsIgnoreResize := oldIgnoreResize;
5180 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5188 if Sender = FavoriteTreeView then begin
5189 Node := FavoriteTreeView.GetNodeAt(X, Y);
5194 bound := Node.DisplayRect( False );
5195 height := bound.Bottom - bound.Top;
5196 if (bound.Top + height / 2) <= Y then
5197 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
5202 if Node.IsFirstNode then
5207 if FDropSpaceNode <> nil then
5208 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
5211 if Change then begin
5212 if FDropSpaceNode <> nil then
5213 FDropSpaceNode.Free;
5215 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
5216 FDropSpaceNode.MoveTo( Node, naInsert );
5217 FDropSpaceNode.ImageIndex := -1;
5218 FDropSpaceNode.SelectedIndex := -1;
5222 if Source = FavoriteTreeView then begin
5223 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
5228 end else if Source = BrowserTab then
5230 else if Source = ListView then
5232 else if Source is TLinkToolButton then
5234 else if Source = TreeView then
5240 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5243 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
5246 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
5248 // FDragging := true;
5251 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
5253 SenderNode: TTreeNode;
5254 LinkToolButton: TLinkToolButton;
5257 LinkToolButton := TLinkToolButton( Sender );
5258 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5259 SenderNode.Selected := False;
5260 FavoriteDragDrop( SenderNode, Source );
5266 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5268 favButton : TLinkToolButton;
5269 favThreadItem : TFavoriteThreadItem;
5275 if Sender is TLinkToolButton then begin
5276 favButton := TLinkToolButton( Sender );
5277 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5278 favThreadItem := TFavoriteThreadItem( favButton.Data );
5279 if favThreadItem.Item <> nil then
5280 InsertBrowserTab( favThreadItem.Item, False );
5288 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5292 TToolButton( Sender ).DragMode := dmManual;
5293 if ssLeft in Shift then begin
5294 // 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)
5295 if FDragTime = 0 then begin
5296 FDragTime := GetTickCount();
5298 Now := GetTickCount();
5299 if (Now - FDragTime) > 500 then begin
5300 if FDragButton <> TToolButton( Sender ) then begin
5302 FDragButton := TToolButton( Sender );
5303 TToolButton(Sender).BeginDrag(false ,5);
5306 {$IF Defined(debug)}
5307 ShowMessage('Error');
5318 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5323 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5328 for i := 0 to ToolBar.ButtonCount - 1 do
5329 if ToolBar.Buttons[i].Visible then
5330 Result := Result + ToolBar.Buttons[i].Width;
5333 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5335 Control : TWinControl;
5338 Control := FindControl(BandInfo^.hwndChild);
5339 if Control = nil then
5342 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5343 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5344 idx := MainCoolBar.Bands[ i ].ID;
5348 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5349 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
5350 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5351 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5352 BandInfo^.cxMinChild := 0;
5353 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
5354 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5355 end else if Control = LinkToolBar then begin
5356 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5357 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5358 BandInfo^.cxMinChild := 0;
5359 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5360 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5361 end else begin // AddressToolBar
5362 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5363 BandInfo^.cxMinChild := 0;
5364 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5368 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5374 ChevronPopupMenu.Items.Clear;
5376 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5377 if MainCoolBar.Bands[ i ].Visible then begin
5378 if Idx = Int64(RebarChevron^.uBand) then begin
5385 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5386 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5388 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5389 ToolBarChevronMenu(StdToolBar);
5390 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5394 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5395 ChevronPopupMenu.Popup(p.x, p.y);
5399 procedure TGikoForm.MenuBarChevronMenu;
5400 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5406 for i := 0 to MenuItem.Count - 1 do begin
5408 if MenuItem[i] is TFavoriteMenuItem then begin
5409 Item := TFavoriteMenuItem.Create(Self);
5410 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5412 Item := TMenuItem.Create(Self);
5413 Item.Caption := MenuItem[i].Caption;
5414 Item.Action := MenuItem[i].Action;
5415 Item.ImageIndex := MenuItem[i].ImageIndex;
5416 Item.OnClick := MenuItem[i].OnClick;
5417 PopupItem.Add(Item);
5418 if MenuItem[i].Count > 0 then
5419 SetSubMenu(MenuItem[i], Item);
5428 ChevronPopupMenu.Items.Clear;
5429 ChevronPopupMenu.Images := MainMenu.Images;
5430 bw := GetWidthAllToolButton(MenuToolBar);
5431 if MenuToolBar.Width < bw then begin
5433 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5434 w := w + MenuToolBar.Buttons[i].Width;
5435 if MenuToolBar.Width <= w then begin
5436 Item := TMenuItem.Create(Self);
5437 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5438 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5439 ChevronPopupMenu.Items.Add(Item);
5440 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5446 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5447 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5452 if Assigned(PopupMenu.OnPopup) then
5453 PopupMenu.OnPopup(nil);
5454 for i := 0 to PopupMenu.Items.Count - 1 do begin
5456 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5457 Item := TFavoriteMenuItem.Create(Self);
5458 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5460 Item := TMenuItem.Create(Self);
5461 Item.Caption := PopupMenu.Items[i].Caption;
5462 Item.Action := PopupMenu.Items[i].Action;
5463 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5464 Item.OnClick := PopupMenu.Items[i].OnClick;
5465 PopupItem.Add(Item);
5474 ChevronPopupMenu.Items.Clear;
5475 ChevronPopupMenu.Images := ToolBar.HotImages;
5476 bw := GetWidthAllToolButton(ToolBar);
5477 if ToolBar.Width < bw then begin
5479 for i := 0 to ToolBar.ButtonCount - 1 do begin
5480 if ToolBar.Buttons[i].Visible then
5481 w := w + ToolBar.Buttons[i].Width;
5482 if ToolBar.Width <= w then begin
5483 if ToolBar.Buttons[i].Tag = 0 then begin
5484 Item := TMenuItem.Create(Self);
5485 if ToolBar.Buttons[i].Style = tbsSeparator then
5488 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5489 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5492 Item.Caption := ToolBar.Buttons[i].Caption;
5493 Item.Action := ToolBar.Buttons[i].Action;
5495 //Item.Visible := True;
5497 ChevronPopupMenu.Items.Add(Item);
5498 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5500 Item.OnClick := nil;
5501 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5509 procedure TGikoForm.LinkBarChevronMenu;
5514 Item: TFavoriteMenuItem;
5516 Button: TLinkToolButton;
5518 ChevronPopupMenu.Items.Clear;
5519 ChevronPopupMenu.Images := LinkToolBar.Images;
5520 bw := GetWidthAllToolButton(LinkToolBar);
5521 if LinkToolBar.Width < bw then begin
5523 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5524 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5525 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5526 w := w + LinkToolBar.Buttons[j].Width;
5527 if LinkToolBar.Width <= w then begin
5528 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5529 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5530 Item := TFavoriteMenuItem.Create(Self);
5531 if TObject(Button.Data) is TFavoriteFolder then begin
5532 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5533 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5534 Item.OnClick := FavoriteClick;
5535 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5536 Item.OnClick := FavoriteClick;
5538 Item.Data := Button.Data;
5539 Item.Caption := LinkToolBar.Buttons[j].Caption;
5540 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5541 ChevronPopupMenu.Items.Add(Item);
5552 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5553 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5554 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5556 \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É
5557 \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
5559 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5561 bandInfo : tagREBARBANDINFOA;
5562 pBandInfo : PReBarBandInfoA;
5569 pBandInfo := @bandInfo;
5570 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5571 bandInfo.cbSize := sizeof( bandInfo );
5572 bandInfo.hwndChild := h;
5573 bandInfo.cyMinChild := bar.Height;
5574 bar.OnBandInfo( nil, pBandInfo );
5575 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5577 for i := bar.Bands.Count - 1 downto 0 do begin
5578 if bar.Bands[ i ].Control.Handle = h then begin
5584 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5588 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5590 Control: TWinControl;
5593 Control := FindControl(BandInfo^.hwndChild);
5594 if Control = nil then
5597 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5598 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5599 idx := ListCoolBar.Bands[ i ].ID;
5603 if Control = ListToolBar then begin
5604 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5605 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5606 BandInfo^.cxMinChild := 0;
5607 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5608 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5610 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5611 BandInfo^.cxMinChild := 0;
5612 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5616 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5621 ChevronPopupMenu.Items.Clear;
5622 Idx := RebarChevron^.uBand;
5623 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5624 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5625 ToolBarChevronMenu(ListToolBar);
5628 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5629 ChevronPopupMenu.Popup(p.x, p.y);
5633 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5635 Control: TWinControl;
5638 Control := FindControl(BandInfo^.hwndChild);
5639 if Control = nil then
5642 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5643 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5644 idx := BrowserCoolBar.Bands[ i ].ID;
5648 if Control = BrowserToolBar then begin
5649 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5650 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5651 BandInfo^.cxMinChild := 0;
5652 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5653 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5655 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5656 BandInfo^.cxMinChild := 0;
5657 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5661 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5666 ChevronPopupMenu.Items.Clear;
5667 Idx := RebarChevron^.uBand;
5668 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5669 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5670 ToolBarChevronMenu(BrowserToolBar)
5673 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5674 ChevronPopupMenu.Popup(p.x, p.y);
5678 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5680 if Column^.iImage = -1 then begin
5681 Column^.mask := Column^.mask or LVCF_FMT;
5683 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5684 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5688 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5693 for i := bar.ButtonCount - 1 downto 0 do begin
5694 if bar.Buttons[ i ].Action = action then begin
5695 Result := bar.Buttons[ i ];
5701 procedure TGikoForm.SetToolBarPopup;
5704 aIEButton : TToolButton;
5705 aCabinetBBSButton : TToolButton;
5706 aResRangeButton : TToolButton;
5707 aThreadRangeButton: TToolButton;
5709 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5711 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5712 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5713 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5714 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5715 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5717 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5718 if aIEButton <> nil then
5719 aIEButton.DropdownMenu := BrowserPopupMenu;
5720 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5721 if aCabinetBBSButton <> nil then
5722 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5723 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5724 if aResRangeButton <> nil then
5725 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5726 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5727 if aThreadRangeButton <> nil then
5728 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5731 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5732 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5736 // browserPos : TPoint;
5740 Wnd := WindowFromPoint(Mouse.CursorPos);
5742 if WheelDelta > 0 then
5747 if (Wnd = BrowserTab.Handle) or
5748 (Wnd = BrowserTab.Parent.Handle) then begin
5749 BrowserTab.ScrollTabs(Delta);
5751 if FIsHandledWheel then begin
5752 FIsHandledWheel := False;
5755 FIsHandledWheel := True;
5756 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5757 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5759 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5767 procedure TGikoForm.SetSelectWord( const text : string );
5769 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5770 ClearThreadRengeAction;
5772 if Length( text ) = 0 then
5774 GikoDM.AllItemAction.Checked := True;
5775 SetListViewType( gvtAll )
5777 SetListViewType( gvtUser, text, false );
5781 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5784 SetSelectWord( SelectComboBox.Text );
5788 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5789 Shift: TShiftState);
5797 if Key = VK_Return then
5800 end else if Key = 229 then begin
5801 if GikoSys.Setting.UseUndecided then begin
5802 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5803 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5804 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5805 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5806 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5807 SetLength(Str, Len);
5808 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5809 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5810 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5812 Str := SelectComboBox.Text + Str;
5814 if (Length(Str) > 0) then begin
5818 end else if (Key = Windows.VK_DELETE) and (ssCtrl in Shift) then begin
5819 // Ctrl + DEL
\82Å
\8dí
\8f\9c\82·
\82é
5820 Str := SelectComboBox.Text;
5821 idx := GikoSys.Setting.SelectTextList.IndexOf( Str );
5822 if idx <> -1 then begin
5823 GikoSys.Setting.SelectTextList.Delete( idx );
5825 idx := SelectComboBox.Items.IndexOf( Str );
5826 if idx <> -1 then begin
5827 SelectComboBox.Items.Delete( idx );
5829 SelectComboBox.Text := '';
5830 //
\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·
5831 SelectComboBox.OnChange(Sender);
5832 end else if Length( SelectComboBox.Text ) = 0 then
5834 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5835 *
\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
5836 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5839 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5840 ClearThreadRengeAction;
5844 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
5845 procedure TGikoForm.ClearThreadRengeAction;
5847 //
\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é
5848 if GikoDM.AllItemAction.Checked then
5849 GikoDM.AllItemAction.Checked := False;
5850 if GikoDM.LogItemAction.Checked then
5851 GikoDM.LogItemAction.Checked := False;
5852 if GikoDM.NewItemAction.Checked then
5853 GikoDM.NewItemaction.Checked := False;
5854 if GikoDM.LiveItemAction.Checked then
5855 GikoDM.LiveItemAction.Checked := False;
5856 if GikoDM.ArchiveItemAction.Checked then
5857 GikoDM.ArchiveItemAction.Checked := False;
5861 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5866 if Length( SelectComboBox.Text ) = 0 then
5868 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5869 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5874 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5875 procedure TGikoForm.ModifySelectList;
5882 if not SelectComboBoxPanel.Visible then
5885 if Length( SelectComboBox.Text ) > 0 then
5887 oldText := SelectComboBox.Text;
5888 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5890 GikoSys.Setting.SelectTextList.Delete( idx );
5891 idx := SelectComboBox.Items.IndexOf( oldText );
5893 SelectComboBox.Items.Delete( idx );
5894 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5895 SelectComboBox.Items.Insert( 0, oldText );
5896 SelectComboBox.Text := oldText;
5904 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5905 Shift: TShiftState; X, Y: Integer);
5910 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5913 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5914 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5915 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5917 If w <= 50 Then Begin
5918 //
\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
5919 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
5920 pos.X := pos.X + (50 - w);
5922 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
5926 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
5927 //If SelectComboBox.Width <> w Then Begin
5928 If SelectComboBoxPanel.Width <> w Then Begin
5929 SelectComboBoxPanel.Width := w;
5930 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
5931 GikoSys.Setting.SelectComboBoxWidth := w;
5932 DraggingSelectComboBoxPosition := pos;
5934 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
5935 ResetBandInfo( ListCoolBar, ListToolBar );
5941 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
5942 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5946 IsDraggingSelectComboBox := True;
5949 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
5953 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
5954 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5956 IsDraggingSelectComboBox := False;
5960 procedure TGikoForm.StatusBarResize(Sender: TObject);
5962 StatusBar.Panels[1].Width := StatusBar.Width -
5963 StatusBar.Panels[0].Width -
5964 StatusBar.Panels[THREADSIZE_PANEL].Width -
5965 StatusBar.Panels[NGWORDNAME_PANEL].Width;
5967 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
5970 if (Length( SelectComboBox.Text ) = 0) or
5971 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
5973 SelectComboBox.Text := '';
5974 SelectComboBox.Color := clWindow;
5979 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
5982 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
5985 if TObject(SenderNode.Data) is TFavoriteFolder then
5986 SourceNode.MoveTo(SenderNode, naAddChild)
5988 SourceNode.MoveTo(SenderNode, naInsert);
5992 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
5996 FavoBoardItem: TFavoriteBoardItem;
5997 FavoThreadItem: TFavoriteThreadItem;
5999 ThreadItem: TThreadItem;
6002 if (SenderNode = nil) or (Source = nil) then
6005 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
6006 FavNode := SenderNode.Parent
6008 FavNode := SenderNode;
6012 if Source is TBoard then begin
6013 Board := TBoard( Source );
6014 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
6015 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
6016 Node.ImageIndex := 15;
6017 Node.SelectedIndex := 15;
6018 end else if Source is TFavoriteBoardItem then begin
6019 FavoBoardItem := TFavoriteBoardItem( Source );
6020 Board := FavoBoardItem.Item;
6021 if Board <> nil then
6022 if not Board.IsThreadDatRead then
6023 GikoSys.ReadSubjectFile(Board);
6024 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
6025 Node.ImageIndex := 15;
6026 Node.SelectedIndex := 15;
6027 end else if Source is TThreadItem then begin
6028 ThreadItem := TThreadItem( Source );
6029 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
6030 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
6031 Node.ImageIndex := 16;
6032 Node.SelectedIndex := 16;
6033 end else if Source is TBrowserRecord then begin
6034 ThreadItem := TBrowserRecord( Source ).Thread;
6035 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
6036 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
6037 Node.ImageIndex := 16;
6038 Node.SelectedIndex := 16;
6039 end else if Source is TFavoriteThreadItem then begin
6040 FavoThreadItem := TFavoriteThreadItem( Source );
6041 ThreadItem := FavoThreadItem.Item;
6042 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
6043 Node.ImageIndex := 16;
6044 Node.SelectedIndex := 16;
6047 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
6049 FavoriteMoveTo( SenderNode, Node );
6053 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
6056 SourceNode: TTreeNode;
6057 LinkToolButton: TLinkToolButton;
6060 if SenderNode = nil then
6063 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
6064 if FDropSpaceNode <> nil then
6065 SenderNode := FDropSpaceNode;
6067 if Source = FavoriteTreeView then begin
6068 SourceNode := FavoriteTreeView.Selected;
6069 FavoriteMoveTo( SenderNode, SourceNode );
6070 end else if Source is TLinkToolButton then begin
6071 LinkToolButton := TLinkToolButton( Source );
6072 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
6073 FavoriteMoveTo( SenderNode, SourceNode );
6074 end else if Source = BrowserTab then begin
6075 idx := BrowserTab.TabIndex;
6076 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
6077 end else if Source = ListView then begin
6078 FavoriteAddTo( SenderNode, ListView.Selected.Data );
6079 end else if Source = TreeView then begin
6080 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
6084 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
6087 SenderNode: TTreeNode;
6090 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
6091 if SenderNode <> nil then begin
6092 FavoriteDragDrop( SenderNode, Source );
6095 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
6096 if FDropSpaceNode <> nil then begin
6098 FDropSpaceNode.Delete;
6100 FDropSpaceNode := nil;
6103 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6104 FavoriteDM.Modified := true;
6110 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
6111 Node: TTreeNode; var S: String);
6113 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6114 FavoriteDM.Modified := true;
6116 FavoriteTreeView.ReadOnly := True;
6121 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
6122 Shift: TShiftState);
6124 if not TTreeView(Sender).IsEditing then begin
6128 FClickNode := FavoriteTreeView.Selected;
6129 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
6133 FClickNode := FavoriteTreeView.Selected;
6134 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
6138 FavoriteClick( FavoriteTreeView.Selected );
6139 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
6143 FClickNode := FavoriteTreeView.Selected;
6144 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
6148 //
\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·
6149 if Key = VK_ESCAPE then begin
6150 if (TTreeView(Sender).Selected <> nil) then begin
6151 TTreeView(Sender).Selected.Text := FOrigenCaption;
6153 TTreeView(Sender).Selected.Focused := False;
6159 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
6162 LinkToolButton: TLinkToolButton;
6165 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
6167 FClickNode := FavoriteTreeView.Selected;
6169 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
6171 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
6172 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6173 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6174 FClickNode := FavoriteTreeView.Items[i];
6178 for i := 0 to FClickNode.Count - 1 do begin
6179 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
6180 FClickNode := FClickNode.Item[i];
6187 if FClickNode = nil then begin
6188 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6189 FavoriteTreeDeletePopupMenu.Visible := False;
6190 FavoriteTreeRenamePopupMenu.Visible := False;
6191 FavoriteTreeNewFolderPopupMenu.Visible := False;
6192 FavoriteTreeURLCopyPopupMenu.Visible := False;
6193 FavoriteTreeNameCopyPopupMenu.Visible := False;
6194 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6195 FavoriteTreeReloadPopupMenu.Visible := False;
6196 FavoriteTreeLogDeletePopupMenu.Visible := False;
6197 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6198 end else if FClickNode.IsFirstNode then begin
6199 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6200 FavoriteTreeDeletePopupMenu.Visible := False;
6201 FavoriteTreeRenamePopupMenu.Visible := False;
6202 FavoriteTreeNewFolderPopupMenu.Visible := True;
6203 FavoriteTreeURLCopyPopupMenu.Visible := False;
6204 FavoriteTreeNameCopyPopupMenu.Visible := False;
6205 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6206 FavoriteTreeReloadPopupMenu.Visible := False;
6207 FavoriteTreeLogDeletePopupMenu.Visible := False;
6208 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6209 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
6210 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6211 FavoriteTreeDeletePopupMenu.Visible := True;
6212 FavoriteTreeRenamePopupMenu.Visible := False;
6213 FavoriteTreeNewFolderPopupMenu.Visible := True;
6214 FavoriteTreeURLCopyPopupMenu.Visible := False;
6215 FavoriteTreeNameCopyPopupMenu.Visible := False;
6216 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6217 FavoriteTreeReloadPopupMenu.Visible := False;
6218 FavoriteTreeLogDeletePopupMenu.Visible := False;
6219 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6220 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
6221 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6222 FavoriteTreeDeletePopupMenu.Visible := True;
6223 FavoriteTreeRenamePopupMenu.Visible := True;
6224 FavoriteTreeNewFolderPopupMenu.Visible := True;
6225 FavoriteTreeURLCopyPopupMenu.Visible := False;
6226 FavoriteTreeNameCopyPopupMenu.Visible := True;
6227 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6228 FavoriteTreeReloadPopupMenu.Visible := False;
6229 FavoriteTreeLogDeletePopupMenu.Visible := False;
6230 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6231 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
6232 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6233 FavoriteTreeDeletePopupMenu.Visible := True;
6234 FavoriteTreeRenamePopupMenu.Visible := True;
6235 FavoriteTreeNewFolderPopupMenu.Visible := True;
6236 FavoriteTreeURLCopyPopupMenu.Visible := True;
6237 FavoriteTreeNameCopyPopupMenu.Visible := True;
6238 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6239 FavoriteTreeReloadPopupMenu.Visible := True;
6240 FavoriteTreeLogDeletePopupMenu.Visible := True;
6241 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6242 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
6243 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6244 FavoriteTreeDeletePopupMenu.Visible := True;
6245 FavoriteTreeRenamePopupMenu.Visible := True;
6246 FavoriteTreeNewFolderPopupMenu.Visible := True;
6247 FavoriteTreeURLCopyPopupMenu.Visible := True;
6248 FavoriteTreeNameCopyPopupMenu.Visible := True;
6249 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6250 FavoriteTreeReloadPopupMenu.Visible := True;
6251 FavoriteTreeLogDeletePopupMenu.Visible := False;
6252 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6254 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6255 FavoriteTreeDeletePopupMenu.Visible := False;
6256 FavoriteTreeRenamePopupMenu.Visible := False;
6257 FavoriteTreeNewFolderPopupMenu.Visible := False;
6258 FavoriteTreeURLCopyPopupMenu.Visible := False;
6259 FavoriteTreeNameCopyPopupMenu.Visible := False;
6260 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6261 FavoriteTreeReloadPopupMenu.Visible := False;
6262 FavoriteTreeLogDeletePopupMenu.Visible := False;
6263 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6268 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
6273 if not (TObject(node.Data) is TFavoriteFolder) then
6276 for i := 0 to node.Count - 1 do
6278 if TObject(node.Item[i].Data) is TFavoriteFolder then
6279 FavoriteBrowseFolder( node.Item[i] )
6280 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
6281 FavoriteClick( node.Item[i], False );
6285 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6291 for i := 0 to Node.Count - 1 do begin
6292 if Node.Item[i].Data = FindPointer then begin
6293 Result := Node.Item[i];
6295 end else if Node.Item[i].Count > 0 then begin
6296 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6297 if Found <> nil then begin
6308 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6312 SenderNode: TTreeNode;
6316 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6317 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6318 SenderNode := FavoriteTreeView.Items[i];
6322 SenderNode.Selected := False;
6324 FavoriteDragDrop( SenderNode, Source );
6329 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6330 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6332 if FDragWFirst = true then
6333 FDragWFirst := false;
6335 //
\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@
6336 if Button <> mbMiddle then begin
6337 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6338 if GikoSys.Setting.ListWidthState = glsMin then begin
6339 GikoDM.BrowserMaxAndFocusAction.Execute;
6342 if GikoSys.Setting.ListHeightState = glsMin then begin
6343 GikoDM.BrowserMaxAndFocusAction.Execute;
6349 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6350 Y: Integer; State: TDragState; var Accept: Boolean);
6353 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6357 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6361 if FDropSpaceNode <> nil then begin
6363 FDropSpaceNode.Delete;
6365 FDropSpaceNode := nil;
6367 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6368 FavoriteDM.Modified := true;
6374 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6376 if FListViewBackGroundColor <> value then begin
6377 FListViewBackGroundColor := value;
6378 ListView.Color := FListViewBackGroundColor;
6381 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6383 threadItem : TThreadItem;
6387 if FClickNode = nil then Exit;
6389 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6391 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6392 if threadItem = nil then
6394 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6396 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6398 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6399 if boardItem = nil then
6401 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6407 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6408 MousePos: TPoint; var Handled: Boolean);
6412 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6413 if BrowserTab.TabIndex <> idx then begin
6414 BrowserTab.TabIndex := idx;
6415 BrowserTab.OnChange(nil);
6419 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6421 ThreadItem: TThreadItem;
6427 boardPlugIn : TBoardPlugIn;
6429 if Number = 0 then Exit;
6430 ThreadItem := GetActiveContent(True);
6432 if ThreadItem <> nil then begin
6433 //if ThreadItem.IsBoardPlugInAvailable then begin
6434 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6435 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6436 //boardPlugIn := ThreadItem.BoardPlugIn;
6437 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6439 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6440 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6441 //
\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
6442 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6444 FileName := ThreadItem.FilePath;
6445 tmp := GikoSys.ReadThreadFile(FileName, Number);
6447 if tmp <> '' then begin
6448 THTMLCreate.DivideStrLine(tmp, @Res);
6450 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6451 if ReplaceTag then begin
6452 Header := CustomStringReplace(Header, '</b>', '',true);
6453 Header := CustomStringReplace(Header, '<b>', '',true);
6454 Header := CustomStringReplace(Header, '<br>', '',true);
6455 Header := DeleteFontTag(Header);
6457 //if ThreadItem.IsBoardPlugInAvailable then begin
6458 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6459 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6460 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6462 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6463 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6464 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6465 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6468 Body := CustomStringReplace(Body, '</a>', '',true);
6470 Body := HTMLCreater.DeleteLink(Body);
6471 if ReplaceTag then begin
6472 Body := CustomStringReplace(Body, '<', '<');
6473 Body := CustomStringReplace(Body, '>', '>');
6474 Body := CustomStringReplace(Body, '"', '"');
6475 Body := CustomStringReplace(Body, '&', '&');
6476 //Body := CustomStringReplace(Body, ' ', ' ');
6479 Header := Header + Body;
6481 Clipboard.SetTextBuf( PChar(Header) );
6487 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6489 AddRoundNameMenu(dummy1);
6490 AddMenuSameBoardThread;
6492 //!
\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Á
6493 procedure TGikoForm.AddMenuSameBoardThread;
6498 SameBoardThreadItem.Clear;
6499 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6500 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6501 if (FActiveContent.Thread.ParentBoard =
6502 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6503 //
\8e©
\95ª
\82Í
\8aO
\82·
6504 if FActiveContent.Thread <>
6505 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6506 Item := TMenuItem.Create(Self);
6507 Item.Caption := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.Title;
6508 Item.OnClick := SameBoardThreadSubItemOnClick;
6509 SameBoardThreadItem.Add(Item);
6513 //
\89½
\82à
\96³
\82¢
\82È
\82ç
\8eg
\97p
\82Å
\82«
\82È
\82¢
\82æ
\82¤
\82É
\82·
\82é
6514 SameBoardThreadItem.Enabled := SameBoardThreadItem.Count > 0;
6516 //!
\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
6517 procedure TGikoForm.SameBoardThreadSubItemOnClick(Sender: TObject);
6520 MenuItem: TMenuItem;
6522 if Sender is TMenuItem then begin
6525 MenuItem := TMenuItem(Sender);
6526 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6527 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6528 if (FActiveContent.Thread.ParentBoard =
6529 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6530 if FActiveContent.Thread <>
6531 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6532 if (SameBoardThreadItem.Items[j] = MenuItem) then begin
6533 MoveToURL( TBrowserRecord(BrowserTab.Tabs.Objects[i])
6545 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6547 FavoriteDM.URLReplace(oldURLs, newURLs);
6550 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6552 RoundList.URLReplace(oldURLs, newURLs);
6555 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6557 Filename = 'tab.sav';
6558 bFilename = '~tab.sav';
6564 oldBoardName: string;
6566 newBoardName: string;
6567 TabList: TStringList;
6570 if oldURLs.Count <> newURLs.Count then begin
6573 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6574 TabList := TStringList.Create;
6576 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6578 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6579 //
\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
6580 for i := 0 to oldURLs.Count - 1 do begin
6581 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6582 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6583 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6584 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6585 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6586 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6588 for j := 0 to TabList.Count - 1 do begin
6589 tempString := TabList[j];
6590 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6591 tempString := StringReplace(tempString, oldHost, newHost,[]);
6592 TabList[j] := tempString;
6596 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6598 if FileExists( GikoSys.GetAppDir + Filename) then begin
6599 if FileExists( GikoSys.GetAppDir + bFilename) then
6600 DeleteFile(GikoSys.GetAppDir + bFilename);
6602 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6603 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6606 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6614 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6615 procedure TGikoForm.OnMinimize;
6617 doc: IHTMLDocument2;
6619 if FActiveContent <> nil then begin
6620 FIsMinimize := mtMinimizing;
6621 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6622 if Assigned(doc) then begin
6623 FActiveContent.Thread.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
6628 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6629 procedure TGikoForm.OnMinimized;
6631 FIsMinimize := mtMinimized;
6635 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6637 CoolBarResized( Sender, BrowserCoolBar );
6640 // *************************************************************************
6641 // ExternalBoardPlugInMain
6642 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6643 // *************************************************************************
6644 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6647 boardPlugIn : TBoardPlugIn;
6650 if not (Sender is TMenuItem) then
6653 item := TMenuItem( Sender );
6654 if not Assigned( Pointer( item.Tag ) ) then
6657 //
\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·
6658 boardPlugIn := TBoardPlugIn( item.Tag );
6659 boardPlugIn.PlugInMenu( item.Handle );
6662 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6663 procedure TGikoForm.TreeClick( Node : TTreeNode );
6669 if FTreeType = gttHistory then begin
6671 if TObject( Node.Data ) is TFavoriteThreadItem then
6672 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6673 FavoriteClick( Node );
6676 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6677 if ActiveList = Node.Data then
6680 ActiveListColumnSave;
6682 if TObject(Node.Data) is TBBS then begin
6683 SetActiveList(Node.data);
6684 end else if TObject(Node.Data) is TCategory then begin
6685 SetActiveList(Node.data);
6686 end else if TObject(Node.Data) is TBoard then begin
6687 if not TBoard(Node.Data).IsThreadDatRead then begin
6688 Screen.Cursor := crHourGlass;
6690 if not TBoard(Node.Data).IsThreadDatRead then
6691 GikoSys.ReadSubjectFile(Node.Data);
6693 Screen.Cursor := crDefault;
6696 Sort.SetSortDate(Now());
6697 SetActiveList(Node.data);
6700 if TObject( Node.Data ) is TBoard then begin // not TCategory
6701 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6702 if GikoSys.Setting.ListWidthState = glsMax then begin
6703 GikoDM.BrowserMinAction.Execute;
6704 if GikoForm.Visible then
6708 if GikoSys.Setting.ListHeightState = glsMax then begin
6709 GikoDM.BrowserMinAction.Execute;
6710 if GikoForm.Visible then
6718 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6719 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6722 ThreadItem : TThreadItem;
6723 shiftDown : Boolean;
6726 if Node = nil then Exit;
6728 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6730 if FTreeType = gtt2ch then begin
6731 if not (TObject(Node.Data) is TBoard) then Exit;
6732 Board := TBoard(Node.Data);
6733 DownloadList(Board, shiftDown);
6734 end else if FTreeType = gttHistory then begin
6735 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6736 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6737 DownloadContent(ThreadItem, shiftDown);
6741 // *************************************************************************
6742 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82ÌKeyDown
\83C
\83x
\83\93\83g
6743 // *************************************************************************
6744 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6745 Shift: TShiftState);
6747 if Key = VK_BACK then begin
6748 // UpFolderButtonClick(Sender);
6749 end else if Key = VK_SPACE then begin
6750 TreeDoubleClick( TreeView.Selected );
6751 end else if Key = VK_RETURN then begin
6752 TreeClick( TreeView.Selected );
6753 //
\97\9a\97ð
\82Ì
\8fê
\8d\87\81A
\8fÁ
\82³
\82ê
\82Ä
\82¢
\82é
\82Ì
\82Å
\83`
\83F
\83b
\83N
\82·
\82é
6754 if (TreeView.Selected <> nil) then begin
6755 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6759 //!
\82¨
\8bC
\82É
\93ü
\82è
\82ÌMouseDown
\83C
\83x
\83\93\83g
6760 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6761 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6763 favItem : TTreeNode;
6764 favThreadItem : TFavoriteThreadItem;
6770 if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6771 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6772 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6773 rect := FavoriteTreeView.Selected.DisplayRect(true);
6774 //
\83A
\83C
\83R
\83\93\95ª
\8d¶
\82É
\82¸
\82ç
\82·
6775 if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
6776 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6777 if ssDouble in Shift then begin
6778 FClickNode := FavoriteTreeView.Selected;
6779 GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6783 TObject(FavoriteTreeView.Selected));
6790 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6791 if favItem = nil then Exit;
6793 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6794 favThreadItem := TFavoriteThreadItem( favItem.Data );
6795 if favThreadItem.Item <> nil then
6796 InsertBrowserTab( favThreadItem.Item, False );
6803 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6806 if FIsIgnoreResize <> rtNone then
6809 if GikoSys.Setting.ListOrientation = gloVertical then begin
6810 if GikoSys.Setting.ListHeightState = glsMin then begin
6811 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6812 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6818 procedure TGikoForm.OnResized;
6820 doc : IHTMLDocument2;
6822 FOldFormWidth := Width;
6823 FIsIgnoreResize := rtNone;
6828 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6829 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6834 //
\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)
6835 if FActiveContent <> nil then begin
6836 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6837 (doc.body as IHTMLElement2).ScrollTop := FActiveContent.Thread.ScrollTop;
6839 FIsMinimize := mtNone;
6844 // *************************************************************************
6845 //!
\83X
\83\8c\83b
\83h
\83u
\83\89\83E
\83U
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6846 // *************************************************************************
6847 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6850 doc : IHTMLDocument2;
6851 FOleInPlaceActiveObject: IOleInPlaceActiveObject;
6856 if not Assigned(FActiveContent) then
6858 if not Assigned(FActiveContent.Browser) then
6862 FOleInPlaceActiveObject := FActiveContent.Browser.ControlInterface as IOleInPlaceActiveObject;
6863 FOleInPlaceActiveObject.OnFrameWindowActivate(True);
6866 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6867 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6869 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
6870 if not Assigned(doc) then
6873 e := doc.elementFromPoint(p.x, p.y);
6874 if not Assigned(e) then
6877 if (e.className = 'date') or (e.id = 'date') then begin
6878 AID := GikoSys.ExtructResID(e.innerText);
6879 ShowSameIDAncher(AID);
6884 procedure TGikoForm.ShowSameIDAncher(const AID: String);
6888 numbers : TStringList;
6891 numbers := TStringList.Create;
6894 GikoSys.GetSameIDRes(AID, FActiveContent.Thread, numbers);
6896 if not (GikoSys.Setting.LimitResCountMessage) then begin
6898 end else if (numbers.Count > LIMIT) then begin
6899 if (GikoUtil.MsgBox(Handle,
6900 IntToStr(LIMIT) + '
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6901 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6902 MB_YESNO or MB_ICONQUESTION) = ID_YES) then begin
6906 FActiveContent.IDAnchorPopup(
6907 GikoSys.CreateResAnchor(numbers, FActiveContent.Thread, limited));
6912 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
6913 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
6915 SelectTimer.Interval := 0;
6916 if not (ListView.Selected = nil) then
6917 if( FActiveContent = nil) or
6918 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
6923 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
6924 procedure TGikoForm.ActiveListColumnSave;
6926 ActivListObj : TObject;
6927 i, id, idx : Integer;
6928 BBSOrder : TGikoBBSColumnList;
6929 CategoryOrder : TGikoCategoryColumnList;
6930 BoardOrder : TGikoBoardColumnList;
6933 ActivListObj := ActiveList;
6934 if ActivListObj is TBBS then begin
6935 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6936 BBSOrder := TGikoBBSColumnList.Create;
6938 for i := 0 to ListView.Columns.Count - 1 do begin
6939 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6940 idx := ListView.Column[ i ].Tag;
6941 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
6942 BBSOrder.Add( TGikoBBSColumnID( id ) );
6943 //
\95\9d\82Ì
\95Û
\91¶
6944 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
6946 for i := 0 to ListView.Columns.Count - 1 do
6947 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6948 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
6952 end else if ActivListObj is TCategory then begin
6953 //=====
\94Â
\83\8a\83X
\83g =====
6954 CategoryOrder := TGikoCategoryColumnList.Create;
6956 for i := 0 to ListView.Columns.Count - 1 do begin
6957 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6958 idx := ListView.Column[ i ].Tag;
6959 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
6960 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
6961 //
\95\9d\82Ì
\95Û
\91¶
6962 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
6964 for i := 0 to ListView.Columns.Count - 1 do
6965 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6966 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
6970 end else if ActivListObj is TBoard then begin
6971 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6972 BoardOrder := TGikoBoardColumnList.Create;
6974 for i := 0 to ListView.Columns.Count - 1 do begin
6975 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6976 idx := ListView.Column[ i ].Tag;
6977 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
6978 BoardOrder.Add( TGikoBoardColumnID( id ) );
6979 //
\95\9d\82Ì
\95Û
\91¶
6980 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
6982 for i := 0 to ListView.Columns.Count - 1 do
6983 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6984 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
6992 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
6993 Column: TListColumn; Point: TPoint);
6999 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
7000 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
7001 ListColumnPopupMenu.Items.Items[ i ].Free;
7003 //
\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¢)
7004 if TObject( FActiveList ) is TBBS then begin
7006 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
7007 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
7008 item := TMenuItem.Create( ListColumnPopupMenu );
7009 item.Caption := GikoBBSColumnCaption[ i ];
7011 item.OnClick := ListColumnPopupMenuOnClick;
7012 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
7013 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
7014 item.Checked := True;
7018 ListColumnPopupMenu.Items.Add( item );
7021 end else if TObject( FActiveList ) is TCategory then begin
7023 //=====
\94Â
\83\8a\83X
\83g =====
7024 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
7025 item := TMenuItem.Create( ListColumnPopupMenu );
7026 item.Caption := GikoCategoryColumnCaption[ i ];
7028 item.OnClick := ListColumnPopupMenuOnClick;
7029 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
7030 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
7031 item.Checked := True;
7035 ListColumnPopupMenu.Items.Add( item );
7038 end else if TObject( FActiveList ) is TBoard then begin
7040 //=====
\83X
\83\8c\83\8a\83X
\83g =====
7041 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
7042 item := TMenuItem.Create( ListColumnPopupMenu );
7043 item.Caption := GikoBoardColumnCaption[ i ];
7045 item.OnClick := ListColumnPopupMenuOnClick;
7046 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
7047 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
7048 item.Checked := True;
7052 ListColumnPopupMenu.Items.Add( item );
7057 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
7058 Point := ListView.ClientToScreen( Point );
7059 if ListColumnPopupMenu.Items.Count > 0 then
7060 ListColumnPopupMenu.Popup( Point.X, Point.Y );
7064 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
7065 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
7072 if not (Sender is TMenuItem) then
7075 ActiveListColumnSave;
7076 item := TMenuItem( Sender );
7078 if TObject( FActiveList ) is TBBS then
7079 orderList := GikoSys.Setting.BBSColumnOrder
7080 else if TObject( FActiveList ) is TCategory then
7081 orderList := GikoSys.Setting.CategoryColumnOrder
7082 else if TObject( FActiveList ) is TBoard then
7083 orderList := GikoSys.Setting.BoardColumnOrder
7087 if item.Checked then begin
7088 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
7089 for i := orderList.Count - 1 downto 0 do begin
7090 if Integer( orderList[ i ] ) = item.Tag then begin
7091 orderList.Delete( i );
7096 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
7097 orderList.Add( Pointer( item.Tag ) );
7100 SetActiveList( FActiveList );
7104 procedure TGikoForm.OnGestureStart(Sender: TObject);
7109 procedure TGikoForm.OnGestureMove(Sender: TObject);
7116 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
7118 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
7119 s := MouseGesture.GetGestureStr;
7121 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7122 if Action <> nil then
7123 ActStr := '
\81i' + Action.Caption + '
\81j';
7124 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
7125 StatusBar.Panels[1].Text := s;
7128 procedure TGikoForm.OnGestureEnd(Sender: TObject);
7133 s := MouseGesture.GetGestureStr;
7135 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7136 if Action <> nil then
7138 StatusBar.Panels[1].Text := '';
7141 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
7142 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
7144 ThreadItem: TThreadItem;
7146 DefaultDraw := true;
7147 if TObject(Item.Data) is TThreadItem then begin
7148 ThreadItem := TThreadItem(Item.Data);
7149 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
7150 ListView.Canvas.Brush.Color := FOddColor;
7151 //
\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
7152 if (GikoSys.Setting.UnFocusedBold) and
7153 (Item.Selected) and (not ListView.Focused) then begin
7154 ListView.Canvas.Font.Style := [fsBold];
7157 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
7160 if ThreadItem.UnRead then
7161 ListView.Canvas.Font.Style := [fsBold];
7166 procedure TGikoForm.FormActivate(Sender: TObject);
7168 if GikoSys.Setting.GestureEnabled then begin
7169 GikoSys.Setting.Gestures.ClearGesture;
7170 GikoSys.Setting.Gestures.LoadGesture(
7171 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
7172 MouseGesture.UnHook;
7173 MouseGesture.OnGestureStart := OnGestureStart;
7174 MouseGesture.OnGestureMove := OnGestureMove;
7175 MouseGesture.OnGestureEnd := OnGestureEnd;
7176 MouseGesture.SetHook(Handle);
7178 //MouseGesture.UnHook;
7179 MouseGesture.OnGestureStart := nil;
7180 MouseGesture.OnGestureMove := nil;
7181 MouseGesture.OnGestureEnd := nil;
7185 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
7187 if (FIsMinimize <> mtMinimizing) then begin
7188 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
7189 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
7193 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
7198 affectedBand : TCoolBand;
7201 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
7202 FIsIgnoreResize := rtResizing;
7203 PostMessage( Handle, USER_RESIZED, 0, 0 );
7205 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
7206 if CoolBar = MainCoolBar then begin
7207 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
7208 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7209 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7210 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7211 GikoSys.Setting.MainCoolSet[i] := CoolSet;
7213 end else if CoolBar = ListCoolBar then begin
7214 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
7215 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7216 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7217 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7218 GikoSys.Setting.ListCoolSet[i] := CoolSet;
7220 end else if CoolBar = BrowserCoolBar then begin
7221 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
7222 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7223 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7224 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7225 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
7228 if not (Sender is TToolBar) or (CoolBar = nil) then
7230 toolbar := TToolBar( Sender );
7231 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
7232 affectedBand := nil;
7233 for i := CoolBar.Bands.Count - 1 downto 0 do begin
7234 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
7235 band := CoolBar.Bands[ i ];
7236 if band.Break or (i = 0) then begin
7237 if i + 1 < CoolBar.Bands.Count then
7238 if not CoolBar.Bands[ i + 1 ].Break then
7239 affectedBand := CoolBar.Bands[ i + 1 ];
7242 affectedBand := CoolBar.Bands[ i - 1 ];
7247 //
\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·
7248 if CoolBar = MainCoolBar then begin
7249 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
7250 coolSet.FCoolWidth := toolbar.Width + 25;
7251 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
7252 if affectedBand <> nil then begin
7253 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
7254 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7255 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
7257 end else if CoolBar = ListCoolBar then begin
7258 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
7259 coolSet.FCoolWidth := toolbar.Width + 25;
7260 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
7261 if affectedBand <> nil then begin
7262 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
7263 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7264 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
7266 end else if CoolBar = BrowserCoolBar then begin
7267 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
7268 coolSet.FCoolWidth := toolbar.Width + 25;
7269 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
7270 if affectedBand <> nil then begin
7271 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
7272 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7273 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
7280 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
7282 CoolBarResized( Sender, MainCoolBar );
7285 procedure TGikoForm.ListToolBarResize(Sender: TObject);
7287 CoolBarResized( Sender, ListCoolBar );
7290 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
7292 CoolBarResized( Sender, BrowserCoolBar );
7295 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
7296 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
7298 doc : IHTMLDocument2;
7299 ThreadItem : TThreadItem;
7300 ReadList : TStringList;
7301 wordCount : TWordCount;
7303 if not Assigned(FActiveContent) then
7305 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7306 if not Assigned(doc) then
7309 ThreadItem := GetActiveContent(True);
7310 ReadList := TStringList.Create;
7311 wordCount := TWordCount.Create;
7313 ThreadItem.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
7314 {$IFDEF SPAM_FILTER_ENABLED}
7315 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7316 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7317 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
7318 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7319 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7321 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7322 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7327 FActiveContent.Repaint := true;
7328 if ThreadItem <> nil then
7329 InsertBrowserTab( ThreadItem, True );
7331 //
\93¯
\88êID
\82ðNG
\83\8f\81[
\83h
\82É
\93o
\98^
7332 procedure TGikoForm.AddIDtoNGWord(invisible : boolean);
7334 doc : IHTMLDocument2;
7335 ThreadItem : TThreadItem;
7337 {$IFDEF SPAM_FILTER_ENABLED}
7339 ReadList : TStringList;
7340 wordCount : TWordCount;
7342 id, dateStr: String;
7344 No := KokoPopupMenu.Tag;
7345 if No = 0 then Exit;
7346 ThreadItem := GikoForm.KokoPopupThreadItem;
7347 if ThreadItem = nil then Exit;
7349 id := GikoSys.GetResID(No, ThreadItem);
7350 if (id <> '') and (not IsNoValidID(id)) then begin
7351 //
\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Á
7352 DateTimeToString(dateStr, 'yyyymmdd', Now);
7353 id := id + #9'>>add ' + dateStr + ',' + ThreadItem.Title;
7354 if (GikoSys.FAbon.AddToken(id, invisible)) then begin
7355 GikoSys.FAbon.ReLoadFromNGwordFile;
7356 FActiveContent.Repaint := True;
7359 ShowMessage('ID
\82ð
\8eæ
\93¾
\82Å
\82«
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B');
7361 {$IFDEF SPAM_FILTER_ENABLED}
7362 body := TStringList.Create;
7364 GikoSys.GetSameIDRes(id, ThreadItem, body);
7365 ReadList := TStringList.Create;
7366 wordCount := TWordCount.Create;
7368 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7369 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7370 for i := 0 to body.Count - 1 do begin
7371 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7372 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7373 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7383 if (FActiveContent.Repaint) then begin
7384 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7386 if not Assigned(doc) then
7388 ThreadItem.ScrollTop := (doc.body as IHTMLElement2).ScrollTop;
7389 if ThreadItem <> nil then
7390 InsertBrowserTab( ThreadItem, True );
7394 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
7395 procedure TGikoForm.IndividualAbonID(Atype : Integer);
7397 ThreadItem : TThreadItem;
7400 ReadList : TStringList;
7401 wordCount : TWordCount;
7403 No := KokoPopupMenu.Tag;
7404 if No = 0 then Exit;
7405 ThreadItem := GikoForm.KokoPopupThreadItem;
7406 if ThreadItem = nil then Exit;
7407 body := TStringList.Create;
7409 GikoSys.GetSameIDRes(No, ThreadItem, body);
7411 ReadList := TStringList.Create;
7412 wordCount := TWordCount.Create;
7414 ThreadItem.ScrollTop := FActiveContent.Browser.OleObject.Document.Body.ScrollTop;
7415 {$IFDEF SPAM_FILTER_ENABLED}
7416 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7417 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7419 for i := 0 to body.Count - 1 do begin
7420 {$IFDEF SPAM_FILTER_ENABLED}
7421 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7422 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7423 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7425 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7426 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7432 FActiveContent.Repaint := true;
7433 if ThreadItem <> nil then
7434 InsertBrowserTab( ThreadItem, True );
7441 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7443 firstElement: IHTMLElement;
7444 doc: IHTMLDocument2;
7447 doc := FActiveContent.Browser.ControlInterface.Document as IHTMLDocument2;
7448 if Assigned(doc) then
7449 firstElement := doc.all.item('idSearch', 0) as IHTMLElement;
7450 if Assigned(firstElement) then
7451 if firstElement.style.visibility <> 'hidden' then
7452 firstElement.style.visibility := 'hidden';
7457 procedure TGikoForm.RepaintAllTabsBrowser();
7460 ThreadItem: TThreadItem;
7462 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7463 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7465 ThreadItem := GetActiveContent;
7466 if ThreadItem <> nil then
7467 InsertBrowserTab( ThreadItem, True );
7471 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7472 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7473 Shift: TShiftState);
7475 //
\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Ì
7476 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7477 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7478 SelectTimer.Interval := 0;
7479 if not (GikoSys.Setting.BrowserTabVisible) then begin
7480 if (GetActiveList is TBoard) then begin
7481 //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
7482 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7483 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7484 (Key = VK_UP) or (Key = VK_DOWN)) then
7485 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7489 // *************************************************************************
7490 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7491 // *************************************************************************
7492 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7493 Node: TTreeNode; var AllowEdit: Boolean);
7495 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7496 FOrigenCaption := Node.Text;
7498 // *************************************************************************
7499 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7500 // *************************************************************************
7501 function TGikoForm.GetMainForm(): TComponent;
7503 Result := Application.MainForm;
7505 // *************************************************************************
7506 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7507 // *************************************************************************
7508 function TGikoForm.GetScreenCursor(): TCursor;
7510 Result := Screen.Cursor;
7512 // *************************************************************************
7513 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7514 // *************************************************************************
7515 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7517 if (Screen.Cursor <> Cursor) then
7518 Screen.Cursor := Cursor;
7520 // *************************************************************************
7521 //!
\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
7522 // *************************************************************************
7523 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7525 //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Ì
7526 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7527 if GikoDM.CabinetVisibleAction.Enabled then begin
7528 GikoDM.CabinetVisibleAction.Execute;
7531 // *************************************************************************
7532 //!
\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
7533 // *************************************************************************
7534 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7536 if GikoDM.FavoriteArrangeAction.Enabled then begin
7537 GikoDM.FavoriteArrangeAction.Execute;
7540 // *************************************************************************
7541 //!
\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
7542 // *************************************************************************
7543 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7544 var Handled: Boolean);
7548 //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ß
7549 if Self.Active then begin
7551 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7552 WM_KEYFIRST..WM_KEYLAST :
7554 //
\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ç
7555 if (Msg.message <> WM_KEYUP)
7556 and (Msg.message <> WM_CHAR)
7557 and (Msg.message <> WM_SYSKEYUP) then begin
7558 wmMsg.Msg := Msg.message;
7559 wmMsg.CharCode := Word(Msg.wParam);
7560 wmMsg.KeyData := Msg.lParam;
7561 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7562 Self.OnShortCut(wmMsg, Handled);
7567 // Explorer
\82ÌD&D
\82ð
\8eó
\82¯
\82é
\82Æ
\82Ì
\94ñ
\83A
\83N
\83e
\83B
\83u
7568 if Msg.message = WM_DROPFILES then begin
7569 AcceptDropFiles(Msg);
7574 // *************************************************************************
7575 //!
\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
7576 // *************************************************************************
7577 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7579 Application.ProcessMessages;
7580 if not Application.Terminated then begin
7581 if PreviewTimer.Enabled then
7582 PreviewTimer.Enabled := False;
7583 //
\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
7584 if (FResPopupBrowser <> nil) then
7585 FResPopupBrowser.Clear;
7587 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7588 if FPreviewBrowser <> nil then
7589 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7593 // *************************************************************************
7594 //!
\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
7595 // *************************************************************************
7596 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7601 if (Sender <> nil) then begin
7602 s := ' [' + Sender.ClassName + ']' + #13#10;
7604 s := ' [ Sender is nil ] ' + #13#10;
7607 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7609 // *************************************************************************
7610 //!
\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¬
7611 // *************************************************************************
7612 procedure TGikoForm.CreateControlThread();
7614 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7615 FControlThread := TThreadControl.Create(True);
7616 FControlThread.MaxThreadCount := 1;
7617 FControlThread.Resume;
7618 FControlThread.OnDownloadEnd := DownloadEnd;
7619 FControlThread.OnDownloadMsg := DownloadMsg;
7620 FControlThread.OnWork := Work;
7621 FControlThread.OnWorkBegin := WorkBegin;
7622 FControlThread.OnWorkEnd := WorkEnd;
7624 // *************************************************************************
7625 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7626 // *************************************************************************
7627 procedure TGikoForm.CreateBrowsers(count: Integer);
7630 newBrowser: TWebBrowser;
7632 BrowserNullTab := TBrowserRecord.Create;
7633 BrowserNullTab.Browser := Browser;
7634 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7636 FBrowsers := TList.Create;
7638 for i := 0 to count -1 do begin
7639 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7640 newBrowser := FBrowsers[FBrowsers.Count - 1];
7641 TOleControl(newBrowser).Parent := BrowserPanel;
7642 TOleControl(newBrowser).Align := alNone;
7643 TOleControl(newBrowser).Left := 0;
7644 TOleControl(newBrowser).Top := 0;
7645 newBrowser.RegisterAsDropTarget := False;
7646 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7647 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7648 newBrowser.OnEnter := BrowserEnter;
7649 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7650 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7651 newBrowser.Navigate(BLANK_HTML);
7652 ShowWindow(newBrowser.Handle, SW_HIDE);
7653 GikoSys.ShowRefCount('Browser' + IntToStr(i), newBrowser.ControlInterface);
7654 GikoSys.ShowRefCount('Document' + IntToStr(i), newBrowser.ControlInterface.Document);
7656 BrowserNullTab.Browser.BringToFront;
7657 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7659 //
\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Ì
7660 //
\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Å
7661 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7662 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7663 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7664 Application.ProcessMessages;
7667 // *************************************************************************
7668 //!
\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é
7669 // *************************************************************************
7670 procedure TGikoForm.SetSelectComboBox();
7672 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7675 ToolButton: TToolButton;
7677 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7678 SelectComboBoxPanel.Visible := False;
7680 for i := ListToolBar.ControlCount - 1 downto 0 do
7682 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7684 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7685 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7686 SelectComboBoxPanel.Parent := ListToolBar;
7687 SelectComboBoxPanel.Visible := True;
7689 SelectComboBox.Left := 0;
7690 SelectComboBox.Top := 0;
7691 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7692 SelectComboBox.Width := SelectComboBoxPanel.Width -
7693 SelectComboBoxSplitter.Width;
7695 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7696 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7697 if ToolButton = nil then begin
7698 ToolButton := TToolButton.Create(ListToolBar);
7699 ToolButton.Name := DUMMYCOMPNAME;
7701 ToolButton.Style := tbsSeparator;
7702 ToolButton.Width := 0;
7703 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7704 ListToolBar.InsertControl(ToolButton);
7705 ToolButton.Visible := False;
7707 //
\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·
7708 if (i + 1) < ListToolBar.ControlCount then
7709 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7710 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7711 ListToolBar.Controls[ i + 1 ].Visible := False;
7714 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7715 ListToolBar.Controls[ i ].Visible := False;
7723 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\83}
\83E
\83X
\83_
\83E
\83\93\83C
\83x
\83\93\83g
7724 procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7725 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7732 if (TreeView.Selected <> nil) and
7733 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7734 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
7735 rect := TreeView.Selected.DisplayRect(true);
7736 //
\83A
\83C
\83R
\83\93\95ª
\82¾
\82¯
\8d¶
\82É
\82¸
\82ç
\82·
7737 if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
7738 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7739 //
\83N
\83\8a\83b
\83N
\82Æ
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82ð
\83R
\83R
\82Å
\94»
\92è
7740 if ssDouble in Shift then begin
7741 TreeDoubleClick( TreeView.Selected );
7743 TreeClick(TreeView.Selected);
7750 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
7751 procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7755 if ActionList <> nil then begin
7756 SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7758 for i := 0 to ActionList.ActionCount - 1 do begin
7760 FActionListGroupIndexes[i] :=
7761 TCustomAction(ActionList.Actions[i]).GroupIndex;
7762 TCustomAction(ActionList.Actions[i]).GroupIndex
7765 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7771 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
7772 procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7776 if ActionList <> nil then begin
7777 if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7778 for i := 0 to ActionList.ActionCount - 1 do begin
7780 TCustomAction(ActionList.Actions[i]).GroupIndex
7781 := FActionListGroupIndexes[i];
7783 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7789 //!
\82±
\82Ì
\83\8c\83X
\82ÌURL
\8eæ
\93¾
7790 procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
7794 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
7795 procedure TGikoForm.RefreshListView(Thread: TThreadItem);
7797 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
7798 if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin
7803 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
7804 MousePos: TPoint; var Handled: Boolean);
7807 coolBar: TGikoCoolBar;
7810 if (Sender <> nil) and (Sender is TGikoCoolBar) then begin
7811 coolBar := TGikoCoolBar(Sender);
7812 if (coolBar = MainCoolBar) then begin
7813 FToolBarSettingSender := tssMain;
7814 end else if (coolBar = ListCoolBar) then begin
7815 FToolBarSettingSender := tssList;
7816 end else if (coolBar = BrowserCoolBar) then begin
7817 FToolBarSettingSender := tssBrowser;
7819 FToolBarSettingSender := tssNone;
7821 pos := coolBar.ClientToScreen( MousePos );
7822 MainCoolBarPopupMenu.Popup( pos.X, pos.Y );
7827 procedure TGikoForm.TaskTrayIconMessage(var Msg: TMsg);
7831 //
\8d¶
\83N
\83\8a\83b
\83N
\82È
\82ç
\95\9c\8c³
\82·
\82é
7832 if (Msg.wParam = WM_LBUTTONUP) then begin
7834 end else if (Msg.wParam=WM_RBUTTONUP) then begin
7835 //
\89E
\83N
\83\8a\83b
\83N
\82È
\82ç
\8fI
\97¹
\82·
\82é
7837 SetForegroundWindow ( Self.Handle );
7838 TaskTrayPopupMenu.Popup ( p.X, p.Y );
7841 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
7842 procedure TGikoForm.StoredTaskTray;
7845 if (FIconData.uID = 0) then begin
7846 FIconData.cbSize := SizeOf(TNotifyIconData);
7847 FIconData.uID := Self.Handle;
7848 FIconData.Wnd := Handle;
7849 FIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
7850 FIconData.uCallbackMessage := USER_TASKTRAY;
7851 FIconData.hIcon := Application.Icon.Handle; {
\83A
\83C
\83R
\83\93\8ew
\92è}
7852 FIconData.szTip := '
\83M
\83R
\83i
\83r'; {
\83q
\83\93\83g
\95¶
\8e\9a\97ñ}
7853 Shell_NotifyIcon(NIM_ADD, @FIconData);
7854 ShowEditors(SW_HIDE);
7855 ShowWindow(Self.Handle, SW_HIDE);
7860 //!
\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¦
7861 procedure TGikoForm.UnStoredTaskTray;
7865 Shell_NotifyIcon(NIM_DELETE, @FIconData);
7866 SetForegroundWindow(Application.Handle);
7871 // Action
\82©
\82ç
\8ai
\94[
\82µ
\82½
\82Æ
\82«
\82ÍTag
\82Ì
\92l
\82Í0
\88È
\8aO
7872 if (GikoDM.StoredTaskTrayAction.Tag = 0) then begin
7873 ShowWindow(Self.Handle, SW_RESTORE);
7875 ShowWindow(Self.Handle, SW_SHOW);
7877 ShowEditors(SW_SHOW);
7878 GikoDM.StoredTaskTrayAction.Tag := 0;
7882 \brief
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
7883 \param nCmdShow Windows.ShowWindow
\82É
\91\97\82é
\83p
\83\89\83\81\81[
\83^
\82Æ
\93¯
\82¶
7885 procedure TGikoForm.ShowEditors(nCmdShow: Integer);
7889 //
\83\8c\83X
\83G
\83f
\83B
\83^
\82ð
\92T
\82·
7890 for i := 0 to Screen.CustomFormCount - 1 do begin
7891 if TObject(Screen.CustomForms[i]) is TEditorForm then
7892 ShowWindow(Screen.CustomForms[i].Handle, nCmdShow);
7896 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83u
\83\89\83E
\83U
\8dì
\90¬
7897 procedure TGikoForm.CreateResPopupBrowser;
7899 if (FResPopupBrowser = nil) then begin
7900 FResPopupBrowser := TResPopupBrowser.Create(BrowserPanel);
7903 //! ListView
\82ÌD&D
\8eó
\82¯
\8eæ
\82è
7904 procedure TGikoForm.AcceptDropFiles(var Msg: TMsg);
7906 FileName: Array[0..MAX_PATH] of Char;
7910 datList: TStringList;
7912 //
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\94Â
\82Ì
\82Æ
\82«
\88È
\8aO
\82Í
\8b\91\94Û
7913 if GetActiveList is TBoard then begin
7914 Board := TBoard(GetActiveList);
7915 if MsgBox(Handle, Board.Title
7916 + '
\94Â
\82É
\93ü
\82ê
\82Ä
\82¢
\82¢
\82Å
\82·
\82©
\81H', '
\83M
\83R
\83i
\83r', MB_YESNO or MB_ICONQUESTION) = IDYES then begin
7917 //
\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
7918 datList := TStringList.Create;
7920 Cnt := DragQueryFile(Msg.WParam, $FFFFFFFF, FileName, SizeOf(FileName));
7921 for K := 0 to Cnt - 1 do begin
7922 DragQueryFile(Msg.WParam, K, FileName, SizeOf(FileName));
7923 // 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
7924 //
\83t
\83@
\83C
\83\8b\82Ì
\83`
\83F
\83b
\83N
7925 if (isValidFile(FileName)) then begin
7926 LogFolder := ExtractFilePath(Board.FilePath);
7927 if (FileExists( LogFolder + ExtractFileName(FileName))) then begin
7928 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);
7930 if (not DirectoryExists(LogFolder)) then begin
7931 if (not GikoSys.ForceDirectoriesEx(LogFolder) ) then begin
7932 GikoUtil.MsgBox(Handle, LogFolder + '
\82Ì
\90¶
\90¬
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7935 if (not Windows.CopyFile(FileName, PChar(LogFolder + ExtractFileName(FileName)), true)) then begin
7936 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);
7938 datList.Add(ExtractFileName(FileName));
7943 DragFinish(Msg.WParam);
7944 if (datList.Count > 0) then begin
7945 GikoSys.AddOutofIndexDat(Board, datList, False);
7946 ShowMessage(IntToStr(datList.Count) + '
\8cÂ
\82Ìdat
\83t
\83@
\83C
\83\8b\82ª
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82µ
\82½
\81B' );
7947 if GikoForm.TreeView.Visible then begin
7948 GikoForm.TreeView.Refresh;
7950 if GikoForm.ListView.Visible then begin
7954 ShowMessage('
\88ê
\82Â
\82à
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B' );
7962 ShowMessage('
\94Â
\82ð
\95\
\8e¦
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
7965 procedure TGikoForm.UpdateListView();
7967 //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
7968 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
7969 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
7970 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
7971 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
7972 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
7973 case GikoForm.ViewType of
7974 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
7975 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
7976 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
7977 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
7978 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
7979 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
7984 //!
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
7985 function TGikoForm.isValidFile(FileName: String) : boolean;
7990 //
\91¶
\8dÝ
\82·
\82é
\82©
\81A
\8ag
\92£
\8eqdat
\81A
\83t
\83@
\83C
\83\8b\96¼
7991 if ( not FileExists(FileName) ) then begin
7993 GikoUtil.MsgBox(Handle, FileName + '
\82Í
\91¶
\8dÝ
\82µ
\82Ü
\82¹
\82ñ
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7994 end else if (ExtractFileExt(ExtractFileName(FileName)) <> '.dat' ) then begin
7996 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);
7998 //
\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
8000 dt := GikoSys.GetCreateDateFromName(ExtractFileName(FileName));
8001 if ((UnixToDateTime(ZERO_DATE) + OffsetFromUTC) = dt) then begin
8003 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);
8007 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);
8012 procedure TGikoForm.ResPopupClearTimerTimer(Sender: TObject);
8014 ResPopupClearTimer.Enabled := False;
8015 if ResPopupClearTimer.Tag = 0 then begin
8016 FResPopupBrowser.Clear;
8018 FResPopupBrowser.CurrentBrowser.ChildClear;
8021 //!
\83A
\83C
\83R
\83\93\93Ç
\82Ý
\8d\9e\82Ý
8022 procedure TGikoForm.LoadIcon();
8024 ICONI6 = 'icon16.bmp';
8025 ICON32 = 'icon32.bmp';
8026 ICONSTAT = 'state_icon.bmp';
8027 ICONMES = 'message_icon.bmp';
8028 ICONADD = 'address_icon.bmp';
8029 ICONITEM = 'item_icon.bmp';
8030 ICONTOOL = 'hottoolbar_icon.bmp';
8032 if FileExists(GikoSys.Setting.GetAppDir + ICONI6) then begin
8034 ItemIcon16.FileLoad(rtBitmap,
8035 GikoSys.Setting.GetAppDir + ICONI6, clPurple);
8037 if FileExists(GikoSys.Setting.GetAppDir + ICON32) then begin
8039 ItemIcon32.FileLoad(rtBitmap,
8040 GikoSys.Setting.GetAppDir + ICON32, clPurple);
8042 if FileExists(GikoSys.Setting.GetAppDir + ICONSTAT) then begin
8043 StateIconImageList.Clear;
8044 StateIconImageList.FileLoad(rtBitmap,
8045 GikoSys.Setting.GetAppDir + ICONSTAT, clPurple);
8047 if FileExists(GikoSys.Setting.GetAppDir + ICONMES) then begin
8048 MessageImageList.Clear;
8049 MessageImageList.FileLoad(rtBitmap,
8050 GikoSys.Setting.GetAppDir + ICONMES, clPurple);
8052 if FileExists(GikoSys.Setting.GetAppDir + ICONADD) then begin
8053 AddressImageList.Clear;
8054 AddressImageList.FileLoad(rtBitmap,
8055 GikoSys.Setting.GetAppDir + ICONADD, clPurple);
8057 if FileExists(GikoSys.Setting.GetAppDir + ICONITEM) then begin
8058 ItemImageList.Clear;
8059 ItemImageList.FileLoad(rtBitmap,
8060 GikoSys.Setting.GetAppDir + ICONITEM, clPurple);
8062 if FileExists(GikoSys.Setting.GetAppDir + ICONTOOL) then begin
8063 HotToobarImageList.Clear;
8064 HotToobarImageList.FileLoad(rtBitmap,
8065 GikoSys.Setting.GetAppDir + ICONTOOL, clPurple);