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;
28 TGikoTreeType = (gttNone, gtt2ch, gttHistory, gttFavorite);
29 TToolBarSettingSenderType = (tssNone, tssMain, tssList, tssBrowser);
30 TMinimizeType = (mtNone, mtMinimizing, mtMinimized);
31 TResizeType = (rtNone, rtResizing);
33 // TBrowserRecord = class;
35 TGikoForm = class(TForm)
36 StatusBar: TStatusBar;
39 TreeSplitter: TSplitter;
42 ThreadMainPanel: TPanel;
43 ListSplitter: TSplitter;
45 ListView: TGikoListView;
49 MessageHideButton: TSpeedButton;
50 MessageListView: TListView;
51 MessageSplitter: TSplitter;
53 CabinetCloseSpeedButton: TSpeedButton;
55 CabinetSelectToolButton: TToolButton;
56 HistoryToolBar: TToolBar;
57 HistoryShowToolButton: TToolButton;
58 HistoryAllClearToolButton: TToolButton;
59 ItemIcon16: TImageList;
60 ItemIcon32: TImageList;
61 HotToobarImageList: TImageList;
62 ItemImageList: TImageList;
65 DeleteMenu: TMenuItem;
67 KidokuMenu: TMenuItem;
68 MidokuMenu: TMenuItem;
69 AllSelectMenu: TMenuItem;
71 StdToolBarMenu: TMenuItem;
72 CabinetMenu: TMenuItem;
75 CabinetVisibleMenu: TMenuItem;
76 MessageMenu: TMenuItem;
77 StatusBarMenu: TMenuItem;
79 LargeIconMenu: TMenuItem;
80 SmallIconMenu: TMenuItem;
82 DetailMenu: TMenuItem;
87 OptionMenu: TMenuItem;
92 BrowserPopupMenu: TPopupMenu;
93 ShowThreadMenu: TMenuItem;
94 ShowBoardMenu: TMenuItem;
95 ListIconPopupMenu: TPopupMenu;
96 LargeIconPMenu: TMenuItem;
97 SmallIconPMenu: TMenuItem;
99 DetailPMenu: TMenuItem;
100 ClosePopupMenu: TPopupMenu;
101 CloseMenu: TMenuItem;
111 ListPopupMenu: TPopupMenu;
112 ListRoundPMenu: TMenuItem;
113 ListReservPMenu: TMenuItem;
115 ItemRoundPMenu: TMenuItem;
117 KidokuPMenu: TMenuItem;
118 MidokuPMenu: TMenuItem;
119 AllSelectPMenu: TMenuItem;
120 UrlCopyPMenu: TMenuItem;
122 DeletePMenu: TMenuItem;
124 ViewPMenu: TMenuItem;
125 LargeIconLPMenu: TMenuItem;
126 SmallIconLPMenu: TMenuItem;
127 ListLPMenu: TMenuItem;
128 DetailLPMenu: TMenuItem;
146 KokoPopupMenu: TPopupMenu;
147 KokomadePMenu: TMenuItem;
149 MenuItem1: TMenuItem;
150 MenuItem2: TMenuItem;
151 BrowserTabPopupMenu: TPopupMenu;
156 TreePopupMenu: TPopupMenu;
157 TreeSelectThreadPupupMenu: TMenuItem;
158 TreeSelectBoardPupupMenu: TMenuItem;
160 TreeSelectURLPupupMenu: TMenuItem;
164 BrowserBottomPanel: TGikoPanel;
165 CabinetSelectPopupMenu: TPopupMenu;
167 ItemReservPMenu: TMenuItem;
168 RoundNamePopupMenu: TPopupMenu;
180 MessageImageList: TImageList;
181 ProgressBar: TProgressBar;
183 NameUrlCopyPMenu: TMenuItem;
190 ListCoolBar: TGikoCoolBar;
191 ListToolBar: TToolBar;
192 BrowserCoolBar: TGikoCoolBar;
193 BrowserToolBar: TToolBar;
194 ToolButton3: TToolButton;
195 ToolButton9: TToolButton;
196 ToolButton11: TToolButton;
197 ToolButton5: TToolButton;
198 ListNameToolBar: TToolBar;
199 ListNameLabel: TLabel;
201 BrowserNameToolBar: TToolBar;
202 ItemBoardImage: TImage;
203 BrowserBoardNameLabel: TLabel;
205 BrowserNameLabel: TLabel;
212 TreeSelectNameURLPupupMenu: TMenuItem;
216 BrowserTabToolBar: TToolBar;
217 BrowserTab: TTabControl;
228 FavoriteMenu: TMenuItem;
230 BoardFavoriteAddMenu: TMenuItem;
231 ThreadFavoriteAddMenu: TMenuItem;
233 TreeSelectFavoriteAddPupupMenu: TMenuItem;
234 FavoriteTreeView: TTreeView;
235 StateIconImageList: TImageList;
237 TopRightPanel: TPanel;
240 TopCoolPanel: TPanel;
241 MainCoolBar: TGikoCoolBar;
242 MenuToolBar: TToolBar;
243 StdToolBar: TToolBar;
244 AddressToolBar: TToolBar;
245 AddressComboBox: TComboBox;
246 MoveToToolButton: TToolButton;
247 AddressImageList: TImageList;
248 AddressToolBarMenu: TMenuItem;
258 PreviewTimer: TTimer;
259 MonazillaWebPageAction1: TMenuItem;
266 ChevronPopupMenu: TPopupMenu;
270 LinkToolBar: TToolBar;
275 LinkBarPopupMenu: TPopupMenu;
277 ThreadPopupMenu: TPopupMenu;
278 MenuItem4: TMenuItem;
279 MenuItem5: TMenuItem;
280 MenuItem6: TMenuItem;
283 SelectItemNameCopyAction1: TMenuItem;
287 SelectComboBox: TComboBox;
288 MainCoolBarPopupMenu: TPopupMenu;
289 StdToolBarVisiblePMenu: TMenuItem;
290 AddressToolBarVisiblePMenu: TMenuItem;
291 LinkToolBarVisiblePMenu: TMenuItem;
312 ToolButton16: TToolButton;
319 IndividualAbon1: TMenuItem;
321 IndividualAbon2: TMenuItem;
322 AntiIndivAbonMenuItem: TMenuItem;
323 AntiIndividualAbon: TMenuItem;
327 SearchBoardName: TMenuItem;
328 TreeSelectLogDeleteSeparator: TMenuItem;
331 FavoriteTreePopupMenu: TPopupMenu;
332 FavoriteTreeRenamePopupMenu: TMenuItem;
333 FavoriteTreeNewFolderPopupMenu: TMenuItem;
335 FavoriteTreeDeletePopupMenu: TMenuItem;
336 FavoriteToolBar: TToolBar;
337 FavoriteAddToolButton: TToolButton;
338 FavoriteArrangeToolButton: TToolButton;
339 FavoriteTreeBrowseFolderPopupMenu: TMenuItem;
341 FavoriteTreeReloadPopupMenu: TMenuItem;
343 FavoriteTreeURLCopyPopupMenu: TMenuItem;
344 FavoriteTreeNameCopyPopupMenu: TMenuItem;
345 FavoriteTreeLogDeletePopupMenu: TMenuItem;
347 FavoriteTreeNameURLCopyPopupMenu: TMenuItem;
348 ToolButton20: TToolButton;
350 ExportFavoriteFileAction1: TMenuItem;
361 TreeSelectLogDeletePopupMenu: TMenuItem;
363 BBSSelectPopupMenu: TPopupMenu;
364 PlugInMenu: TMenuItem;
365 TreeSelectNamePupupMenu: TMenuItem;
366 BrowserPanel: TPanel;
368 SelectThreadSave: TMenuItem;
372 OpenLogFolder: TMenuItem;
373 Browser: TWebBrowser;
376 ResRangePopupMenu: TPopupMenu;
377 ResRangeHundPMenuItem: TMenuItem;
378 ResRangeKokoPMenuItem: TMenuItem;
379 ResRangeNewPMenuItem: TMenuItem;
380 ResRangeAllPMenuItem: TMenuItem;
381 BrowsBoradHeadAction1: TMenuItem;
382 ThreadRangePopupMenu: TPopupMenu;
389 ResRangeSelectPMenuItem: TMenuItem;
390 ListColumnPopupMenu: TPopupMenu;
399 SelectComboBoxPanel: TPanel;
400 SelectComboBoxSplitter: TImage;
401 ToolButton1: TToolButton;
404 GikoApplicationEvents: TApplicationEvents;
411 FavoriteTreeItemNameCopyPopupMenu: TMenuItem;
412 procedure FormCreate(Sender: TObject);
413 procedure FormDestroy(Sender: TObject);
414 procedure BrowserStatusTextChange(Sender: TObject;
415 const Text: WideString);
416 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
417 procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
418 var AllowChange: Boolean);
419 procedure ListViewKeyDown(Sender: TObject; var Key: Word;
421 procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
422 procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
423 Button: TToolButton; State: TCustomDrawState;
424 var DefaultDraw: Boolean);
425 procedure BrowserBeforeNavigate2(Sender: TObject;
426 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
427 Headers: OleVariant; var Cancel: WordBool);
428 procedure TreeViewCustomDraw(Sender: TCustomTreeView;
429 const ARect: TRect; var DefaultDraw: Boolean);
430 procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
431 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
432 procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
433 procedure ListViewCustomDraw(Sender: TCustomListView;
434 const ARect: TRect; var DefaultDraw: Boolean);
435 procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
436 Shift: TShiftState; X, Y: Integer);
437 procedure TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
438 procedure MessageListViewResize(Sender: TObject);
439 procedure CabinetVisible( isVisible : Boolean );
440 procedure FormResize(Sender: TObject);
441 procedure ListPopupMenuPopup(Sender: TObject);
442 procedure TreePopupMenuPopup(Sender: TObject);
443 procedure BrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
444 var Cancel: WordBool);
445 procedure ListSplitterMoved(Sender: TObject);
446 procedure BrowserTabChange(Sender: TObject);
447 procedure BrowserTabMouseDown(Sender: TObject; Button: TMouseButton;
448 Shift: TShiftState; X, Y: Integer);
449 procedure BrowserTabDragOver(Sender, Source: TObject; X, Y: Integer;
450 State: TDragState; var Accept: Boolean);
451 procedure BrowserTabDragDrop(Sender, Source: TObject; X, Y: Integer);
452 procedure BrowserTabMouseMove(Sender: TObject; Shift: TShiftState; X,
454 procedure BrowserDocumentComplete(Sender: TObject;
455 const pDisp: IDispatch; var URL: OleVariant);
456 procedure RoundNamePopupMenuPopup(Sender: TObject);
457 procedure FormShow(Sender: TObject);
458 procedure BrowserTabToolBarResize(Sender: TObject);
459 procedure FavoriteMenuClick(Sender: TObject);
460 procedure MainCoolBarResize(Sender: TObject);
461 procedure AddressToolBarResize(Sender: TObject);
462 procedure AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
464 procedure BrowserEnter(Sender: TObject);
465 procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
466 procedure PreviewTimerTimer(Sender: TObject);
467 procedure MessageHideButtonClick(Sender: TObject);
468 procedure HistoryAllClearToolButtonClick(Sender: TObject);
469 procedure MainCoolBarBandInfo(Sender: TObject;
470 var BandInfo: PReBarBandInfoA);
471 procedure MainCoolBarChevronClick(Sender: TObject;
472 RebarChevron: PNMRebarChevron);
473 procedure ListCoolBarBandInfo(Sender: TObject;
474 var BandInfo: PReBarBandInfoA);
475 procedure ListCoolBarChevronClick(Sender: TObject;
476 RebarChevron: PNMRebarChevron);
477 procedure BrowserCoolBarBandInfo(Sender: TObject;
478 var BandInfo: PReBarBandInfoA);
479 procedure BrowserCoolBarChevronClick(Sender: TObject;
480 RebarChevron: PNMRebarChevron);
481 procedure ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
482 procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
483 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
484 procedure SelectComboBoxChange(Sender: TObject);
485 procedure SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
487 procedure SelectComboBoxExit(Sender: TObject);
488 procedure SelectComboBoxSplitterMouseMove(Sender: TObject;
489 Shift: TShiftState; X, Y: Integer);
490 procedure SelectComboBoxSplitterMouseDown(Sender: TObject;
491 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
492 procedure SelectComboBoxSplitterMouseUp(Sender: TObject;
493 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
494 procedure StatusBarResize(Sender: TObject);
495 procedure SelectComboBoxEnter(Sender: TObject);
496 procedure FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
498 procedure FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
499 procedure FavoriteTreeViewEdited(Sender: TObject; Node: TTreeNode;
501 procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
503 procedure FavoriteTreePopupMenuPopup(Sender: TObject);
504 procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
505 procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
506 Shift: TShiftState; X, Y: Integer);
507 procedure LinkToolBarDragOver(Sender, Source: TObject; X, Y: Integer;
508 State: TDragState; var Accept: Boolean);
509 procedure FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
511 procedure ListCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
512 var Handled: Boolean);
513 procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
514 var Handled: Boolean);
515 procedure BrowserCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
516 var Handled: Boolean);
517 procedure FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
518 procedure BrowserTabContextPopup(Sender: TObject; MousePos: TPoint;
519 var Handled: Boolean);
520 procedure BrowserTabPopupMenuPopup(Sender: TObject);
521 procedure BrowserTabResize(Sender: TObject);
522 procedure TreeViewKeyDown(Sender: TObject; var Key: Word;
524 procedure FavoriteTreeViewMouseDown(Sender: TObject;
525 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
526 procedure MessagePanelResize(Sender: TObject);
528 procedure SelectTimerTimer(Sender: TObject);
529 procedure ListViewColumnRightClick(Sender: TObject;
530 Column: TListColumn; Point: TPoint);
531 procedure ListViewCustomDrawItem(Sender: TCustomListView;
532 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
533 procedure FormActivate(Sender: TObject);
534 procedure BrowserPanelResize(Sender: TObject);
535 procedure MenuToolBarResize(Sender: TObject);
536 procedure ListToolBarResize(Sender: TObject);
537 procedure BrowserToolBarResize(Sender: TObject);
538 procedure KokoPopupMenuPopup(Sender: TObject);
539 procedure ListViewKeyUp(Sender: TObject; var Key: Word;
541 procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
542 var AllowEdit: Boolean);
543 procedure CabinetCloseSpeedButtonClick(Sender: TObject);
544 procedure FavoriteArrangeToolButtonClick(Sender: TObject);
545 procedure GikoApplicationEventsMessage(var Msg: tagMSG;
546 var Handled: Boolean);
547 procedure GikoApplicationEventsDeactivate(Sender: TObject);
548 procedure GikoApplicationEventsException(Sender: TObject; E: Exception);
549 procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
550 Shift: TShiftState; X, Y: Integer);
551 procedure GetResURLMenuClick(Sender: TObject);
554 FEnabledCloseButton: Boolean;
555 FClickNode: TTreeNode;
558 FPreviewBrowser: TWebBrowser;
560 FBrowserSizeHeight: Integer;
561 FBrowserSizeWidth: Integer;
562 FTabHintIndex: Integer;
563 FListStyle: TViewStyle; //
\83\8a\83X
\83g
\83A
\83C
\83R
\83\93\83X
\83^
\83C
\83\8b
564 FItemNoVisible: Boolean; //
\83\8a\83X
\83g
\94Ô
\8d\86\95\
\8e¦
\83t
\83\89\83O
565 FViewType: TGikoViewType; //
\83\8a\83X
\83g
\83A
\83C
\83e
\83\80\95\
\8e¦
\83^
\83C
\83v
566 FActiveList: TObject;
567 FActiveContent: TBrowserRecord; //
569 FHistoryList: TList; //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
570 FTreeType: TGikoTreeType;
574 FDownloadTitle: string; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\83^
\83C
\83g
\83\8b\96¼
575 FDownloadMax: Integer; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\8dÅ
\91å
\83T
\83C
\83Y
576 FEvent: THTMLDocumentEventSink;//
\83u
\83\89\83E
\83U
\83h
\83L
\83\85\83\81\83\93\83g
\83C
\83x
\83\93\83g
577 IsDraggingSelectComboBox : Boolean;
578 DraggingSelectComboBoxPosition : TPoint;
579 FSearchDialog: TSearchDialog;
580 FDropSpaceNode: TTreeNode;
581 FDragTime : Cardinal; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
582 FDragButton : TToolButton; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
\82ÉDrag
\82µ
\82Ä
\82éButton
\95Û
\91¶
583 FDragWFirst : Boolean; ///< WebTab
\82ÌD&D
\97p
584 FListViewBackGroundColor : TColor; ///< ListView
\82ÌBackGroundColor
585 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¦
586 FOddColor : TColor; ///<
\82»
\82Ì
\90F
587 FSelectResWord : string; ///<
\83\8c\83X
\8di
\8d\9e\83\8f\81[
\83h
588 FIsIgnoreResize : TResizeType; ///<
\83\8a\83T
\83C
\83Y
\83C
\83x
\83\93\83g
\82ð
\96³
\8e\8b\82·
\82é
\82©
\82Ç
\82¤
\82©
589 FIsMinimize : TMinimizeType; ///<
\8dÅ
\8f¬
\89»
\82µ
\82Ä
\82¢
\82é
\8dÅ
\92\86\82©
590 FOldFormWidth : Integer; ///<
\92¼
\91O
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\95\9d
591 FToolBarSettingSender : TToolBarSettingSenderType; ///<
\83c
\81[
\83\8b\83o
\81[
\90Ý
\92è
\82ð
\83N
\83\8a\83b
\83N
\82µ
\82½
\83N
\81[
\83\8b\83o
\81[
592 FMouseDownPos : TPoint; ///<
\83u
\83\89\83E
\83U
\83^
\83u
\82Å
\83}
\83E
\83X
\82ð
\89\9f\82µ
\82½
\82Æ
\82«
\82Ì
\8dÀ
\95W
594 FResRangeMenuSelect : Longint; ///< ResRangeButton
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\8d\80\96Ú (
\83t
\83H
\81[
\83}
\83b
\83g
\82Í ResRange
\8cÝ
\8a·)
596 FIsHandledWheel : Boolean; ///<
\8aù
\82É
\8eó
\82¯
\8eæ
\82Á
\82½ WM_MOUSEWHEEL
\82©
\82Ç
\82¤
\82©
597 DiffComp: Boolean; //Add by Genyakun
\83X
\83\8c\82ª
\8dX
\90V
\82³
\82ê
\82½
\82Æ
\82«
\82ÉTrue
\82É
\82È
\82é
598 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ñ
599 FPreviewBrowserRect: TRect; ///<
\83v
\83\8c\83r
\83\85\81[
\82Ì
\95\
\8e¦
\88Ê
\92u
\82ð
\8bL
\89¯
\82·
\82é
600 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ñ
601 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
602 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
603 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
604 procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
605 procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
607 procedure ListDoubleClick(Shift: TShiftState);
608 function Hook(var Message: TMessage): Boolean;
609 procedure AddRoundNameMenu(MenuItem: TMenuItem);
610 procedure SetMenuFont;
611 procedure CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
612 procedure FavoriteClick(Sender: TObject; ActiveTab: Boolean); overload;
613 procedure FavoriteClick(Sender: TObject); overload;
614 procedure FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
615 function OnDocumentContextMenu(Sender: TObject): WordBool;
616 procedure ShowTextPopup;
617 function GetWidthAllToolButton(ToolBar: TToolBar): Integer;
618 procedure MenuBarChevronMenu;
619 procedure LinkBarChevronMenu;
620 procedure ToolBarChevronMenu(ToolBar: TToolBar);
621 procedure LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
622 procedure LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
623 procedure LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
624 procedure LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
625 procedure LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
626 function TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
627 procedure FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
628 procedure FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
629 procedure FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
631 procedure SetListViewBackGroundColor(value: TColor);
632 procedure BBSMenuItemOnClick( Sender : TObject );
633 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
634 procedure SaveCoolBarSettings;
635 procedure SaveMainCoolBarSettings;
636 procedure SaveBoardCoolBarSettings;
637 procedure SaveBrowserCoolBarSettings;
638 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
639 procedure LoadCoolBarSettings;
640 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
641 procedure OnMinimize;
642 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½
643 procedure OnMinimized;
644 /// TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
645 procedure TreeClick( Node : TTreeNode );
646 /// TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
647 procedure TreeDoubleClick( Node : TTreeNode );
648 ///
\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
649 procedure SetBBSMenu;
651 function GetTabURLs(AStringList: TStringList) : Boolean;
652 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
653 procedure ListColumnPopupMenuOnClick( Sender : TObject );
654 //!
\8di
\82è
\8d\9e\82Ý
\95¶
\8e\9a\97ñ
\90Ý
\92è
655 procedure SetSelectWord( const text : string );
656 //
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
657 function GetScreenCursor(): TCursor;
658 //
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
659 procedure SetScreenCursor(Cursor : TCursor);
660 //!
\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¬
661 procedure CreateControlThread();
662 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
663 procedure CreateBrowsers(count: Integer);
664 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
665 procedure GetGroupIndex(ActionList: TActionList);
666 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
667 procedure SetGroupIndex(ActionList: TActionList);
668 //!
\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é)
669 procedure OpenThreadItem(Thread: TThreadItem; URL: String);
670 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
671 procedure RefreshListView(Thread: TThreadItem);
672 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
673 procedure ClearThreadRengeAction;
675 procedure CreateParams(var Params: TCreateParams); override;
676 procedure WndProc(var Message: TMessage); override;
677 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
678 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
679 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
683 LastRoundTime: TDateTime;
684 BrowserNullTab: TBrowserRecord;
685 FControlThread: TThreadControl;
686 procedure MoveToURL(const inURL: string);
687 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
689 function GetHttpState: Boolean;
690 procedure SetEnabledCloseButton(Enabled: Boolean);
691 function GetTreeNode(Data: TObject): TTreeNode;
692 procedure ListViewAllSelect;
693 property ListStyle: TViewStyle read FListStyle write FListStyle;
694 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
695 property ViewType: TGikoViewType read FViewType write FViewType;
696 property NameCookie: string read FNameCookie write FNameCookie;
697 property MailCookie: string read FMailCookie write FMailCookie;
698 property ClickNode: TTreeNode read FClickNode write FClickNode;
699 property TreeType: TGikoTreeType read FTreeType write FTreeType;
700 property ActiveContent: TBrowserRecord read FActiveContent write FActiveContent;
701 property ResRangeMenuSelect: Longint read FResRangeMenuSelect write FResRangeMenuSelect;
702 property SelectResWord : string read FSelectResWord write FSelectResWord;
703 property BrowserSizeWidth: Integer read FBrowserSizeWidth write FBrowserSizeWidth;
704 property BrowserSizeHeight: Integer read FBrowserSizeHeight write FBrowserSizeHeight;
705 property SearchDialog: TSearchDialog read FSearchDialog write FSearchDialog;
706 property ToolBarSettingSender : TToolBarSettingSenderType
707 read FToolBarSettingSender write FToolBarSettingSender;
708 property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
709 property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
710 property WorkCount: Integer read FWorkCount write FWorkCount;
711 procedure SetContent(inThread: TBrowserRecord);
712 function GetActiveContent: TThreadItem;
713 function GetActiveList: TObject;
715 procedure SetListViewType(AViewType: TGikoViewType); overload;
716 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
717 procedure PlaySound(SoundEventName: string);
718 function AddHistory( FavItem: TFavoriteThreadItem ): Boolean;
719 procedure ClearHistory;
720 procedure SaveHistory;
721 procedure LoadHistory;
722 procedure ShowBBSTree( inBBS : TBBS );
723 procedure ShowBBSTreeOld( inBBS : TBBS );
724 procedure ShowHistoryTree;
725 procedure SetHistoryTreeNode;
726 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
727 procedure SetBrowserTabState;
728 procedure SetToolBarPopup;
729 procedure ShowFavoriteAddDialog( Item : TObject );
730 procedure FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
731 procedure RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
732 property ListViewBackGroundColor: TColor read FListViewBackGroundColor write SetListViewBackGroundColor;
733 property UseOddResOddColor : Boolean read FUseOddResOddColor write FUseOddResOddColor;
734 property OddColor : TColor read FOddColor write FOddColor;
735 function FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
736 procedure OnPlugInMenuItem( Sender : TObject );
737 procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
738 /// 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Å
739 procedure ActiveListColumnSave;
740 procedure SetActiveList(Obj: TObject);
741 property ActiveList: TObject read GetActiveList write SetActiveList;
742 /// CoolBar
\82ª
\83T
\83C
\83Y
\95Ï
\8dX
\82³
\82ê
\82½
743 procedure CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
744 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
745 procedure IndividualAbonID(Atype : Integer);
746 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
747 procedure IndividualAbon(Atag, Atype : Integer);
748 //
\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Ý
749 procedure RepaintAllTabsBrowser();
750 //
\83\8a\83\93\83N
\83o
\81[
\90Ý
\92è
751 procedure SetLinkBar;
752 procedure FavoriteBrowseFolder( node: TTreeNode );
753 //
\83X
\83\8c\83b
\83h
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
754 procedure DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
755 //
\94Â
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
756 procedure DownloadList(Board: TBoard; ForceDownload: Boolean = False);
757 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
758 procedure DeleteHistory( threadItem: TThreadItem );
759 //
\83^
\83u
\82ð
\8dí
\8f\9c
760 procedure DeleteTab(ThreadItem: TThreadItem); overload;
761 procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
762 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
763 procedure BrowserMovement(const AName: string);
764 //Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
765 function GetMainForm(): TComponent;
766 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
767 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
768 procedure OnGestureStart(Sender: TObject);
769 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
770 procedure OnGestureMove(Sender: TObject);
771 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
772 procedure OnGestureEnd(Sender: TObject);
773 ///
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
774 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
775 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82ÉEditorForm
\82ª
\82¢
\82é
\82©
776 function EditorFormExists(): boolean;
777 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82É
\82¢
\82é
\82·
\82×
\82Ä
\82ÌEditorForm
\82©
\82ç
\96¼
\91O
\97\9a\97ð
\82ð
\8dí
\8f\9c\82·
\82é
778 procedure AllEditroFormNameTextClearClear();
779 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82É
\82¢
\82é
\82·
\82×
\82Ä
\82ÌEditorForm
\82©
\82ç
\83\81\81[
\83\8b\97\9a\97ð
\82ð
\8dí
\8f\9c\82·
\82é
780 procedure AllEditroFormMailTextClearClear();
781 //ListView
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\82ð
\8eæ
\93¾
\82·
\82é
782 procedure SelectListItem(List: TList);
784 function SaveTabURLs : Boolean;
785 ///
\83^
\83u
\93Ç
\82Ý
\8fo
\82µ
786 function LoadTabURLs : Boolean;
787 //
\8ew
\92è
\82µ
\82½
\83\8c\83X
\82ð
\83R
\83s
\81[
\82·
\82é
788 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
790 procedure ModifySelectList;
792 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
794 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
796 procedure SetSelectRoundName(Sender: TObject);
798 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
800 function WebBrowserClick(Sender: TObject): WordBool;
801 //!
\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é
802 procedure SetSelectComboBox();
805 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
808 TFavoriteMenuItem = class(TMenuItem)
812 property Data: Pointer read FData write FData;
815 TBBSMenuItem = class(TMenuItem)
819 property Data: Pointer read FData write FData;
822 TLinkToolButton = class(TToolButton)
826 property Data: Pointer read FData write FData;
835 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
836 YofUtils, ShellAPI, ToolBarUtil, ToolBarSetting,
837 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
838 FavoriteArrange, AddressHistory, Preview, Gesture,
839 About, Option, Round, Splash, Sort, ListSelect, Imm,
840 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
841 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
842 InputAssistDataModule;
845 BLANK_HTML: string = 'about:blank';
846 BROWSER_COUNT = 5; //
\83u
\83\89\83E
\83U
\82Ì
\90\94
848 DandD_THRESHOLD = 5; //D&D
\82Ìè
\87\92l
\81ipixcel)
849 //
\83v
\83\8c\83r
\83\85\81[
\83t
\83@
\83C
\83\8b\96¼
850 HTML_FILE_NAME = 'temp_preview.html';
851 ITEM_ICON_THREADLOG1 = 6; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
852 ITEM_ICON_THREADLOG2 = 7; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
853 //
\83\81\83b
\83Z
\81[
\83WID
854 USER_TREECLICK = WM_USER + 2000;
855 USER_RESIZED = WM_USER + 2001;
856 USER_MINIMIZED = WM_USER + 2002;
857 USER_SETLINKBAR = WM_USER + 2003;
858 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
861 procedure TGikoForm.CreateParams(var Params: TCreateParams);
864 if FormStyle in [fsNormal, fsStayOnTop] then begin
865 if BorderStyle in [bsSingle, bsSizeable] then begin
866 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
867 Params.WndParent := 0;
872 procedure TGikoForm.FormCreate(Sender: TObject);
874 TVS_NOTOOLTIPS = $0080;
880 wp: TWindowPlacement;
884 Writeln('============================================================');
885 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
887 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
888 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¢');
889 Writeln('============================================================');
892 Sort.SetSortDate(Now());
894 FTreeType := gttNone;
895 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô
897 Application.HookMainWindow(Hook);
898 FIsIgnoreResize := rtResizing;
899 //ActionList
\82ÌGuoupIndex
\82ð
\95Û
\91¶
\82µ
\82Ä
\81A0
\82É
\83N
\83\8a\83A
\82·
\82é
\81B
900 //(
\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¢)
901 //
\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
902 GetGroupIndex(GikoDM.GikoFormActionList);
903 FSearchDialog := nil;
904 CreateBrowsers(BROWSER_COUNT);
906 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
909 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
910 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
912 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
913 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
915 EnabledCloseButton := True;
917 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
918 ListView.ViewStyle := GikoSys.Setting.ListStyle;
920 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
922 AnimePanel.Left := 0;
924 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
926 //
\83L
\83\83\83r
\83l
\83b
\83g
927 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
929 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
930 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
931 GikoDM.MsgBarVisibleActionExecute(nil);
932 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
934 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
935 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
936 GikoDM.StatusBarVisibleActionExecute(nil);
938 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
939 TreeView.Items.BeginUpdate;
940 FavoriteTreeView.Items.BeginUpdate;
941 ListView.Items.BeginUpdate;
943 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
944 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
945 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
946 TreeView.Color := GikoSys.Setting.CabinetBackColor;
947 FavoriteTreeView.Font.Assign(TreeView.Font);
948 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
950 ListView.Font.Name := GikoSys.Setting.ListFontName;
951 ListView.Font.Size := GikoSys.Setting.ListFontSize;
952 ListView.Font.Color := GikoSys.Setting.ListFontColor;
953 ListView.Font.Style := [];
954 if GikoSys.Setting.ListFontBold then
955 ListView.Font.Style := [fsbold];
956 if GikoSys.Setting.ListFontItalic then
957 ListView.Font.Style := ListView.Font.Style + [fsitalic];
959 ListViewBackGroundColor := clWhite; //
\83f
\83t
\83H
\83\8b\83g
\82É
\90Ý
\92è
\82µ
\82½
\82Ì
\82¿
960 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; //
\83\86\81[
\83U
\92è
\8b`
\82É
\95Ï
\8dX
961 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
962 FOddColor := GikoSys.Setting.OddColor;
965 TreeView.Items.EndUpdate;
966 FavoriteTreeView.Items.EndUpdate;
967 ListView.Items.EndUpdate;
969 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
970 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
972 //
\83~
\83\85\81[
\83g
\82Ì
\8fó
\91Ô
\82ð
\90Ý
\92è
973 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
975 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
976 FResRangeMenuSelect := GikoSys.ResRange;
977 case GikoSys.ResRange of
980 GikoDM.AllResAction.Execute;
984 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
985 GikoDM.SelectResAction.Checked := True;
988 case FResRangeMenuSelect of
989 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
990 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
991 100: GikoDM.OnlyAHundredResAction.Checked := True;
995 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\95\
\8e¦
\94Í
\88Í
996 case GikoSys.Setting.ThreadRange of
999 GikoDM.AllItemAction.Checked := True;
1004 GikoDM.LogItemAction.Checked := True;
1009 GikoDM.NewItemAction.Checked := True;
1014 GikoDM.LiveItemAction.Checked := True;
1015 ViewType := gvtLive;
1019 GikoDM.ArchiveItemAction.Checked := True;
1020 ViewType := gvtArch;
1025 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
1026 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1027 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1028 BrowserTab.Font.Style := [];
1029 if GikoSys.Setting.BrowserTabFontBold then
1030 BrowserTab.Font.Style := [fsBold];
1031 if GikoSys.Setting.BrowserTabFontItalic then
1032 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1033 BrowserTab.DoubleBuffered := True;
1034 FDragWFirst := false;
1035 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1037 //
\83u
\83\89\83E
\83U
\83^
\83u
1038 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1040 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1041 GikoDM.BrowserTabTopAction.Checked := True;
1043 GikoDM.BrowserTabBottomAction.Checked := True;
1046 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1047 GikoDM.BrowserTabTabStyleAction.Checked := True;
1048 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1049 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1051 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1054 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1055 ProgressBar.Parent := StatusBar;
1056 ProgressBar.Top := 2;
1057 ProgressBar.Left := 0;
1058 ProgressBar.Width := StatusBar.Panels[0].Width;
1059 ProgressBar.Height := StatusBar.Height - 2;
1060 ProgressBar.Position := 0;
1062 //
\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Æ)
1063 InitializeBoardPlugIns;
1065 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1066 GikoSys.ListBoardFile;
1067 //
\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É
1069 //
\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è
1070 if (SplashWindow <> nil) then begin
1071 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1075 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1076 for i := Length(BBSs) - 1 downto 0 do begin
1077 if not BBSs[i].IsBoardFileRead then
1078 GikoSys.ReadBoardFile(BBSs[i]);
1080 if SplashWindow <> nil then begin
1081 SplashWindow.ProgressBar.StepBy(20);
1082 SplashWindow.Update;
1086 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1087 RoundList := TRoundList.Create;
1088 RoundList.LoadRoundBoardFile;
1089 RoundList.LoadRoundThreadFile;
1091 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1092 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1093 Style := Style or TVS_NOTOOLTIPS;
1094 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1096 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1097 TreeView.Align := alClient;
1098 FavoriteTreeView.Align := alClient;
1099 FavoriteTreeView.Visible := False;
1101 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1104 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1105 wp.length := sizeof(wp);
1106 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1107 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1108 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1109 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1110 wp.showCmd := SW_HIDE;
1111 SetWindowPlacement(Handle, @wp);
1114 if GikoSys.Setting.WindowMax then
1115 WindowState := wsMaximized;
1117 //
\83M
\83R
\83A
\83j
\83\81
1119 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1120 if FileExists(FileName) then
1121 Animate.FileName := FileName;
1129 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1130 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1131 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1134 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1135 FHistoryList := TList.Create;
1137 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1140 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1141 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1142 FavoriteDM.ReadFavorite;
1144 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1145 GikoDM.ArrangeAction.Execute;
1147 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1148 case GikoSys.Setting.ListWidthState of
1150 ViewPanel.Width := 1;
1151 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1152 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1155 ViewPanel.Width := GikoSys.Setting.ListWidth;
1156 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1157 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1160 ViewPanel.Width := GikoSys.Setting.ListWidth;
1161 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1162 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1166 case GikoSys.Setting.ListHeightState of
1168 ViewPanel.Height := 1;
1169 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1170 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1173 ViewPanel.Height := GikoSys.Setting.ListHeight;
1174 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1175 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1178 ViewPanel.Height := GikoSys.Setting.ListHeight;
1179 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1180 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1185 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1186 CreateControlThread();
1188 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1189 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1191 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1194 BrowserBoardNameLabel.Caption := '';
1195 BrowserNameLabel.Caption := '';
1198 FTabHintIndex := -1;
1200 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1201 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1202 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1204 MakeDefaultINIFile();
1205 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1206 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1207 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1208 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1211 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1212 SetSelectComboBox();
1214 //
\83A
\83h
\83\8c\83X
\83o
\81[
1215 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1217 //
\83\8a\83\93\83N
\83o
\81[
1219 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1221 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1222 if not FileExists(GikoSys.GetBoardFileName) then begin
1223 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
1224 + '
\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
1225 + '
\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';
1226 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1227 GikoDM.NewBoardAction.Execute;
1230 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1231 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1233 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1234 // FLastRoundTime := 0;
1237 FHint := TResPopup.Create(Self);
1239 ListView.OnData := TListViewUtils.ListViewData;
1241 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1242 CabinetVisible( False );
1243 if GikoSys.Setting.CabinetVisible then begin
1244 i := CabinetSelectPopupMenu.Items.Count - 1;
1245 if GikoSys.Setting.CabinetIndex = i - 1 then
1246 GikoDM.CabinetHistoryAction.Execute
1247 else if GikoSys.Setting.CabinetIndex = i then
1248 GikoDM.CabinetFavoriteAction.Execute
1250 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1251 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1252 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1253 FIsIgnoreResize := rtResizing;
1254 GikoDM.CabinetBBSAction.Execute;
1257 ShowBBSTreeOld( BBSs[ 0 ] );
1258 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1261 //
\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
1262 for i := 1 to ParamCount do begin
1263 MoveToURL(ParamStr(i));
1266 GikoDM.RepaintStatusBar;
1267 StatusBarResize(Sender);
1269 dummy1.Caption := ItemReservPMenu.Caption;
1270 dummy1.Hint := ItemReservPMenu.Hint;
1272 //Samba24
\82Ì
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
1273 GikoSys.SambaFileExists();
1275 {$IFDEF SPAM_FILTER_ENABLED}
1276 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1277 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1280 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1281 MouseGesture := TMouseGesture.Create;
1282 GikoSys.Setting.Gestures.LoadGesture(
1283 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
1284 MouseGesture.Margin := GikoSys.Setting.Gestures.Margin;
1285 MouseGesture.OnGestureStart := OnGestureStart;
1286 MouseGesture.OnGestureMove := OnGestureMove;
1287 MouseGesture.OnGestureEnd := OnGestureEnd;
1288 if GikoSys.Setting.GestureEnabled then
1289 MouseGesture.SetHook( Handle );
1291 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1292 GikoSys.SetGikoMessage;
1294 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1295 if GikoSys.Setting.AutoLogin then
1296 GikoDM.LoginAction.Execute;
1298 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1300 //
\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è
1301 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1302 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1304 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\8f\89\8aú
\89»
1305 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1308 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1309 procedure TGikoForm.SaveCoolBarSettings;
1312 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1314 SaveMainCoolBarSettings;
1315 SaveBoardCoolBarSettings;
1316 SaveBrowserCoolBarSettings;
1319 procedure TGikoForm.SaveMainCoolBarSettings;
1324 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1325 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1326 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1327 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1328 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1329 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1332 procedure TGikoForm.SaveBoardCoolBarSettings;
1337 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1338 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1339 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1340 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1341 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1342 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1345 procedure TGikoForm.SaveBrowserCoolBarSettings;
1350 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1351 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1352 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1353 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1354 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1355 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1358 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1359 procedure TGikoForm.LoadCoolBarSettings;
1365 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1366 MainCoolBar.Bands.BeginUpdate;
1368 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1369 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1370 CoolSet := GikoSys.Setting.MainCoolSet[i];
1371 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1372 FIsIgnoreResize := rtNone;
1373 SaveCoolBarSettings;
1376 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1377 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1378 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1381 MainCoolBar.Bands.EndUpdate;
1384 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1385 ListCoolBar.Bands.BeginUpdate;
1387 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1388 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1389 CoolSet := GikoSys.Setting.ListCoolSet[i];
1390 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1391 FIsIgnoreResize := rtNone;
1392 SaveCoolBarSettings;
1395 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1396 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1397 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1400 ListCoolBar.Bands.EndUpdate;
1403 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1404 BrowserCoolBar.Bands.BeginUpdate;
1406 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1407 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1408 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1409 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1410 FIsIgnoreResize := rtNone;
1411 SaveCoolBarSettings;
1414 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1415 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1416 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1419 BrowserCoolBar.Bands.EndUpdate;
1424 procedure TGikoForm.FormShow(Sender: TObject);
1426 if FStartUp then begin
1427 ShowWindow(Application.Handle, SW_HIDE);
1429 //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½
1430 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1431 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1432 GikoDM.StdToolBarVisibleActionExecute( nil );
1433 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1434 GikoDM.AddressBarVisibleActionExecute( nil );
1435 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1436 GikoDM.LinkBarVisibleActionExecute( nil );
1437 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1438 GikoDM.ListToolBarVisibleActionExecute( nil );
1439 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1440 GikoDM.ListNameBarVisibleActionExecute( nil );
1441 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1442 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1443 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1444 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1446 // CoolBar
\95\9c\8c³
1447 LoadCoolBarSettings;
1449 //
\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é
1450 // ResetBandInfo( ListCoolBar, ListToolBar );
1451 FIsIgnoreResize := rtNone;
1453 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1454 if GikoSys.Setting.TabAutoLoadSave then begin
1455 GikoDM.TabAutoLoadAction.Execute;
1458 //ActionList
\82ÌGroupIndex
\82ð
\8c³
\82É
\96ß
\82·
1459 SetGroupIndex(GikoDM.GikoFormActionList);
1465 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1467 // if GikoForm.WindowState <> wsMinimized then
1468 // SaveCoolBarSettings;
1470 if ( GikoSys.Setting.ShowDialogForEnd ) and
1471 (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
1476 if GikoSys.Setting.TabAutoLoadSave then begin
1477 GikoDM.TabAutoSaveAction.Execute;
1480 if (SearchDialog <> nil) then begin
1481 if (SearchDialog.Visible) then begin
1484 SearchDialog.Release;
1487 SearchDialog := nil;
1490 { //2ch
\8c¾
\8cȩ̂²ÙFree
1491 if GikoSys.Setting.Gengo <> nil then begin
1492 GikoSys.Setting.Gengo.Free;
1495 Application.UnhookMainWindow(Hook);
1496 Application.Terminate;
1499 procedure TGikoForm.FormDestroy(Sender: TObject);
1502 // CoolSet: TCoolSet;
1503 wp : TWindowPlacement;
1506 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1508 MouseGesture.UnHook;
1512 ActiveListColumnSave;
1516 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1517 wp.length := sizeof(wp);
1518 GetWindowPlacement(Handle, @wp);
1519 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1520 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1521 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1522 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1523 GikoSys.Setting.WindowMax := WindowState = wsMaximized;
1525 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1526 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1527 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1528 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1529 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1530 if GikoDM.ArrangeAction.Checked then
1531 GikoSys.Setting.ListOrientation := gloVertical
1533 GikoSys.Setting.ListOrientation := gloHorizontal;
1534 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1539 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1540 if not GikoSys.Setting.ResRangeHold then
1541 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1544 if WindowState <> wsNormal then
1545 WindowState := wsNormal;
1546 SaveCoolBarSettings;
1548 GikoSys.Setting.WriteWindowSettingFile;
1549 GikoSys.Setting.WriteNameMailSettingFile;
1552 //
\83\8a\83A
\83\8b\83^
\83C
\83\80\82É
\95Û
\91¶
\82³
\82ê
\82é
\82Ì
\82Å
\81A
\82Ü
\82½
\81A
\83E
\83B
\83\93\83h
\83E
\83T
\83C
\83Y
\82ª CoolBar
\82æ
\82è
1553 //
\8f¬
\82³
\82
\82È
\82Á
\82Ä
\82¢
\82é
\82Æ
\82«
\82É
\95Û
\91¶
\82·
\82é
\82Æ
\92l
\82ª
\8fã
\8f\91\82«
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\82Ì
\82Å
\82±
\82±
\82Å
\82Í
\95Û
\91¶
\82µ
\82È
\82¢
1555 //
\81ªFormDestroy
\92\86\82É
\88Ú
\93®
\82µ
\82½
\82Ì
\82Å
\81A
\82±
\82±
\82Å
\95Û
\91¶
\82µ
\82È
\82¢
\82Æ
\82¢
\82¯
\82È
\82¢
\82Æ
\8ev
\82¤
\81B
\81i
\82à
\82¶
\82ã
\81@2004/04/09
\81j
1557 //if (GikoForm.WindowState <> wsMinimized) and (GikoForm.WindowState <> wsMaximized) then
1559 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\90Ý
\92è
\82Ì
\95Û
\91¶
1560 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1562 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1564 //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é
1565 FavoriteDM.WriteFavorite;
1569 LockWindowUpdate(Self.Handle);
1571 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1572 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1573 GikoSys.Setting.ShowDialogForAllTabClose := false;
1574 GikoDM.AllTabCloseAction.Execute;
1575 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1579 for i := FBrowsers.Count - 1 downto 0 do begin
1580 TWebBrowser(FBrowsers[i]).Free;
1583 FBrowsers.Capacity := 0;
1588 if BrowserNullTab <> nil then begin
1589 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
1590 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
1592 BrowserNullTab.Free;
1598 TreeView.Items.BeginUpdate;
1599 TreeView.Items.GetFirstNode.Free;
1600 TreeView.Items.Clear;
1601 TreeView.Items.EndUpdate;
1605 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1607 //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
1608 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1612 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
1626 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶&
\94j
\8aü
1628 RoundList.SaveRoundFile;
1642 FControlThread.Terminate;
1643 FControlThread.WaitFor;
1647 FControlThread.Free;
1650 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
1651 // 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Å
1652 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
1653 for i := Length(BoardGroups) - 1 downto 0 do begin
1654 //BoardGroups[i].Clear;
1655 BoardGroups[i].Free;
1659 for i := Length( BBSs ) - 1 downto 0 do begin
1660 if BBSs[ i ] <> nil then
1668 if FEvent <> nil then
1672 if FHint <> nil then begin
1673 FHint.ReleaseHandle;
1678 if TPreviewBrowser <> nil then begin
1679 FPreviewBrowser.Free;
1680 FPreviewBrowser := nil;
1684 LockWindowUpdate(0);
1687 //
\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
1688 procedure TGikoForm.SetBBSMenu;
1691 item : TBBSMenuItem;
1694 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
1695 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1697 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1698 CabinetSelectPopupMenu.Items[ i ].Free;
1699 CabinetMenu.Items[ i ].Free;
1700 BBSSelectPopupMenu.Items[ i ].Free;
1706 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
1707 for i := Length( BBSs ) - 1 downto 0 do begin
1709 item := TBBSMenuItem.Create( PopupMenu );
1710 item.Caption := BBSs[ i ].Title;
1711 item.Data := BBSs[ i ];
1712 item.OnClick := BBSMenuItemOnClick;
1713 CabinetSelectPopupMenu.Items.Insert( 0, item );
1714 item := TBBSMenuItem.Create( PopupMenu );
1715 item.Caption := BBSs[ i ].Title;
1716 item.Data := BBSs[ i ];
1717 item.OnClick := BBSMenuItemOnClick;
1718 CabinetMenu.Insert( 0, item );
1719 item := TBBSMenuItem.Create( PopupMenu );
1720 item.Caption := BBSs[ i ].Title;
1721 item.Data := BBSs[ i ];
1722 item.OnClick := BBSMenuItemOnClick;
1723 BBSSelectPopupMenu.Items.Insert( 0, Item );
1730 procedure TGikoForm.ReloadBBS;
1735 LockWindowUpdate(Self.Handle);
1737 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1738 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1739 GikoSys.Setting.ShowDialogForAllTabClose := false;
1740 GikoDM.AllTabCloseAction.Execute;
1741 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1742 SetContent(BrowserNullTab);
1743 //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
1744 TreeView.Items.Clear;
1746 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1748 RoundList.SaveRoundFile;
1751 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
1757 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1764 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1766 FavoriteDM.WriteFavorite;
1771 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
1772 for i := Length(BoardGroups) - 1 downto 0 do begin
1774 BoardGroups[i].Free;
1780 for i := Length( BBSs ) - 1 downto 0 do begin
1781 if BBSs[ i ] <> nil then
1790 FTreeType := gttNone;
1792 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
1794 //
\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Æ)
1795 InitializeBoardPlugIns;
1797 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1799 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1800 for i := Length(BBSs) - 1 downto 0 do begin
1801 if not BBSs[i].IsBoardFileRead then
1802 GikoSys.ReadBoardFile(BBSs[i]);
1805 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
1808 ShowBBSTree( BBSs[ 0 ] );
1810 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1813 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1814 FavoriteDM.ReadFavorite;
1818 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1819 RoundList.LoadRoundBoardFile;
1820 RoundList.LoadRoundThreadFile;
1822 LockWindowUpdate(0);
1824 GikoDM.TabsOpenAction.Execute;
1828 \todo
\89½
\8cÌ IE 7
\82Å
\82Í about:..
\82É
\82È
\82é
\82Ì
\82©
1829 (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©)
1830 \92²
\8d¸
\82·
\82é
\82±
\82Æ
1832 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1840 threadItem : TThreadItem;
1842 Protocol, Host, Path, Document, Port, Bookmark: string;
1847 ActiveFileName: string;
1853 //
\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ª
1854 // 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è)
1855 if Pos('about:..', Text) = 1 then
1856 Text2 := 'about:blank..' + Copy( Text, Length('about:..')+1, Length(Text) )
1859 if not( TObject(Sender) is TWebBrowser )then
1863 if (TWebBrowser(Sender) <> nil) and (not TWebBrowser(Sender).Busy) and (Assigned(TWebBrowser(Sender).Document)) then begin
1864 if LowerCase(OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset) <> 'shift_jis' then begin
1865 OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset := 'shift_jis';
1872 if PreviewTimer.Enabled then
1873 PreviewTimer.Enabled := False;
1874 Application.CancelHint;
1876 if GetActiveContent <> nil then
1877 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
1879 ActiveFileName := '';
1881 FActiveContent := nil;
1885 StatusBar.Panels[1].Text := Text2;
1887 if FHint <> nil then begin
1888 FHint.ReleaseHandle;
1891 if FPreviewBrowser <> nil then
1892 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1894 if not GikoSys.Setting.UnActivePopup then
1895 if not GikoForm.Active then
1898 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
1899 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
1902 Ext := AnsiLowerCase(ExtractFileExt(Text2));
1903 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
1904 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) then begin
1905 if FPreviewBrowser = nil then begin
1906 FPreviewBrowser := TPreviewBrowser.Create(Self);
1907 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1908 TOleControl(FPreviewBrowser).Parent := nil;
1910 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
1911 FPreviewURL := Text2;
1912 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
1913 PreviewTimer.Enabled := True;
1914 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
1915 if Pos('mailto:', Text2) = 1 then begin
1916 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
1917 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
1919 p.x := p.x - TWebBrowser(Sender).ClientOrigin.x;
1920 p.y := p.y - TWebBrowser(Sender).ClientOrigin.y;
1921 e := IHTMLDocument2(TWebBrowser(Sender).Document).elementFromPoint(p.x, p.y);
1922 if (Assigned(e)) then begin
1923 tmp2 := ZenToHan(e.Get_outerText);
1924 if (GikoSys.IsNumeric(tmp2)) then begin
1925 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
1926 wkIntSt := StrToInt64(tmp2);
1927 wkIntTo := StrToInt64(tmp2);
1928 //s := GetThreadText(wkBBS, wkKey, wkIntSt, wkIntTo, False, False);
1929 FHint.PopupType := gptThread;
1930 HTMLCreater.SetResPopupText(FHint, GetActiveContent, wkIntSt, wkIntTo, False, False);
1932 FHint.PopupType := gptRaw;
1937 threadItem := GetActiveContent;
1938 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
1939 PathRec := Gikosys.Parse2chURL2(URL);
1940 if (PathRec.FNoParam) then begin
1944 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
1946 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
1948 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
1950 URL := GikoSys.GetBrowsableThreadURL( URL );
1951 wkIntSt := PathRec.FSt;
1952 wkIntTo := PathRec.FTo;
1954 if (wkIntSt = 0) and (wkIntTo = 0) then begin
1957 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
1959 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
1961 end else if wkIntSt > wkIntTo then begin
1966 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
1971 threadItem := BBSsFindThreadFromURL( URL );
1973 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
1974 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
1975 if board <> nil then begin
1976 if not board.IsThreadDatRead then
1977 GikoSys.ReadSubjectFile( board );
1978 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
1982 if threadItem <> nil then begin
1983 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
1984 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
1985 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
1989 FHint.PopupType := gptThread;
1990 HTMLCreater.SetResPopupText(FHint, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
1995 if FHint.PopupType = gptRaw then begin
1996 if FHint.Caption <> '' then
1999 if (FHint.ResCount <> 0) or (FHint.Title <> '') then
2005 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2009 FEnabledCloseButton := Enabled;
2010 SysMenu := GetSystemMenu(Handle, False);
2012 if Enabled then begin
2013 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2015 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2018 DrawMenuBar(Handle);
2021 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2022 var AllowChange: Boolean);
2024 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
2025 // if FTreeType = gtt2ch then
2026 // FSortIndex := -1;
2029 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2030 Shift: TShiftState);
2034 if GetActiveList is TBoard then begin
2036 VK_BACK:; // UpFolderButtonClick(Sender);
2037 VK_SPACE: ListDoubleClick(Shift);
2038 VK_RETURN: ListClick;
2041 if ListView.Selected <> nil then begin
2042 pos.X := ListView.Column[ 0 ].Width;
2043 pos.Y := ListView.Selected.Top;
2045 pos.X := ListView.Left;
2046 pos.Y := ListView.Top;
2048 Windows.ClientToScreen( ListView.Handle, pos );
2049 ListPopupMenu.Popup( pos.X, pos.Y );
2052 end else begin // TBBS, TCategory
2054 VK_BACK:; // UpFolderButtonClick(Sender);
2055 VK_SPACE: ListClick;
2056 VK_RETURN: ListDoubleClick(Shift);
2059 if ListView.Selected <> nil then begin
2060 pos.X := ListView.Column[ 0 ].Width;
2061 pos.Y := ListView.Selected.Top;
2063 pos.X := ListView.Left;
2064 pos.Y := ListView.Top;
2066 Windows.ClientToScreen( ListView.Handle, pos );
2067 ListPopupMenu.Popup( pos.X, pos.Y );
2073 function TGikoForm.GetHttpState: Boolean;
2075 Result := FHttpState;
2078 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2079 Column: TListColumn);
2083 vSortIndex : Integer;
2084 vSortOrder : Boolean;
2086 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2087 if TObject( FActiveList ) is TBBS then begin
2088 orderList := GikoSys.Setting.BBSColumnOrder;
2089 vSortIndex := GikoSys.Setting.BBSSortIndex;
2090 vSortOrder := GikoSys.Setting.BBSSortOrder;
2091 end else if TObject( FActiveList ) is TCategory then begin
2092 orderList := GikoSys.Setting.CategoryColumnOrder;
2093 vSortIndex := GikoSys.Setting.CategorySortIndex;
2094 vSortOrder := GikoSys.Setting.CategorySortOrder;
2095 end else if TObject( FActiveList ) is TBoard then begin
2096 orderList := GikoSys.Setting.BoardColumnOrder;
2097 vSortIndex := GikoSys.Setting.BoardSortIndex;
2098 vSortOrder := GikoSys.Setting.BoardSortOrder;
2102 id := Integer( orderList[ idx ] );
2105 if vSortIndex = id then
2106 vSortOrder := not vSortOrder
2108 vSortOrder := id = 0;
2111 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2114 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2115 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2119 DefaultDraw := True;
2121 DefaultDraw := False;
2122 if (cdsSelected in State) or (cdsHot in State) then begin
2123 Sender.Canvas.Brush.Color := clHighlight;
2124 Sender.Canvas.Font.Color := clHighlightText;
2126 Sender.Canvas.Brush.Color := clBtnFace;
2127 Sender.Canvas.Font.Color := clBtnText;
2129 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2130 Sender.Canvas.FillRect(ARect);
2131 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2134 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2139 Nodes := TreeView.Items;
2141 for i := 0 to Nodes.Count - 1 do begin
2142 if Nodes.Item[i].Data = Data then begin
2143 Result := Nodes.Item[i];
2150 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2151 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2152 Headers: OleVariant; var Cancel: WordBool);
2157 kMenuName: string = 'menu:';
2160 if Pos(kMenuName, URL) <> 0 then begin
2161 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2163 if not GikoSys.IsNumeric(sNo) then Exit;
2167 KokoPopupMenu.Tag := StrToInt(sNo);
2168 KokoPopupMenu.Popup(p.x, p.y);
2169 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2170 Cancel := not GikoSys.Setting.OpenMailer;
2175 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2176 const ARect: TRect; var DefaultDraw: Boolean);
2180 IsBoardNode: Boolean;
2186 Category: TCategory;
2190 DefaultDraw := True;
2192 if FTreeType = gttHistory then Exit;
2194 TreeView.Canvas.Font.Color := clBlue;
2195 IsBoardNode := False;
2196 for i := 0 to TreeView.Items.Count - 1 do begin
2198 if not TreeView.Items[i].IsVisible then
2201 if TObject(TreeView.Items[i].Data) is TCategory then begin
2202 if TreeView.Items[i].Expanded then
2205 IsBoardNode := False;
2206 Category := TCategory(TreeView.Items[i].Data);
2207 for j := 0 to Category.Count - 1 do begin
2208 Board := Category.Items[j];
2209 if Board <> nil then begin
2210 if Board.UnRead > 0 then begin
2218 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2219 IsBoardNode := True;
2220 Board := TBoard(TreeView.Items[i].Data);
2222 Cnt := Board.UnRead;
2228 Bitmap := TBitmap.Create;
2230 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2231 Bitmap.Canvas.Font.Style := [fsBold];
2232 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2237 NodeRect := TreeView.Items[i].DisplayRect(True);
2240 CntText := '(' + IntToStr(Cnt) + ')'
2241 else if Cnt = 1 then
2245 TextWidth := TreeView.Canvas.TextWidth(CntText);
2247 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2249 NodeRect.Left + NodeWidth + TextWidth + 8,
2251 DrawText(TreeView.Canvas.Handle,
2255 DT_SINGLELINE or DT_VCENTER);
2257 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2260 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2261 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2264 Category: TCategory;
2267 DefaultDraw := True;
2269 if FTreeType = gttHistory then Exit;
2271 TreeView.Canvas.Font.Style := [];
2272 if Node <> nil then begin
2273 if TObject(Node.Data) is TCategory then begin
2274 Category := TCategory(Node.Data);
2275 for i := 0 to Category.Count - 1 do begin
2276 Board := Category.Items[i];
2277 if Board <> nil then begin
2278 if Board.UnRead > 0 then begin
2279 TreeView.Canvas.Font.Style := [fsBold];
2284 end else if TObject(Node.Data) is TBoard then begin
2285 Board := TBoard(Node.Data);
2286 if Board.UnRead > 0 then
2287 TreeView.Canvas.Font.Style := [fsBold];
2292 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2294 TreeView.Invalidate;
2296 if TObject(Node.Data) is TBBS then begin
2297 TBBS(Node.Data).NodeExpand := True;
2298 end else if TObject(Node.Data) is TCategory then begin
2299 TCategory(Node.Data).NodeExpand := True;
2300 end else if TObject(Node.Data) is TBoard then begin
2301 TBoard(Node.Data).NodeExpand := True;
2305 procedure TGikoForm.ListViewAllSelect;
2310 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2312 AddMessageList(Msg, nil, Icon);
2314 // *************************************************************************
2315 //!
\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
2316 // *************************************************************************
2317 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2321 boardPlugIn : TBoardPlugIn;
2326 if Item.DownType = gdtBoard then
2327 ATitle := Item.Board.Title
2329 ATitle := Item.ThreadItem.Title;
2331 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2333 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2335 if Item.DownType = gdtBoard then begin
2338 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2339 if GetActiveList = Item.Board then begin
2341 //
\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é
2342 if (GikoSys.Setting.AutoSortThreadList) then begin
2343 GikoSys.Setting.BoardSortIndex := 0;
2344 GikoSys.Setting.BoardSortOrder := True;
2346 Sort.SetSortDate(Now());
2347 SetActiveList(Item.Board);
2349 Item.Board.Modified := True;
2350 Item.Board.IsThreadDatRead := True;
2353 end else if Item.DownType = gdtThread then begin
2356 Item.ThreadItem.NewArrival := True;
2357 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2358 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2359 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2360 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2361 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2362 Item.ThreadItem.Title := Res.FTitle;
2363 ATitle := Item.ThreadItem.Title;
2364 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2365 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2366 ATitle := Res.FTitle;
2368 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2369 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2370 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2374 if GikoSys.Setting.BrowserTabVisible then begin
2375 if GetActiveContent = Item.ThreadItem then
2376 InsertBrowserTab(Item.ThreadItem)
2377 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2378 InsertBrowserTab(Item.ThreadItem, True)
2380 InsertBrowserTab(Item.ThreadItem, False);
2383 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2384 InsertBrowserTab(Item.ThreadItem);
2387 Application.ProcessMessages;
2389 if Item.State = gdsComplete then begin
2391 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2395 PlaySound('NewDiff');
2396 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2401 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2402 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2403 Item.ThreadItem.Round := False;
2404 //Item.ThreadItem.RoundName := '';
2405 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);
2408 //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
2409 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
2410 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
2411 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
2412 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
2413 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
2414 case GikoForm.ViewType of
2415 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
2416 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
2417 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
2418 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
2419 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
2420 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
2423 RefreshListView(Item.ThreadItem);
2426 end else if Item.State = gdsNotModify then begin
2428 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2429 //SetContent(Item.ThreadItem);
2430 InsertBrowserTab(Item.ThreadItem);
2432 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2433 PlaySound('NoChange');
2434 Screen.Cursor := crDefault;
2435 end else if Item.State = gdsAbort then begin
2437 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2438 end else if Item.State = gdsError then begin
2443 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2444 // if Item.ResponseCode = 302 then
2445 // 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);
2451 if FWorkCount < 0 then FWorkCount := 0;
2452 if FWorkCount = 0 then begin
2454 Animate.Active := False;
2456 Screen.Cursor := crDefault;
2463 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2465 // SetProgressValue(Number, 0, AWorkCountMax);
2466 // ProgressBar.Visible := True;
2467 ProgressBar.Position := 0;
2468 ProgressBar.Max := AWorkCountMax;
2469 FDownloadTitle := AWorkTitle;
2470 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2471 FDownloadMax := AWorkCountMax;
2474 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2476 ProgressBar.Position := 0;
2477 if FDownloadMax <> 0 then
2478 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2481 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2483 ProgressBar.Position := AWorkCount;
2484 // SetProgressValue(Number, AWorkCount);
2485 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2488 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2490 ListItem: TListItem;
2492 MessageListView.Items.BeginUpdate;
2494 ListItem := MessageListView.Items.Add;
2495 ListItem.Caption := ACaption;
2496 ListItem.Data := AObject;
2497 ListItem.MakeVisible(False);
2499 gmiOK: ListItem.ImageIndex := 0;
2500 gmiSAD: ListItem.ImageIndex := 1;
2501 gmiNG: ListItem.ImageIndex := 2;
2502 gmiWhat: ListItem.ImageIndex := 3;
2505 MessageListView.Items.EndUpdate;
2510 function TGikoForm.InsertBrowserTab(
2511 ThreadItem : TThreadItem;
2512 ActiveTab : Boolean = True
2515 i, j, idx : Integer;
2516 favItem : TFavoriteThreadItem;
2517 newBrowser : TBrowserRecord;
2521 if Threaditem = nil then Exit;
2523 if ThreadItem.IsLogFile then begin
2524 //
\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é
2525 //
\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é
2526 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2527 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2528 j := FBrowsers.IndexOf(FActiveContent.Browser);
2529 if j = BROWSER_COUNT - 1 then
2530 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2532 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2533 if not AddHistory( favItem ) then
2536 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2537 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2538 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2539 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2540 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2541 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2542 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2543 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2547 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2548 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2549 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2551 if ActiveTab then begin
2552 BrowserTab.TabIndex := i;
2553 BrowserTab.OnChange(nil);
2560 idx := BrowserTab.TabIndex;
2561 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2562 newBrowser := TBrowserRecord.Create;
2563 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2564 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2565 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2569 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2570 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2571 //newBrowser.Browser.Navigate(BLANK_HTML);
2572 newBrowser.thread := ThreadItem;
2573 newBrowser.Repaint := true;
2574 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
2576 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2577 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2578 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2582 if ActiveTab then begin
2583 BrowserTab.TabIndex := 0;
2587 newBrowser := TBrowserRecord.Create;
2588 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2589 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2590 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2594 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2595 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2596 //newBrowser.Browser.Navigate(BLANK_HTML);
2597 newBrowser.thread := ThreadItem;
2598 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
2599 newBrowser.Repaint := true;
2601 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2602 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2603 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2607 if ActiveTab then begin
2608 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2609 BrowserTab.TabIndex := 0
2611 BrowserTab.TabIndex := i;
2614 Result := newBrowser;
2615 if(ActiveTab) or (idx = -1) then begin
2616 BrowserTab.OnChange(nil);
2619 if BrowserNullTab = nil then begin
2620 BrowserNullTab := TBrowserRecord.Create;
2621 BrowserNullTab.Browser := Browser;
2623 // if BrowserNullTab.thread <> ThreadItem then begin
2624 // BrowserNullTab.Movement := '';
2626 BrowserNullTab.thread := ThreadItem;
2627 Result := BrowserNullTab;
2628 BrowserTab.TabIndex := -1;
2629 SetContent(BrowserNullTab);
2632 if GikoSys.Setting.URLDisplay then
2633 AddressComboBox.Text := ThreadItem.URL;
2637 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2646 ThreadItem: TThreadItem;
2647 Thread: TBrowserRecord;
2648 ThreadTitle, ThreadPTitle: string;
2649 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2652 idx := BrowserTab.TabIndex;
2653 if (FActiveContent <> nil) and
2654 (FActiveContent.Thread <> Thread.Thread) and
2655 (FActiveContent.Browser <> nil) and
2656 (Assigned(FActiveContent.Browser.Document)) then begin
2659 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document).Body).ScrollTop;
2662 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2667 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2668 Thread.Browser.Navigate(BLANK_HTML);
2669 BrowserBoardNameLabel.Caption := '';
2670 ItemBoardImage.Picture := nil;
2671 BrowserNameLabel.Caption := '';
2672 ItemImage.Picture := nil;
2673 BrowserNullTab.Thread := nil;
2674 //TOleControl(BrowserNullTab.Browser).Visible := true;
2675 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2676 FActiveContent := nil;
2678 end else if Thread.Browser = nil then begin
2679 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2680 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2681 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2682 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2683 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2687 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2688 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2691 ThreadTitle := Thread.Thread.Title;
2692 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2693 //ThreadScrollTop := Thread.Thread.ScrollTop;
2694 ThreadIsLog := Thread.Thread.IsLogFile;
2695 ThreadItem := Thread.Thread;
2696 ThreadNewArraical := Thread.Thread.NewArrival;
2697 //ThreadUnRead := Thread.Thread.UnRead;
2698 BBSID := ThreadItem.ParentBoard.BBSID;
2699 FileName := ThreadItem.FileName;
2701 if GetCapture = ListView.Handle then
2704 Screen.Cursor := crHourGlass;
2708 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2709 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2710 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2712 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2713 if (not Assigned(Thread.Browser.Document)) then begin
2714 Thread.Browser.Navigate('about:blank');
2716 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2717 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2718 Application.ProcessMessages;
2719 if idx <> BrowserTab.TabIndex then begin
2724 if (Thread <> nil) and (ThreadItem <>nil) then begin
2725 BrowserBoardNameLabel.Caption := ThreadPTitle;
2726 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2727 BrowserNameLabel.Caption := ThreadTitle;
2728 ItemImage.Picture := nil;
2730 if ThreadNewArraical then
2731 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
2733 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
2735 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
2737 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
2738 BrowserNameLabel.Left := ItemImage.Left + 20;
2741 //ActiveContent
\81@
\82Ì
\8dX
\90V
2742 FActiveContent := Thread;
2744 if not ThreadIsLog then begin
2745 Self.Caption := GikoDataModule.CAPTION_NAME ;
2746 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\8fÁ
\8b\8e
2747 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
2749 Thread.Browser.BringToFront;
2750 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
2751 doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
2753 doc.charset := 'Shift_JIS';
2760 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
2761 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\95\
\8e¦
2762 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
2763 StatusBar.Panels[THREADSIZE_PANEL].Width :=
2764 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
2765 //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«
2766 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
2767 if Thread.Repaint then begin
2768 Thread.Repaint := false;
2770 Thread.Browser.OnStatusTextChange := nil;
2771 LockWindowUpdate(Thread.Browser.ParentWindow);
2772 HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
2773 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
2774 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
2778 RefreshListView(ThreadItem);
2780 Screen.Cursor := crDefault;
2784 function TGikoForm.GetActiveContent: TThreadItem;
2787 if FActiveContent <> nil then
2788 Result := FActiveContent.Thread
2797 procedure TGikoForm.SetActiveList(Obj: TObject);
2801 // if FActiveList <> Obj then begin
2804 if ListView.Selected <> nil then
2805 idx := ListView.Selected.Index
2811 ListView.Items.Count := 0;
2812 ListView.Items.Clear;
2813 ListView.Selected := nil;
2814 // ListView.Columns.Clear;
2815 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
2816 and (FActiveContent.Thread.IsLogFile) then begin
2818 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
2820 on E: Exception do begin
2821 //
\83X
\83\8c\88ê
\97\97DL
\8cã
\82È
\82Ç
\82ÉFActiveContent
\82Ì
\8e\9d\82ÂThread
\82ª
2822 //
\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é
2823 ReleaseBrowser(FActiveContent);
2824 FActiveContent.Thread := nil;
2825 Self.Caption := GikoDataModule.CAPTION_NAME;
2829 Self.Caption := GikoDataModule.CAPTION_NAME;
2830 //Application.Title := CAPTION_NAME;
2832 // ActiveListColumnSave;
2834 Screen.Cursor := crHourGlass;
2836 if Obj is TBBS then begin
2837 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2838 end else if Obj is TCategory then begin
2839 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2840 end else if Obj is TBoard then begin
2841 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2844 Screen.Cursor := crDefault;
2847 if idx >= 0 then begin
2848 if idx >= ListView.Items.Count then
2849 idx := ListView.Items.Count - 1;
2850 ListView.ItemIndex := idx;
2851 ListView.ItemFocused := ListView.Items.Item[ idx ];
2857 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
2858 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
2859 function TGikoForm.GetActiveList: TObject;
2861 Result := FActiveList;
2864 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
2866 SetListViewType(AViewType, '', False);
2869 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
2874 for i := Length( BBSs ) - 1 downto 0 do begin
2875 BBSs[i].SelectText := SelectText;
2876 BBSs[i].KubetsuChk := KubetsuChk;
2878 ViewType := AViewType;
2879 if ActiveList is TBoard then begin
2880 Board := TBoard(ActiveList);
2882 //gvtAll: ListView.Items.Count := Board.Count;
2883 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
2884 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
2885 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
2886 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
2887 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
2891 SetActiveList(Board);
2895 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
2896 const ARect: TRect; var DefaultDraw: Boolean);
2902 if ListView.Items.Count = 0 then begin
2903 DefaultDraw := true;
2904 ListView.Canvas.Brush.Color := ListView.Color;
2905 ListView.Canvas.FillRect(ARect);
2909 ListView.Canvas.Font.Color := clWindowText;
2910 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2913 ListView.Canvas.Font.Color := clBlue;
2914 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';
2917 ListView.Canvas.Font.Color := clGreen;
2918 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2921 ListView.Canvas.Font.Color := clFuchsia;
2922 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';
2925 ListView.Canvas.Font.Color := clMaroon;
2926 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90¶
\91¶
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2929 ListView.Canvas.Font.Color := clNavy;
2930 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';
2931 if GetActiveList is TBoard then
2932 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
2940 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
2941 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
2942 ListView.Canvas.TextOut(p.X, p.Y, s);
2944 DefaultDraw := True;
2948 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
2950 Item: TDownloadItem;
2952 if not Board.IsThreadDatRead then
2953 GikoSys.ReadSubjectFile(Board);
2954 Item := TDownloadItem.Create;
2956 Item.Board := Board;
2957 Item.DownType := gdtBoard;
2958 Item.ForceDownload := ForceDownload;
2959 FControlThread.AddItem(Item);
2960 if FWorkCount = 0 then begin
2962 Animate.Active := True;
2965 Screen.Cursor := crAppStart;
2973 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
2975 Item: TDownloadItem;
2977 Item := TDownloadItem.Create;
2979 Item.ThreadItem := ThreadItem;
2980 Item.DownType := gdtThread;
2981 Item.ForceDownload := ForceDownload;
2982 FControlThread.AddItem(Item);
2983 if FWorkCount = 0 then begin
2985 Animate.Active := True;
2988 Screen.Cursor := crAppStart;
2996 procedure TGikoForm.PlaySound(SoundEventName: string);
3000 if not GikoSys.Setting.Mute then begin
3001 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
3002 if FileExists(FileName) then begin
3003 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
3004 sndPlaySound(nil, SND_SYNC);
3005 Application.ProcessMessages;
3007 sndPlaySound(PChar(FileName), SND_ASYNC);
3013 function TGikoForm.AddHistory( favItem : TFavoriteThreadItem ): Boolean;
3016 Item: TFavoriteThreadItem;
3020 // if (GetActiveContent = ThreadItem) and
3021 // (ThreadItem.Count <= ThreadItem.Kokomade) then
3023 // if GetActiveContent = ThreadItem then
3027 if FTreeType = gttHistory then
3028 TreeView.Selected := nil;
3030 for i := 0 to FHistoryList.Count - 1 do begin
3031 if TObject(FHistoryList[i]) is TFavoriteThreadItem then begin
3032 Item := TFavoriteThreadItem(FHistoryList[i]);
3033 if Item.URL = favItem.URL then begin
3034 // SetContent(ThreadItem);
3035 FHistoryList.Move(i, 0);
3036 if FTreeType = gttHistory then
3037 if TreeView.Items.GetFirstNode <> TreeView.Items[ i ] then
3038 TreeView.Items[ i ].MoveTo( TreeView.Items.GetFirstNode, naInsert );
3045 if FHistoryList.Count > 0 then
3046 FHistoryList.Insert( 0, favItem )
3048 FHistoryList.Add( favItem );
3049 // SetContent(ThreadItem);
3050 // while GikoSys.Setting.AddressHistoryCount < FHistoryList.Count do begin
3051 while GikoSys.Setting.MaxRecordCount < FHistoryList.Count do begin
3052 i := FHistoryList.Count - 1;
3053 TObject( FHistoryList.Items[ i ] ).Free;
3054 FHistoryList.Delete( i );
3057 if FTreeType = gttHistory then begin
3058 Node := TreeView.Items.Add( nil, favItem.Title );
3059 Node.MoveTo( TreeView.Items.GetFirstNode, naInsert );
3061 if favItem.NewArrival then begin
3062 Node.ImageIndex := ITEM_ICON_THREADNEW1;
3063 Node.SelectedIndex := ITEM_ICON_THREADNEW2;
3065 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3066 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3069 //
\95\89\89×
\82ð
\82©
\82¯
\82½
\82
\82È
\82¢
\82Ì
\82Å NewArrival
\82Ì
\83`
\83F
\83b
\83N
\82ð
\8ds
\82í
\82È
\82¢
3070 //
\81¦favItem.Item
\83v
\83\8d\83p
\83e
\83B
\82Í dat
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\82ð
\95K
\97v
\82Æ
\82·
\82é
3071 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3072 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3073 Node.Data := favItem;
3074 //while GikoSys.Setting.AddressHistoryCount < TreeView.Items.Count do begin
3075 while GikoSys.Setting.MaxRecordCount < TreeView.Items.Count do begin
3076 i := TreeView.Items.Count - 1;
3077 TreeView.Items.Item[ i ].Delete;
3082 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3087 //
\83L
\83\83\83r
\83l
\83b
\83g
\82É
\97\9a\97ð
\82ª
\95\
\8e¦
\82³
\82ê
\82Ä
\82¢
\82½
\82ç
\81A
3088 //
\83L
\83\83\83r
\83l
\83b
\83g
\93à
\82Ì
\83A
\83C
\83e
\83\80\82à
\8dí
\8f\9c\82·
\82é
\81B
3089 if (FTreeType = gttHistory) then begin
3090 node := TreeView.Items.GetFirstNode;
3091 while (node <> nil) do begin
3092 if ( TFavoriteThreadItem(node.Data).Item = threadItem ) then begin
3093 TreeView.Items.Delete(node);
3097 node := node.GetNext;
3101 for i := 0 to FHistoryList.Count - 1 do begin
3102 if threadItem = TFavoriteThreadItem( FHistoryList.Items[i] ).Item then begin
3103 TFavoriteThreadItem( FHistoryList.Items[ i ] ).Free;
3104 FHistoryList.Delete(i);
3105 FHistoryList.Capacity := FHistoryList.Count;
3111 procedure TGikoForm.ClearHistory;
3115 //FHistoryList.Clear;
3118 for i := FHistoryList.Count - 1 downto 0 do begin
3119 if TObject(FHistoryList[ i ]) is TFavoriteThreadItem then
3120 TFavoriteThreadItem(FHistoryList[ i ]).Free
3121 else if TObject(FHistoryList[ i ]) is TFavoriteBoardItem then
3122 TFavoriteBoardItem(FHistoryList[ i ]).Free;
3124 //FHistoryList.Delete(i);
3130 FHistoryList.Capacity := FHistoryList.Count;
3134 procedure TGikoForm.SaveHistory;
3137 saveList : TstringList;
3140 saveList := TStringList.Create;
3143 FHistoryList.Capacity := FHistoryList.Count;
3144 saveList.Add('<?xml version="1.0" encoding="Shift_JIS" standalone="yes"?>');
3145 saveList.Add('<address>');
3146 bound := FHistoryList.Count - 1;
3147 for i := bound downto 0 do begin
3148 // title
\82Í
\8d¡
\82Ì
\82Æ
\82±
\82ë
\8eg
\82Á
\82Ä
\82¢
\82È
\82¢
3150 '<history url="' + HtmlEncode( TFavoriteThreadItem( FHistoryList[ i ] ).URL ) + '"' +
3151 ' title="' + HtmlEncode( MojuUtils.Sanitize(TFavoriteThreadItem( FHistoryList[ i ] ).Title )) + '"/>');
3153 saveList.Add('</address>');
3154 saveList.SaveToFile( GikoSys.GetConfigDir + 'History.xml' );
3161 procedure TGikoForm.LoadHistory;
3165 XMLDoc : IXMLDocument;
3167 HistoryNode : IXMLNode;
3169 favItem : TFavoriteThreadItem;
3178 fileName := GikoSys.GetConfigDir + 'History.xml';
3180 if FileExists( fileName ) then begin
3182 XMLDoc := IXMLDocument.Create;
3183 //XMLDoc := LoadXMLDocument(FileName);
3184 LoadXMLDocument(FileName, XMLDoc);
3186 XMLNode := XMLDoc.DocumentElement;
3188 if XMLNode.NodeName = 'address' then begin
3189 bound := XMLNode.ChildNodes.Count - 1;
3190 for i := 0 to bound do begin
3191 HistoryNode := XMLNode.ChildNodes[i];
3192 if HistoryNode.NodeName = 'history' then begin
3193 //if FReadCount >= sl.Count then begin
3194 s := Trim(HistoryNode.Attributes['url']);
3195 if s <> '' then begin
3196 favItem := TFavoriteThreadItem.Create(
3197 s, MojuUtils.UnSanitize(HistoryNode.Attributes[ 'title' ]) );
3198 if not AddHistory( favItem ) then
3212 rt := GetTickCount - st;
3213 Writeln('Runtime(Load Histroy) : ' + IntToStr(rt) + ' ms');
3218 procedure TGikoForm.ShowBBSTreeOld(
3226 FavoriteTreeView.Visible := False;
3227 FavoriteToolBar.Hide;
3228 TreeView.Visible := True;
3230 b := CabinetSelectPopupMenu.Items.Count - 1;
3231 for i := 0 to b do begin
3232 item := CabinetSelectPopupMenu.Items[ i ];
3233 if item is TBBSMenuItem then begin
3234 if TBBSMenuItem( item ).Data = inBBS then begin
3235 item.Checked := True;
3236 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3237 CabinetMenu.Items[ i ].Checked := True;
3238 GikoSys.Setting.CabinetIndex := i;
3242 item.Checked := False;
3243 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3244 CabinetMenu.Items[ i ].Checked := False;
3246 CabinetSelectToolButton.Caption := inBBS.Title;
3248 GikoDM.CabinetHistoryAction.Checked := False;
3249 GikoDM.CabinetFavoriteAction.Checked := False;
3251 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3252 FTreeType := gtt2ch;
3253 HistoryToolBar.Hide;
3254 FActiveBBS := inBBS;
3255 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3256 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3257 //?c???[??g?b?v?????I????
3258 if GetActiveList = nil then
3259 TreeView.Selected := TreeView.Items[0]
3261 for i := 0 to TreeView.Items.Count - 1 do begin
3262 if TreeView.Items[i].Data = GetActiveList then begin
3263 TreeView.Selected := TreeView.Items[i];
3267 TreeView.Selected := TreeView.Items[0]
3275 procedure TGikoForm.ShowBBSTree(
3284 FavoriteTreeView.Visible := False;
3285 FavoriteToolBar.Hide;
3286 TreeView.Visible := True;
3288 b := CabinetSelectPopupMenu.Items.Count - 1;
3289 for i := 0 to b do begin
3290 item := CabinetSelectPopupMenu.Items[ i ];
3291 if item is TBBSMenuItem then begin
3292 if TBBSMenuItem( item ).Data = inBBS then begin
3293 item.Checked := True;
3294 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3295 CabinetMenu.Items[ i ].Checked := True;
3296 GikoSys.Setting.CabinetIndex := i;
3300 item.Checked := False;
3301 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3302 CabinetMenu.Items[ i ].Checked := False;
3304 CabinetSelectToolButton.Caption := inBBS.Title;
3306 GikoDM.CabinetHistoryAction.Checked := False;
3307 GikoDM.CabinetFavoriteAction.Checked := False;
3309 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3310 or (not (CabinetPanel.Visible)) then begin
3311 FTreeType := gtt2ch;
3312 HistoryToolBar.Hide;
3313 FActiveBBS := inBBS;
3314 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3315 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3316 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3317 if GetActiveList = nil then begin
3319 TreeClick( TreeView.Items[0] );
3323 for i := 0 to TreeView.Items.Count - 1 do begin
3324 if TreeView.Items[i].Data = GetActiveList then begin
3325 TreeClick( TreeView.Items[i] );
3329 TreeClick( TreeView.Items[0] );
3337 procedure TGikoForm.ShowHistoryTree;
3342 if CabinetPanel.Visible then begin
3343 if FTreeType = gttHistory then begin
3344 CabinetVisible( False );
3345 GikoDM.CabinetHistoryAction.Checked := False;
3347 GikoDM.CabinetHistoryAction.Checked := True;
3350 CabinetVisible( True );
3351 GikoDM.CabinetHistoryAction.Checked := True;
3354 // BBS...BBS, History, Favorite
3355 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3357 FavoriteTreeView.Visible := False;
3358 TreeView.Visible := True;
3360 GikoDM.CabinetBBSAction.Checked := False;
3361 GikoDM.CabinetFavoriteAction.Checked := False;
3363 if FTreeType <> gttHistory then begin
3364 b := CabinetSelectPopupMenu.Items.Count - 1;
3365 for i := 0 to b do begin
3366 item := CabinetSelectPopupMenu.Items[ i ];
3367 if item is TBBSMenuItem then begin
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;
3374 FTreeType := gttHistory;
3375 HistoryToolBar.Show;
3376 FavoriteToolBar.Hide;
3378 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3382 procedure TGikoForm.SetHistoryTreeNode;
3386 Item: TFavoriteThreadItem;
3388 TreeView.Items.BeginUpdate;
3390 TreeView.Items.Clear;
3391 for i := 0 to FHistoryList.Count - 1 do begin
3392 Item := TFavoriteThreadItem(FHistoryList[i]);
3393 Node := TreeView.Items.Add(nil, Item.Title);
3395 if Item.Item.NewArrival then begin
3396 Node.ImageIndex := ITEM_ICON_THREADNEW1;
3397 Node.SelectedIndex := ITEM_ICON_THREADNEW2;
3399 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3400 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3403 //
\95\89\89×
\82ð
\82©
\82¯
\82½
\82
\82È
\82¢
\82Ì
\82Å NewArrival
\82Ì
\83`
\83F
\83b
\83N
\82ð
\8ds
\82í
\82È
\82¢
3404 //
\81¦Item.Item
\83v
\83\8d\83p
\83e
\83B
\82Í dat
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\82ð
\95K
\97v
\82Æ
\82·
\82é
3405 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3406 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3410 TreeView.Items.EndUpdate;
3414 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3416 ChangeEvent: TTVChangedEvent;
3417 ChangingEvent: TTVChangingEvent;
3421 if Item is TCategory then
3422 bbs := TCategory( Item ).ParenTBBS
3423 else if Item is TBoard then
3424 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3428 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3429 if Item <> FActiveList then begin
3431 ChangingEvent := nil;
3433 if not CallEvent then begin
3434 ChangeEvent := TreeView.OnChange;
3435 ChangingEvent := TreeView.OnChanging;
3438 if not CallEvent then begin
3439 TreeView.OnChange := nil;
3440 TreeView.OnChanging := nil;
3442 //Application.ProcessMessages;
3443 for i := 0 to TreeView.Items.Count - 1 do begin
3444 if TreeView.Items[i].Data = Item then begin
3445 TreeView.Items[i].Selected := True;
3447 TreeClick(TreeView.Items[i]);
3451 //Application.ProcessMessages;
3453 if not CallEvent then begin
3454 TreeView.OnChange := ChangeEvent;
3455 TreeView.OnChanging := ChangingEvent;
3460 if Item <> FActiveList then begin
3461 ActiveListColumnSave;
3462 if (Item is TBBS) or (Item is TCategory) then begin
3463 ListView.Columns.Clear;
3464 SetActiveList( Item );
3465 end else if Item is TBoard then begin
3466 if not TBoard( Item ).IsThreadDatRead then begin
3467 Screen.Cursor := crHourGlass;
3469 if not TBoard( Item ).IsThreadDatRead then
3470 GikoSys.ReadSubjectFile(TBoard( Item ));
3472 Screen.Cursor := crDefault;
3475 Sort.SetSortDate(Now());
3476 SetActiveList( Item );
3481 if Item is TBoard then begin // not TCategory
3482 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3483 if GikoSys.Setting.ListWidthState = glsMax then begin
3484 GikoDM.BrowserMinAction.Execute;
3485 if GikoForm.Visible then
3489 if GikoSys.Setting.ListHeightState = glsMax then begin
3490 GikoDM.BrowserMinAction.Execute;
3491 if GikoForm.Visible then
3498 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3499 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3501 listItem : TListItem;
3502 threadItem : TThreadItem;
3509 if not (GetActiveList is TBoard) then Exit;
3510 listItem := ListView.GetItemAt( X, Y );
3511 if listItem = nil then Exit;
3512 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3514 threadItem := TThreadItem(ListItem.Data);
3515 InsertBrowserTab(threadItem, False);
3516 if threadItem.IsLogFile then
3517 ListView.UpdateItems(listItem.Index, listItem.Index);
3521 //
\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Å
3522 if (ssDouble in Shift) then
3523 ListDoubleClick(Shift)
3531 Windows.ClientToScreen( ListView.Handle, pos );
3532 ListPopupMenu.Popup( pos.X, pos.Y );
3538 procedure TGikoForm.ListClick;
3540 ListItem: TListItem;
3541 ThreadItem: TThreadItem;
3543 if ListView.SelCount <> 1 then Exit;
3544 ListItem := ListView.Selected;
3545 if ListItem = nil then Exit;
3546 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3548 ThreadItem := TThreadItem(ListItem.Data);
3549 if ThreadItem.IsLogFile then begin
3550 InsertBrowserTab(ThreadItem);
3551 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3553 InsertBrowserTab(ThreadItem);
3556 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3557 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3558 if GikoSys.Setting.ListWidthState = glsMin then begin
3559 GikoDM.BrowserMaxAndFocusAction.Execute;
3562 if GikoSys.Setting.ListHeightState = glsMin then begin
3563 GikoDM.BrowserMaxAndFocusAction.Execute;
3569 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3571 ThreadItem: TThreadItem;
3574 shiftDown := (ssShift in Shift);
3576 if ListView.Selected = nil then Exit;
3578 if TObject(ListView.Selected.Data) is TCategory then begin
3579 SelectTreeNode(ListView.Selected.Data, True);
3580 end else if TObject(ListView.Selected.Data) is TBoard then begin
3581 SelectTreeNode(ListView.Selected.Data, True)
3582 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3583 Application.ProcessMessages;
3584 ThreadItem := TThreadItem(ListView.Selected.Data);
3585 DownloadContent(ThreadItem, shiftDown);
3587 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3588 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3589 if GikoSys.Setting.ListWidthState = glsMin then begin
3590 GikoDM.BrowserMaxAction.Execute;
3591 GikoDM.SetFocusForBrowserAction.Execute;
3594 if GikoSys.Setting.ListHeightState = glsMin then begin
3595 GikoDM.BrowserMaxAction.Execute;
3596 GikoDM.SetFocusForBrowserAction.Execute;
3603 procedure TGikoForm.BrowserMovement(const AName: string);
3605 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3606 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3607 and (FActiveContent <> nil) then begin
3608 FActiveContent.Move(AName);
3612 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3614 if TObject(Node.Data) is TBBS then begin
3615 TBBS(Node.Data).NodeExpand := False;
3616 end else if TObject(Node.Data) is TCategory then begin
3617 TCategory(Node.Data).NodeExpand := False;
3618 end else if TObject(Node.Data) is TBoard then begin
3619 TBoard(Node.Data).NodeExpand := False;
3621 if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3622 TreeClick(TreeView.Selected);
3626 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3628 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3630 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3632 TreeSplitter.Visible := isVisible;
3633 CabinetPanel.Visible := isVisible;
3634 GikoDM.CabinetVisibleAction.Checked := isVisible;
3637 procedure TGikoForm.SelectListItem(List: TList);
3639 TmpListItem: TListItem;
3643 TmpListItem := ListView.Selected;
3644 while TmpListItem <> nil do begin
3645 List.Add(TmpListItem.Data);
3646 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3651 procedure TGikoForm.FormResize(Sender: TObject);
3654 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3655 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3657 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3658 if GikoSys.Setting.ListWidthState = glsMin then begin
3659 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3660 ViewPanel.Width := ThreadMainPanel.Width - 80;
3663 if GikoSys.Setting.ListHeightState = glsMin then begin
3664 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3665 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3669 FIsIgnoreResize := rtResizing;
3670 PostMessage( Handle, USER_RESIZED, 0, 0 );
3675 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3680 idx := BrowserTab.TabIndex;
3681 FTabHintIndex := -1;
3682 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3683 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3685 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
3686 doc := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser.Document;
3687 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ScrollTop := doc.Body.ScrollTop;
3690 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ScrollTop := 0;
3692 if( FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[i]) ) then
3693 FActiveContent := nil;
3694 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
3695 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser);
3697 FBrowsers.Move(j, BROWSER_COUNT - 1);
3699 BrowserTab.Tabs.BeginUpdate;
3701 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
3702 if ( BrowserTab.Tabs.Count - 1 = i ) and
3703 ( BrowserTab.TabRect(i).Left
3704 <= BrowserTab.DisplayRect.Left ) then begin
3705 BrowserTab.ScrollTabs(-1);
3707 BrowserTab.Tabs.Delete(i);
3708 if idx > i then begin
3709 BrowserTab.TabIndex := idx - 1;
3711 if BrowserTab.Tabs.Count -1 >= idx then
3712 BrowserTab.TabIndex := idx
3714 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3717 BrowserTab.Tabs.EndUpdate;
3719 if BrowserTab.Tabs.Count = 0 then begin
3720 BrowserNullTab.Thread := nil;
3722 if(BrowserTab.TabIndex <> -1) and
3723 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3724 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
3725 if(TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser
3726 = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) )then
3728 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
3732 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3733 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3734 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3735 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3737 if( FActiveContent = nil) then
3738 BrowserTab.OnChange(nil);
3743 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3748 idx := BrowserTab.TabIndex;
3749 FTabHintIndex := -1;
3750 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3751 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3753 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
3754 doc := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser.Document;
3755 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ScrollTop := doc.Body.ScrollTop;
3759 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ScrollTop := 0;
3761 if(FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[i])) then
3762 FActiveContent := nil;
3763 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
3764 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser);
3766 FBrowsers.Move(j, BROWSER_COUNT - 1);
3768 BrowserTab.Tabs.BeginUpdate;
3770 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
3771 if ( BrowserTab.Tabs.Count - 1 = i ) and
3772 ( BrowserTab.TabRect(i).Left
3773 <= BrowserTab.DisplayRect.Left ) then begin
3774 BrowserTab.ScrollTabs(-1);
3776 BrowserTab.Tabs.Delete(i);
3777 if idx > i then begin
3778 BrowserTab.TabIndex := idx - 1;
3780 if BrowserTab.Tabs.Count -1 >= idx then
3781 BrowserTab.TabIndex := idx
3783 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3786 BrowserTab.Tabs.EndUpdate;
3788 if(BrowserTab.TabIndex <> -1) and
3789 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3790 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
3791 if(TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser
3792 = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) )then
3794 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
3798 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3799 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3800 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3801 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3804 if( FActiveContent = nil) then
3805 BrowserTab.OnChange(nil);
3810 function TGikoForm.Hook(var Message: TMessage): Boolean;
3812 //
\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Ì
3813 //
\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ð
3817 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3819 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3823 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3825 ItemRoundPMenu.Visible := (GetActiveList is TBoard);
3826 ItemReservPMenu.Visible := (GetActiveList is TBoard);
3827 LPMSep01.Visible := (GetActiveList is TBoard);
3828 ListRoundPMenu.Visible := (GetActiveList is TCategory);// or (GetActiveList is TBoard);
3829 ListReservPMenu.Visible := (GetActiveList is TCategory);// or (GetActiveList is TBoard);
3830 LPMSep02.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
3831 KidokuPMenu.Visible := (GetActiveList is TBoard);
3832 MidokuPMenu.Visible := (GetActiveList is TBoard);
3833 UrlCopyPMenu.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
3834 NameUrlCopyPMenu.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
3835 AllSelectPMenu.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
3836 LPMSep05.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
3837 DeletePMenu.Visible := (GetActiveList is TBoard);
3838 LPMSep06.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
3839 BoardFavoriteAddMenu.Visible := (GetActiveList is TCategory);
3840 ThreadFavoriteAddMenu.Visible := (GetActiveList is TBoard);
3842 AddRoundNameMenu(ItemReservPMenu);
3843 AddRoundNameMenu(ListReservPMenu);
3846 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3848 FClickNode := TreeView.Selected;
3849 if FClickNode = nil then begin
3850 TreeSelectThreadPupupMenu.Visible := False;
3851 TreeSelectBoardPupupMenu.Visible := False;
3852 TPMSep01.Visible := False;
3853 TreeSelectURLPupupMenu.Visible := False;
3854 TreeSelectNamePupupMenu.Visible := False;
3855 TreeSelectNameURLPupupMenu.Visible := False;
3856 TreeSelectFavoriteAddPupupMenu.Visible := False;
3857 TreeSelectLogDeleteSeparator.Visible := False;
3858 TreeSelectLogDeletePopupMenu.Visible := False;
3859 end else if TObject(FClickNode.Data) is TBoard then begin
3860 TreeSelectThreadPupupMenu.Visible := False;
3861 TreeSelectBoardPupupMenu.Visible := True;
3862 TPMSep01.Visible := True;
3863 TreeSelectURLPupupMenu.Visible := True;
3864 TreeSelectNamePupupMenu.Visible := True;
3865 TreeSelectNameURLPupupMenu.Visible := True;
3866 TreeSelectFavoriteAddPupupMenu.Visible := True;
3867 TreeSelectLogDeleteSeparator.Visible := False;
3868 TreeSelectLogDeletePopupMenu.Visible := False;
3869 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3870 TreeSelectThreadPupupMenu.Visible := False;
3871 TreeSelectBoardPupupMenu.Visible := True;
3872 TPMSep01.Visible := True;
3873 TreeSelectURLPupupMenu.Visible := True;
3874 TreeSelectNamePupupMenu.Visible := True;
3875 TreeSelectNameURLPupupMenu.Visible := True;
3876 TreeSelectFavoriteAddPupupMenu.Visible := True;
3877 TreeSelectLogDeleteSeparator.Visible := False;
3878 TreeSelectLogDeletePopupMenu.Visible := False;
3879 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3880 TreeSelectThreadPupupMenu.Visible := True;
3881 TreeSelectBoardPupupMenu.Visible := False;
3882 TPMSep01.Visible := True;
3883 TreeSelectURLPupupMenu.Visible := True;
3884 TreeSelectNamePupupMenu.Visible := True;
3885 TreeSelectNameURLPupupMenu.Visible := True;
3886 TreeSelectFavoriteAddPupupMenu.Visible := True;
3887 TreeSelectLogDeleteSeparator.Visible := True;
3888 TreeSelectLogDeletePopupMenu.Visible := True;
3889 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3890 TreeSelectThreadPupupMenu.Visible := True;
3891 TreeSelectBoardPupupMenu.Visible := False;
3892 TPMSep01.Visible := True;
3893 TreeSelectURLPupupMenu.Visible := True;
3894 TreeSelectNamePupupMenu.Visible := True;
3895 TreeSelectNameURLPupupMenu.Visible := True;
3896 TreeSelectFavoriteAddPupupMenu.Visible := True;
3897 TreeSelectLogDeleteSeparator.Visible := True;
3898 TreeSelectLogDeletePopupMenu.Visible := True;
3899 end else if (TObject(FClickNode.Data) is TCategory) then begin
3900 TreeSelectThreadPupupMenu.Visible := False;
3901 TreeSelectBoardPupupMenu.Visible := False;
3902 TPMSep01.Visible := False;
3903 TreeSelectURLPupupMenu.Visible := False;
3904 TreeSelectNamePupupMenu.Visible := True;
3905 TreeSelectNameURLPupupMenu.Visible := False;
3906 TreeSelectFavoriteAddPupupMenu.Visible := False;
3907 TreeSelectLogDeleteSeparator.Visible := False;
3908 TreeSelectLogDeletePopupMenu.Visible := False;
3909 end else if FClickNode.IsFirstNode then begin
3910 TreeSelectThreadPupupMenu.Visible := False;
3911 TreeSelectBoardPupupMenu.Visible := False;
3912 TPMSep01.Visible := False;
3913 TreeSelectURLPupupMenu.Visible := False;
3914 TreeSelectNamePupupMenu.Visible := True;
3915 TreeSelectNameURLPupupMenu.Visible := False;
3916 TreeSelectFavoriteAddPupupMenu.Visible := False;
3917 TreeSelectLogDeleteSeparator.Visible := False;
3918 TreeSelectLogDeletePopupMenu.Visible := False;
3920 TreeSelectThreadPupupMenu.Visible := False;
3921 TreeSelectBoardPupupMenu.Visible := False;
3922 TPMSep01.Visible := False;
3923 TreeSelectURLPupupMenu.Visible := False;
3924 TreeSelectNamePupupMenu.Visible := False;
3925 TreeSelectNameURLPupupMenu.Visible := False;
3926 TreeSelectFavoriteAddPupupMenu.Visible := False;
3927 TreeSelectLogDeleteSeparator.Visible := False;
3928 TreeSelectLogDeletePopupMenu.Visible := False;
3932 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
3933 var ppDisp: IDispatch; var Cancel: WordBool);
3942 threadItem: TThreadItem;
3946 if (IHTMLDocument2(TWebBrowser(Sender).Document).activeElement <> nil) then begin
3947 Text := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.Get_outerText;
3948 Html := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.Get_outerHTML;
3949 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
3950 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
3951 if GikoSys.Setting.ResAnchorJamp then begin
3952 Text := ZenToHan(Trim(Text));
3954 if(AnsiPos('>>', Text) = 1) then begin
3955 //Text := Copy(Text, 3, Length(Text) - 2);
3958 //Text := Copy(Text, 2, Length(Text) - 1);
3962 if AnsiPos('-', Text) <> 0 then begin
3963 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
3964 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
3965 wkIntTo := StrToIntDef(Text, 0);
3966 if wkIntTo < wkIntSt then
3969 wkIntSt := StrToIntDef(Text, 0);
3972 if wkIntSt <> 0 then begin
3973 FActiveContent.IDAnchorPopup('');
3974 BrowserMovement(IntToStr(wkIntSt));
3980 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
3982 URL := GikoSys.GetHRefText(Html);
3983 URL := GikoSys.HTMLDecode(URL);
3984 if AnsiPos('BE:', URL) = 1 then begin
3985 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
3986 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
3987 threadItem := FActiveContent.Thread;
3988 if threadItem = nil then Exit;
3989 URL := BE_PHP_URL + BNum + '&u=d'
3990 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
3993 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
3994 ( AnsiPos('ftp://', URL) = 1) then begin
3995 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
3996 if GikoSys.Setting.LinkAddAddressBar then begin
3997 idx := AddressComboBox.Items.IndexOf(URL);
3998 if idx = -1 then begin
3999 AddressComboBox.Items.Insert(0, URL);
4000 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
4001 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
4003 AddressComboBox.Items.Delete(idx);
4004 AddressComboBox.Items.Insert(0, URL);
4014 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
4016 if Mouse.Capture <> 0 then
4018 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4019 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
4020 FBrowserSizeWidth := ViewPanel.Width;
4022 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
4023 FBrowserSizeHeight := ViewPanel.Height;
4025 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4026 if ViewPanel.Width < 2 then begin
4027 ViewPanel.Width := 1;
4028 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
4029 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
4030 GikoSys.Setting.ListWidthState := glsMax;
4031 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
4032 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
4033 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
4034 GikoSys.Setting.ListWidthState := glsMin;
4036 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
4037 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
4038 GikoSys.Setting.ListWidthState := glsNormal;
4041 if ViewPanel.Height < 2 then begin
4042 ViewPanel.Height := 1;
4043 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4044 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4045 GikoSys.Setting.ListHeightState := glsMax;
4046 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
4047 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4048 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4049 GikoSys.Setting.ListHeightState := glsMin;
4051 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4052 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4053 GikoSys.Setting.ListHeightState := glsNormal;
4056 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
4057 FBrowserSizeHeight := ViewPanel.Height
4058 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
4059 FBrowserSizeWidth := ViewPanel.Width;}
4062 procedure TGikoForm.BrowserTabChange(Sender: TObject);
4067 BrowserTab.Tabs.BeginUpdate;
4069 if not BrowserTab.Dragging then begin
4070 FTabHintIndex := -1;
4071 BrowserTab.Hint := '';
4072 idx := BrowserTab.TabIndex;
4073 if idx = -1 then begin
4074 SetContent(BrowserNullTab);
4076 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
4077 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
4078 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
4080 FBrowsers.Move(j ,0);
4082 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
4083 (FActiveContent.Browser <> BrowserNullTab.Browser) and
4084 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
4085 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4087 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
4088 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
4089 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
4093 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
4094 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
4095 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4097 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
4098 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
4099 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4101 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
4102 AddressComboBox.Text := GetActiveContent.URL;
4104 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
4105 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
4108 GikoDM.SetFocusForBrowserAction.Execute;
4112 BrowserTab.Tabs.EndUpdate;
4117 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
4118 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
4124 if Button = mbMiddle then begin
4125 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
4128 p := BrowserTab.ScreenToClient(p);
4129 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
4131 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4132 end else if Button = mbLeft then begin
4133 FDragWFirst := true;
4134 FMouseDownPos.X := X;
4135 FMouseDownPos.Y := Y;
4140 procedure TGikoForm.SetBrowserTabState;
4142 CoolBand: TCoolBand;
4144 BrowserBottomPanel.AutoSize := False;
4145 if GikoSys.Setting.BrowserTabVisible then begin
4147 BrowserTab.Tabs.BeginUpdate;
4149 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
4150 BrowserTab.Style := tsTabs;
4151 if GikoSys.Setting.BrowserTabPosition = gtpTop then
4152 BrowserTab.TabPosition := tpTop
4154 BrowserTab.TabPosition := tpBottom;
4155 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
4156 BrowserTab.TabPosition := tpTop;
4157 BrowserTab.Style := tsButtons;
4159 BrowserTab.TabPosition := tpTop;
4160 BrowserTab.Style := tsFlatButtons
4163 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
4164 BrowserTab.Parent := BrowserTabToolBar;
4165 BrowserBottomPanel.Hide;
4166 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4167 if CoolBand <> nil then
4168 CoolBand.Visible := True;
4170 BrowserTab.Parent := BrowserBottomPanel;
4171 BrowserTab.Top := 0;
4172 BrowserTab.Left := 0;
4173 BrowserBottomPanel.Show;
4174 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4175 if CoolBand <> nil then
4176 CoolBand.Visible := False;
4179 BrowserTab.Tabs.EndUpdate;
4183 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4184 if CoolBand <> nil then
4185 CoolBand.Visible := False;
4186 BrowserBottomPanel.Visible := False;
4187 GikoDM.AllTabCloseAction.Execute;
4191 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
4192 Y: Integer; State: TDragState; var Accept: Boolean);
4196 idx := BrowserTab.IndexOfTabAt(X, Y);
4197 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
4200 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
4205 idx := BrowserTab.IndexOfTabAt(X, Y);
4207 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
4210 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
4211 Shift: TShiftState; X, Y: Integer);
4214 ThreadItem: TThreadItem;
4217 TabIdx := BrowserTab.IndexOfTabAt(x, y);
4219 if ( ssLeft in Shift ) and ( BrowserTab.Style = tsTabs ) then begin
4220 if FDragWFirst = false then begin
4221 FDragWFirst := true;
4223 BrowserTab.EndDrag(false);
4224 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
4225 FDragWFirst := false;
4228 BrowserTab.EndDrag(false);
4229 FDragWFirst := false;
4232 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
4233 Application.CancelHint;
4234 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
4235 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
4236 BrowserTab.Hint := ThreadItem.Title;
4237 Application.ShowHint := True;
4239 BrowserTab.Hint := '';
4240 Application.ShowHint := True;
4242 FTabHintIndex := TabIdx;
4247 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
4248 const pDisp: IDispatch; var URL: OleVariant);
4250 FDispHtmlDocument: DispHTMLDocument;
4251 BrowserRecord :TBrowserRecord;
4254 threadItem : TThreadItem;
4256 if TObject(Sender) is TWebBrowser then begin
4257 BrowserRecord := nil;
4258 if TWebBrowser(Sender) <> Browser then begin
4259 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4260 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
4261 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
4265 if BrowserRecord <> nil then begin
4266 if BrowserRecord.Event <> nil then
4267 BrowserRecord.Event.Free;
4268 FDispHtmlDocument := Idispatch(OleVariant(BrowserRecord.Browser.ControlInterface).Document) as DispHTMLDocument;
4269 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4270 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4271 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4274 if GetActiveContent <> nil then begin
4275 FDispHtmlDocument := Idispatch(OleVariant(Browser.ControlInterface).Document) as DispHTMLDocument;
4276 if FEvent <> nil then
4278 FEvent := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4279 FEvent.OnContextMenu := OnDocumentContextMenu;
4280 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4282 if FEvent <> nil then begin
4290 if (BrowserRecord <> nil) and
4291 Assigned( BrowserRecord.Thread ) then begin
4292 threadItem := BrowserRecord.Thread;
4294 if (threadItem.JumpAddress > 0) then begin
4295 if threadItem.UnRead then begin
4296 threadItem.UnRead := False;
4298 RefreshListView(threadItem);
4300 //
\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®
4301 //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4302 if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4303 BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4304 threadItem.JumpAddress := 0;
4306 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4309 end else if threadItem.UnRead then begin
4310 threadItem.UnRead := False;
4312 BrowserRecord.Move('new');
4313 RefreshListView(threadItem);
4314 end else if threadItem.ScrollTop <> 0 then begin
4316 doc := Idispatch( OleVariant( BrowserRecord.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4317 doc.Body.ScrollTop := threadItem.ScrollTop;
4320 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4325 LockWindowUpdate(0);
4328 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4330 AddRoundNameMenu(RoundNamePopupMenu.Items);
4333 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4339 Item := TMenuItem.Create(Self);
4340 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4341 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4343 Item := TMenuItem.Create(Self);
4344 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4345 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4347 Item := TMenuItem.Create(Self);
4348 Item.Caption := '-';
4350 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4351 Item := TMenuItem.Create(Self);
4352 Item.Caption := RoundList.RoundNameList[i];
4353 Item.OnClick := SetSelectRoundName;
4358 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4360 threadItem : TThreadItem;
4362 if ParentName <> 'dummy1' then begin
4363 SetSelectItemRound(RoundFlag, RoundName);
4365 threadItem := GetActiveContent;
4366 if threadItem <> nil then begin
4367 threadItem.RoundName := RoundName;
4369 RoundList.RoundNameList.Add(RoundName);
4370 threadItem.Round := RoundFlag;
4375 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4380 List := TList.Create;
4382 SelectListItem(List);
4383 for i := 0 to List.Count - 1 do begin
4384 if TObject(List[i]) is TBoard then begin
4385 TBoard(List[i]).RoundName := RoundName;
4387 RoundList.RoundNameList.Add(RoundName);
4388 TBoard(List[i]).Round := RoundFlag;
4389 end else if TObject(List[i]) is TThreadItem then begin
4390 if TThreadItem(List[i]).IsLogFile then begin
4391 TThreadItem(List[i]).RoundName := RoundName;
4393 RoundList.RoundNameList.Add(RoundName);
4394 TThreadItem(List[i]).Round := RoundFlag;
4403 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4405 MenuItem: TMenuItem;
4407 if Sender is TMenuItem then begin
4408 MenuItem := TMenuItem(Sender);
4409 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4414 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4419 if CoolBar = nil then
4421 for i := 0 to CoolBar.Bands.Count - 1 do begin
4422 if CoolBar.Bands[i].Control = Control then begin
4423 Result := CoolBar.Bands[i];
4429 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4431 if BrowserTab.Parent = BrowserTabToolBar then
4432 BrowserTab.Width := BrowserTabToolBar.Width;
4435 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4440 procedure TGikoForm.SetMenuFont;
4442 // GikoSys.MenuFont(MenuToolBar.Font);
4443 // MenuToolBar.Buttons[0].AutoSize := False;
4444 // MenuToolBar.Buttons[0].AutoSize := True;
4445 // MenuToolBar.Font.Color := clMenuText;
4446 GikoSys.MenuFont(MainCoolBar.Font);
4447 MenuToolBar.Buttons[0].AutoSize := False;
4448 MenuToolBar.Buttons[0].AutoSize := True;
4449 MainCoolBar.AutoSize := False;
4450 MainCoolBar.AutoSize := True;
4452 GikoSys.MenuFont(ListCoolBar.Font);
4453 GikoSys.MenuFont(BrowserCoolBar.Font);
4454 // MenuToolBar.Font.Color := clMenuText;
4457 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4461 if FavoriteDM.Modified then begin
4464 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4465 NewMenu := TMenuItem.Create(MainMenu);
4466 NewMenu.Action := GikoDM.FavoriteAddAction;
4467 FavoriteMenu.Add(NewMenu);
4468 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4469 NewMenu := TMenuItem.Create(FavoriteMenu);
4470 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4471 FavoriteMenu.Add(NewMenu);
4472 //
\83Z
\83p
\83\8c\81[
\83^
4473 FavoriteMenu.InsertNewLineAfter(NewMenu);
4474 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4475 FavoriteDM.Modified := false;
4479 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4482 NewMenu: array of TMenuItem;
4484 SetLength(NewMenu, Node.Count);
4485 Node := Node.getFirstChild;
4487 while ( Node <> nil ) do begin
4488 NewMenu[i] := TFavoriteMenuItem.Create(nil);
4489 NewMenu[i].AutoHotkeys := maAutomatic;
4490 NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4491 TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4493 if TObject(Node.Data) is TFavoriteFolder then begin
4494 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4495 CreateFavMenu(Node, NewMenu[i]);
4496 end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4497 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4498 NewMenu[i].OnClick := FavoriteClick;
4499 end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4500 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4501 NewMenu[i].OnClick := FavoriteClick;
4504 Node := Node.getNextSibling;
4506 MenuItem.Add(NewMenu);
4509 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4511 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';
4512 TitleAdd: String = '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á';
4514 Dlg : TFavoriteAddDialog;
4520 if Item is TFavoriteBoardItem then
4521 Item := TFavoriteBoardItem( Item ).Item
4522 else if Item is TFavoriteThreadItem then
4523 Item := TFavoriteThreadItem( Item ).Item;
4525 Node := FavoriteTreeView.Items.GetFirstNode;
4526 if Item is TBoard then begin
4527 ItemURL := TBoard( Item ).URL;
4528 while Node <> nil do begin
4530 if TObject( Data ) is TFavoriteBoardItem then begin
4531 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4532 if Application.MessageBox(PChar(MsgAdd) , PChar(TitleAdd), MB_YESNO ) = IDNO then
4537 Node := Node.GetNext;
4539 Dlg := TFavoriteAddDialog.Create(Self);
4541 Dlg.SetBoard( TBoard( Item ) );
4546 end else if Item is TThreadItem then begin
4547 ItemURL := TThreadItem( Item ).URL;
4548 while Node <> nil do begin
4550 if TObject( Data ) is TFavoriteThreadItem then begin
4551 if ItemURL = TFavoriteThreadItem( 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.SetThreadItem( TThreadItem( Item ) );
4571 procedure TGikoForm.FavoriteClick(Sender: TObject);
4573 FavoriteClick( Sender, True );
4576 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4579 ThreadItem: TThreadItem;
4580 FavBoard: TFavoriteBoardItem;
4581 FavThread: TFavoriteThreadItem;
4585 if Sender is TFavoriteMenuItem then
4586 Item := TFavoriteMenuItem(Sender).Data
4587 else if Sender is TLinkToolButton then
4588 Item := TLinkToolButton(Sender).Data
4589 else if Sender is TTreeNode then
4590 Item := TTreeNode( Sender ).Data
4594 if TObject(Item) is TFavoriteBoardItem then begin
4595 FavBoard := TFavoriteBoardItem(Item);
4596 Board := FavBoard.Item;
4597 if Board <> nil then begin
4598 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4599 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4600 SelectTreeNode(Board, True);
4602 end else if TObject(Item) is TFavoriteThreadItem then begin
4603 FavThread := TFavoriteThreadItem(Item);
4604 ThreadItem := FavThread.Item;
4605 if ThreadItem = nil then
4608 InsertBrowserTab(ThreadItem, ActiveTab);
4610 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4611 if GikoSys.Setting.ListWidthState = glsMin then begin
4612 GikoDM.BrowserMaxAndFocusAction.Execute;
4615 if GikoSys.Setting.ListHeightState = glsMin then begin
4616 GikoDM.BrowserMaxAndFocusAction.Execute;
4622 procedure TGikoForm.BBSMenuItemOnClick(
4627 if Sender is TBBSMenuItem then
4628 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4632 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4634 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4637 //!
\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é)
4638 procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4640 stRes, edRes : Int64;
4641 browserRec : TBrowserRecord;
4642 threadNumber : String;
4647 Thread.JumpAddress := 0;
4648 //
\83^
\83u
\82ð
\90¶
\90¬
4649 browserRec := InsertBrowserTab(Thread);
4650 if (browserRec <> nil) then begin
4651 // JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N
\82·
\82é
4652 threadNumber := ChangeFileExt(Thread.FileName, '');
4653 GikoSys.GetPopupResNumber( URL, stRes, edRes );
4654 //
\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
4655 if (StrToInt64(threadNumber) = stRes) then begin
4656 if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4657 and (Pos('&st=' + threadNumber , URL) = 0) then begin
4661 if ( stRes > 0 ) then begin
4662 Thread.JumpAddress := stRes;
4664 //
\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é
4665 if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4666 DownloadContent(Thread);
4667 end else if (not browserRec.Repaint) and (stRes > 0) then begin
4668 browserRec.Move(IntToStr(stRes));
4669 Thread.JumpAddress := 0;
4671 doc := Idispatch( OleVariant( browserRec.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4672 Thread.ScrollTop := doc.Body.ScrollTop;
4679 procedure TGikoForm.MoveToURL(const inURL: string);
4681 protocol, host, path, document, port, bookmark : string;
4682 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4684 BBSID, BBSKey: string;
4685 {tmpBoard,} Board: TBoard;
4686 ThreadItem: TThreadItem;
4689 tmpThread : TThreadItem;
4690 shiftDown : Boolean;
4694 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4695 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4698 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4699 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4700 if shiftDown then begin
4701 GikoSys.OpenBrowser(inURL, gbtUserApp);
4703 end else if ctrlDown then begin
4704 GikoSys.OpenBrowser(inURL, gbtIE);
4708 //=====
\83v
\83\89\83O
\83C
\83\93
4711 bi := Length(BoardGroups) - 1;
4712 for i := 1 to bi do begin
4713 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4714 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4717 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4718 Board := BBSsFindBoardFromURL( boardURL );
4721 if Board = nil then begin
4723 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4724 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4727 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4728 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4729 ShowBBSTree( BBSs[ 1 ] );
4732 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4733 if not Board.IsThreadDatRead then begin
4734 GikoSys.ReadSubjectFile( Board );
4738 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4739 if ThreadItem = nil then begin
4740 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4741 ThreadItem := tmpThread;
4742 Board.Insert( 0, ThreadItem );
4743 if ActiveList is TBoard then begin
4744 if TBoard(ActiveList) = Board then
4745 ListView.Items.Count := ListView.Items.Count + 1;
4750 OpenThreadItem(ThreadItem, inURL);
4757 Board := BBSsFindBoardFromURL(
4758 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4760 if Board <> nil then begin
4761 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4762 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4763 SelectTreeNode( Board, True );
4771 // 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¢
4775 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4776 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4777 Board := BBSsFindBoardFromURL( boardURL );
4778 if Board = nil then begin
4779 //
\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
4780 GikoSys.OpenBrowser(inURL, gbtUserApp);
4783 //
\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é
4785 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4786 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4787 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4788 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4789 GikoSys.OpenBrowser(inURL, gbtUserApp);
4794 if not Board.IsThreadDatRead then
4795 GikoSys.ReadSubjectFile(Board);
4796 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4797 ThreadItem := Board.FindThreadFromURL( URL );
4798 //
\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)
4799 if ThreadItem = nil then begin
4800 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4803 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ª
\82È
\82¢
\82È
\82ç
\90¶
\90¬
\82·
\82é
\81B
4804 if ThreadItem = nil then begin
4805 ThreadItem := TThreadItem.Create( nil, Board, URL );
4806 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4807 Board.Insert(0, ThreadItem);
4808 if ActiveList is TBoard then begin
4809 if TBoard(ActiveList) = Board then
4810 ListView.Items.Count := ListView.Items.Count + 1;
4813 //
\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é
4814 if (not ThreadItem.IsLogFile) then begin
4815 if AnsiPos(Host, Board.URL) = 0 then
4816 ThreadItem.DownloadHost := Host
4818 ThreadItem.DownloadHost := '';
4820 OpenThreadItem(ThreadItem, inURL);
4824 Board := BBSsFindBoardFromURL( inURL );
4825 if Board = nil then begin
4826 GikoSys.OpenBrowser(inURL, gbtAuto);
4828 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4829 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4830 SelectTreeNode( Board, True );
4835 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4837 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4838 CoolBarResized( Sender, MainCoolBar );
4841 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4842 Shift: TShiftState);
4844 if Key = VK_RETURN then
4845 GikoDM.MoveToAction.Execute;
4848 procedure TGikoForm.BrowserEnter(Sender: TObject);
4850 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4853 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4855 CDS:PCopyDataStruct;
4859 CDS := Message.CopyDataStruct;
4860 GetMem(PC, CDS^.cbData);
4862 lstrcpy(PC,CDS^.lpData);
4863 SetString(sURL, PC,lstrlen(PC));
4868 Message.Result := 1;
4871 procedure TGikoForm.WndProc(var Message: TMessage);
4873 senderBrowser : TWebBrowser;
4879 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4882 if Message.WParam = SC_MINIMIZE then
4885 TreeClick( TreeView.Selected );
4892 USER_DOCUMENTCOMPLETE:
4893 if (Message.WParam <> 0) and
4894 (TObject(Message.WParam) is TWebBrowser) then begin
4895 senderBrowser := TWebBrowser( Message.WParam );
4896 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
4905 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
4910 //
\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Í
4911 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
4912 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
4913 if Msg.CharCode in [VK_BACK] then begin
4914 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4915 if Msg.KeyData > 0 then begin
4918 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4922 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
4923 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
4926 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4929 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
4930 if Msg.CharCode in [VK_BACK] then begin
4931 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4932 if Msg.KeyData > 0 then begin
4935 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4938 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
4941 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4945 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
4949 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
4955 HtmlFileName: string;
4959 TargetFrameName: OleVariant;
4960 PostData: OleVariant;
4961 Headers: OleVariant;
4962 WindowHeight: Integer;
4963 WindowWidth: Integer;
4967 Protocol, Host, Path, Document, Port, Bookmark: string;
4969 PreviewTimer.Enabled := False;
4973 case GikoSys.Setting.PreviewSize of
4980 WindowHeight := 192;
4984 WindowHeight := 384;
4988 WindowHeight := 480;
4990 else begin //gpsMedium
4992 WindowHeight := 288;
4996 ARect := Rect(0, 0, WindowWidth, WindowHeight);
4998 case GikoSys.Setting.PopupPosition of
4999 gppRightTop: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - (ARect.Bottom - ARect.Top) - 15);
5000 gppRight: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
5001 gppRightBottom: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y + 15);
5002 gppTop: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - (ARect.Bottom - ARect.Top) - 15);
5003 gppCenter: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - ((ARect.Bottom - ARect.Top) div 2));
5004 gppBottom: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y + 15);
5005 gppLeftTop: OffsetRect(ARect, p.x + 15, p.y - (ARect.Bottom - ARect.Top) - 15);
5006 gppLeft: OffsetRect(ARect, p.x + 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
5007 gppLeftBottom: OffsetRect(ARect, p.x + 15, p.y + 15); //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g
\82P
\82Ì453
\8e\81\82É
\8a´
\8eÓ
5010 html := '<html><head>'#13#10
5012 + 'function init() {'#13#10
5013 + ' if ((document.body.clientHeight >= Image1.height) && (document.body.clientWidth >= Image1.width)) {'#13#10
5015 + ' var dh, ih;'#13#10
5016 + ' dh = document.body.clientWidth / document.body.clientHeight;'#13#10
5017 + ' ih = Image1.width / Image1.height;'#13#10
5018 + ' if (document.body.clientWidth < document.body.clientHeight) {'#13#10
5019 + ' if (ih > dh)'#13#10
5020 + ' Image1.width = document.body.clientWidth;'#13#10
5022 + ' Image1.height = document.body.clientHeight;'#13#10
5024 + ' if (ih < dh)'#13#10
5025 + ' Image1.height = document.body.clientHeight;'#13#10
5027 + ' Image1.width = document.body.clientWidth;'#13#10
5030 + ' Message.style.display = "none";'#13#10
5034 + '<body topmargin="0" leftmargin="0" style="border-width: 1px; overflow:hidden; border-style: solid;" onLoad="init()">'#13#10
5035 + '<div align="center" id="Message">
\83v
\83\8c\83r
\83\85\81[
\8dì
\90¬
\92\86</div>'#13#10
5036 + '<div align="center"><img name="Image1" border="0" src="%ImageURL%"></div>'#13#10
5038 sl := TStringList.Create;
5041 HtmlFileName := GikoSys.GetAppDir + HTML_FILE_NAME;
5042 sl.Text := AnsiReplaceStr(html, '%ImageURL%', FPreviewURL);
5043 sl.SaveToFile(HtmlFileName);
5050 NavURL := HtmlFileName;
5052 TargetFrameName := '';
5055 GikoSys.ParseURI(FPreviewURL, Protocol, Host, Path, Document, Port, Bookmark);
5056 Referer := Protocol + '://' + Host;
5058 Referer := Referer + ':' + Port;
5059 Referer := Referer + Path;
5060 Headers := 'Referer: ' + Referer;
5061 FPreviewBrowser.Navigate(NavURL, Flags, TargetFrameName, PostData, Headers);
5062 if ARect.Top + WindowHeight > Screen.DesktopHeight then
5063 ARect.Top := Screen.DesktopHeight - WindowHeight;
5064 if ARect.Left + WindowWidth > Screen.DesktopWidth then
5065 ARect.Left := Screen.DesktopWidth - WindowWidth;
5066 if ARect.Left < Screen.DesktopLeft then ARect.Left := Screen.DesktopLeft;
5067 if ARect.Bottom < Screen.DesktopTop then ARect.Bottom := Screen.DesktopTop;
5069 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST, ARect.Left, ARect.Top, WindowWidth, WindowHeight, SWP_NOACTIVATE or SWP_HIDEWINDOW);
5070 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
5071 FPreviewBrowserRect := ARect;
5072 // Style := GetWindowLong(FPreviewBrowser.Handle, GWL_EXSTYLE);
5073 // SetWindowLong(FPreviewBrowser.Handle, GWL_EXSTYLE, Style xor WS_EX_APPWINDOW);
5077 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
5082 if PreviewTimer.Enabled then
5083 PreviewTimer.Enabled := False;
5084 if (FHint <> nil) and (IsWindowVisible(FHint.Handle)) then begin
5085 FHint.ReleaseHandle;
5089 if (FPreviewBrowser <> nil)
5090 and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
5091 //
\82±
\82±
\82Å
\8fÁ
\82³
\82ê
\82é
\82Ì
\82ª
\96â
\91è
5092 //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Å
\95\
\8e¦
\94Í
\88Í
\94»
\92è
\82Å
\82«
\82Ä
\82¢
\82é
\82Í
\82¸
5093 Pos := Mouse.CursorPos;
5094 Pos.X := Pos.X + Left;
5095 Pos.Y := Pos.Y + Top;
5096 if (FPreviewBrowserRect.Left > Pos.X) or
5097 (FPreviewBrowserRect.Right < Pos.X) or
5098 (FPreviewBrowserRect.Top > Pos.Y) or
5099 (FPreviewBrowserRect.Bottom < Pos.Y) then begin
5100 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
5104 Message.Result := 1;
5107 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
5109 GikoDM.MsgBarCloseAction.Execute;
5112 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
5114 Doc: IHtmlDocument2;
5115 Range: IHTMLTxtRange;
5118 ThreadItem: TThreadItem;
5121 FactiveContent.IDAnchorPopup('');
5122 Doc := FactiveContent.Browser.Document as IHtmlDocument2;
5123 if Assigned(Doc) then begin
5124 Range := Doc.selection.createRange as IHTMLTxtRange;
5125 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
5126 s := ZenToHan(Trim(s));
5127 if GikoSys.IsNumeric(s) then begin
5129 ThreadItem := GetActiveContent;
5130 if ThreadItem <> nil then begin
5131 Num := StrToInt64(s);
5132 FHint.PopupType := gptThread;
5133 HTMLCreater.SetResPopupText(FHint, ThreadItem, Num, Num, False, False);
5134 if FHint.ResCount <> 0 then
5145 procedure TGikoForm.ShowTextPopup;
5150 // if Trim(s) = '' then
5153 FHint.Font.Name := GikoSys.Setting.HintFontName;
5154 FHint.Font.Size := GikoSys.Setting.HintFontSize;
5155 FHint.Font.Color := GikoSys.Setting.HintFontColor;
5156 FHint.Color := GikoSys.Setting.HintBackColor;
5157 FHint.HeaderBold := GikoSys.Setting.ResPopupHeaderBold;
5159 if FHint.PopupType = gptRaw then
5160 ARect := FHint.CalcHintRect(Screen.Width, FHint.Caption, nil)
5162 ARect := FHint.CalcHintRect(Screen.Width, '', nil);
5163 case GikoSys.Setting.PopupPosition of
5164 gppRightTop: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - (ARect.Bottom - ARect.Top) - 15);
5165 gppRight: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
5166 gppRightBottom: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y + 15);
5167 gppTop: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - (ARect.Bottom - ARect.Top) - 15);
5168 gppCenter: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - ((ARect.Bottom - ARect.Top) div 2));
5169 gppBottom: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y + 15);
5170 gppLeftTop: OffsetRect(ARect, p.x + 15, p.y - (ARect.Bottom - ARect.Top) - 15);
5171 gppLeft: OffsetRect(ARect, p.x + 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
5172 gppLeftBottom: OffsetRect(ARect, p.x + 15, p.y + 15); //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g
\82P
\82Ì453
\8e\81\82É
\8a´
\8eÓ
5174 //FHint.ActivateHint(ARect, s);
5175 if FHint.PopupType = gptRaw then
5176 FHint.ActivateHint(ARect, FHint.Caption)
5178 FHint.ActivateHint(ARect, '');
5180 FHint.ReleaseHandle;
5185 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
5187 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
5188 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
5190 if FTreeType = gttHistory then begin
5191 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
5192 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
5196 TreeView.Items.Clear;
5200 procedure TGikoForm.SetLinkBar;
5204 ToolButton: TLinkToolButton;
5205 MenuItem: TMenuItem;
5206 oldIgnoreResize : TResizeType;
5208 oldIgnoreResize := FIsIgnoreResize;
5209 FIsIgnoreResize := rtResizing;
5210 MainCoolBar.Bands.BeginUpdate;
5212 LinkBarPopupMenu.Items.Clear;
5213 for i := LinkToolBar.ButtonCount - 1 downto 0 do
5214 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
5215 LinkToolBar.Buttons[i].Free;
5216 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5217 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5218 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5219 ToolButton := TLinkToolButton.Create(LinkToolBar);
5220 // ToolButton.Parent := LinkToolBar;
5221 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
5222 MenuItem := TMenuItem.Create(Self);
5223 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
5224 LinkBarPopupMenu.Items.Add(MenuItem);
5225 ToolButton.MenuItem := MenuItem;
5226 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
5227 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
5228 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
5229 ToolButton.OnClick := FavoriteClick;
5230 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
5231 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
5232 ToolButton.OnClick := FavoriteClick;
5234 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
5235 ToolButton.Left := 10000;
5236 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
5237 ToolButton.AutoSize := True;
5238 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
5239 ToolButton.OnDragOver := FavoriteDragOver;
5240 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
5241 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
5242 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
5243 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
5244 //ToolButton.DragMode := dmAutomatic;
5245 ToolButton.DragMode := dmManual;
5246 ToolButton.PopupMenu := FavoriteTreePopupMenu;
5248 LinkToolBar.InsertControl(ToolButton);
5253 { if LinkToolBar.ButtonCount = 0 then begin
5254 ToolButton := TLinkToolButton.Create(LinkToolBar);
5255 ToolButton.Style := tbsButton;
5256 ToolButton.ImageIndex := -1;
5257 ToolButton.Caption := '';
5258 LinkToolBar.InsertControl(ToolButton);
5261 MainCoolBar.Bands.EndUpdate;
5262 LoadCoolBarSettings;
5263 FIsIgnoreResize := oldIgnoreResize;
5267 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5275 if Sender = FavoriteTreeView then begin
5276 Node := FavoriteTreeView.GetNodeAt(X, Y);
5281 bound := Node.DisplayRect( False );
5282 height := bound.Bottom - bound.Top;
5283 if (bound.Top + height / 2) <= Y then
5284 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
5289 if Node.IsFirstNode then
5294 if FDropSpaceNode <> nil then
5295 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
5298 if Change then begin
5299 if FDropSpaceNode <> nil then
5300 FDropSpaceNode.Free;
5302 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
5303 FDropSpaceNode.MoveTo( Node, naInsert );
5304 FDropSpaceNode.ImageIndex := -1;
5305 FDropSpaceNode.SelectedIndex := -1;
5309 if Source = FavoriteTreeView then begin
5310 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
5315 end else if Source = BrowserTab then
5317 else if Source = ListView then
5319 else if Source is TLinkToolButton then
5321 else if Source = TreeView then
5327 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5330 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
5333 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
5335 // FDragging := true;
5338 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
5340 SenderNode: TTreeNode;
5341 LinkToolButton: TLinkToolButton;
5344 LinkToolButton := TLinkToolButton( Sender );
5345 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5346 SenderNode.Selected := False;
5347 FavoriteDragDrop( SenderNode, Source );
5353 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5355 favButton : TLinkToolButton;
5356 favThreadItem : TFavoriteThreadItem;
5362 if Sender is TLinkToolButton then begin
5363 favButton := TLinkToolButton( Sender );
5364 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5365 favThreadItem := TFavoriteThreadItem( favButton.Data );
5366 if favThreadItem.Item <> nil then
5367 InsertBrowserTab( favThreadItem.Item, False );
5375 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5379 TToolButton( Sender ).DragMode := dmManual;
5380 if ssLeft in Shift then begin
5381 // 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)
5382 if FDragTime = 0 then begin
5383 FDragTime := GetTickCount();
5385 Now := GetTickCount();
5386 if (Now - FDragTime) > 500 then begin
5387 if FDragButton <> TToolButton( Sender ) then begin
5389 FDragButton := TToolButton( Sender );
5390 TToolButton(Sender).BeginDrag(false ,5);
5393 {$IF Defined(debug)}
5394 ShowMessage('Error');
5405 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5410 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5415 for i := 0 to ToolBar.ButtonCount - 1 do
5416 if ToolBar.Buttons[i].Visible then
5417 Result := Result + ToolBar.Buttons[i].Width;
5420 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5422 Control : TWinControl;
5425 Control := FindControl(BandInfo^.hwndChild);
5426 if Control = nil then
5429 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5430 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5431 idx := MainCoolBar.Bands[ i ].ID;
5435 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5436 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
5437 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5438 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5439 BandInfo^.cxMinChild := 0;
5440 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
5441 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5442 end else if Control = LinkToolBar then begin
5443 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5444 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5445 BandInfo^.cxMinChild := 0;
5446 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5447 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5448 end else begin // AddressToolBar
5449 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5450 BandInfo^.cxMinChild := 0;
5451 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5455 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5461 ChevronPopupMenu.Items.Clear;
5463 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5464 if MainCoolBar.Bands[ i ].Visible then begin
5465 if Idx = Int64(RebarChevron^.uBand) then begin
5472 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5473 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5475 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5476 ToolBarChevronMenu(StdToolBar);
5477 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5481 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5482 ChevronPopupMenu.Popup(p.x, p.y);
5486 procedure TGikoForm.MenuBarChevronMenu;
5487 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5493 for i := 0 to MenuItem.Count - 1 do begin
5495 if MenuItem[i] is TFavoriteMenuItem then begin
5496 Item := TFavoriteMenuItem.Create(Self);
5497 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5499 Item := TMenuItem.Create(Self);
5500 Item.Caption := MenuItem[i].Caption;
5501 Item.Action := MenuItem[i].Action;
5502 Item.ImageIndex := MenuItem[i].ImageIndex;
5503 Item.OnClick := MenuItem[i].OnClick;
5504 PopupItem.Add(Item);
5505 if MenuItem[i].Count > 0 then
5506 SetSubMenu(MenuItem[i], Item);
5515 ChevronPopupMenu.Items.Clear;
5516 ChevronPopupMenu.Images := MainMenu.Images;
5517 bw := GetWidthAllToolButton(MenuToolBar);
5518 if MenuToolBar.Width < bw then begin
5520 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5521 w := w + MenuToolBar.Buttons[i].Width;
5522 if MenuToolBar.Width <= w then begin
5523 Item := TMenuItem.Create(Self);
5524 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5525 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5526 ChevronPopupMenu.Items.Add(Item);
5527 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5533 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5534 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5539 if Assigned(PopupMenu.OnPopup) then
5540 PopupMenu.OnPopup(nil);
5541 for i := 0 to PopupMenu.Items.Count - 1 do begin
5543 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5544 Item := TFavoriteMenuItem.Create(Self);
5545 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5547 Item := TMenuItem.Create(Self);
5548 Item.Caption := PopupMenu.Items[i].Caption;
5549 Item.Action := PopupMenu.Items[i].Action;
5550 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5551 Item.OnClick := PopupMenu.Items[i].OnClick;
5552 PopupItem.Add(Item);
5561 ChevronPopupMenu.Items.Clear;
5562 ChevronPopupMenu.Images := ToolBar.HotImages;
5563 bw := GetWidthAllToolButton(ToolBar);
5564 if ToolBar.Width < bw then begin
5566 for i := 0 to ToolBar.ButtonCount - 1 do begin
5567 if ToolBar.Buttons[i].Visible then
5568 w := w + ToolBar.Buttons[i].Width;
5569 if ToolBar.Width <= w then begin
5570 if ToolBar.Buttons[i].Tag = 0 then begin
5571 Item := TMenuItem.Create(Self);
5572 if ToolBar.Buttons[i].Style = tbsSeparator then
5575 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5576 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5579 Item.Caption := ToolBar.Buttons[i].Caption;
5580 Item.Action := ToolBar.Buttons[i].Action;
5582 //Item.Visible := True;
5584 ChevronPopupMenu.Items.Add(Item);
5585 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5587 Item.OnClick := nil;
5588 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5596 procedure TGikoForm.LinkBarChevronMenu;
5601 Item: TFavoriteMenuItem;
5603 Button: TLinkToolButton;
5605 ChevronPopupMenu.Items.Clear;
5606 ChevronPopupMenu.Images := LinkToolBar.Images;
5607 bw := GetWidthAllToolButton(LinkToolBar);
5608 if LinkToolBar.Width < bw then begin
5610 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5611 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5612 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5613 w := w + LinkToolBar.Buttons[j].Width;
5614 if LinkToolBar.Width <= w then begin
5615 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5616 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5617 Item := TFavoriteMenuItem.Create(Self);
5618 if TObject(Button.Data) is TFavoriteFolder then begin
5619 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5620 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5621 Item.OnClick := FavoriteClick;
5622 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5623 Item.OnClick := FavoriteClick;
5625 Item.Data := Button.Data;
5626 Item.Caption := LinkToolBar.Buttons[j].Caption;
5627 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5628 ChevronPopupMenu.Items.Add(Item);
5639 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5640 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5641 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5643 \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É
5644 \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
5646 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5648 bandInfo : tagREBARBANDINFOA;
5649 pBandInfo : PReBarBandInfoA;
5656 pBandInfo := @bandInfo;
5657 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5658 bandInfo.cbSize := sizeof( bandInfo );
5659 bandInfo.hwndChild := h;
5660 bandInfo.cyMinChild := bar.Height;
5661 bar.OnBandInfo( nil, pBandInfo );
5662 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5664 for i := bar.Bands.Count - 1 downto 0 do begin
5665 if bar.Bands[ i ].Control.Handle = h then begin
5671 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5675 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5677 Control: TWinControl;
5680 Control := FindControl(BandInfo^.hwndChild);
5681 if Control = nil then
5684 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5685 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5686 idx := ListCoolBar.Bands[ i ].ID;
5690 if Control = ListToolBar then begin
5691 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5692 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5693 BandInfo^.cxMinChild := 0;
5694 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5695 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5697 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5698 BandInfo^.cxMinChild := 0;
5699 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5703 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5708 ChevronPopupMenu.Items.Clear;
5709 Idx := RebarChevron^.uBand;
5710 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5711 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5712 ToolBarChevronMenu(ListToolBar);
5715 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5716 ChevronPopupMenu.Popup(p.x, p.y);
5720 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5722 Control: TWinControl;
5725 Control := FindControl(BandInfo^.hwndChild);
5726 if Control = nil then
5729 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5730 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5731 idx := BrowserCoolBar.Bands[ i ].ID;
5735 if Control = BrowserToolBar then begin
5736 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5737 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5738 BandInfo^.cxMinChild := 0;
5739 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5740 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5742 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5743 BandInfo^.cxMinChild := 0;
5744 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5748 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5753 ChevronPopupMenu.Items.Clear;
5754 Idx := RebarChevron^.uBand;
5755 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5756 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5757 ToolBarChevronMenu(BrowserToolBar)
5760 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5761 ChevronPopupMenu.Popup(p.x, p.y);
5765 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5767 if Column^.iImage = -1 then begin
5768 Column^.mask := Column^.mask or LVCF_FMT;
5770 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5771 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5775 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5780 for i := bar.ButtonCount - 1 downto 0 do begin
5781 if bar.Buttons[ i ].Action = action then begin
5782 Result := bar.Buttons[ i ];
5788 procedure TGikoForm.SetToolBarPopup;
5791 aIEButton : TToolButton;
5792 aCabinetBBSButton : TToolButton;
5793 aResRangeButton : TToolButton;
5794 aThreadRangeButton: TToolButton;
5796 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5798 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5799 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5800 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5801 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5802 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5804 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5805 if aIEButton <> nil then
5806 aIEButton.DropdownMenu := BrowserPopupMenu;
5807 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5808 if aCabinetBBSButton <> nil then
5809 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5810 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5811 if aResRangeButton <> nil then
5812 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5813 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5814 if aThreadRangeButton <> nil then
5815 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5818 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5819 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5823 // browserPos : TPoint;
5827 Wnd := WindowFromPoint(Mouse.CursorPos);
5829 if WheelDelta > 0 then
5834 if (Wnd = BrowserTab.Handle) or
5835 (Wnd = BrowserTab.Parent.Handle) then begin
5836 BrowserTab.ScrollTabs(Delta);
5838 if FIsHandledWheel then begin
5839 FIsHandledWheel := False;
5842 FIsHandledWheel := True;
5843 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5844 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5846 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5854 procedure TGikoForm.SetSelectWord( const text : string );
5856 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5857 ClearThreadRengeAction;
5859 if Length( text ) = 0 then
5861 GikoDM.AllItemAction.Checked := True;
5862 SetListViewType( gvtAll )
5864 SetListViewType( gvtUser, text, false );
5868 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5871 SetSelectWord( SelectComboBox.Text );
5875 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5876 Shift: TShiftState);
5884 if Key = VK_Return then
5887 end else if Key = 229 then begin
5888 if GikoSys.Setting.UseUndecided then begin
5889 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5890 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5891 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5892 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5893 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5894 SetLength(Str, Len);
5895 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5896 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5897 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5899 Str := SelectComboBox.Text + Str;
5901 if (Length(Str) > 0) then begin
5905 end else if Length( SelectComboBox.Text ) = 0 then
5907 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5908 *
\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
5909 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5912 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5913 ClearThreadRengeAction;
5917 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
5918 procedure TGikoForm.ClearThreadRengeAction;
5920 //
\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é
5921 if GikoDM.AllItemAction.Checked then
5922 GikoDM.AllItemAction.Checked := False;
5923 if GikoDM.LogItemAction.Checked then
5924 GikoDM.LogItemAction.Checked := False;
5925 if GikoDM.NewItemAction.Checked then
5926 GikoDM.NewItemaction.Checked := False;
5927 if GikoDM.LiveItemAction.Checked then
5928 GikoDM.LiveItemAction.Checked := False;
5929 if GikoDM.ArchiveItemAction.Checked then
5930 GikoDM.ArchiveItemAction.Checked := False;
5934 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5939 if Length( SelectComboBox.Text ) = 0 then
5941 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5942 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5947 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5948 procedure TGikoForm.ModifySelectList;
5955 if not SelectComboBoxPanel.Visible then
5958 if Length( SelectComboBox.Text ) > 0 then
5960 oldText := SelectComboBox.Text;
5961 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5963 GikoSys.Setting.SelectTextList.Delete( idx );
5964 idx := SelectComboBox.Items.IndexOf( oldText );
5966 SelectComboBox.Items.Delete( idx );
5967 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5968 SelectComboBox.Items.Insert( 0, oldText );
5969 SelectComboBox.Text := oldText;
5977 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5978 Shift: TShiftState; X, Y: Integer);
5983 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5986 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5987 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5988 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5990 If w <= 50 Then Begin
5991 //
\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
5992 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
5993 pos.X := pos.X + (50 - w);
5995 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
5999 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
6000 //If SelectComboBox.Width <> w Then Begin
6001 If SelectComboBoxPanel.Width <> w Then Begin
6002 SelectComboBoxPanel.Width := w;
6003 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
6004 GikoSys.Setting.SelectComboBoxWidth := w;
6005 DraggingSelectComboBoxPosition := pos;
6007 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
6008 ResetBandInfo( ListCoolBar, ListToolBar );
6014 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
6015 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6019 IsDraggingSelectComboBox := True;
6022 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
6026 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
6027 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6029 IsDraggingSelectComboBox := False;
6033 procedure TGikoForm.StatusBarResize(Sender: TObject);
6035 StatusBar.Panels[1].Width := StatusBar.Width -
6036 StatusBar.Panels[0].Width -
6037 StatusBar.Panels[THREADSIZE_PANEL].Width -
6038 StatusBar.Panels[NGWORDNAME_PANEL].Width;
6040 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
6043 if (Length( SelectComboBox.Text ) = 0) or
6044 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
6046 SelectComboBox.Text := '';
6047 SelectComboBox.Color := clWindow;
6052 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
6055 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
6058 if TObject(SenderNode.Data) is TFavoriteFolder then
6059 SourceNode.MoveTo(SenderNode, naAddChild)
6061 SourceNode.MoveTo(SenderNode, naInsert);
6065 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
6069 FavoBoardItem: TFavoriteBoardItem;
6070 FavoThreadItem: TFavoriteThreadItem;
6072 ThreadItem: TThreadItem;
6075 if (SenderNode = nil) or (Source = nil) then
6078 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
6079 FavNode := SenderNode.Parent
6081 FavNode := SenderNode;
6085 if Source is TBoard then begin
6086 Board := TBoard( Source );
6087 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
6088 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
6089 Node.ImageIndex := 15;
6090 Node.SelectedIndex := 15;
6091 end else if Source is TFavoriteBoardItem then begin
6092 FavoBoardItem := TFavoriteBoardItem( Source );
6093 Board := FavoBoardItem.Item;
6094 if Board <> nil then
6095 if not Board.IsThreadDatRead then
6096 GikoSys.ReadSubjectFile(Board);
6097 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
6098 Node.ImageIndex := 15;
6099 Node.SelectedIndex := 15;
6100 end else if Source is TThreadItem then begin
6101 ThreadItem := TThreadItem( Source );
6102 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
6103 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
6104 Node.ImageIndex := 16;
6105 Node.SelectedIndex := 16;
6106 end else if Source is TBrowserRecord then begin
6107 ThreadItem := TBrowserRecord( Source ).Thread;
6108 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
6109 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
6110 Node.ImageIndex := 16;
6111 Node.SelectedIndex := 16;
6112 end else if Source is TFavoriteThreadItem then begin
6113 FavoThreadItem := TFavoriteThreadItem( Source );
6114 ThreadItem := FavoThreadItem.Item;
6115 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
6116 Node.ImageIndex := 16;
6117 Node.SelectedIndex := 16;
6120 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
6122 FavoriteMoveTo( SenderNode, Node );
6126 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
6129 SourceNode: TTreeNode;
6130 LinkToolButton: TLinkToolButton;
6133 if SenderNode = nil then
6136 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
6137 if FDropSpaceNode <> nil then
6138 SenderNode := FDropSpaceNode;
6140 if Source = FavoriteTreeView then begin
6141 SourceNode := FavoriteTreeView.Selected;
6142 FavoriteMoveTo( SenderNode, SourceNode );
6143 end else if Source is TLinkToolButton then begin
6144 LinkToolButton := TLinkToolButton( Source );
6145 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
6146 FavoriteMoveTo( SenderNode, SourceNode );
6147 end else if Source = BrowserTab then begin
6148 idx := BrowserTab.TabIndex;
6149 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
6150 end else if Source = ListView then begin
6151 FavoriteAddTo( SenderNode, ListView.Selected.Data );
6152 end else if Source = TreeView then begin
6153 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
6157 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
6160 SenderNode: TTreeNode;
6163 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
6164 if SenderNode <> nil then begin
6165 FavoriteDragDrop( SenderNode, Source );
6168 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
6169 if FDropSpaceNode <> nil then begin
6171 FDropSpaceNode.Delete;
6173 FDropSpaceNode := nil;
6176 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6177 FavoriteDM.Modified := true;
6183 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
6184 Node: TTreeNode; var S: String);
6186 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6187 FavoriteDM.Modified := true;
6189 FavoriteTreeView.ReadOnly := True;
6194 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
6195 Shift: TShiftState);
6197 if not TTreeView(Sender).IsEditing then begin
6201 FClickNode := FavoriteTreeView.Selected;
6202 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
6206 FClickNode := FavoriteTreeView.Selected;
6207 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
6211 FavoriteClick( FavoriteTreeView.Selected );
6212 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
6216 FClickNode := FavoriteTreeView.Selected;
6217 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
6221 //
\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·
6222 if Key = VK_ESCAPE then begin
6223 if (TTreeView(Sender).Selected <> nil) then begin
6224 TTreeView(Sender).Selected.Text := FOrigenCaption;
6226 TTreeView(Sender).Selected.Focused := False;
6232 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
6235 LinkToolButton: TLinkToolButton;
6238 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
6240 FClickNode := FavoriteTreeView.Selected;
6242 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
6244 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
6245 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6246 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6247 FClickNode := FavoriteTreeView.Items[i];
6251 for i := 0 to FClickNode.Count - 1 do begin
6252 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
6253 FClickNode := FClickNode.Item[i];
6260 if FClickNode = nil then begin
6261 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6262 FavoriteTreeDeletePopupMenu.Visible := False;
6263 FavoriteTreeRenamePopupMenu.Visible := False;
6264 FavoriteTreeNewFolderPopupMenu.Visible := False;
6265 FavoriteTreeURLCopyPopupMenu.Visible := False;
6266 FavoriteTreeNameCopyPopupMenu.Visible := False;
6267 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6268 FavoriteTreeReloadPopupMenu.Visible := False;
6269 FavoriteTreeLogDeletePopupMenu.Visible := False;
6270 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6271 end else if FClickNode.IsFirstNode then begin
6272 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6273 FavoriteTreeDeletePopupMenu.Visible := False;
6274 FavoriteTreeRenamePopupMenu.Visible := False;
6275 FavoriteTreeNewFolderPopupMenu.Visible := True;
6276 FavoriteTreeURLCopyPopupMenu.Visible := False;
6277 FavoriteTreeNameCopyPopupMenu.Visible := False;
6278 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6279 FavoriteTreeReloadPopupMenu.Visible := False;
6280 FavoriteTreeLogDeletePopupMenu.Visible := False;
6281 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6282 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
6283 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6284 FavoriteTreeDeletePopupMenu.Visible := True;
6285 FavoriteTreeRenamePopupMenu.Visible := False;
6286 FavoriteTreeNewFolderPopupMenu.Visible := True;
6287 FavoriteTreeURLCopyPopupMenu.Visible := False;
6288 FavoriteTreeNameCopyPopupMenu.Visible := False;
6289 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6290 FavoriteTreeReloadPopupMenu.Visible := False;
6291 FavoriteTreeLogDeletePopupMenu.Visible := False;
6292 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6293 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
6294 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6295 FavoriteTreeDeletePopupMenu.Visible := True;
6296 FavoriteTreeRenamePopupMenu.Visible := True;
6297 FavoriteTreeNewFolderPopupMenu.Visible := True;
6298 FavoriteTreeURLCopyPopupMenu.Visible := False;
6299 FavoriteTreeNameCopyPopupMenu.Visible := True;
6300 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6301 FavoriteTreeReloadPopupMenu.Visible := False;
6302 FavoriteTreeLogDeletePopupMenu.Visible := False;
6303 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6304 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
6305 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6306 FavoriteTreeDeletePopupMenu.Visible := True;
6307 FavoriteTreeRenamePopupMenu.Visible := True;
6308 FavoriteTreeNewFolderPopupMenu.Visible := True;
6309 FavoriteTreeURLCopyPopupMenu.Visible := True;
6310 FavoriteTreeNameCopyPopupMenu.Visible := True;
6311 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6312 FavoriteTreeReloadPopupMenu.Visible := True;
6313 FavoriteTreeLogDeletePopupMenu.Visible := True;
6314 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6315 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
6316 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6317 FavoriteTreeDeletePopupMenu.Visible := True;
6318 FavoriteTreeRenamePopupMenu.Visible := True;
6319 FavoriteTreeNewFolderPopupMenu.Visible := True;
6320 FavoriteTreeURLCopyPopupMenu.Visible := True;
6321 FavoriteTreeNameCopyPopupMenu.Visible := True;
6322 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6323 FavoriteTreeReloadPopupMenu.Visible := True;
6324 FavoriteTreeLogDeletePopupMenu.Visible := False;
6325 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6327 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6328 FavoriteTreeDeletePopupMenu.Visible := False;
6329 FavoriteTreeRenamePopupMenu.Visible := False;
6330 FavoriteTreeNewFolderPopupMenu.Visible := False;
6331 FavoriteTreeURLCopyPopupMenu.Visible := False;
6332 FavoriteTreeNameCopyPopupMenu.Visible := False;
6333 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6334 FavoriteTreeReloadPopupMenu.Visible := False;
6335 FavoriteTreeLogDeletePopupMenu.Visible := False;
6336 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6341 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
6346 if not (TObject(node.Data) is TFavoriteFolder) then
6349 for i := 0 to node.Count - 1 do
6351 if TObject(node.Item[i].Data) is TFavoriteFolder then
6352 FavoriteBrowseFolder( node.Item[i] )
6353 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
6354 FavoriteClick( node.Item[i], False );
6358 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6364 for i := 0 to Node.Count - 1 do begin
6365 if Node.Item[i].Data = FindPointer then begin
6366 Result := Node.Item[i];
6368 end else if Node.Item[i].Count > 0 then begin
6369 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6370 if Found <> nil then begin
6381 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6385 SenderNode: TTreeNode;
6389 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6390 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6391 SenderNode := FavoriteTreeView.Items[i];
6395 SenderNode.Selected := False;
6397 FavoriteDragDrop( SenderNode, Source );
6402 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6403 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6405 if FDragWFirst <> true then begin
6406 FDragWFirst := false;
6408 end else if (abs( X - FMouseDownPos.X ) < Mouse.DragThreshold)
6409 and (abs( Y - FMouseDownPos.Y ) < Mouse.DragThreshold) then begin
6413 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6414 if GikoSys.Setting.ListWidthState = glsMin then begin
6415 GikoDM.BrowserMaxAndFocusAction.Execute;
6418 if GikoSys.Setting.ListHeightState = glsMin then begin
6419 GikoDM.BrowserMaxAndFocusAction.Execute;
6425 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6426 Y: Integer; State: TDragState; var Accept: Boolean);
6429 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6433 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6437 if FDropSpaceNode <> nil then begin
6439 FDropSpaceNode.Delete;
6441 FDropSpaceNode := nil;
6443 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6444 FavoriteDM.Modified := true;
6450 procedure TGikoForm.ListCoolBarContextPopup(Sender: TObject;
6451 MousePos: TPoint; var Handled: Boolean);
6454 FToolBarSettingSender := tssList;
6455 MousePos := ListCoolBar.ClientToScreen( MousePos );
6456 MainCoolBarPopupMenu.Popup( MousePos.X, MousePos.Y );
6460 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
6461 MousePos: TPoint; var Handled: Boolean);
6464 FToolBarSettingSender := tssMain;
6465 MousePos := MainCoolBar.ClientToScreen( MousePos );
6466 MainCoolBarPopupMenu.Popup( MousePos.X, MousePos.Y );
6470 procedure TGikoForm.BrowserCoolBarContextPopup(Sender: TObject;
6471 MousePos: TPoint; var Handled: Boolean);
6474 FToolBarSettingSender := tssBrowser;
6475 MousePos := BrowserCoolBar.ClientToScreen( MousePos );
6476 MainCoolBarPopupMenu.Popup( MousePos.X, MousePos.Y );
6479 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6481 if FListViewBackGroundColor <> value then begin
6482 FListViewBackGroundColor := value;
6483 ListView.Color := FListViewBackGroundColor;
6486 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6488 threadItem : TThreadItem;
6492 if FClickNode = nil then Exit;
6494 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6496 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6497 if threadItem = nil then
6499 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6501 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6503 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6504 if boardItem = nil then
6506 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6512 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6513 MousePos: TPoint; var Handled: Boolean);
6517 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6518 if BrowserTab.TabIndex <> idx then begin
6519 BrowserTab.TabIndex := idx;
6520 BrowserTab.OnChange(nil);
6524 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6526 ThreadItem: TThreadItem;
6532 boardPlugIn : TBoardPlugIn;
6534 if Number = 0 then Exit;
6535 ThreadItem := GetActiveContent;
6537 if ThreadItem <> nil then begin
6538 //if ThreadItem.IsBoardPlugInAvailable then begin
6539 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6540 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6541 //boardPlugIn := ThreadItem.BoardPlugIn;
6542 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6544 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6545 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6546 //
\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
6547 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6549 FileName := ThreadItem.FilePath;
6550 tmp := GikoSys.ReadThreadFile(FileName, Number);
6552 if tmp <> '' then begin
6553 THTMLCreate.DivideStrLine(tmp, @Res);
6555 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6556 if ReplaceTag then begin
6557 Header := CustomStringReplace(Header, '</b>', '',true);
6558 Header := CustomStringReplace(Header, '<b>', '',true);
6559 Header := CustomStringReplace(Header, '<br>', '',true);
6560 Header := DeleteFontTag(Header);
6562 //if ThreadItem.IsBoardPlugInAvailable then begin
6563 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6564 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6565 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6567 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6568 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6569 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6570 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6573 Body := CustomStringReplace(Body, '</a>', '',true);
6575 Body := HTMLCreater.DeleteLink(Body);
6576 if ReplaceTag then begin
6577 Body := CustomStringReplace(Body, '<', '<');
6578 Body := CustomStringReplace(Body, '>', '>');
6579 Body := CustomStringReplace(Body, '"', '"');
6580 Body := CustomStringReplace(Body, '&', '&');
6581 //Body := CustomStringReplace(Body, ' ', ' ');
6584 Header := Header + Body;
6586 Clipboard.SetTextBuf( PChar(Header) );
6592 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6594 AddRoundNameMenu(dummy1);
6597 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6599 FavoriteDM.URLReplace(oldURLs, newURLs);
6602 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6604 RoundList.URLReplace(oldURLs, newURLs);
6607 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6609 Filename = 'tab.sav';
6610 bFilename = '~tab.sav';
6616 oldBoardName: string;
6618 newBoardName: string;
6619 TabList: TStringList;
6622 if oldURLs.Count <> newURLs.Count then begin
6625 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6626 TabList := TStringList.Create;
6628 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6630 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6631 //
\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
6632 for i := 0 to oldURLs.Count - 1 do begin
6633 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6634 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6635 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6636 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6637 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6638 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6640 for j := 0 to TabList.Count - 1 do begin
6641 tempString := TabList[j];
6642 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6643 tempString := StringReplace(tempString, oldHost, newHost,[]);
6644 TabList[j] := tempString;
6648 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6650 if FileExists( GikoSys.GetAppDir + Filename) then begin
6651 if FileExists( GikoSys.GetAppDir + bFilename) then
6652 DeleteFile(GikoSys.GetAppDir + bFilename);
6654 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6655 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6658 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6666 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6667 procedure TGikoForm.OnMinimize;
6669 if FActiveContent <> nil then begin
6670 FIsMinimize := mtMinimizing;
6671 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
6675 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6676 procedure TGikoForm.OnMinimized;
6678 FIsMinimize := mtMinimized;
6682 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6684 CoolBarResized( Sender, BrowserCoolBar );
6687 // *************************************************************************
6688 // ExternalBoardPlugInMain
6689 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6690 // *************************************************************************
6691 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6694 boardPlugIn : TBoardPlugIn;
6697 if not (Sender is TMenuItem) then
6700 item := TMenuItem( Sender );
6701 if not Assigned( Pointer( item.Tag ) ) then
6704 //
\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·
6705 boardPlugIn := TBoardPlugIn( item.Tag );
6706 boardPlugIn.PlugInMenu( item.Handle );
6709 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6710 procedure TGikoForm.TreeClick( Node : TTreeNode );
6716 if FTreeType = gttHistory then begin
6718 if TObject( Node.Data ) is TFavoriteThreadItem then
6719 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6720 FavoriteClick( Node );
6723 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6724 if ActiveList = Node.Data then
6727 ActiveListColumnSave;
6729 if TObject(Node.Data) is TBBS then begin
6730 SetActiveList(Node.data);
6731 end else if TObject(Node.Data) is TCategory then begin
6732 SetActiveList(Node.data);
6733 end else if TObject(Node.Data) is TBoard then begin
6734 if not TBoard(Node.Data).IsThreadDatRead then begin
6735 Screen.Cursor := crHourGlass;
6737 if not TBoard(Node.Data).IsThreadDatRead then
6738 GikoSys.ReadSubjectFile(Node.Data);
6740 Screen.Cursor := crDefault;
6743 Sort.SetSortDate(Now());
6744 SetActiveList(Node.data);
6747 if TObject( Node.Data ) is TBoard then begin // not TCategory
6748 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6749 if GikoSys.Setting.ListWidthState = glsMax then begin
6750 GikoDM.BrowserMinAction.Execute;
6751 if GikoForm.Visible then
6755 if GikoSys.Setting.ListHeightState = glsMax then begin
6756 GikoDM.BrowserMinAction.Execute;
6757 if GikoForm.Visible then
6765 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6766 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6769 ThreadItem : TThreadItem;
6770 shiftDown : Boolean;
6773 if Node = nil then Exit;
6775 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6777 if FTreeType = gtt2ch then begin
6778 if not (TObject(Node.Data) is TBoard) then Exit;
6779 Board := TBoard(Node.Data);
6780 DownloadList(Board, shiftDown);
6781 end else if FTreeType = gttHistory then begin
6782 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6783 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6784 DownloadContent(ThreadItem, shiftDown);
6788 // *************************************************************************
6789 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82ÌKeyDown
\83C
\83x
\83\93\83g
6790 // *************************************************************************
6791 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6792 Shift: TShiftState);
6794 if Key = VK_BACK then begin
6795 // UpFolderButtonClick(Sender);
6796 end else if Key = VK_SPACE then begin
6797 TreeDoubleClick( TreeView.Selected );
6798 end else if Key = VK_RETURN then begin
6799 TreeClick( TreeView.Selected );
6800 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6803 //!
\82¨
\8bC
\82É
\93ü
\82è
\82ÌMouseDown
\83C
\83x
\83\93\83g
6804 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6805 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6807 favItem : TTreeNode;
6808 favThreadItem : TFavoriteThreadItem;
6814 if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6815 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6816 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6817 rect := FavoriteTreeView.Selected.DisplayRect(true);
6818 //
\83A
\83C
\83R
\83\93\95ª
\8d¶
\82É
\82¸
\82ç
\82·
6819 if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
6820 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6821 if ssDouble in Shift then begin
6822 FClickNode := FavoriteTreeView.Selected;
6823 GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6827 TObject(FavoriteTreeView.Selected));
6834 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6835 if favItem = nil then Exit;
6837 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6838 favThreadItem := TFavoriteThreadItem( favItem.Data );
6839 if favThreadItem.Item <> nil then
6840 InsertBrowserTab( favThreadItem.Item, False );
6847 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6850 if FIsIgnoreResize <> rtNone then
6853 if GikoSys.Setting.ListOrientation = gloVertical then begin
6854 if GikoSys.Setting.ListHeightState = glsMin then begin
6855 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6856 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6862 procedure TGikoForm.OnResized;
6867 FOldFormWidth := Width;
6868 FIsIgnoreResize := rtNone;
6873 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6874 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6879 //
\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)
6880 if FActiveContent <> nil then begin
6881 doc := Idispatch( olevariant(FActiveContent.Browser.ControlInterface).Document) as IHTMLDocument2;
6882 doc.Body.ScrollTop := FActiveContent.Thread.ScrollTop;
6884 FIsMinimize := mtNone;
6889 // *************************************************************************
6890 //!
\82¨
\8bC
\82É
\93ü
\82è
\83c
\83\8a\81[
\82Ì
\83}
\83E
\83X
\83A
\83b
\83v
\83C
\83x
\83\93\83g
6891 // *************************************************************************
6892 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6897 stlist : TStringList;
6898 i, count, rc : Integer;
6904 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then
6905 FActiveContent.Browser.SetFocus;
6908 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6909 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6910 e := IHTMLDocument2(FActiveContent.Browser.Document).elementFromPoint(p.x, p.y);
6911 if (Assigned(e)) then begin
6912 if (e.className = 'date') or (e.id = 'date') then begin
6914 if AnsiPos('id', AnsiLowerCase(AID)) > 0 then begin
6915 AID := Copy(AID, AnsiPos('id', AnsiLowerCase(AID)) - 1, 11);
6916 if AnsiPos(' be:', AnsiLowerCase(AID)) > 0 then begin
6917 AID := Copy(AID, 1, AnsiPos(' BE:', AnsiLowerCase(AID)) - 1)
6920 stlist := TStringList.Create;
6922 stList.DelimitedText := AID;
6924 for i := 0 to stList.Count - 1 do
6925 if Length(WideString(stList[i])) = 8 then begin
6926 if GikoSys.NotDateorTimeString(stList[i]) then begin
6935 count := GikoSys.GetSameIDResCount(AID, FActiveContent.Thread);
6937 if count > 20 then begin
6938 rc := GikoUtil.MsgBox(Handle,
6939 '20
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6940 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6941 MB_YESNO or MB_ICONQUESTION);
6942 limited := rc <> ID_YES;
6944 body := GikoSys.GetSameIDResAnchor(AID, FActiveContent.Thread, limited);
6945 FActiveContent.IDAnchorPopup(body);
6954 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
6955 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
6957 SelectTimer.Interval := 0;
6958 if not (ListView.Selected = nil) then
6959 if( FActiveContent = nil) or
6960 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
6965 function TGikoForm.GetTabURLs(AStringList: TStringList) : Boolean;
6967 rec : TBrowserRecord;
6970 bound := BrowserTab.Tabs.Count -1;
6971 if bound = -1 then begin
6973 Exit; //for
\82É
\94ò
\82Î
\82È
\82¢
\82Å
\91\80\8dì
\82ð
\94²
\82¯
\82é
6976 for i := 0 to bound do begin
6978 rec := TBrowserRecord( BrowserTab.Tabs.Objects[ i ] );
6979 if( rec <> nil) and (rec.Thread <> nil) then
6980 AStringList.Add( rec.Thread.URL );
6987 function TGikoForm.SaveTabURLs : Boolean;
6989 Filename = 'tab.sav';
6990 bFilename = '~tab.sav';
6992 SaveStringList: TStringList;
6996 SaveStringList := TStringList.Create;
6998 if GetTabURLs(SaveStringList) then begin
7000 if FileExists( GikoSys.GetAppDir + Filename) then begin
7001 if FileExists( GikoSys.GetAppDir + bFilename) then
7002 DeleteFile(GikoSys.GetAppDir + bFilename);
7004 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
7005 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
7009 SaveStringList.SaveToFile(GikoSys.GetAppDir + Filename);
7013 SaveStringList.Free;
7017 function TGikoForm.LoadTabURLs : Boolean;
7019 TABFILE = 'tab.sav';
7024 GikoTab : TGikoTabAppend;
7028 fileName := ExtractFilePath(Application.ExeName) + TABFILE;
7029 URLs := TStringList.Create();
7030 GikoTab := GikoSys.Setting.BrowserTabAppend;
7034 if FileExists(fileName) then begin
7035 URLs.LoadFromFile(fileName);
7036 bound := URLs.Count - 1;
7037 if bound > -1 then begin
7038 GikoSys.Setting.BrowserTabAppend := gtpLast;//TGikoTabAppend(1);
7039 for i := 0 to bound do begin
7040 item := BBSsFindThreadFromURL( URLs[ i ] );
7042 InsertBrowserTab( item, false );
7044 //
\8dÅ
\8f\89\82Ì
\82P
\96\87\82É
\90Ý
\92è
\83A
\83h
\83\8c\83X
\82Ì
\90Ý
\92è
\82Ì
\82½
\82ß
\82Ì
\83J
\83\89\8cÄ
\82Ñ
7045 if BrowserTab.Tabs.Count > 0 then begin
7046 BrowserTab.OnChange(nil);
7053 on EFOpenError do begin
7054 ShowMessage('
\83^
\83u
\83t
\83@
\83C
\83\8b\82ª
\8aJ
\82¯
\82Ü
\82¹
\82ñ');
7058 GikoSys.Setting.BrowserTabAppend := GikoTab;
7065 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
7066 procedure TGikoForm.ActiveListColumnSave;
7068 ActivListObj : TObject;
7069 i, id, idx : Integer;
7070 BBSOrder : TGikoBBSColumnList;
7071 CategoryOrder : TGikoCategoryColumnList;
7072 BoardOrder : TGikoBoardColumnList;
7075 ActivListObj := ActiveList;
7076 if ActivListObj is TBBS then begin
7077 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
7078 BBSOrder := TGikoBBSColumnList.Create;
7080 for i := 0 to ListView.Columns.Count - 1 do begin
7081 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
7082 idx := ListView.Column[ i ].Tag;
7083 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
7084 BBSOrder.Add( TGikoBBSColumnID( id ) );
7085 //
\95\9d\82Ì
\95Û
\91¶
7086 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
7088 for i := 0 to ListView.Columns.Count - 1 do
7089 //
\8f\87\8f\98\82Ì
\95Û
\91¶
7090 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
7094 end else if ActivListObj is TCategory then begin
7095 //=====
\94Â
\83\8a\83X
\83g =====
7096 CategoryOrder := TGikoCategoryColumnList.Create;
7098 for i := 0 to ListView.Columns.Count - 1 do begin
7099 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
7100 idx := ListView.Column[ i ].Tag;
7101 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
7102 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
7103 //
\95\9d\82Ì
\95Û
\91¶
7104 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
7106 for i := 0 to ListView.Columns.Count - 1 do
7107 //
\8f\87\8f\98\82Ì
\95Û
\91¶
7108 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
7112 end else if ActivListObj is TBoard then begin
7113 //=====
\83X
\83\8c\83\8a\83X
\83g =====
7114 BoardOrder := TGikoBoardColumnList.Create;
7116 for i := 0 to ListView.Columns.Count - 1 do begin
7117 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
7118 idx := ListView.Column[ i ].Tag;
7119 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
7120 BoardOrder.Add( TGikoBoardColumnID( id ) );
7121 //
\95\9d\82Ì
\95Û
\91¶
7122 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
7124 for i := 0 to ListView.Columns.Count - 1 do
7125 //
\8f\87\8f\98\82Ì
\95Û
\91¶
7126 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
7134 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
7135 Column: TListColumn; Point: TPoint);
7141 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
7142 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
7143 ListColumnPopupMenu.Items.Items[ i ].Free;
7145 //
\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¢)
7146 if TObject( FActiveList ) is TBBS then begin
7148 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
7149 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
7150 item := TMenuItem.Create( ListColumnPopupMenu );
7151 item.Caption := GikoBBSColumnCaption[ i ];
7153 item.OnClick := ListColumnPopupMenuOnClick;
7154 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
7155 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
7156 item.Checked := True;
7160 ListColumnPopupMenu.Items.Add( item );
7163 end else if TObject( FActiveList ) is TCategory then begin
7165 //=====
\94Â
\83\8a\83X
\83g =====
7166 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
7167 item := TMenuItem.Create( ListColumnPopupMenu );
7168 item.Caption := GikoCategoryColumnCaption[ i ];
7170 item.OnClick := ListColumnPopupMenuOnClick;
7171 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
7172 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
7173 item.Checked := True;
7177 ListColumnPopupMenu.Items.Add( item );
7180 end else if TObject( FActiveList ) is TBoard then begin
7182 //=====
\83X
\83\8c\83\8a\83X
\83g =====
7183 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
7184 item := TMenuItem.Create( ListColumnPopupMenu );
7185 item.Caption := GikoBoardColumnCaption[ i ];
7187 item.OnClick := ListColumnPopupMenuOnClick;
7188 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
7189 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
7190 item.Checked := True;
7194 ListColumnPopupMenu.Items.Add( item );
7199 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
7200 Point := ListView.ClientToScreen( Point );
7201 if ListColumnPopupMenu.Items.Count > 0 then
7202 ListColumnPopupMenu.Popup( Point.X, Point.Y );
7206 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
7207 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
7214 if not (Sender is TMenuItem) then
7217 ActiveListColumnSave;
7218 item := TMenuItem( Sender );
7220 if TObject( FActiveList ) is TBBS then
7221 orderList := GikoSys.Setting.BBSColumnOrder
7222 else if TObject( FActiveList ) is TCategory then
7223 orderList := GikoSys.Setting.CategoryColumnOrder
7224 else if TObject( FActiveList ) is TBoard then
7225 orderList := GikoSys.Setting.BoardColumnOrder
7229 if item.Checked then begin
7230 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
7231 for i := orderList.Count - 1 downto 0 do begin
7232 if Integer( orderList[ i ] ) = item.Tag then begin
7233 orderList.Delete( i );
7238 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
7239 orderList.Add( Pointer( item.Tag ) );
7242 SetActiveList( FActiveList );
7246 procedure TGikoForm.OnGestureStart(Sender: TObject);
7251 procedure TGikoForm.OnGestureMove(Sender: TObject);
7258 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
7260 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
7261 s := MouseGesture.GetGestureStr;
7263 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7264 if Action <> nil then
7265 ActStr := '
\81i' + Action.Caption + '
\81j';
7266 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
7267 StatusBar.Panels[1].Text := s;
7270 procedure TGikoForm.OnGestureEnd(Sender: TObject);
7275 s := MouseGesture.GetGestureStr;
7276 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7277 if Action <> nil then
7279 StatusBar.Panels[1].Text := '';
7282 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
7283 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
7285 ThreadItem: TThreadItem;
7287 DefaultDraw := true;
7288 if TObject(Item.Data) is TThreadItem then begin
7289 ThreadItem := TThreadItem(Item.Data);
7290 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
7291 ListView.Canvas.Brush.Color := FOddColor;
7292 //
\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
7293 if (GikoSys.Setting.UnFocusedBold) and
7294 (Item.Selected) and (not ListView.Focused) then begin
7295 ListView.Canvas.Font.Style := [fsBold];
7298 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
7301 if ThreadItem.UnRead then
7302 ListView.Canvas.Font.Style := [fsBold];
7307 procedure TGikoForm.FormActivate(Sender: TObject);
7309 if GikoSys.Setting.GestureEnabled then begin
7310 GikoSys.Setting.Gestures.ClearGesture;
7311 GikoSys.Setting.Gestures.LoadGesture(
7312 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
7313 MouseGesture.UnHook;
7314 MouseGesture.OnGestureStart := OnGestureStart;
7315 MouseGesture.OnGestureMove := OnGestureMove;
7316 MouseGesture.OnGestureEnd := OnGestureEnd;
7317 MouseGesture.SetHook(Handle);
7319 //MouseGesture.UnHook;
7320 MouseGesture.OnGestureStart := nil;
7321 MouseGesture.OnGestureMove := nil;
7322 MouseGesture.OnGestureEnd := nil;
7326 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
7328 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
7329 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
7333 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
7338 affectedBand : TCoolBand;
7341 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
7342 FIsIgnoreResize := rtResizing;
7343 PostMessage( Handle, USER_RESIZED, 0, 0 );
7345 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
7346 if CoolBar = MainCoolBar then begin
7347 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
7348 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7349 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7350 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7351 GikoSys.Setting.MainCoolSet[i] := CoolSet;
7353 end else if CoolBar = ListCoolBar then begin
7354 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
7355 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7356 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7357 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7358 GikoSys.Setting.ListCoolSet[i] := CoolSet;
7360 end else if CoolBar = BrowserCoolBar then begin
7361 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
7362 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7363 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7364 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7365 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
7368 if not (Sender is TToolBar) or (CoolBar = nil) then
7370 toolbar := TToolBar( Sender );
7371 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
7372 affectedBand := nil;
7373 for i := CoolBar.Bands.Count - 1 downto 0 do begin
7374 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
7375 band := CoolBar.Bands[ i ];
7376 if band.Break or (i = 0) then begin
7377 if i + 1 < CoolBar.Bands.Count then
7378 if not CoolBar.Bands[ i + 1 ].Break then
7379 affectedBand := CoolBar.Bands[ i + 1 ];
7382 affectedBand := CoolBar.Bands[ i - 1 ];
7387 //
\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·
7388 if CoolBar = MainCoolBar then begin
7389 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
7390 coolSet.FCoolWidth := toolbar.Width + 25;
7391 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
7392 if affectedBand <> nil then begin
7393 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
7394 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7395 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
7397 end else if CoolBar = ListCoolBar then begin
7398 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
7399 coolSet.FCoolWidth := toolbar.Width + 25;
7400 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
7401 if affectedBand <> nil then begin
7402 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
7403 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7404 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
7406 end else if CoolBar = BrowserCoolBar then begin
7407 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
7408 coolSet.FCoolWidth := toolbar.Width + 25;
7409 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
7410 if affectedBand <> nil then begin
7411 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
7412 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7413 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
7420 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
7422 CoolBarResized( Sender, MainCoolBar );
7425 procedure TGikoForm.ListToolBarResize(Sender: TObject);
7427 CoolBarResized( Sender, ListCoolBar );
7430 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
7432 CoolBarResized( Sender, BrowserCoolBar );
7435 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
7436 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
7438 ThreadItem : TThreadItem;
7439 ReadList : TStringList;
7440 wordCount : TWordCount;
7442 ThreadItem := GetActiveContent;
7443 ReadList := TStringList.Create;
7444 wordCount := TWordCount.Create;
7446 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7447 {$IFDEF SPAM_FILTER_ENABLED}
7448 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7449 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7450 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
7451 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7452 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7454 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7455 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7460 FActiveContent.Repaint := true;
7461 if ThreadItem <> nil then
7462 InsertBrowserTab( ThreadItem, True );
7465 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
7466 procedure TGikoForm.IndividualAbonID(Atype : Integer);
7468 ThreadItem : TThreadItem;
7471 ReadList : TStringList;
7472 wordCount : TWordCount;
7474 No := KokoPopupMenu.Tag;
7475 if No = 0 then Exit;
7476 ThreadItem := GetActiveContent;
7477 if ThreadItem = nil then Exit;
7478 body := TStringList.Create;
7480 GikoSys.GetSameIDRes(No, ThreadItem, body);
7482 ReadList := TStringList.Create;
7483 wordCount := TWordCount.Create;
7485 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7486 {$IFDEF SPAM_FILTER_ENABLED}
7487 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7488 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7490 for i := 0 to body.Count - 1 do begin
7491 {$IFDEF SPAM_FILTER_ENABLED}
7492 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7493 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7494 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7496 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7497 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7503 FActiveContent.Repaint := true;
7504 if ThreadItem <> nil then
7505 InsertBrowserTab( ThreadItem, True );
7512 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7514 firstElement: IHTMLElement;
7515 document: IHTMLDocument2;
7517 document := FActiveContent.Browser.Document as IHTMLDocument2;
7518 if Assigned(document) then
7519 firstElement := document.all.item('idSearch', 0) as IHTMLElement;
7520 if Assigned(firstElement) then
7521 if firstElement.style.visibility <> 'hidden' then
7522 firstElement.style.visibility := 'hidden';
7526 procedure TGikoForm.RepaintAllTabsBrowser();
7529 ThreadItem: TThreadItem;
7531 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7532 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7534 ThreadItem := GetActiveContent;
7535 if ThreadItem <> nil then
7536 InsertBrowserTab( ThreadItem, True );
7540 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7541 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7542 Shift: TShiftState);
7544 //
\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Ì
7545 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7546 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7547 SelectTimer.Interval := 0;
7548 if not (GikoSys.Setting.BrowserTabVisible) then begin
7549 if (GetActiveList is TBoard) then begin
7550 //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
7551 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7552 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7553 (Key = VK_UP) or (Key = VK_DOWN)) then
7554 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7558 // *************************************************************************
7559 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7560 // *************************************************************************
7561 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7562 Node: TTreeNode; var AllowEdit: Boolean);
7564 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7565 FOrigenCaption := Node.Text;
7567 // *************************************************************************
7568 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7569 // *************************************************************************
7570 function TGikoForm.GetMainForm(): TComponent;
7572 Result := Application.MainForm;
7574 // *************************************************************************
7575 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7576 // *************************************************************************
7577 function TGikoForm.GetScreenCursor(): TCursor;
7579 Result := Screen.Cursor;
7581 // *************************************************************************
7582 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7583 // *************************************************************************
7584 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7586 if (Screen.Cursor <> Cursor) then
7587 Screen.Cursor := Cursor;
7589 // *************************************************************************
7590 //!
\83X
\83N
\83\8a\81[
\83\93\8fã
\82ÉEditorForm
\82ª
\82¢
\82é
\82©
7591 // *************************************************************************
7592 function TGikoForm.EditorFormExists(): boolean;
7597 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82Ì
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81AEditorForm
\82ð
\92T
\82·
7598 for i := 0 to Screen.CustomFormCount - 1 do begin
7599 if TObject(Screen.CustomForms[i]) is TEditorForm then begin
7605 // *************************************************************************
7606 //!
\83X
\83N
\83\8a\81[
\83\93\8fã
\82É
\82¢
\82é
\82·
\82×
\82Ä
\82ÌEditorForm
\82©
\82ç
\96¼
\91O
\82Ì
\97\9a\97ð
\82ð
\8dí
\8f\9c\82·
\82é
7607 // *************************************************************************
7608 procedure TGikoForm.AllEditroFormNameTextClearClear();
7612 for i := 0 to Screen.CustomFormCount - 1 do begin
7613 if TObject(Screen.CustomForms[i]) is TEditorForm then
7614 TEditorForm(Screen.CustomForms[i]).NameComboBox.Items.Clear;
7617 // *************************************************************************
7618 //!
\83X
\83N
\83\8a\81[
\83\93\8fã
\82É
\82¢
\82é
\82·
\82×
\82Ä
\82ÌEditorForm
\82©
\82ç
\83\81\81[
\83\8b\97\9a\97ð
\82ð
\8dí
\8f\9c\82·
\82é
7619 // *************************************************************************
7620 procedure TGikoForm.AllEditroFormMailTextClearClear();
7624 for i := 0 to Screen.CustomFormCount - 1 do begin
7625 if TObject(Screen.CustomForms[i]) is TEditorForm then
7626 TEditorForm(Screen.CustomForms[i]).MailComboBox.Items.Clear;
7629 // *************************************************************************
7630 //!
\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
7631 // *************************************************************************
7632 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7634 //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Ì
7635 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7636 if GikoDM.CabinetVisibleAction.Enabled then begin
7637 GikoDM.CabinetVisibleAction.Execute;
7640 // *************************************************************************
7641 //!
\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
7642 // *************************************************************************
7643 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7645 if GikoDM.FavoriteArrangeAction.Enabled then begin
7646 GikoDM.FavoriteArrangeAction.Execute;
7649 // *************************************************************************
7650 //!
\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
7651 // *************************************************************************
7652 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7653 var Handled: Boolean);
7657 //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ß
7658 if Self.Active then begin
7660 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7661 WM_KEYFIRST..WM_KEYLAST :
7663 //
\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ç
7664 if (Msg.message <> WM_KEYUP) and (Msg.message <> WM_CHAR) then begin
7665 wmMsg.Msg := Msg.message;
7666 wmMsg.CharCode := Word(Msg.wParam);
7667 wmMsg.KeyData := Msg.lParam;
7668 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7669 Self.OnShortCut(wmMsg, Handled);
7675 // *************************************************************************
7676 //!
\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
7677 // *************************************************************************
7678 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7680 Application.ProcessMessages;
7681 if not Application.Terminated then begin
7682 if PreviewTimer.Enabled then
7683 PreviewTimer.Enabled := False;
7684 //
\83t
\83H
\81[
\83J
\83X
\82ª
\91¼
\82Ì
\83A
\83v
\83\8a\82É
\95Ï
\82í
\82Á
\82½
\82Æ
\82«
\82É
\83q
\83\93\83g
\82ð
\8fÁ
\8b\8e
7685 if FHint <> nil then begin
7686 FHint.ReleaseHandle;
7689 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7690 if FPreviewBrowser <> nil then
7691 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7695 // *************************************************************************
7696 //!
\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
7697 // *************************************************************************
7698 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7703 if (Sender <> nil) then begin
7704 s := ' [' + Sender.ClassName + ']' + #13#10;
7706 s := ' [ Sender is nil ] ' + #13#10;
7709 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7711 // *************************************************************************
7712 //!
\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¬
7713 // *************************************************************************
7714 procedure TGikoForm.CreateControlThread();
7716 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7717 FControlThread := TThreadControl.Create(True);
7718 FControlThread.MaxThreadCount := 1;
7719 FControlThread.Resume;
7720 FControlThread.OnDownloadEnd := DownloadEnd;
7721 FControlThread.OnDownloadMsg := DownloadMsg;
7722 FControlThread.OnWork := Work;
7723 FControlThread.OnWorkBegin := WorkBegin;
7724 FControlThread.OnWorkEnd := WorkEnd;
7726 // *************************************************************************
7727 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7728 // *************************************************************************
7729 procedure TGikoForm.CreateBrowsers(count: Integer);
7732 newBrowser: TWebBrowser;
7734 BrowserNullTab := TBrowserRecord.Create;
7735 BrowserNullTab.Browser := Browser;
7736 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7737 FBrowsers := TList.Create;
7738 for i := 0 to count -1 do begin
7739 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7740 newBrowser := FBrowsers[FBrowsers.Count - 1];
7741 TOleControl(newBrowser).Parent := BrowserPanel;
7742 TOleControl(newBrowser).Align := alNone;
7743 TOleControl(newBrowser).Left := 0;
7744 TOleControl(newBrowser).Top := 0;
7745 newBrowser.RegisterAsDropTarget := False;
7746 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7747 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7748 newBrowser.OnEnter := BrowserEnter;
7749 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7750 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7751 newBrowser.Navigate(BLANK_HTML);
7752 ShowWindow(newBrowser.Handle, SW_HIDE);
7754 BrowserNullTab.Browser.BringToFront;
7755 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7756 //
\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Ì
7757 //
\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Å
7758 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7759 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7760 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7761 Application.ProcessMessages;
7764 // *************************************************************************
7765 //!
\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é
7766 // *************************************************************************
7767 procedure TGikoForm.SetSelectComboBox();
7769 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7772 ToolButton: TToolButton;
7774 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7775 SelectComboBoxPanel.Visible := False;
7777 for i := ListToolBar.ControlCount - 1 downto 0 do
7779 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7781 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7782 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7783 SelectComboBoxPanel.Parent := ListToolBar;
7784 SelectComboBoxPanel.Visible := True;
7786 SelectComboBox.Left := 0;
7787 SelectComboBox.Top := 0;
7788 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7789 SelectComboBox.Width := SelectComboBoxPanel.Width -
7790 SelectComboBoxSplitter.Width;
7792 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7793 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7794 if ToolButton = nil then begin
7795 ToolButton := TToolButton.Create(ListToolBar);
7796 ToolButton.Name := DUMMYCOMPNAME;
7798 ToolButton.Style := tbsSeparator;
7799 ToolButton.Width := 0;
7800 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7801 ListToolBar.InsertControl(ToolButton);
7802 ToolButton.Visible := False;
7804 //
\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·
7805 if (i + 1) < ListToolBar.ControlCount then
7806 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7807 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7808 ListToolBar.Controls[ i + 1 ].Visible := False;
7811 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7812 ListToolBar.Controls[ i ].Visible := False;
7820 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\83}
\83E
\83X
\83_
\83E
\83\93\83C
\83x
\83\93\83g
7821 procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7822 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7829 if (TreeView.Selected <> nil) and
7830 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7831 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
7832 rect := TreeView.Selected.DisplayRect(true);
7833 //
\83A
\83C
\83R
\83\93\95ª
\82¾
\82¯
\8d¶
\82É
\82¸
\82ç
\82·
7834 if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
7835 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7836 //
\83N
\83\8a\83b
\83N
\82Æ
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82ð
\83R
\83R
\82Å
\94»
\92è
7837 if ssDouble in Shift then begin
7838 TreeDoubleClick( TreeView.Selected );
7840 TreeClick(TreeView.Selected);
7847 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
7848 procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7852 if ActionList <> nil then begin
7853 SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7855 for i := 0 to ActionList.ActionCount - 1 do begin
7857 FActionListGroupIndexes[i] :=
7858 TCustomAction(ActionList.Actions[i]).GroupIndex;
7859 TCustomAction(ActionList.Actions[i]).GroupIndex
7862 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7868 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
7869 procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7873 if ActionList <> nil then begin
7874 if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7875 for i := 0 to ActionList.ActionCount - 1 do begin
7877 TCustomAction(ActionList.Actions[i]).GroupIndex
7878 := FActionListGroupIndexes[i];
7880 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7886 //!
\82±
\82Ì
\83\8c\83X
\82ÌURL
\8eæ
\93¾
7887 procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
7891 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
7892 procedure TGikoForm.RefreshListView(Thread: TThreadItem);
7894 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
7895 if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin