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 procedure GetTabURLs(AStringList: TStringList);
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 \83X
\83\8c\83b
\83h
\8ew
\92è
760 procedure DeleteTab(ThreadItem: TThreadItem); overload;
761 //
\83^
\83u
\82ð
\8dí
\8f\9c \83u
\83\89\83E
\83U
\83\8c\83R
\81[
\83h
\81i
\83^
\83u
\81j
\8ew
\92è
762 procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
763 //
\83^
\83u
\8dí
\8f\9c\81i
\8eÀ
\91\95\95\94\81j
764 procedure DeleteTab(index, selectIndex: Integer); overload;
765 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
766 procedure BrowserMovement(const AName: string);
767 //Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
768 function GetMainForm(): TComponent;
769 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
770 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
771 procedure OnGestureStart(Sender: TObject);
772 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
773 procedure OnGestureMove(Sender: TObject);
774 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
775 procedure OnGestureEnd(Sender: TObject);
776 ///
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
777 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
778 //ListView
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\82ð
\8eæ
\93¾
\82·
\82é
779 procedure SelectListItem(List: TList);
781 procedure SaveTabURLs;
782 ///
\83^
\83u
\93Ç
\82Ý
\8fo
\82µ
783 procedure LoadTabURLs;
784 //
\8ew
\92è
\82µ
\82½
\83\8c\83X
\82ð
\83R
\83s
\81[
\82·
\82é
785 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
787 procedure ModifySelectList;
789 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
791 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
793 procedure SetSelectRoundName(Sender: TObject);
795 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
797 function WebBrowserClick(Sender: TObject): WordBool;
798 //!
\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é
799 procedure SetSelectComboBox();
802 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
805 TFavoriteMenuItem = class(TMenuItem)
809 property Data: Pointer read FData write FData;
812 TBBSMenuItem = class(TMenuItem)
816 property Data: Pointer read FData write FData;
819 TLinkToolButton = class(TToolButton)
823 property Data: Pointer read FData write FData;
832 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
833 YofUtils, ShellAPI, ToolBarUtil, ToolBarSetting,
834 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
835 FavoriteArrange, AddressHistory, Preview, Gesture,
836 About, Option, Round, Splash, Sort, ListSelect, Imm,
837 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
838 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
839 InputAssistDataModule;
842 BLANK_HTML: string = 'about:blank';
843 BROWSER_COUNT = 5; //
\83u
\83\89\83E
\83U
\82Ì
\90\94
845 DandD_THRESHOLD = 5; //D&D
\82Ìè
\87\92l
\81ipixcel)
846 //
\83v
\83\8c\83r
\83\85\81[
\83t
\83@
\83C
\83\8b\96¼
847 HTML_FILE_NAME = 'temp_preview.html';
848 ITEM_ICON_THREADLOG1 = 6; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
849 ITEM_ICON_THREADLOG2 = 7; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
850 //
\83\81\83b
\83Z
\81[
\83WID
851 USER_TREECLICK = WM_USER + 2000;
852 USER_RESIZED = WM_USER + 2001;
853 USER_MINIMIZED = WM_USER + 2002;
854 USER_SETLINKBAR = WM_USER + 2003;
855 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
858 procedure TGikoForm.CreateParams(var Params: TCreateParams);
861 if FormStyle in [fsNormal, fsStayOnTop] then begin
862 if BorderStyle in [bsSingle, bsSizeable] then begin
863 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
864 Params.WndParent := 0;
869 procedure TGikoForm.FormCreate(Sender: TObject);
871 TVS_NOTOOLTIPS = $0080;
877 wp: TWindowPlacement;
881 Writeln('============================================================');
882 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
884 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
885 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¢');
886 Writeln('============================================================');
889 Sort.SetSortDate(Now());
891 FTreeType := gttNone;
892 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô
894 Application.HookMainWindow(Hook);
895 FIsIgnoreResize := rtResizing;
896 //ActionList
\82ÌGuoupIndex
\82ð
\95Û
\91¶
\82µ
\82Ä
\81A0
\82É
\83N
\83\8a\83A
\82·
\82é
\81B
897 //(
\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¢)
898 //
\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
899 GetGroupIndex(GikoDM.GikoFormActionList);
900 FSearchDialog := nil;
901 CreateBrowsers(BROWSER_COUNT);
903 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
906 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
907 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
909 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
910 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
912 EnabledCloseButton := True;
914 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
915 ListView.ViewStyle := GikoSys.Setting.ListStyle;
917 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
919 AnimePanel.Left := 0;
921 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
923 //
\83L
\83\83\83r
\83l
\83b
\83g
924 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
926 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
927 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
928 GikoDM.MsgBarVisibleActionExecute(nil);
929 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
931 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
932 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
933 GikoDM.StatusBarVisibleActionExecute(nil);
935 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
936 TreeView.Items.BeginUpdate;
937 FavoriteTreeView.Items.BeginUpdate;
938 ListView.Items.BeginUpdate;
940 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
941 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
942 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
943 TreeView.Color := GikoSys.Setting.CabinetBackColor;
944 FavoriteTreeView.Font.Assign(TreeView.Font);
945 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
947 ListView.Font.Name := GikoSys.Setting.ListFontName;
948 ListView.Font.Size := GikoSys.Setting.ListFontSize;
949 ListView.Font.Color := GikoSys.Setting.ListFontColor;
950 ListView.Font.Style := [];
951 if GikoSys.Setting.ListFontBold then
952 ListView.Font.Style := [fsbold];
953 if GikoSys.Setting.ListFontItalic then
954 ListView.Font.Style := ListView.Font.Style + [fsitalic];
956 ListViewBackGroundColor := clWhite; //
\83f
\83t
\83H
\83\8b\83g
\82É
\90Ý
\92è
\82µ
\82½
\82Ì
\82¿
957 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; //
\83\86\81[
\83U
\92è
\8b`
\82É
\95Ï
\8dX
958 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
959 FOddColor := GikoSys.Setting.OddColor;
962 TreeView.Items.EndUpdate;
963 FavoriteTreeView.Items.EndUpdate;
964 ListView.Items.EndUpdate;
966 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
967 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
969 //
\83~
\83\85\81[
\83g
\82Ì
\8fó
\91Ô
\82ð
\90Ý
\92è
970 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
972 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
973 FResRangeMenuSelect := GikoSys.ResRange;
974 case GikoSys.ResRange of
977 GikoDM.AllResAction.Execute;
981 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
982 GikoDM.SelectResAction.Checked := True;
985 case FResRangeMenuSelect of
986 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
987 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
988 100: GikoDM.OnlyAHundredResAction.Checked := True;
992 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\95\
\8e¦
\94Í
\88Í
993 case GikoSys.Setting.ThreadRange of
996 GikoDM.AllItemAction.Checked := True;
1001 GikoDM.LogItemAction.Checked := True;
1006 GikoDM.NewItemAction.Checked := True;
1011 GikoDM.LiveItemAction.Checked := True;
1012 ViewType := gvtLive;
1016 GikoDM.ArchiveItemAction.Checked := True;
1017 ViewType := gvtArch;
1022 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
1023 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1024 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1025 BrowserTab.Font.Style := [];
1026 if GikoSys.Setting.BrowserTabFontBold then
1027 BrowserTab.Font.Style := [fsBold];
1028 if GikoSys.Setting.BrowserTabFontItalic then
1029 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1030 BrowserTab.DoubleBuffered := True;
1031 FDragWFirst := false;
1032 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1034 //
\83u
\83\89\83E
\83U
\83^
\83u
1035 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1037 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1038 GikoDM.BrowserTabTopAction.Checked := True;
1040 GikoDM.BrowserTabBottomAction.Checked := True;
1043 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1044 GikoDM.BrowserTabTabStyleAction.Checked := True;
1045 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1046 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1048 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1051 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1052 ProgressBar.Parent := StatusBar;
1053 ProgressBar.Top := 2;
1054 ProgressBar.Left := 0;
1055 ProgressBar.Width := StatusBar.Panels[0].Width;
1056 ProgressBar.Height := StatusBar.Height - 2;
1057 ProgressBar.Position := 0;
1059 //
\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Æ)
1060 InitializeBoardPlugIns;
1062 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1063 GikoSys.ListBoardFile;
1064 //
\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É
1066 //
\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è
1067 if (SplashWindow <> nil) then begin
1068 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1072 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1073 for i := Length(BBSs) - 1 downto 0 do begin
1074 if not BBSs[i].IsBoardFileRead then
1075 GikoSys.ReadBoardFile(BBSs[i]);
1077 if SplashWindow <> nil then begin
1078 SplashWindow.ProgressBar.StepBy(20);
1079 SplashWindow.Update;
1083 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1084 RoundList := TRoundList.Create;
1085 RoundList.LoadRoundBoardFile;
1086 RoundList.LoadRoundThreadFile;
1088 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1089 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1090 Style := Style or TVS_NOTOOLTIPS;
1091 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1093 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1094 TreeView.Align := alClient;
1095 FavoriteTreeView.Align := alClient;
1096 FavoriteTreeView.Visible := False;
1098 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1101 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1102 wp.length := sizeof(wp);
1103 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1104 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1105 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1106 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1107 wp.showCmd := SW_HIDE;
1108 SetWindowPlacement(Handle, @wp);
1111 if GikoSys.Setting.WindowMax then
1112 WindowState := wsMaximized;
1114 //
\83M
\83R
\83A
\83j
\83\81
1116 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1117 if FileExists(FileName) then
1118 Animate.FileName := FileName;
1126 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1127 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1128 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1131 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1132 FHistoryList := TList.Create;
1134 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1137 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1138 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1139 FavoriteDM.ReadFavorite;
1141 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1142 GikoDM.ArrangeAction.Execute;
1144 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1145 case GikoSys.Setting.ListWidthState of
1147 ViewPanel.Width := 1;
1148 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1149 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1152 ViewPanel.Width := GikoSys.Setting.ListWidth;
1153 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1154 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1157 ViewPanel.Width := GikoSys.Setting.ListWidth;
1158 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1159 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1163 case GikoSys.Setting.ListHeightState of
1165 ViewPanel.Height := 1;
1166 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1167 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1170 ViewPanel.Height := GikoSys.Setting.ListHeight;
1171 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1172 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1175 ViewPanel.Height := GikoSys.Setting.ListHeight;
1176 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1177 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1182 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1183 CreateControlThread();
1185 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1186 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1188 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1191 BrowserBoardNameLabel.Caption := '';
1192 BrowserNameLabel.Caption := '';
1195 FTabHintIndex := -1;
1197 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1198 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1199 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1201 MakeDefaultINIFile();
1202 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1203 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1204 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1205 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1208 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1209 SetSelectComboBox();
1211 //
\83A
\83h
\83\8c\83X
\83o
\81[
1212 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1214 //
\83\8a\83\93\83N
\83o
\81[
1216 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1218 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1219 if not FileExists(GikoSys.GetBoardFileName) then begin
1220 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
1221 + '
\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
1222 + '
\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';
1223 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1224 GikoDM.NewBoardAction.Execute;
1227 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1228 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1230 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1231 // FLastRoundTime := 0;
1234 FHint := TResPopup.Create(Self);
1236 ListView.OnData := TListViewUtils.ListViewData;
1238 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1239 CabinetVisible( False );
1240 if GikoSys.Setting.CabinetVisible then begin
1241 i := CabinetSelectPopupMenu.Items.Count - 1;
1242 if GikoSys.Setting.CabinetIndex = i - 1 then
1243 GikoDM.CabinetHistoryAction.Execute
1244 else if GikoSys.Setting.CabinetIndex = i then
1245 GikoDM.CabinetFavoriteAction.Execute
1247 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1248 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1249 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1250 FIsIgnoreResize := rtResizing;
1251 GikoDM.CabinetBBSAction.Execute;
1254 ShowBBSTreeOld( BBSs[ 0 ] );
1255 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1258 //
\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
1259 for i := 1 to ParamCount do begin
1260 MoveToURL(ParamStr(i));
1263 GikoDM.RepaintStatusBar;
1264 StatusBarResize(Sender);
1266 dummy1.Caption := ItemReservPMenu.Caption;
1267 dummy1.Hint := ItemReservPMenu.Hint;
1269 {$IFDEF SPAM_FILTER_ENABLED}
1270 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1271 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1274 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1275 MouseGesture := TMouseGesture.Create;
1276 GikoSys.Setting.Gestures.LoadGesture(
1277 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
1278 MouseGesture.Margin := GikoSys.Setting.Gestures.Margin;
1279 MouseGesture.OnGestureStart := OnGestureStart;
1280 MouseGesture.OnGestureMove := OnGestureMove;
1281 MouseGesture.OnGestureEnd := OnGestureEnd;
1282 if GikoSys.Setting.GestureEnabled then
1283 MouseGesture.SetHook( Handle );
1285 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1286 GikoSys.SetGikoMessage;
1288 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1289 if GikoSys.Setting.AutoLogin then
1290 GikoDM.LoginAction.Execute;
1292 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1294 //
\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è
1295 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1296 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1298 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\8f\89\8aú
\89»
1299 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1302 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1303 procedure TGikoForm.SaveCoolBarSettings;
1306 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1308 SaveMainCoolBarSettings;
1309 SaveBoardCoolBarSettings;
1310 SaveBrowserCoolBarSettings;
1313 procedure TGikoForm.SaveMainCoolBarSettings;
1318 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1319 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1320 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1321 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1322 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1323 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1326 procedure TGikoForm.SaveBoardCoolBarSettings;
1331 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1332 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1333 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1334 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1335 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1336 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1339 procedure TGikoForm.SaveBrowserCoolBarSettings;
1344 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1345 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1346 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1347 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1348 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1349 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1352 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1353 procedure TGikoForm.LoadCoolBarSettings;
1359 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1360 MainCoolBar.Bands.BeginUpdate;
1362 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1363 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1364 CoolSet := GikoSys.Setting.MainCoolSet[i];
1365 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1366 FIsIgnoreResize := rtNone;
1367 SaveCoolBarSettings;
1370 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1371 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1372 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1375 MainCoolBar.Bands.EndUpdate;
1378 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1379 ListCoolBar.Bands.BeginUpdate;
1381 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1382 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1383 CoolSet := GikoSys.Setting.ListCoolSet[i];
1384 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1385 FIsIgnoreResize := rtNone;
1386 SaveCoolBarSettings;
1389 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1390 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1391 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1394 ListCoolBar.Bands.EndUpdate;
1397 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1398 BrowserCoolBar.Bands.BeginUpdate;
1400 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1401 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1402 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1403 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1404 FIsIgnoreResize := rtNone;
1405 SaveCoolBarSettings;
1408 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1409 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1410 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1413 BrowserCoolBar.Bands.EndUpdate;
1418 procedure TGikoForm.FormShow(Sender: TObject);
1420 if FStartUp then begin
1421 ShowWindow(Application.Handle, SW_HIDE);
1423 //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½
1424 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1425 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1426 GikoDM.StdToolBarVisibleActionExecute( nil );
1427 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1428 GikoDM.AddressBarVisibleActionExecute( nil );
1429 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1430 GikoDM.LinkBarVisibleActionExecute( nil );
1431 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1432 GikoDM.ListToolBarVisibleActionExecute( nil );
1433 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1434 GikoDM.ListNameBarVisibleActionExecute( nil );
1435 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1436 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1437 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1438 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1440 // CoolBar
\95\9c\8c³
1441 LoadCoolBarSettings;
1443 //
\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é
1444 // ResetBandInfo( ListCoolBar, ListToolBar );
1445 FIsIgnoreResize := rtNone;
1447 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1448 if GikoSys.Setting.TabAutoLoadSave then begin
1449 GikoDM.TabAutoLoadAction.Execute;
1452 //ActionList
\82ÌGroupIndex
\82ð
\8c³
\82É
\96ß
\82·
1453 SetGroupIndex(GikoDM.GikoFormActionList);
1459 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1461 // if GikoForm.WindowState <> wsMinimized then
1462 // SaveCoolBarSettings;
1464 if ( GikoSys.Setting.ShowDialogForEnd ) and
1465 (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
1470 if GikoSys.Setting.TabAutoLoadSave then begin
1471 GikoDM.TabAutoSaveAction.Execute;
1474 if (SearchDialog <> nil) then begin
1475 if (SearchDialog.Visible) then begin
1478 SearchDialog.Release;
1481 SearchDialog := nil;
1485 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82Ì
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81AEditorForm
\82ð
\95Â
\82¶
\82é
1486 GikoDM.CloseAllEditorAction.Execute;
1488 Application.UnhookMainWindow(Hook);
1489 Application.Terminate;
1492 procedure TGikoForm.FormDestroy(Sender: TObject);
1495 // CoolSet: TCoolSet;
1496 wp : TWindowPlacement;
1499 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1501 MouseGesture.UnHook;
1505 ActiveListColumnSave;
1509 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1510 wp.length := sizeof(wp);
1511 GetWindowPlacement(Handle, @wp);
1512 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1513 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1514 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1515 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1516 GikoSys.Setting.WindowMax := WindowState = wsMaximized;
1518 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1519 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1520 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1521 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1522 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1523 if GikoDM.ArrangeAction.Checked then
1524 GikoSys.Setting.ListOrientation := gloVertical
1526 GikoSys.Setting.ListOrientation := gloHorizontal;
1527 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1532 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1533 if not GikoSys.Setting.ResRangeHold then
1534 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1537 if WindowState <> wsNormal then
1538 WindowState := wsNormal;
1539 SaveCoolBarSettings;
1541 GikoSys.Setting.WriteWindowSettingFile;
1542 GikoSys.Setting.WriteNameMailSettingFile;
1545 //
\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è
1546 //
\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¢
1548 //
\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
1550 //if (GikoForm.WindowState <> wsMinimized) and (GikoForm.WindowState <> wsMaximized) then
1552 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\90Ý
\92è
\82Ì
\95Û
\91¶
1553 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1555 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1557 //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é
1558 FavoriteDM.WriteFavorite;
1562 LockWindowUpdate(Self.Handle);
1564 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1565 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1566 GikoSys.Setting.ShowDialogForAllTabClose := false;
1567 GikoDM.AllTabCloseAction.Execute;
1568 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1572 for i := FBrowsers.Count - 1 downto 0 do begin
1573 TWebBrowser(FBrowsers[i]).Free;
1576 FBrowsers.Capacity := 0;
1581 if BrowserNullTab <> nil then begin
1582 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
1583 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
1585 BrowserNullTab.Free;
1591 TreeView.Items.BeginUpdate;
1592 TreeView.Items.GetFirstNode.Free;
1593 TreeView.Items.Clear;
1594 TreeView.Items.EndUpdate;
1598 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1600 //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
1601 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1605 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
1619 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶&
\94j
\8aü
1621 RoundList.SaveRoundFile;
1635 FControlThread.Terminate;
1636 FControlThread.WaitFor;
1640 FControlThread.Free;
1642 //
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82Á
\82Ä
\92Ç
\89Á
\82³
\82ê
\82½
\83\81\83j
\83\85\81[
\82ð
\8aJ
\95ú
\82·
\82é
1643 for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
1644 GikoForm.PlugInMenu.items[i].Free;
1646 GikoForm.PlugInMenu.Clear;
1649 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
1650 // 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Å
1651 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
1652 for i := Length(BoardGroups) - 1 downto 0 do begin
1653 //BoardGroups[i].Clear;
1654 BoardGroups[i].Free;
1658 for i := Length( BBSs ) - 1 downto 0 do begin
1659 if BBSs[ i ] <> nil then
1667 if FEvent <> nil then
1671 if FHint <> nil then begin
1672 FHint.ReleaseHandle;
1677 if TPreviewBrowser <> nil then begin
1678 FPreviewBrowser.Free;
1679 FPreviewBrowser := nil;
1683 LockWindowUpdate(0);
1686 //
\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
1687 procedure TGikoForm.SetBBSMenu;
1690 item : TBBSMenuItem;
1693 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
1694 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1696 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1697 CabinetSelectPopupMenu.Items[ i ].Free;
1698 CabinetMenu.Items[ i ].Free;
1699 BBSSelectPopupMenu.Items[ i ].Free;
1705 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
1706 for i := Length( BBSs ) - 1 downto 0 do begin
1708 item := TBBSMenuItem.Create( PopupMenu );
1709 item.Caption := BBSs[ i ].Title;
1710 item.Data := BBSs[ i ];
1711 item.OnClick := BBSMenuItemOnClick;
1712 CabinetSelectPopupMenu.Items.Insert( 0, item );
1713 item := TBBSMenuItem.Create( PopupMenu );
1714 item.Caption := BBSs[ i ].Title;
1715 item.Data := BBSs[ i ];
1716 item.OnClick := BBSMenuItemOnClick;
1717 CabinetMenu.Insert( 0, item );
1718 item := TBBSMenuItem.Create( PopupMenu );
1719 item.Caption := BBSs[ i ].Title;
1720 item.Data := BBSs[ i ];
1721 item.OnClick := BBSMenuItemOnClick;
1722 BBSSelectPopupMenu.Items.Insert( 0, Item );
1729 procedure TGikoForm.ReloadBBS;
1734 LockWindowUpdate(Self.Handle);
1736 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1737 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1738 GikoSys.Setting.ShowDialogForAllTabClose := false;
1739 GikoDM.AllTabCloseAction.Execute;
1740 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1741 SetContent(BrowserNullTab);
1742 //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
1743 TreeView.Items.Clear;
1745 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1747 RoundList.SaveRoundFile;
1750 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
1756 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1763 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1765 FavoriteDM.WriteFavorite;
1770 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
1771 for i := Length(BoardGroups) - 1 downto 0 do begin
1773 BoardGroups[i].Free;
1779 for i := Length( BBSs ) - 1 downto 0 do begin
1780 if BBSs[ i ] <> nil then
1789 FTreeType := gttNone;
1791 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
1793 //
\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Æ)
1794 InitializeBoardPlugIns;
1796 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1798 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1799 for i := Length(BBSs) - 1 downto 0 do begin
1800 if not BBSs[i].IsBoardFileRead then
1801 GikoSys.ReadBoardFile(BBSs[i]);
1804 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
1807 ShowBBSTree( BBSs[ 0 ] );
1809 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1812 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1813 FavoriteDM.ReadFavorite;
1817 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1818 RoundList.LoadRoundBoardFile;
1819 RoundList.LoadRoundThreadFile;
1821 LockWindowUpdate(0);
1823 GikoDM.TabsOpenAction.Execute;
1827 \todo
\89½
\8cÌ IE 7
\82Å
\82Í about:..
\82É
\82È
\82é
\82Ì
\82©
1828 (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©)
1829 \92²
\8d¸
\82·
\82é
\82±
\82Æ
1831 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1839 threadItem : TThreadItem;
1841 Protocol, Host, Path, Document, Port, Bookmark: string;
1846 ActiveFileName: string;
1852 //
\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ª
1853 // 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è)
1854 if Pos('about:..', Text) = 1 then
1855 Text2 := 'about:blank..' + Copy( Text, Length('about:..')+1, Length(Text) )
1858 if not( TObject(Sender) is TWebBrowser )then
1862 if (TWebBrowser(Sender) <> nil) and (not TWebBrowser(Sender).Busy) and (Assigned(TWebBrowser(Sender).Document)) then begin
1863 if LowerCase(OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset) <> 'shift_jis' then begin
1864 OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset := 'shift_jis';
1871 if PreviewTimer.Enabled then
1872 PreviewTimer.Enabled := False;
1873 Application.CancelHint;
1875 if GetActiveContent <> nil then
1876 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
1878 ActiveFileName := '';
1880 FActiveContent := nil;
1884 StatusBar.Panels[1].Text := Text2;
1886 if FHint <> nil then begin
1887 FHint.ReleaseHandle;
1890 if FPreviewBrowser <> nil then
1891 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1893 if not GikoSys.Setting.UnActivePopup then
1894 if not GikoForm.Active then
1897 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
1898 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
1901 Ext := AnsiLowerCase(ExtractFileExt(Text2));
1902 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
1903 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) then begin
1904 if FPreviewBrowser = nil then begin
1905 FPreviewBrowser := TPreviewBrowser.Create(Self);
1906 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1907 TOleControl(FPreviewBrowser).Parent := nil;
1909 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
1910 FPreviewURL := Text2;
1911 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
1912 PreviewTimer.Enabled := True;
1913 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
1914 if Pos('mailto:', Text2) = 1 then begin
1915 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
1916 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
1918 p.x := p.x - TWebBrowser(Sender).ClientOrigin.x;
1919 p.y := p.y - TWebBrowser(Sender).ClientOrigin.y;
1920 e := IHTMLDocument2(TWebBrowser(Sender).Document).elementFromPoint(p.x, p.y);
1921 if (Assigned(e)) then begin
1922 tmp2 := ZenToHan(e.Get_outerText);
1923 if (GikoSys.IsNumeric(tmp2)) then begin
1924 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
1925 wkIntSt := StrToInt64(tmp2);
1926 wkIntTo := StrToInt64(tmp2);
1927 //s := GetThreadText(wkBBS, wkKey, wkIntSt, wkIntTo, False, False);
1928 FHint.PopupType := gptThread;
1929 HTMLCreater.SetResPopupText(FHint, GetActiveContent, wkIntSt, wkIntTo, False, False);
1931 FHint.PopupType := gptRaw;
1936 threadItem := GetActiveContent;
1937 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
1938 PathRec := Gikosys.Parse2chURL2(URL);
1939 if (PathRec.FNoParam) then begin
1943 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
1945 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
1947 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
1949 URL := GikoSys.GetBrowsableThreadURL( URL );
1950 wkIntSt := PathRec.FSt;
1951 wkIntTo := PathRec.FTo;
1953 if (wkIntSt = 0) and (wkIntTo = 0) then begin
1956 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
1958 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
1960 end else if wkIntSt > wkIntTo then begin
1965 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
1970 threadItem := BBSsFindThreadFromURL( URL );
1972 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
1973 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
1974 if board <> nil then begin
1975 if not board.IsThreadDatRead then
1976 GikoSys.ReadSubjectFile( board );
1977 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
1981 if threadItem <> nil then begin
1982 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
1983 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
1984 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
1988 FHint.PopupType := gptThread;
1989 HTMLCreater.SetResPopupText(FHint, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
1994 if FHint.PopupType = gptRaw then begin
1995 if FHint.Caption <> '' then
1998 if (FHint.ResCount <> 0) or (FHint.Title <> '') then
2004 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2008 FEnabledCloseButton := Enabled;
2009 SysMenu := GetSystemMenu(Handle, False);
2011 if Enabled then begin
2012 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2014 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2017 DrawMenuBar(Handle);
2020 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2021 var AllowChange: Boolean);
2023 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
2024 // if FTreeType = gtt2ch then
2025 // FSortIndex := -1;
2028 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2029 Shift: TShiftState);
2033 if GetActiveList is TBoard then begin
2035 VK_BACK:; // UpFolderButtonClick(Sender);
2036 VK_SPACE: ListDoubleClick(Shift);
2037 VK_RETURN: ListClick;
2040 if ListView.Selected <> nil then begin
2041 pos.X := ListView.Column[ 0 ].Width;
2042 pos.Y := ListView.Selected.Top;
2044 pos.X := ListView.Left;
2045 pos.Y := ListView.Top;
2047 Windows.ClientToScreen( ListView.Handle, pos );
2048 ListPopupMenu.Popup( pos.X, pos.Y );
2051 end else begin // TBBS, TCategory
2053 VK_BACK:; // UpFolderButtonClick(Sender);
2054 VK_SPACE: ListClick;
2055 VK_RETURN: ListDoubleClick(Shift);
2058 if ListView.Selected <> nil then begin
2059 pos.X := ListView.Column[ 0 ].Width;
2060 pos.Y := ListView.Selected.Top;
2062 pos.X := ListView.Left;
2063 pos.Y := ListView.Top;
2065 Windows.ClientToScreen( ListView.Handle, pos );
2066 ListPopupMenu.Popup( pos.X, pos.Y );
2072 function TGikoForm.GetHttpState: Boolean;
2074 Result := FHttpState;
2077 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2078 Column: TListColumn);
2082 vSortIndex : Integer;
2083 vSortOrder : Boolean;
2085 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2086 if TObject( FActiveList ) is TBBS then begin
2087 orderList := GikoSys.Setting.BBSColumnOrder;
2088 vSortIndex := GikoSys.Setting.BBSSortIndex;
2089 vSortOrder := GikoSys.Setting.BBSSortOrder;
2090 end else if TObject( FActiveList ) is TCategory then begin
2091 orderList := GikoSys.Setting.CategoryColumnOrder;
2092 vSortIndex := GikoSys.Setting.CategorySortIndex;
2093 vSortOrder := GikoSys.Setting.CategorySortOrder;
2094 end else if TObject( FActiveList ) is TBoard then begin
2095 orderList := GikoSys.Setting.BoardColumnOrder;
2096 vSortIndex := GikoSys.Setting.BoardSortIndex;
2097 vSortOrder := GikoSys.Setting.BoardSortOrder;
2101 id := Integer( orderList[ idx ] );
2104 if vSortIndex = id then
2105 vSortOrder := not vSortOrder
2107 vSortOrder := id = 0;
2110 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2113 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2114 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2118 DefaultDraw := True;
2120 DefaultDraw := False;
2121 if (cdsSelected in State) or (cdsHot in State) then begin
2122 Sender.Canvas.Brush.Color := clHighlight;
2123 Sender.Canvas.Font.Color := clHighlightText;
2125 Sender.Canvas.Brush.Color := clBtnFace;
2126 Sender.Canvas.Font.Color := clBtnText;
2128 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2129 Sender.Canvas.FillRect(ARect);
2130 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2133 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2138 Nodes := TreeView.Items;
2140 for i := 0 to Nodes.Count - 1 do begin
2141 if Nodes.Item[i].Data = Data then begin
2142 Result := Nodes.Item[i];
2149 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2150 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2151 Headers: OleVariant; var Cancel: WordBool);
2156 kMenuName: string = 'menu:';
2159 if Pos(kMenuName, URL) <> 0 then begin
2160 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2162 if not GikoSys.IsNumeric(sNo) then Exit;
2166 KokoPopupMenu.Tag := StrToInt(sNo);
2167 KokoPopupMenu.Popup(p.x, p.y);
2168 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2169 Cancel := not GikoSys.Setting.OpenMailer;
2174 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2175 const ARect: TRect; var DefaultDraw: Boolean);
2179 IsBoardNode: Boolean;
2185 Category: TCategory;
2189 DefaultDraw := True;
2191 if FTreeType = gttHistory then Exit;
2193 TreeView.Canvas.Font.Color := clBlue;
2194 IsBoardNode := False;
2195 for i := 0 to TreeView.Items.Count - 1 do begin
2197 if not TreeView.Items[i].IsVisible then
2200 if TObject(TreeView.Items[i].Data) is TCategory then begin
2201 if TreeView.Items[i].Expanded then
2204 IsBoardNode := False;
2205 Category := TCategory(TreeView.Items[i].Data);
2206 for j := 0 to Category.Count - 1 do begin
2207 Board := Category.Items[j];
2208 if Board <> nil then begin
2209 if Board.UnRead > 0 then begin
2217 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2218 IsBoardNode := True;
2219 Board := TBoard(TreeView.Items[i].Data);
2221 Cnt := Board.UnRead;
2227 Bitmap := TBitmap.Create;
2229 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2230 Bitmap.Canvas.Font.Style := [fsBold];
2231 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2236 NodeRect := TreeView.Items[i].DisplayRect(True);
2239 CntText := '(' + IntToStr(Cnt) + ')'
2240 else if Cnt = 1 then
2244 TextWidth := TreeView.Canvas.TextWidth(CntText);
2246 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2248 NodeRect.Left + NodeWidth + TextWidth + 8,
2250 DrawText(TreeView.Canvas.Handle,
2254 DT_SINGLELINE or DT_VCENTER);
2256 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2259 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2260 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2263 Category: TCategory;
2266 DefaultDraw := True;
2268 if FTreeType = gttHistory then Exit;
2270 TreeView.Canvas.Font.Style := [];
2271 if Node <> nil then begin
2272 if TObject(Node.Data) is TCategory then begin
2273 Category := TCategory(Node.Data);
2274 for i := 0 to Category.Count - 1 do begin
2275 Board := Category.Items[i];
2276 if Board <> nil then begin
2277 if Board.UnRead > 0 then begin
2278 TreeView.Canvas.Font.Style := [fsBold];
2283 end else if TObject(Node.Data) is TBoard then begin
2284 Board := TBoard(Node.Data);
2285 if Board.UnRead > 0 then
2286 TreeView.Canvas.Font.Style := [fsBold];
2291 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2293 TreeView.Invalidate;
2295 if TObject(Node.Data) is TBBS then begin
2296 TBBS(Node.Data).NodeExpand := True;
2297 end else if TObject(Node.Data) is TCategory then begin
2298 TCategory(Node.Data).NodeExpand := True;
2299 end else if TObject(Node.Data) is TBoard then begin
2300 TBoard(Node.Data).NodeExpand := True;
2304 procedure TGikoForm.ListViewAllSelect;
2309 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2311 AddMessageList(Msg, nil, Icon);
2313 // *************************************************************************
2314 //!
\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
2315 // *************************************************************************
2316 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2320 boardPlugIn : TBoardPlugIn;
2325 if Item.DownType = gdtBoard then
2326 ATitle := Item.Board.Title
2328 ATitle := Item.ThreadItem.Title;
2330 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2332 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2334 if Item.DownType = gdtBoard then begin
2337 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2338 if GetActiveList = Item.Board then begin
2340 //
\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é
2341 if (GikoSys.Setting.AutoSortThreadList) then begin
2342 GikoSys.Setting.BoardSortIndex := 0;
2343 GikoSys.Setting.BoardSortOrder := True;
2345 Sort.SetSortDate(Now());
2346 SetActiveList(Item.Board);
2348 Item.Board.Modified := True;
2349 Item.Board.IsThreadDatRead := True;
2352 end else if Item.DownType = gdtThread then begin
2355 Item.ThreadItem.NewArrival := True;
2356 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2357 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2358 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2359 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2360 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2361 Item.ThreadItem.Title := Res.FTitle;
2362 ATitle := Item.ThreadItem.Title;
2363 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2364 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2365 ATitle := Res.FTitle;
2367 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2368 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2369 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2373 if GikoSys.Setting.BrowserTabVisible then begin
2374 if GetActiveContent = Item.ThreadItem then
2375 InsertBrowserTab(Item.ThreadItem)
2376 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2377 InsertBrowserTab(Item.ThreadItem, True)
2379 InsertBrowserTab(Item.ThreadItem, False);
2382 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2383 InsertBrowserTab(Item.ThreadItem);
2386 Application.ProcessMessages;
2388 if Item.State = gdsComplete then begin
2390 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2394 PlaySound('NewDiff');
2395 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2400 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2401 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2402 Item.ThreadItem.Round := False;
2403 //Item.ThreadItem.RoundName := '';
2404 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);
2407 //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
2408 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
2409 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
2410 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
2411 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
2412 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
2413 case GikoForm.ViewType of
2414 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
2415 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
2416 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
2417 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
2418 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
2419 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
2422 RefreshListView(Item.ThreadItem);
2425 end else if Item.State = gdsNotModify then begin
2427 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2428 //SetContent(Item.ThreadItem);
2429 InsertBrowserTab(Item.ThreadItem);
2431 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2432 PlaySound('NoChange');
2433 Screen.Cursor := crDefault;
2434 end else if Item.State = gdsAbort then begin
2436 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2437 end else if Item.State = gdsError then begin
2442 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2443 // if Item.ResponseCode = 302 then
2444 // 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);
2450 if FWorkCount < 0 then FWorkCount := 0;
2451 if FWorkCount = 0 then begin
2453 Animate.Active := False;
2455 Screen.Cursor := crDefault;
2462 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2464 // SetProgressValue(Number, 0, AWorkCountMax);
2465 // ProgressBar.Visible := True;
2466 ProgressBar.Position := 0;
2467 ProgressBar.Max := AWorkCountMax;
2468 FDownloadTitle := AWorkTitle;
2469 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2470 FDownloadMax := AWorkCountMax;
2473 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2475 ProgressBar.Position := 0;
2476 if FDownloadMax <> 0 then
2477 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2480 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2482 ProgressBar.Position := AWorkCount;
2483 // SetProgressValue(Number, AWorkCount);
2484 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2487 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2489 ListItem: TListItem;
2491 MessageListView.Items.BeginUpdate;
2493 ListItem := MessageListView.Items.Add;
2494 ListItem.Caption := ACaption;
2495 ListItem.Data := AObject;
2496 ListItem.MakeVisible(False);
2498 gmiOK: ListItem.ImageIndex := 0;
2499 gmiSAD: ListItem.ImageIndex := 1;
2500 gmiNG: ListItem.ImageIndex := 2;
2501 gmiWhat: ListItem.ImageIndex := 3;
2504 MessageListView.Items.EndUpdate;
2509 function TGikoForm.InsertBrowserTab(
2510 ThreadItem : TThreadItem;
2511 ActiveTab : Boolean = True
2514 i, j, idx : Integer;
2515 favItem : TFavoriteThreadItem;
2516 newBrowser : TBrowserRecord;
2520 if Threaditem = nil then Exit;
2522 if ThreadItem.IsLogFile then begin
2523 //
\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é
2524 //
\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é
2525 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2526 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2527 j := FBrowsers.IndexOf(FActiveContent.Browser);
2528 if j = BROWSER_COUNT - 1 then
2529 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2531 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2532 if not AddHistory( favItem ) then
2535 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2536 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2537 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2538 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2539 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2540 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2541 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2542 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2546 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2547 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2548 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2550 if ActiveTab then begin
2551 BrowserTab.TabIndex := i;
2552 BrowserTab.OnChange(nil);
2559 idx := BrowserTab.TabIndex;
2560 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2561 newBrowser := TBrowserRecord.Create;
2562 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2563 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2564 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2568 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2569 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2570 //newBrowser.Browser.Navigate(BLANK_HTML);
2571 newBrowser.thread := ThreadItem;
2572 newBrowser.Repaint := true;
2573 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
2575 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2576 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2577 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2581 if ActiveTab then begin
2582 BrowserTab.TabIndex := 0;
2586 newBrowser := TBrowserRecord.Create;
2587 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2588 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2589 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2593 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2594 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2595 //newBrowser.Browser.Navigate(BLANK_HTML);
2596 newBrowser.thread := ThreadItem;
2597 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
2598 newBrowser.Repaint := true;
2600 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2601 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2602 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2606 if ActiveTab then begin
2607 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2608 BrowserTab.TabIndex := 0
2610 BrowserTab.TabIndex := i;
2613 Result := newBrowser;
2614 if(ActiveTab) or (idx = -1) then begin
2615 BrowserTab.OnChange(nil);
2618 if BrowserNullTab = nil then begin
2619 BrowserNullTab := TBrowserRecord.Create;
2620 BrowserNullTab.Browser := Browser;
2622 // if BrowserNullTab.thread <> ThreadItem then begin
2623 // BrowserNullTab.Movement := '';
2625 BrowserNullTab.thread := ThreadItem;
2626 Result := BrowserNullTab;
2627 BrowserTab.TabIndex := -1;
2628 SetContent(BrowserNullTab);
2631 if GikoSys.Setting.URLDisplay then
2632 AddressComboBox.Text := ThreadItem.URL;
2636 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2645 ThreadItem: TThreadItem;
2646 Thread: TBrowserRecord;
2647 ThreadTitle, ThreadPTitle: string;
2648 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2651 idx := BrowserTab.TabIndex;
2652 if (FActiveContent <> nil) and
2653 (FActiveContent.Thread <> Thread.Thread) and
2654 (FActiveContent.Browser <> nil) and
2655 (Assigned(FActiveContent.Browser.Document)) then begin
2658 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document).Body).ScrollTop;
2661 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2666 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2667 Thread.Browser.Navigate(BLANK_HTML);
2668 BrowserBoardNameLabel.Caption := '';
2669 ItemBoardImage.Picture := nil;
2670 BrowserNameLabel.Caption := '';
2671 ItemImage.Picture := nil;
2672 BrowserNullTab.Thread := nil;
2673 //TOleControl(BrowserNullTab.Browser).Visible := true;
2674 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2675 FActiveContent := nil;
2677 end else if Thread.Browser = nil then begin
2678 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2679 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2680 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2681 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2682 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2686 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2687 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2690 ThreadTitle := Thread.Thread.Title;
2691 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2692 //ThreadScrollTop := Thread.Thread.ScrollTop;
2693 ThreadIsLog := Thread.Thread.IsLogFile;
2694 ThreadItem := Thread.Thread;
2695 ThreadNewArraical := Thread.Thread.NewArrival;
2696 //ThreadUnRead := Thread.Thread.UnRead;
2697 BBSID := ThreadItem.ParentBoard.BBSID;
2698 FileName := ThreadItem.FileName;
2700 if GetCapture = ListView.Handle then
2703 Screen.Cursor := crHourGlass;
2707 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2708 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2709 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2711 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2712 if (not Assigned(Thread.Browser.Document)) then begin
2713 Thread.Browser.Navigate('about:blank');
2715 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2716 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2717 Application.ProcessMessages;
2718 if idx <> BrowserTab.TabIndex then begin
2723 if (Thread <> nil) and (ThreadItem <>nil) then begin
2724 BrowserBoardNameLabel.Caption := ThreadPTitle;
2725 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2726 BrowserNameLabel.Caption := ThreadTitle;
2727 ItemImage.Picture := nil;
2729 if ThreadNewArraical then
2730 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
2732 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
2734 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
2736 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
2737 BrowserNameLabel.Left := ItemImage.Left + 20;
2740 //ActiveContent
\81@
\82Ì
\8dX
\90V
2741 FActiveContent := Thread;
2743 if not ThreadIsLog then begin
2744 Self.Caption := GikoDataModule.CAPTION_NAME ;
2745 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\8fÁ
\8b\8e
2746 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
2748 Thread.Browser.BringToFront;
2749 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
2750 doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
2752 doc.charset := 'Shift_JIS';
2759 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
2760 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\95\
\8e¦
2761 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
2762 StatusBar.Panels[THREADSIZE_PANEL].Width :=
2763 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
2764 //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«
2765 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
2766 if Thread.Repaint then begin
2767 Thread.Repaint := false;
2769 Thread.Browser.OnStatusTextChange := nil;
2770 LockWindowUpdate(Thread.Browser.ParentWindow);
2771 HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
2772 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
2773 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
2777 RefreshListView(ThreadItem);
2779 Screen.Cursor := crDefault;
2783 function TGikoForm.GetActiveContent: TThreadItem;
2786 if FActiveContent <> nil then
2787 Result := FActiveContent.Thread
2796 procedure TGikoForm.SetActiveList(Obj: TObject);
2800 // if FActiveList <> Obj then begin
2803 if ListView.Selected <> nil then
2804 idx := ListView.Selected.Index
2810 ListView.Items.Count := 0;
2811 ListView.Items.Clear;
2812 ListView.Selected := nil;
2813 // ListView.Columns.Clear;
2814 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
2815 and (FActiveContent.Thread.IsLogFile) then begin
2817 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
2819 on E: Exception do begin
2820 //
\83X
\83\8c\88ê
\97\97DL
\8cã
\82È
\82Ç
\82ÉFActiveContent
\82Ì
\8e\9d\82ÂThread
\82ª
2821 //
\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é
2822 ReleaseBrowser(FActiveContent);
2823 FActiveContent.Thread := nil;
2824 Self.Caption := GikoDataModule.CAPTION_NAME;
2828 Self.Caption := GikoDataModule.CAPTION_NAME;
2829 //Application.Title := CAPTION_NAME;
2831 // ActiveListColumnSave;
2833 Screen.Cursor := crHourGlass;
2835 if Obj is TBBS then begin
2836 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2837 end else if Obj is TCategory then begin
2838 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2839 end else if Obj is TBoard then begin
2840 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2843 Screen.Cursor := crDefault;
2846 if idx >= 0 then begin
2847 if idx >= ListView.Items.Count then
2848 idx := ListView.Items.Count - 1;
2849 ListView.ItemIndex := idx;
2850 ListView.ItemFocused := ListView.Items.Item[ idx ];
2856 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
2857 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
2858 function TGikoForm.GetActiveList: TObject;
2860 Result := FActiveList;
2863 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
2865 SetListViewType(AViewType, '', False);
2868 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
2873 for i := Length( BBSs ) - 1 downto 0 do begin
2874 BBSs[i].SelectText := SelectText;
2875 BBSs[i].KubetsuChk := KubetsuChk;
2877 ViewType := AViewType;
2878 if ActiveList is TBoard then begin
2879 Board := TBoard(ActiveList);
2881 //gvtAll: ListView.Items.Count := Board.Count;
2882 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
2883 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
2884 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
2885 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
2886 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
2890 SetActiveList(Board);
2894 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
2895 const ARect: TRect; var DefaultDraw: Boolean);
2901 if ListView.Items.Count = 0 then begin
2902 DefaultDraw := true;
2903 ListView.Canvas.Brush.Color := ListView.Color;
2904 ListView.Canvas.FillRect(ARect);
2908 ListView.Canvas.Font.Color := clWindowText;
2909 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2912 ListView.Canvas.Font.Color := clBlue;
2913 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';
2916 ListView.Canvas.Font.Color := clGreen;
2917 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2920 ListView.Canvas.Font.Color := clFuchsia;
2921 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';
2924 ListView.Canvas.Font.Color := clMaroon;
2925 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90¶
\91¶
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2928 ListView.Canvas.Font.Color := clNavy;
2929 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';
2930 if GetActiveList is TBoard then
2931 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
2939 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
2940 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
2941 ListView.Canvas.TextOut(p.X, p.Y, s);
2943 DefaultDraw := True;
2947 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
2949 Item: TDownloadItem;
2951 if not Board.IsThreadDatRead then
2952 GikoSys.ReadSubjectFile(Board);
2953 Item := TDownloadItem.Create;
2955 Item.Board := Board;
2956 Item.DownType := gdtBoard;
2957 Item.ForceDownload := ForceDownload;
2958 FControlThread.AddItem(Item);
2959 if FWorkCount = 0 then begin
2961 Animate.Active := True;
2964 Screen.Cursor := crAppStart;
2972 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
2974 Item: TDownloadItem;
2976 Item := TDownloadItem.Create;
2978 Item.ThreadItem := ThreadItem;
2979 Item.DownType := gdtThread;
2980 Item.ForceDownload := ForceDownload;
2981 FControlThread.AddItem(Item);
2982 if FWorkCount = 0 then begin
2984 Animate.Active := True;
2987 Screen.Cursor := crAppStart;
2995 procedure TGikoForm.PlaySound(SoundEventName: string);
2999 if not GikoSys.Setting.Mute then begin
3000 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
3001 if FileExists(FileName) then begin
3002 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
3003 sndPlaySound(nil, SND_SYNC);
3004 Application.ProcessMessages;
3006 sndPlaySound(PChar(FileName), SND_ASYNC);
3012 function TGikoForm.AddHistory( favItem : TFavoriteThreadItem ): Boolean;
3015 Item: TFavoriteThreadItem;
3019 // if (GetActiveContent = ThreadItem) and
3020 // (ThreadItem.Count <= ThreadItem.Kokomade) then
3022 // if GetActiveContent = ThreadItem then
3026 if FTreeType = gttHistory then
3027 TreeView.Selected := nil;
3029 for i := 0 to FHistoryList.Count - 1 do begin
3030 if TObject(FHistoryList[i]) is TFavoriteThreadItem then begin
3031 Item := TFavoriteThreadItem(FHistoryList[i]);
3032 if Item.URL = favItem.URL then begin
3033 // SetContent(ThreadItem);
3034 FHistoryList.Move(i, 0);
3035 if FTreeType = gttHistory then
3036 if TreeView.Items.GetFirstNode <> TreeView.Items[ i ] then
3037 TreeView.Items[ i ].MoveTo( TreeView.Items.GetFirstNode, naInsert );
3044 if FHistoryList.Count > 0 then
3045 FHistoryList.Insert( 0, favItem )
3047 FHistoryList.Add( favItem );
3048 // SetContent(ThreadItem);
3049 // while GikoSys.Setting.AddressHistoryCount < FHistoryList.Count do begin
3050 while GikoSys.Setting.MaxRecordCount < FHistoryList.Count do begin
3051 i := FHistoryList.Count - 1;
3052 TObject( FHistoryList.Items[ i ] ).Free;
3053 FHistoryList.Delete( i );
3056 if FTreeType = gttHistory then begin
3057 Node := TreeView.Items.Add( nil, favItem.Title );
3058 Node.MoveTo( TreeView.Items.GetFirstNode, naInsert );
3060 if favItem.NewArrival then begin
3061 Node.ImageIndex := ITEM_ICON_THREADNEW1;
3062 Node.SelectedIndex := ITEM_ICON_THREADNEW2;
3064 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3065 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3068 //
\95\89\89×
\82ð
\82©
\82¯
\82½
\82
\82È
\82¢
\82Ì
\82Å NewArrival
\82Ì
\83`
\83F
\83b
\83N
\82ð
\8ds
\82í
\82È
\82¢
3069 //
\81¦favItem.Item
\83v
\83\8d\83p
\83e
\83B
\82Í dat
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\82ð
\95K
\97v
\82Æ
\82·
\82é
3070 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3071 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3072 Node.Data := favItem;
3073 //while GikoSys.Setting.AddressHistoryCount < TreeView.Items.Count do begin
3074 while GikoSys.Setting.MaxRecordCount < TreeView.Items.Count do begin
3075 i := TreeView.Items.Count - 1;
3076 TreeView.Items.Item[ i ].Delete;
3081 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3086 //
\83L
\83\83\83r
\83l
\83b
\83g
\82É
\97\9a\97ð
\82ª
\95\
\8e¦
\82³
\82ê
\82Ä
\82¢
\82½
\82ç
\81A
3087 //
\83L
\83\83\83r
\83l
\83b
\83g
\93à
\82Ì
\83A
\83C
\83e
\83\80\82à
\8dí
\8f\9c\82·
\82é
\81B
3088 if (FTreeType = gttHistory) then begin
3089 node := TreeView.Items.GetFirstNode;
3090 while (node <> nil) do begin
3091 if ( TFavoriteThreadItem(node.Data).Item = threadItem ) then begin
3092 TreeView.Items.Delete(node);
3096 node := node.GetNext;
3100 for i := 0 to FHistoryList.Count - 1 do begin
3101 if threadItem = TFavoriteThreadItem( FHistoryList.Items[i] ).Item then begin
3102 TFavoriteThreadItem( FHistoryList.Items[ i ] ).Free;
3103 FHistoryList.Delete(i);
3104 FHistoryList.Capacity := FHistoryList.Count;
3110 procedure TGikoForm.ClearHistory;
3114 //FHistoryList.Clear;
3117 for i := FHistoryList.Count - 1 downto 0 do begin
3118 if TObject(FHistoryList[ i ]) is TFavoriteThreadItem then
3119 TFavoriteThreadItem(FHistoryList[ i ]).Free
3120 else if TObject(FHistoryList[ i ]) is TFavoriteBoardItem then
3121 TFavoriteBoardItem(FHistoryList[ i ]).Free;
3123 //FHistoryList.Delete(i);
3129 FHistoryList.Capacity := FHistoryList.Count;
3133 procedure TGikoForm.SaveHistory;
3136 saveList : TstringList;
3139 saveList := TStringList.Create;
3142 FHistoryList.Capacity := FHistoryList.Count;
3143 saveList.Add('<?xml version="1.0" encoding="Shift_JIS" standalone="yes"?>');
3144 saveList.Add('<address>');
3145 bound := FHistoryList.Count - 1;
3146 for i := bound downto 0 do begin
3147 // title
\82Í
\8d¡
\82Ì
\82Æ
\82±
\82ë
\8eg
\82Á
\82Ä
\82¢
\82È
\82¢
3149 '<history url="' + HtmlEncode( TFavoriteThreadItem( FHistoryList[ i ] ).URL ) + '"' +
3150 ' title="' + HtmlEncode( MojuUtils.Sanitize(TFavoriteThreadItem( FHistoryList[ i ] ).Title )) + '"/>');
3152 saveList.Add('</address>');
3153 saveList.SaveToFile( GikoSys.GetConfigDir + 'History.xml' );
3160 procedure TGikoForm.LoadHistory;
3164 XMLDoc : IXMLDocument;
3166 HistoryNode : IXMLNode;
3168 favItem : TFavoriteThreadItem;
3177 fileName := GikoSys.GetConfigDir + 'History.xml';
3179 if FileExists( fileName ) then begin
3181 XMLDoc := IXMLDocument.Create;
3182 //XMLDoc := LoadXMLDocument(FileName);
3183 LoadXMLDocument(FileName, XMLDoc);
3185 XMLNode := XMLDoc.DocumentElement;
3187 if XMLNode.NodeName = 'address' then begin
3188 bound := XMLNode.ChildNodes.Count - 1;
3189 for i := 0 to bound do begin
3190 HistoryNode := XMLNode.ChildNodes[i];
3191 if HistoryNode.NodeName = 'history' then begin
3192 //if FReadCount >= sl.Count then begin
3193 s := Trim(HistoryNode.Attributes['url']);
3194 if s <> '' then begin
3195 favItem := TFavoriteThreadItem.Create(
3196 s, MojuUtils.UnSanitize(HistoryNode.Attributes[ 'title' ]) );
3197 if not AddHistory( favItem ) then
3211 rt := GetTickCount - st;
3212 Writeln('Runtime(Load Histroy) : ' + IntToStr(rt) + ' ms');
3217 procedure TGikoForm.ShowBBSTreeOld(
3225 FavoriteTreeView.Visible := False;
3226 FavoriteToolBar.Hide;
3227 TreeView.Visible := True;
3229 b := CabinetSelectPopupMenu.Items.Count - 1;
3230 for i := 0 to b do begin
3231 item := CabinetSelectPopupMenu.Items[ i ];
3232 if item is TBBSMenuItem then begin
3233 if TBBSMenuItem( item ).Data = inBBS then begin
3234 item.Checked := True;
3235 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3236 CabinetMenu.Items[ i ].Checked := True;
3237 GikoSys.Setting.CabinetIndex := i;
3241 item.Checked := False;
3242 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3243 CabinetMenu.Items[ i ].Checked := False;
3245 CabinetSelectToolButton.Caption := inBBS.Title;
3247 GikoDM.CabinetHistoryAction.Checked := False;
3248 GikoDM.CabinetFavoriteAction.Checked := False;
3250 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3251 FTreeType := gtt2ch;
3252 HistoryToolBar.Hide;
3253 FActiveBBS := inBBS;
3254 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3255 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3256 //?c???[??g?b?v?????I????
3257 if GetActiveList = nil then
3258 TreeView.Selected := TreeView.Items[0]
3260 for i := 0 to TreeView.Items.Count - 1 do begin
3261 if TreeView.Items[i].Data = GetActiveList then begin
3262 TreeView.Selected := TreeView.Items[i];
3266 TreeView.Selected := TreeView.Items[0]
3274 procedure TGikoForm.ShowBBSTree(
3283 FavoriteTreeView.Visible := False;
3284 FavoriteToolBar.Hide;
3285 TreeView.Visible := True;
3287 b := CabinetSelectPopupMenu.Items.Count - 1;
3288 for i := 0 to b do begin
3289 item := CabinetSelectPopupMenu.Items[ i ];
3290 if item is TBBSMenuItem then begin
3291 if TBBSMenuItem( item ).Data = inBBS then begin
3292 item.Checked := True;
3293 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3294 CabinetMenu.Items[ i ].Checked := True;
3295 GikoSys.Setting.CabinetIndex := i;
3299 item.Checked := False;
3300 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3301 CabinetMenu.Items[ i ].Checked := False;
3303 CabinetSelectToolButton.Caption := inBBS.Title;
3305 GikoDM.CabinetHistoryAction.Checked := False;
3306 GikoDM.CabinetFavoriteAction.Checked := False;
3308 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3309 or (not (CabinetPanel.Visible)) then begin
3310 FTreeType := gtt2ch;
3311 HistoryToolBar.Hide;
3312 FActiveBBS := inBBS;
3313 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3314 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3315 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3316 if GetActiveList = nil then begin
3318 TreeClick( TreeView.Items[0] );
3322 for i := 0 to TreeView.Items.Count - 1 do begin
3323 if TreeView.Items[i].Data = GetActiveList then begin
3324 TreeClick( TreeView.Items[i] );
3328 TreeClick( TreeView.Items[0] );
3336 procedure TGikoForm.ShowHistoryTree;
3341 if CabinetPanel.Visible then begin
3342 if FTreeType = gttHistory then begin
3343 CabinetVisible( False );
3344 GikoDM.CabinetHistoryAction.Checked := False;
3346 GikoDM.CabinetHistoryAction.Checked := True;
3349 CabinetVisible( True );
3350 GikoDM.CabinetHistoryAction.Checked := True;
3353 // BBS...BBS, History, Favorite
3354 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3356 FavoriteTreeView.Visible := False;
3357 TreeView.Visible := True;
3359 GikoDM.CabinetBBSAction.Checked := False;
3360 GikoDM.CabinetFavoriteAction.Checked := False;
3362 if FTreeType <> gttHistory then begin
3363 b := CabinetSelectPopupMenu.Items.Count - 1;
3364 for i := 0 to b do begin
3365 item := CabinetSelectPopupMenu.Items[ i ];
3366 if item is TBBSMenuItem then begin
3367 item.Checked := False;
3368 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3369 CabinetMenu.Items[ i ].Checked := False;
3373 FTreeType := gttHistory;
3374 HistoryToolBar.Show;
3375 FavoriteToolBar.Hide;
3377 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3381 procedure TGikoForm.SetHistoryTreeNode;
3385 Item: TFavoriteThreadItem;
3387 TreeView.Items.BeginUpdate;
3389 TreeView.Items.Clear;
3390 for i := 0 to FHistoryList.Count - 1 do begin
3391 Item := TFavoriteThreadItem(FHistoryList[i]);
3392 Node := TreeView.Items.Add(nil, Item.Title);
3394 if Item.Item.NewArrival then begin
3395 Node.ImageIndex := ITEM_ICON_THREADNEW1;
3396 Node.SelectedIndex := ITEM_ICON_THREADNEW2;
3398 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3399 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3402 //
\95\89\89×
\82ð
\82©
\82¯
\82½
\82
\82È
\82¢
\82Ì
\82Å NewArrival
\82Ì
\83`
\83F
\83b
\83N
\82ð
\8ds
\82í
\82È
\82¢
3403 //
\81¦Item.Item
\83v
\83\8d\83p
\83e
\83B
\82Í dat
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\82ð
\95K
\97v
\82Æ
\82·
\82é
3404 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3405 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3409 TreeView.Items.EndUpdate;
3413 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3415 ChangeEvent: TTVChangedEvent;
3416 ChangingEvent: TTVChangingEvent;
3420 if Item is TCategory then
3421 bbs := TCategory( Item ).ParenTBBS
3422 else if Item is TBoard then
3423 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3427 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3428 if Item <> FActiveList then begin
3430 ChangingEvent := nil;
3432 if not CallEvent then begin
3433 ChangeEvent := TreeView.OnChange;
3434 ChangingEvent := TreeView.OnChanging;
3437 if not CallEvent then begin
3438 TreeView.OnChange := nil;
3439 TreeView.OnChanging := nil;
3441 //Application.ProcessMessages;
3442 for i := 0 to TreeView.Items.Count - 1 do begin
3443 if TreeView.Items[i].Data = Item then begin
3444 TreeView.Items[i].Selected := True;
3446 TreeClick(TreeView.Items[i]);
3450 //Application.ProcessMessages;
3452 if not CallEvent then begin
3453 TreeView.OnChange := ChangeEvent;
3454 TreeView.OnChanging := ChangingEvent;
3459 if Item <> FActiveList then begin
3460 ActiveListColumnSave;
3461 if (Item is TBBS) or (Item is TCategory) then begin
3462 ListView.Columns.Clear;
3463 SetActiveList( Item );
3464 end else if Item is TBoard then begin
3465 if not TBoard( Item ).IsThreadDatRead then begin
3466 Screen.Cursor := crHourGlass;
3468 if not TBoard( Item ).IsThreadDatRead then
3469 GikoSys.ReadSubjectFile(TBoard( Item ));
3471 Screen.Cursor := crDefault;
3474 Sort.SetSortDate(Now());
3475 SetActiveList( Item );
3480 if Item is TBoard then begin // not TCategory
3481 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3482 if GikoSys.Setting.ListWidthState = glsMax then begin
3483 GikoDM.BrowserMinAction.Execute;
3484 if GikoForm.Visible then
3488 if GikoSys.Setting.ListHeightState = glsMax then begin
3489 GikoDM.BrowserMinAction.Execute;
3490 if GikoForm.Visible then
3497 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3498 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3500 listItem : TListItem;
3501 threadItem : TThreadItem;
3508 if not (GetActiveList is TBoard) then Exit;
3509 listItem := ListView.GetItemAt( X, Y );
3510 if listItem = nil then Exit;
3511 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3513 threadItem := TThreadItem(ListItem.Data);
3514 InsertBrowserTab(threadItem, False);
3515 if threadItem.IsLogFile then
3516 ListView.UpdateItems(listItem.Index, listItem.Index);
3520 //
\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Å
3521 if (ssDouble in Shift) then
3522 ListDoubleClick(Shift)
3530 Windows.ClientToScreen( ListView.Handle, pos );
3531 ListPopupMenu.Popup( pos.X, pos.Y );
3537 procedure TGikoForm.ListClick;
3539 ListItem: TListItem;
3540 ThreadItem: TThreadItem;
3542 if ListView.SelCount <> 1 then Exit;
3543 ListItem := ListView.Selected;
3544 if ListItem = nil then Exit;
3545 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3547 ThreadItem := TThreadItem(ListItem.Data);
3548 if ThreadItem.IsLogFile then begin
3549 InsertBrowserTab(ThreadItem);
3550 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3552 InsertBrowserTab(ThreadItem);
3555 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3556 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3557 if GikoSys.Setting.ListWidthState = glsMin then begin
3558 GikoDM.BrowserMaxAndFocusAction.Execute;
3561 if GikoSys.Setting.ListHeightState = glsMin then begin
3562 GikoDM.BrowserMaxAndFocusAction.Execute;
3568 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3570 ThreadItem: TThreadItem;
3573 shiftDown := (ssShift in Shift);
3575 if ListView.Selected = nil then Exit;
3577 if TObject(ListView.Selected.Data) is TCategory then begin
3578 SelectTreeNode(ListView.Selected.Data, True);
3579 end else if TObject(ListView.Selected.Data) is TBoard then begin
3580 SelectTreeNode(ListView.Selected.Data, True)
3581 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3582 Application.ProcessMessages;
3583 ThreadItem := TThreadItem(ListView.Selected.Data);
3584 DownloadContent(ThreadItem, shiftDown);
3586 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3587 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3588 if GikoSys.Setting.ListWidthState = glsMin then begin
3589 GikoDM.BrowserMaxAction.Execute;
3590 GikoDM.SetFocusForBrowserAction.Execute;
3593 if GikoSys.Setting.ListHeightState = glsMin then begin
3594 GikoDM.BrowserMaxAction.Execute;
3595 GikoDM.SetFocusForBrowserAction.Execute;
3602 procedure TGikoForm.BrowserMovement(const AName: string);
3604 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3605 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3606 and (FActiveContent <> nil) then begin
3607 FActiveContent.Move(AName);
3611 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3613 if TObject(Node.Data) is TBBS then begin
3614 TBBS(Node.Data).NodeExpand := False;
3615 end else if TObject(Node.Data) is TCategory then begin
3616 TCategory(Node.Data).NodeExpand := False;
3617 end else if TObject(Node.Data) is TBoard then begin
3618 TBoard(Node.Data).NodeExpand := False;
3620 if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3621 TreeClick(TreeView.Selected);
3625 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3627 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3629 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3631 TreeSplitter.Visible := isVisible;
3632 CabinetPanel.Visible := isVisible;
3633 GikoDM.CabinetVisibleAction.Checked := isVisible;
3636 procedure TGikoForm.SelectListItem(List: TList);
3638 TmpListItem: TListItem;
3642 TmpListItem := ListView.Selected;
3643 while TmpListItem <> nil do begin
3644 List.Add(TmpListItem.Data);
3645 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3650 procedure TGikoForm.FormResize(Sender: TObject);
3653 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3654 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3656 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3657 if GikoSys.Setting.ListWidthState = glsMin then begin
3658 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3659 ViewPanel.Width := ThreadMainPanel.Width - 80;
3662 if GikoSys.Setting.ListHeightState = glsMin then begin
3663 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3664 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3668 FIsIgnoreResize := rtResizing;
3669 PostMessage( Handle, USER_RESIZED, 0, 0 );
3674 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3678 FTabHintIndex := -1;
3679 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3680 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3681 DeleteTab(i, BrowserTab.TabIndex);
3686 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3690 FTabHintIndex := -1;
3691 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3692 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3693 DeleteTab(i, BrowserTab.TabIndex);
3698 procedure TGikoForm.DeleteTab(index, selectIndex: Integer);
3704 if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
3705 doc := TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser.Document;
3706 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := doc.Body.ScrollTop;
3709 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := 0;
3711 if(FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[index])) then
3712 FActiveContent := nil;
3713 if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
3714 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser);
3716 FBrowsers.Move(j, BROWSER_COUNT - 1);
3718 BrowserTab.Tabs.BeginUpdate;
3720 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Free;
3721 if ( BrowserTab.Tabs.Count - 1 = index ) and
3722 ( BrowserTab.TabRect(index).Left
3723 <= BrowserTab.DisplayRect.Left ) then begin
3724 BrowserTab.ScrollTabs(-1);
3726 BrowserTab.Tabs.Delete(index);
3727 if selectIndex > index then begin
3728 BrowserTab.TabIndex := selectIndex - 1;
3730 if BrowserTab.Tabs.Count -1 >= selectIndex then
3731 BrowserTab.TabIndex := selectIndex
3733 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3736 BrowserTab.Tabs.EndUpdate;
3738 if BrowserTab.Tabs.Count = 0 then begin
3739 BrowserNullTab.Thread := nil;
3741 if(BrowserTab.TabIndex <> -1) and
3742 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3743 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
3744 if(TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser
3745 = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) )then
3747 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
3751 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3752 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3753 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3754 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3757 if( FActiveContent = nil) then
3758 BrowserTab.OnChange(nil);
3760 function TGikoForm.Hook(var Message: TMessage): Boolean;
3762 //
\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Ì
3763 //
\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ð
3767 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3769 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3773 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3775 bBoard, bCategory : Boolean;
3777 bBoard := (GetActiveList is TBoard);
3778 bCategory := (GetActiveList is TCategory);
3779 ItemRoundPMenu.Visible := bBoard;
3780 ItemReservPMenu.Visible := bBoard;
3781 LPMSep01.Visible := bBoard;
3782 ListRoundPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3783 ListReservPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3784 LPMSep02.Visible := bCategory or bBoard;
3785 KidokuPMenu.Visible := bBoard;
3786 MidokuPMenu.Visible := bBoard;
3787 UrlCopyPMenu.Visible := bCategory or bBoard;
3788 NameUrlCopyPMenu.Visible := bCategory or bBoard;
3789 AllSelectPMenu.Visible := bCategory or bBoard;
3790 LPMSep05.Visible := bCategory or bBoard;
3791 DeletePMenu.Visible := bBoard;
3792 LPMSep06.Visible := bCategory or bBoard;
3793 BoardFavoriteAddMenu.Visible := bCategory;
3794 ThreadFavoriteAddMenu.Visible := bBoard;
3796 AddRoundNameMenu(ItemReservPMenu);
3797 AddRoundNameMenu(ListReservPMenu);
3800 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3802 FClickNode := TreeView.Selected;
3803 if FClickNode = nil then begin
3804 TreeSelectThreadPupupMenu.Visible := False;
3805 TreeSelectBoardPupupMenu.Visible := False;
3806 TPMSep01.Visible := False;
3807 TreeSelectURLPupupMenu.Visible := False;
3808 TreeSelectNamePupupMenu.Visible := False;
3809 TreeSelectNameURLPupupMenu.Visible := False;
3810 TreeSelectFavoriteAddPupupMenu.Visible := False;
3811 TreeSelectLogDeleteSeparator.Visible := False;
3812 TreeSelectLogDeletePopupMenu.Visible := False;
3813 end else if TObject(FClickNode.Data) is TBoard then begin
3814 TreeSelectThreadPupupMenu.Visible := False;
3815 TreeSelectBoardPupupMenu.Visible := True;
3816 TPMSep01.Visible := True;
3817 TreeSelectURLPupupMenu.Visible := True;
3818 TreeSelectNamePupupMenu.Visible := True;
3819 TreeSelectNameURLPupupMenu.Visible := True;
3820 TreeSelectFavoriteAddPupupMenu.Visible := True;
3821 TreeSelectLogDeleteSeparator.Visible := False;
3822 TreeSelectLogDeletePopupMenu.Visible := False;
3823 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3824 TreeSelectThreadPupupMenu.Visible := False;
3825 TreeSelectBoardPupupMenu.Visible := True;
3826 TPMSep01.Visible := True;
3827 TreeSelectURLPupupMenu.Visible := True;
3828 TreeSelectNamePupupMenu.Visible := True;
3829 TreeSelectNameURLPupupMenu.Visible := True;
3830 TreeSelectFavoriteAddPupupMenu.Visible := True;
3831 TreeSelectLogDeleteSeparator.Visible := False;
3832 TreeSelectLogDeletePopupMenu.Visible := False;
3833 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3834 TreeSelectThreadPupupMenu.Visible := True;
3835 TreeSelectBoardPupupMenu.Visible := False;
3836 TPMSep01.Visible := True;
3837 TreeSelectURLPupupMenu.Visible := True;
3838 TreeSelectNamePupupMenu.Visible := True;
3839 TreeSelectNameURLPupupMenu.Visible := True;
3840 TreeSelectFavoriteAddPupupMenu.Visible := True;
3841 TreeSelectLogDeleteSeparator.Visible := True;
3842 TreeSelectLogDeletePopupMenu.Visible := True;
3843 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3844 TreeSelectThreadPupupMenu.Visible := True;
3845 TreeSelectBoardPupupMenu.Visible := False;
3846 TPMSep01.Visible := True;
3847 TreeSelectURLPupupMenu.Visible := True;
3848 TreeSelectNamePupupMenu.Visible := True;
3849 TreeSelectNameURLPupupMenu.Visible := True;
3850 TreeSelectFavoriteAddPupupMenu.Visible := True;
3851 TreeSelectLogDeleteSeparator.Visible := True;
3852 TreeSelectLogDeletePopupMenu.Visible := True;
3853 end else if (TObject(FClickNode.Data) is TCategory) then begin
3854 TreeSelectThreadPupupMenu.Visible := False;
3855 TreeSelectBoardPupupMenu.Visible := False;
3856 TPMSep01.Visible := False;
3857 TreeSelectURLPupupMenu.Visible := False;
3858 TreeSelectNamePupupMenu.Visible := True;
3859 TreeSelectNameURLPupupMenu.Visible := False;
3860 TreeSelectFavoriteAddPupupMenu.Visible := False;
3861 TreeSelectLogDeleteSeparator.Visible := False;
3862 TreeSelectLogDeletePopupMenu.Visible := False;
3863 end else if FClickNode.IsFirstNode then begin
3864 TreeSelectThreadPupupMenu.Visible := False;
3865 TreeSelectBoardPupupMenu.Visible := False;
3866 TPMSep01.Visible := False;
3867 TreeSelectURLPupupMenu.Visible := False;
3868 TreeSelectNamePupupMenu.Visible := True;
3869 TreeSelectNameURLPupupMenu.Visible := False;
3870 TreeSelectFavoriteAddPupupMenu.Visible := False;
3871 TreeSelectLogDeleteSeparator.Visible := False;
3872 TreeSelectLogDeletePopupMenu.Visible := False;
3874 TreeSelectThreadPupupMenu.Visible := False;
3875 TreeSelectBoardPupupMenu.Visible := False;
3876 TPMSep01.Visible := False;
3877 TreeSelectURLPupupMenu.Visible := False;
3878 TreeSelectNamePupupMenu.Visible := False;
3879 TreeSelectNameURLPupupMenu.Visible := False;
3880 TreeSelectFavoriteAddPupupMenu.Visible := False;
3881 TreeSelectLogDeleteSeparator.Visible := False;
3882 TreeSelectLogDeletePopupMenu.Visible := False;
3886 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
3887 var ppDisp: IDispatch; var Cancel: WordBool);
3896 threadItem: TThreadItem;
3900 if (IHTMLDocument2(TWebBrowser(Sender).Document).activeElement <> nil) then begin
3901 Text := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.Get_outerText;
3902 Html := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.Get_outerHTML;
3903 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
3904 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
3905 if GikoSys.Setting.ResAnchorJamp then begin
3906 Text := ZenToHan(Trim(Text));
3908 if(AnsiPos('>>', Text) = 1) then begin
3909 //Text := Copy(Text, 3, Length(Text) - 2);
3912 //Text := Copy(Text, 2, Length(Text) - 1);
3916 if AnsiPos('-', Text) <> 0 then begin
3917 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
3918 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
3919 wkIntTo := StrToIntDef(Text, 0);
3920 if wkIntTo < wkIntSt then
3923 wkIntSt := StrToIntDef(Text, 0);
3926 if wkIntSt <> 0 then begin
3927 FActiveContent.IDAnchorPopup('');
3928 BrowserMovement(IntToStr(wkIntSt));
3934 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
3936 URL := GikoSys.GetHRefText(Html);
3937 URL := GikoSys.HTMLDecode(URL);
3938 if AnsiPos('BE:', URL) = 1 then begin
3939 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
3940 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
3941 threadItem := FActiveContent.Thread;
3942 if threadItem = nil then Exit;
3943 URL := BE_PHP_URL + BNum + '&u=d'
3944 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
3947 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
3948 ( AnsiPos('ftp://', URL) = 1) then begin
3949 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
3950 if GikoSys.Setting.LinkAddAddressBar then begin
3951 idx := AddressComboBox.Items.IndexOf(URL);
3952 if idx = -1 then begin
3953 AddressComboBox.Items.Insert(0, URL);
3954 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
3955 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
3957 AddressComboBox.Items.Delete(idx);
3958 AddressComboBox.Items.Insert(0, URL);
3968 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
3970 if Mouse.Capture <> 0 then
3972 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3973 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
3974 FBrowserSizeWidth := ViewPanel.Width;
3976 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
3977 FBrowserSizeHeight := ViewPanel.Height;
3979 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3980 if ViewPanel.Width < 2 then begin
3981 ViewPanel.Width := 1;
3982 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3983 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3984 GikoSys.Setting.ListWidthState := glsMax;
3985 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
3986 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3987 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3988 GikoSys.Setting.ListWidthState := glsMin;
3990 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3991 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3992 GikoSys.Setting.ListWidthState := glsNormal;
3995 if ViewPanel.Height < 2 then begin
3996 ViewPanel.Height := 1;
3997 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
3998 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
3999 GikoSys.Setting.ListHeightState := glsMax;
4000 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
4001 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4002 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4003 GikoSys.Setting.ListHeightState := glsMin;
4005 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4006 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4007 GikoSys.Setting.ListHeightState := glsNormal;
4010 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
4011 FBrowserSizeHeight := ViewPanel.Height
4012 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
4013 FBrowserSizeWidth := ViewPanel.Width;}
4016 procedure TGikoForm.BrowserTabChange(Sender: TObject);
4021 BrowserTab.Tabs.BeginUpdate;
4023 if not BrowserTab.Dragging then begin
4024 FTabHintIndex := -1;
4025 BrowserTab.Hint := '';
4026 idx := BrowserTab.TabIndex;
4027 if idx = -1 then begin
4028 SetContent(BrowserNullTab);
4030 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
4031 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
4032 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
4034 FBrowsers.Move(j ,0);
4036 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
4037 (FActiveContent.Browser <> BrowserNullTab.Browser) and
4038 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
4039 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4041 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
4042 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
4043 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
4047 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
4048 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
4049 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4051 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
4052 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
4053 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4055 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
4056 AddressComboBox.Text := GetActiveContent.URL;
4058 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
4059 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
4062 GikoDM.SetFocusForBrowserAction.Execute;
4066 BrowserTab.Tabs.EndUpdate;
4071 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
4072 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
4078 if Button = mbMiddle then begin
4079 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
4082 p := BrowserTab.ScreenToClient(p);
4083 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
4085 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4086 end else if Button = mbLeft then begin
4087 FDragWFirst := true;
4088 FMouseDownPos.X := X;
4089 FMouseDownPos.Y := Y;
4094 procedure TGikoForm.SetBrowserTabState;
4096 CoolBand: TCoolBand;
4098 BrowserBottomPanel.AutoSize := False;
4099 if GikoSys.Setting.BrowserTabVisible then begin
4101 BrowserTab.Tabs.BeginUpdate;
4103 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
4104 BrowserTab.Style := tsTabs;
4105 if GikoSys.Setting.BrowserTabPosition = gtpTop then
4106 BrowserTab.TabPosition := tpTop
4108 BrowserTab.TabPosition := tpBottom;
4109 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
4110 BrowserTab.TabPosition := tpTop;
4111 BrowserTab.Style := tsButtons;
4113 BrowserTab.TabPosition := tpTop;
4114 BrowserTab.Style := tsFlatButtons
4117 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
4118 BrowserTab.Parent := BrowserTabToolBar;
4119 BrowserBottomPanel.Hide;
4120 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4121 if CoolBand <> nil then
4122 CoolBand.Visible := True;
4124 BrowserTab.Parent := BrowserBottomPanel;
4125 BrowserTab.Top := 0;
4126 BrowserTab.Left := 0;
4127 BrowserBottomPanel.Show;
4128 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4129 if CoolBand <> nil then
4130 CoolBand.Visible := False;
4133 BrowserTab.Tabs.EndUpdate;
4137 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4138 if CoolBand <> nil then
4139 CoolBand.Visible := False;
4140 BrowserBottomPanel.Visible := False;
4141 GikoDM.AllTabCloseAction.Execute;
4145 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
4146 Y: Integer; State: TDragState; var Accept: Boolean);
4150 idx := BrowserTab.IndexOfTabAt(X, Y);
4151 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
4154 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
4159 idx := BrowserTab.IndexOfTabAt(X, Y);
4161 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
4164 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
4165 Shift: TShiftState; X, Y: Integer);
4168 ThreadItem: TThreadItem;
4171 TabIdx := BrowserTab.IndexOfTabAt(x, y);
4173 if ( ssLeft in Shift ) and ( BrowserTab.Style = tsTabs ) then begin
4174 if FDragWFirst = false then begin
4175 FDragWFirst := true;
4177 BrowserTab.EndDrag(false);
4178 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
4179 FDragWFirst := false;
4182 BrowserTab.EndDrag(false);
4183 FDragWFirst := false;
4186 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
4187 Application.CancelHint;
4188 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
4189 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
4190 BrowserTab.Hint := ThreadItem.Title;
4191 Application.ShowHint := True;
4193 BrowserTab.Hint := '';
4194 Application.ShowHint := True;
4196 FTabHintIndex := TabIdx;
4201 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
4202 const pDisp: IDispatch; var URL: OleVariant);
4204 FDispHtmlDocument: DispHTMLDocument;
4205 BrowserRecord :TBrowserRecord;
4208 threadItem : TThreadItem;
4210 if TObject(Sender) is TWebBrowser then begin
4211 BrowserRecord := nil;
4212 if TWebBrowser(Sender) <> Browser then begin
4213 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4214 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
4215 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
4219 if BrowserRecord <> nil then begin
4220 if BrowserRecord.Event <> nil then
4221 BrowserRecord.Event.Free;
4222 FDispHtmlDocument := Idispatch(OleVariant(BrowserRecord.Browser.ControlInterface).Document) as DispHTMLDocument;
4223 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4224 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4225 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4228 if GetActiveContent <> nil then begin
4229 FDispHtmlDocument := Idispatch(OleVariant(Browser.ControlInterface).Document) as DispHTMLDocument;
4230 if FEvent <> nil then
4232 FEvent := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4233 FEvent.OnContextMenu := OnDocumentContextMenu;
4234 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4236 if FEvent <> nil then begin
4244 if (BrowserRecord <> nil) and
4245 Assigned( BrowserRecord.Thread ) then begin
4246 threadItem := BrowserRecord.Thread;
4248 if (threadItem.JumpAddress > 0) then begin
4249 if threadItem.UnRead then begin
4250 threadItem.UnRead := False;
4252 RefreshListView(threadItem);
4254 //
\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®
4255 //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4256 if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4257 BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4258 threadItem.JumpAddress := 0;
4260 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4263 end else if threadItem.UnRead then begin
4264 threadItem.UnRead := False;
4266 BrowserRecord.Move('new');
4267 RefreshListView(threadItem);
4268 end else if threadItem.ScrollTop <> 0 then begin
4270 doc := Idispatch( OleVariant( BrowserRecord.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4271 doc.Body.ScrollTop := threadItem.ScrollTop;
4274 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4279 LockWindowUpdate(0);
4282 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4284 AddRoundNameMenu(RoundNamePopupMenu.Items);
4287 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4293 Item := TMenuItem.Create(Self);
4294 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4295 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4297 Item := TMenuItem.Create(Self);
4298 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4299 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4301 Item := TMenuItem.Create(Self);
4302 Item.Caption := '-';
4304 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4305 Item := TMenuItem.Create(Self);
4306 Item.Caption := RoundList.RoundNameList[i];
4307 Item.OnClick := SetSelectRoundName;
4312 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4314 threadItem : TThreadItem;
4316 if ParentName <> 'dummy1' then begin
4317 SetSelectItemRound(RoundFlag, RoundName);
4319 threadItem := GetActiveContent;
4320 if threadItem <> nil then begin
4321 threadItem.RoundName := RoundName;
4323 RoundList.RoundNameList.Add(RoundName);
4324 threadItem.Round := RoundFlag;
4329 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4334 List := TList.Create;
4336 SelectListItem(List);
4337 for i := 0 to List.Count - 1 do begin
4338 if TObject(List[i]) is TBoard then begin
4339 TBoard(List[i]).RoundName := RoundName;
4341 RoundList.RoundNameList.Add(RoundName);
4342 TBoard(List[i]).Round := RoundFlag;
4343 end else if TObject(List[i]) is TThreadItem then begin
4344 if TThreadItem(List[i]).IsLogFile then begin
4345 TThreadItem(List[i]).RoundName := RoundName;
4347 RoundList.RoundNameList.Add(RoundName);
4348 TThreadItem(List[i]).Round := RoundFlag;
4357 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4359 MenuItem: TMenuItem;
4361 if Sender is TMenuItem then begin
4362 MenuItem := TMenuItem(Sender);
4363 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4368 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4373 if CoolBar = nil then
4375 for i := 0 to CoolBar.Bands.Count - 1 do begin
4376 if CoolBar.Bands[i].Control = Control then begin
4377 Result := CoolBar.Bands[i];
4383 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4385 if BrowserTab.Parent = BrowserTabToolBar then
4386 BrowserTab.Width := BrowserTabToolBar.Width;
4389 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4394 procedure TGikoForm.SetMenuFont;
4396 // GikoSys.MenuFont(MenuToolBar.Font);
4397 // MenuToolBar.Buttons[0].AutoSize := False;
4398 // MenuToolBar.Buttons[0].AutoSize := True;
4399 // MenuToolBar.Font.Color := clMenuText;
4400 GikoSys.MenuFont(MainCoolBar.Font);
4401 MenuToolBar.Buttons[0].AutoSize := False;
4402 MenuToolBar.Buttons[0].AutoSize := True;
4403 MainCoolBar.AutoSize := False;
4404 MainCoolBar.AutoSize := True;
4406 GikoSys.MenuFont(ListCoolBar.Font);
4407 GikoSys.MenuFont(BrowserCoolBar.Font);
4408 // MenuToolBar.Font.Color := clMenuText;
4411 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4415 if FavoriteDM.Modified then begin
4418 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4419 NewMenu := TMenuItem.Create(MainMenu);
4420 NewMenu.Action := GikoDM.FavoriteAddAction;
4421 FavoriteMenu.Add(NewMenu);
4422 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4423 NewMenu := TMenuItem.Create(FavoriteMenu);
4424 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4425 FavoriteMenu.Add(NewMenu);
4426 //
\83Z
\83p
\83\8c\81[
\83^
4427 FavoriteMenu.InsertNewLineAfter(NewMenu);
4428 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4429 FavoriteDM.Modified := false;
4433 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4436 NewMenu: array of TMenuItem;
4438 SetLength(NewMenu, Node.Count);
4439 Node := Node.getFirstChild;
4441 while ( Node <> nil ) do begin
4442 NewMenu[i] := TFavoriteMenuItem.Create(nil);
4443 NewMenu[i].AutoHotkeys := maAutomatic;
4444 NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4445 TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4447 if TObject(Node.Data) is TFavoriteFolder then begin
4448 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4449 CreateFavMenu(Node, NewMenu[i]);
4450 end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4451 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4452 NewMenu[i].OnClick := FavoriteClick;
4453 end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4454 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4455 NewMenu[i].OnClick := FavoriteClick;
4458 Node := Node.getNextSibling;
4460 MenuItem.Add(NewMenu);
4463 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4465 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';
4466 TitleAdd: String = '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á';
4468 Dlg : TFavoriteAddDialog;
4474 if Item is TFavoriteBoardItem then
4475 Item := TFavoriteBoardItem( Item ).Item
4476 else if Item is TFavoriteThreadItem then
4477 Item := TFavoriteThreadItem( Item ).Item;
4479 Node := FavoriteTreeView.Items.GetFirstNode;
4480 if Item is TBoard then begin
4481 ItemURL := TBoard( Item ).URL;
4482 while Node <> nil do begin
4484 if TObject( Data ) is TFavoriteBoardItem then begin
4485 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4486 if Application.MessageBox(PChar(MsgAdd) , PChar(TitleAdd), MB_YESNO ) = IDNO then
4491 Node := Node.GetNext;
4493 Dlg := TFavoriteAddDialog.Create(Self);
4495 Dlg.SetBoard( TBoard( Item ) );
4500 end else if Item is TThreadItem then begin
4501 ItemURL := TThreadItem( Item ).URL;
4502 while Node <> nil do begin
4504 if TObject( Data ) is TFavoriteThreadItem then begin
4505 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
4506 if Application.MessageBox( PChar(MsgAdd), PChar(TitleAdd), MB_YESNO ) = IDNO then
4511 Node := Node.GetNext;
4513 Dlg := TFavoriteAddDialog.Create(Self);
4515 Dlg.SetThreadItem( TThreadItem( Item ) );
4525 procedure TGikoForm.FavoriteClick(Sender: TObject);
4527 FavoriteClick( Sender, True );
4530 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4533 ThreadItem: TThreadItem;
4534 FavBoard: TFavoriteBoardItem;
4535 FavThread: TFavoriteThreadItem;
4539 if Sender is TFavoriteMenuItem then
4540 Item := TFavoriteMenuItem(Sender).Data
4541 else if Sender is TLinkToolButton then
4542 Item := TLinkToolButton(Sender).Data
4543 else if Sender is TTreeNode then
4544 Item := TTreeNode( Sender ).Data
4548 if TObject(Item) is TFavoriteBoardItem then begin
4549 FavBoard := TFavoriteBoardItem(Item);
4550 Board := FavBoard.Item;
4551 if Board <> nil then begin
4552 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4553 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4554 SelectTreeNode(Board, True);
4556 end else if TObject(Item) is TFavoriteThreadItem then begin
4557 FavThread := TFavoriteThreadItem(Item);
4558 ThreadItem := FavThread.Item;
4559 if ThreadItem = nil then
4562 InsertBrowserTab(ThreadItem, ActiveTab);
4564 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4565 if GikoSys.Setting.ListWidthState = glsMin then begin
4566 GikoDM.BrowserMaxAndFocusAction.Execute;
4569 if GikoSys.Setting.ListHeightState = glsMin then begin
4570 GikoDM.BrowserMaxAndFocusAction.Execute;
4576 procedure TGikoForm.BBSMenuItemOnClick(
4581 if Sender is TBBSMenuItem then
4582 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4586 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4588 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4591 //!
\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é)
4592 procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4594 stRes, edRes : Int64;
4595 browserRec : TBrowserRecord;
4596 threadNumber : String;
4601 Thread.JumpAddress := 0;
4602 //
\83^
\83u
\82ð
\90¶
\90¬
4603 browserRec := InsertBrowserTab(Thread);
4604 if (browserRec <> nil) then begin
4605 // JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N
\82·
\82é
4606 threadNumber := ChangeFileExt(Thread.FileName, '');
4607 GikoSys.GetPopupResNumber( URL, stRes, edRes );
4608 //
\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
4609 if (StrToInt64(threadNumber) = stRes) then begin
4610 if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4611 and (Pos('&st=' + threadNumber , URL) = 0) then begin
4615 if ( stRes > 0 ) then begin
4616 Thread.JumpAddress := stRes;
4618 //
\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é
4619 if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4620 DownloadContent(Thread);
4621 end else if (not browserRec.Repaint) and (stRes > 0) then begin
4622 browserRec.Move(IntToStr(stRes));
4623 Thread.JumpAddress := 0;
4625 doc := Idispatch( OleVariant( browserRec.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4626 Thread.ScrollTop := doc.Body.ScrollTop;
4633 procedure TGikoForm.MoveToURL(const inURL: string);
4635 protocol, host, path, document, port, bookmark : string;
4636 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4638 BBSID, BBSKey: string;
4639 {tmpBoard,} Board: TBoard;
4640 ThreadItem: TThreadItem;
4643 tmpThread : TThreadItem;
4644 shiftDown : Boolean;
4648 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4649 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4652 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4653 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4654 if shiftDown then begin
4655 GikoSys.OpenBrowser(inURL, gbtUserApp);
4657 end else if ctrlDown then begin
4658 GikoSys.OpenBrowser(inURL, gbtIE);
4662 //=====
\83v
\83\89\83O
\83C
\83\93
4665 bi := Length(BoardGroups) - 1;
4666 for i := 1 to bi do begin
4667 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4668 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4671 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4672 Board := BBSsFindBoardFromURL( boardURL );
4675 if Board = nil then begin
4677 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4678 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4681 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4682 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4683 ShowBBSTree( BBSs[ 1 ] );
4686 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4687 if not Board.IsThreadDatRead then begin
4688 GikoSys.ReadSubjectFile( Board );
4692 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4693 if ThreadItem = nil then begin
4694 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4695 ThreadItem := tmpThread;
4696 Board.Insert( 0, ThreadItem );
4697 if ActiveList is TBoard then begin
4698 if TBoard(ActiveList) = Board then
4699 ListView.Items.Count := ListView.Items.Count + 1;
4704 OpenThreadItem(ThreadItem, inURL);
4711 Board := BBSsFindBoardFromURL(
4712 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4714 if Board <> nil then begin
4715 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4716 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4717 SelectTreeNode( Board, True );
4725 // 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¢
4729 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4730 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4731 Board := BBSsFindBoardFromURL( boardURL );
4732 if Board = nil then begin
4733 //
\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
4734 GikoSys.OpenBrowser(inURL, gbtUserApp);
4737 //
\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é
4739 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4740 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4741 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4742 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4743 GikoSys.OpenBrowser(inURL, gbtUserApp);
4748 if not Board.IsThreadDatRead then
4749 GikoSys.ReadSubjectFile(Board);
4750 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4751 ThreadItem := Board.FindThreadFromURL( URL );
4752 //
\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)
4753 if ThreadItem = nil then begin
4754 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4757 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ª
\82È
\82¢
\82È
\82ç
\90¶
\90¬
\82·
\82é
\81B
4758 if ThreadItem = nil then begin
4759 ThreadItem := TThreadItem.Create( nil, Board, URL );
4760 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4761 Board.Insert(0, ThreadItem);
4762 if ActiveList is TBoard then begin
4763 if TBoard(ActiveList) = Board then
4764 ListView.Items.Count := ListView.Items.Count + 1;
4767 //
\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é
4768 if (not ThreadItem.IsLogFile) then begin
4769 if AnsiPos(Host, Board.URL) = 0 then
4770 ThreadItem.DownloadHost := Host
4772 ThreadItem.DownloadHost := '';
4774 OpenThreadItem(ThreadItem, inURL);
4778 Board := BBSsFindBoardFromURL( inURL );
4779 if Board = nil then begin
4780 GikoSys.OpenBrowser(inURL, gbtAuto);
4782 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4783 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4784 SelectTreeNode( Board, True );
4789 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4791 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4792 CoolBarResized( Sender, MainCoolBar );
4795 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4796 Shift: TShiftState);
4798 if Key = VK_RETURN then
4799 GikoDM.MoveToAction.Execute;
4802 procedure TGikoForm.BrowserEnter(Sender: TObject);
4804 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4807 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4809 CDS:PCopyDataStruct;
4813 CDS := Message.CopyDataStruct;
4814 GetMem(PC, CDS^.cbData);
4816 lstrcpy(PC,CDS^.lpData);
4817 SetString(sURL, PC,lstrlen(PC));
4822 Message.Result := 1;
4825 procedure TGikoForm.WndProc(var Message: TMessage);
4827 senderBrowser : TWebBrowser;
4833 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4836 if Message.WParam = SC_MINIMIZE then
4839 TreeClick( TreeView.Selected );
4846 USER_DOCUMENTCOMPLETE:
4847 if (Message.WParam <> 0) and
4848 (TObject(Message.WParam) is TWebBrowser) then begin
4849 senderBrowser := TWebBrowser( Message.WParam );
4850 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
4859 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
4864 //
\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Í
4865 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
4866 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
4867 if Msg.CharCode in [VK_BACK] then begin
4868 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4869 if Msg.KeyData > 0 then begin
4872 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4876 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
4877 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
4880 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4883 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
4884 if Msg.CharCode in [VK_BACK] then begin
4885 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4886 if Msg.KeyData > 0 then begin
4889 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4892 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
4895 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4899 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
4903 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
4909 HtmlFileName: string;
4913 TargetFrameName: OleVariant;
4914 PostData: OleVariant;
4915 Headers: OleVariant;
4916 WindowHeight: Integer;
4917 WindowWidth: Integer;
4921 Protocol, Host, Path, Document, Port, Bookmark: string;
4923 PreviewTimer.Enabled := False;
4927 case GikoSys.Setting.PreviewSize of
4934 WindowHeight := 192;
4938 WindowHeight := 384;
4942 WindowHeight := 480;
4944 else begin //gpsMedium
4946 WindowHeight := 288;
4950 ARect := Rect(0, 0, WindowWidth, WindowHeight);
4952 case GikoSys.Setting.PopupPosition of
4953 gppRightTop: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - (ARect.Bottom - ARect.Top) - 15);
4954 gppRight: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
4955 gppRightBottom: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y + 15);
4956 gppTop: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - (ARect.Bottom - ARect.Top) - 15);
4957 gppCenter: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - ((ARect.Bottom - ARect.Top) div 2));
4958 gppBottom: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y + 15);
4959 gppLeftTop: OffsetRect(ARect, p.x + 15, p.y - (ARect.Bottom - ARect.Top) - 15);
4960 gppLeft: OffsetRect(ARect, p.x + 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
4961 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Ó
4964 html := '<html><head>'#13#10
4966 + 'function init() {'#13#10
4967 + ' if ((document.body.clientHeight >= Image1.height) && (document.body.clientWidth >= Image1.width)) {'#13#10
4969 + ' var dh, ih;'#13#10
4970 + ' dh = document.body.clientWidth / document.body.clientHeight;'#13#10
4971 + ' ih = Image1.width / Image1.height;'#13#10
4972 + ' if (document.body.clientWidth < document.body.clientHeight) {'#13#10
4973 + ' if (ih > dh)'#13#10
4974 + ' Image1.width = document.body.clientWidth;'#13#10
4976 + ' Image1.height = document.body.clientHeight;'#13#10
4978 + ' if (ih < dh)'#13#10
4979 + ' Image1.height = document.body.clientHeight;'#13#10
4981 + ' Image1.width = document.body.clientWidth;'#13#10
4984 + ' Message.style.display = "none";'#13#10
4988 + '<body topmargin="0" leftmargin="0" style="border-width: 1px; overflow:hidden; border-style: solid;" onLoad="init()">'#13#10
4989 + '<div align="center" id="Message">
\83v
\83\8c\83r
\83\85\81[
\8dì
\90¬
\92\86</div>'#13#10
4990 + '<div align="center"><img name="Image1" border="0" src="%ImageURL%"></div>'#13#10
4992 sl := TStringList.Create;
4995 HtmlFileName := GikoSys.GetAppDir + HTML_FILE_NAME;
4996 sl.Text := AnsiReplaceStr(html, '%ImageURL%', FPreviewURL);
4997 sl.SaveToFile(HtmlFileName);
5004 NavURL := HtmlFileName;
5006 TargetFrameName := '';
5009 GikoSys.ParseURI(FPreviewURL, Protocol, Host, Path, Document, Port, Bookmark);
5010 Referer := Protocol + '://' + Host;
5012 Referer := Referer + ':' + Port;
5013 Referer := Referer + Path;
5014 Headers := 'Referer: ' + Referer;
5015 FPreviewBrowser.Navigate(NavURL, Flags, TargetFrameName, PostData, Headers);
5016 if ARect.Top + WindowHeight > Screen.DesktopHeight then
5017 ARect.Top := Screen.DesktopHeight - WindowHeight;
5018 if ARect.Left + WindowWidth > Screen.DesktopWidth then
5019 ARect.Left := Screen.DesktopWidth - WindowWidth;
5020 if ARect.Left < Screen.DesktopLeft then ARect.Left := Screen.DesktopLeft;
5021 if ARect.Bottom < Screen.DesktopTop then ARect.Bottom := Screen.DesktopTop;
5023 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST, ARect.Left, ARect.Top, WindowWidth, WindowHeight, SWP_NOACTIVATE or SWP_HIDEWINDOW);
5024 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
5025 FPreviewBrowserRect := ARect;
5026 // Style := GetWindowLong(FPreviewBrowser.Handle, GWL_EXSTYLE);
5027 // SetWindowLong(FPreviewBrowser.Handle, GWL_EXSTYLE, Style xor WS_EX_APPWINDOW);
5031 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
5036 if PreviewTimer.Enabled then
5037 PreviewTimer.Enabled := False;
5038 if (FHint <> nil) and (IsWindowVisible(FHint.Handle)) then begin
5039 FHint.ReleaseHandle;
5043 if (FPreviewBrowser <> nil)
5044 and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
5045 //
\82±
\82±
\82Å
\8fÁ
\82³
\82ê
\82é
\82Ì
\82ª
\96â
\91è
5046 //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Å
\95\
\8e¦
\94Í
\88Í
\94»
\92è
\82Å
\82«
\82Ä
\82¢
\82é
\82Í
\82¸
5047 Pos := Mouse.CursorPos;
5048 Pos.X := Pos.X + Left;
5049 Pos.Y := Pos.Y + Top;
5050 if (FPreviewBrowserRect.Left > Pos.X) or
5051 (FPreviewBrowserRect.Right < Pos.X) or
5052 (FPreviewBrowserRect.Top > Pos.Y) or
5053 (FPreviewBrowserRect.Bottom < Pos.Y) then begin
5054 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
5058 Message.Result := 1;
5061 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
5063 GikoDM.MsgBarCloseAction.Execute;
5066 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
5068 Doc: IHtmlDocument2;
5069 Range: IHTMLTxtRange;
5072 ThreadItem: TThreadItem;
5075 FactiveContent.IDAnchorPopup('');
5076 Doc := FactiveContent.Browser.Document as IHtmlDocument2;
5077 if Assigned(Doc) then begin
5078 Range := Doc.selection.createRange as IHTMLTxtRange;
5079 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
5080 s := ZenToHan(Trim(s));
5081 if GikoSys.IsNumeric(s) then begin
5083 ThreadItem := GetActiveContent;
5084 if ThreadItem <> nil then begin
5085 Num := StrToInt64(s);
5086 FHint.PopupType := gptThread;
5087 HTMLCreater.SetResPopupText(FHint, ThreadItem, Num, Num, False, False);
5088 if FHint.ResCount <> 0 then
5099 procedure TGikoForm.ShowTextPopup;
5104 // if Trim(s) = '' then
5107 FHint.Font.Name := GikoSys.Setting.HintFontName;
5108 FHint.Font.Size := GikoSys.Setting.HintFontSize;
5109 FHint.Font.Color := GikoSys.Setting.HintFontColor;
5110 FHint.Color := GikoSys.Setting.HintBackColor;
5111 FHint.HeaderBold := GikoSys.Setting.ResPopupHeaderBold;
5113 if FHint.PopupType = gptRaw then
5114 ARect := FHint.CalcHintRect(Screen.Width, FHint.Caption, nil)
5116 ARect := FHint.CalcHintRect(Screen.Width, '', nil);
5117 case GikoSys.Setting.PopupPosition of
5118 gppRightTop: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - (ARect.Bottom - ARect.Top) - 15);
5119 gppRight: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
5120 gppRightBottom: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y + 15);
5121 gppTop: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - (ARect.Bottom - ARect.Top) - 15);
5122 gppCenter: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - ((ARect.Bottom - ARect.Top) div 2));
5123 gppBottom: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y + 15);
5124 gppLeftTop: OffsetRect(ARect, p.x + 15, p.y - (ARect.Bottom - ARect.Top) - 15);
5125 gppLeft: OffsetRect(ARect, p.x + 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
5126 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Ó
5128 //FHint.ActivateHint(ARect, s);
5129 if FHint.PopupType = gptRaw then
5130 FHint.ActivateHint(ARect, FHint.Caption)
5132 FHint.ActivateHint(ARect, '');
5134 FHint.ReleaseHandle;
5139 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
5141 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
5142 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
5144 if FTreeType = gttHistory then begin
5145 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
5146 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
5150 TreeView.Items.Clear;
5154 procedure TGikoForm.SetLinkBar;
5158 ToolButton: TLinkToolButton;
5159 MenuItem: TMenuItem;
5160 oldIgnoreResize : TResizeType;
5162 oldIgnoreResize := FIsIgnoreResize;
5163 FIsIgnoreResize := rtResizing;
5164 MainCoolBar.Bands.BeginUpdate;
5166 LinkBarPopupMenu.Items.Clear;
5167 for i := LinkToolBar.ButtonCount - 1 downto 0 do
5168 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
5169 LinkToolBar.Buttons[i].Free;
5170 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5171 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5172 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5173 ToolButton := TLinkToolButton.Create(LinkToolBar);
5174 // ToolButton.Parent := LinkToolBar;
5175 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
5176 MenuItem := TMenuItem.Create(Self);
5177 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
5178 LinkBarPopupMenu.Items.Add(MenuItem);
5179 ToolButton.MenuItem := MenuItem;
5180 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
5181 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
5182 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
5183 ToolButton.OnClick := FavoriteClick;
5184 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
5185 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
5186 ToolButton.OnClick := FavoriteClick;
5188 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
5189 ToolButton.Left := 10000;
5190 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
5191 ToolButton.AutoSize := True;
5192 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
5193 ToolButton.OnDragOver := FavoriteDragOver;
5194 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
5195 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
5196 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
5197 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
5198 //ToolButton.DragMode := dmAutomatic;
5199 ToolButton.DragMode := dmManual;
5200 ToolButton.PopupMenu := FavoriteTreePopupMenu;
5202 LinkToolBar.InsertControl(ToolButton);
5207 { if LinkToolBar.ButtonCount = 0 then begin
5208 ToolButton := TLinkToolButton.Create(LinkToolBar);
5209 ToolButton.Style := tbsButton;
5210 ToolButton.ImageIndex := -1;
5211 ToolButton.Caption := '';
5212 LinkToolBar.InsertControl(ToolButton);
5215 MainCoolBar.Bands.EndUpdate;
5216 LoadCoolBarSettings;
5217 FIsIgnoreResize := oldIgnoreResize;
5221 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5229 if Sender = FavoriteTreeView then begin
5230 Node := FavoriteTreeView.GetNodeAt(X, Y);
5235 bound := Node.DisplayRect( False );
5236 height := bound.Bottom - bound.Top;
5237 if (bound.Top + height / 2) <= Y then
5238 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
5243 if Node.IsFirstNode then
5248 if FDropSpaceNode <> nil then
5249 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
5252 if Change then begin
5253 if FDropSpaceNode <> nil then
5254 FDropSpaceNode.Free;
5256 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
5257 FDropSpaceNode.MoveTo( Node, naInsert );
5258 FDropSpaceNode.ImageIndex := -1;
5259 FDropSpaceNode.SelectedIndex := -1;
5263 if Source = FavoriteTreeView then begin
5264 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
5269 end else if Source = BrowserTab then
5271 else if Source = ListView then
5273 else if Source is TLinkToolButton then
5275 else if Source = TreeView then
5281 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5284 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
5287 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
5289 // FDragging := true;
5292 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
5294 SenderNode: TTreeNode;
5295 LinkToolButton: TLinkToolButton;
5298 LinkToolButton := TLinkToolButton( Sender );
5299 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5300 SenderNode.Selected := False;
5301 FavoriteDragDrop( SenderNode, Source );
5307 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5309 favButton : TLinkToolButton;
5310 favThreadItem : TFavoriteThreadItem;
5316 if Sender is TLinkToolButton then begin
5317 favButton := TLinkToolButton( Sender );
5318 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5319 favThreadItem := TFavoriteThreadItem( favButton.Data );
5320 if favThreadItem.Item <> nil then
5321 InsertBrowserTab( favThreadItem.Item, False );
5329 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5333 TToolButton( Sender ).DragMode := dmManual;
5334 if ssLeft in Shift then begin
5335 // 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)
5336 if FDragTime = 0 then begin
5337 FDragTime := GetTickCount();
5339 Now := GetTickCount();
5340 if (Now - FDragTime) > 500 then begin
5341 if FDragButton <> TToolButton( Sender ) then begin
5343 FDragButton := TToolButton( Sender );
5344 TToolButton(Sender).BeginDrag(false ,5);
5347 {$IF Defined(debug)}
5348 ShowMessage('Error');
5359 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5364 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5369 for i := 0 to ToolBar.ButtonCount - 1 do
5370 if ToolBar.Buttons[i].Visible then
5371 Result := Result + ToolBar.Buttons[i].Width;
5374 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5376 Control : TWinControl;
5379 Control := FindControl(BandInfo^.hwndChild);
5380 if Control = nil then
5383 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5384 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5385 idx := MainCoolBar.Bands[ i ].ID;
5389 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5390 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
5391 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5392 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5393 BandInfo^.cxMinChild := 0;
5394 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
5395 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5396 end else if Control = LinkToolBar then begin
5397 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5398 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5399 BandInfo^.cxMinChild := 0;
5400 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5401 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5402 end else begin // AddressToolBar
5403 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5404 BandInfo^.cxMinChild := 0;
5405 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5409 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5415 ChevronPopupMenu.Items.Clear;
5417 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5418 if MainCoolBar.Bands[ i ].Visible then begin
5419 if Idx = Int64(RebarChevron^.uBand) then begin
5426 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5427 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5429 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5430 ToolBarChevronMenu(StdToolBar);
5431 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5435 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5436 ChevronPopupMenu.Popup(p.x, p.y);
5440 procedure TGikoForm.MenuBarChevronMenu;
5441 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5447 for i := 0 to MenuItem.Count - 1 do begin
5449 if MenuItem[i] is TFavoriteMenuItem then begin
5450 Item := TFavoriteMenuItem.Create(Self);
5451 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5453 Item := TMenuItem.Create(Self);
5454 Item.Caption := MenuItem[i].Caption;
5455 Item.Action := MenuItem[i].Action;
5456 Item.ImageIndex := MenuItem[i].ImageIndex;
5457 Item.OnClick := MenuItem[i].OnClick;
5458 PopupItem.Add(Item);
5459 if MenuItem[i].Count > 0 then
5460 SetSubMenu(MenuItem[i], Item);
5469 ChevronPopupMenu.Items.Clear;
5470 ChevronPopupMenu.Images := MainMenu.Images;
5471 bw := GetWidthAllToolButton(MenuToolBar);
5472 if MenuToolBar.Width < bw then begin
5474 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5475 w := w + MenuToolBar.Buttons[i].Width;
5476 if MenuToolBar.Width <= w then begin
5477 Item := TMenuItem.Create(Self);
5478 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5479 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5480 ChevronPopupMenu.Items.Add(Item);
5481 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5487 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5488 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5493 if Assigned(PopupMenu.OnPopup) then
5494 PopupMenu.OnPopup(nil);
5495 for i := 0 to PopupMenu.Items.Count - 1 do begin
5497 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5498 Item := TFavoriteMenuItem.Create(Self);
5499 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5501 Item := TMenuItem.Create(Self);
5502 Item.Caption := PopupMenu.Items[i].Caption;
5503 Item.Action := PopupMenu.Items[i].Action;
5504 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5505 Item.OnClick := PopupMenu.Items[i].OnClick;
5506 PopupItem.Add(Item);
5515 ChevronPopupMenu.Items.Clear;
5516 ChevronPopupMenu.Images := ToolBar.HotImages;
5517 bw := GetWidthAllToolButton(ToolBar);
5518 if ToolBar.Width < bw then begin
5520 for i := 0 to ToolBar.ButtonCount - 1 do begin
5521 if ToolBar.Buttons[i].Visible then
5522 w := w + ToolBar.Buttons[i].Width;
5523 if ToolBar.Width <= w then begin
5524 if ToolBar.Buttons[i].Tag = 0 then begin
5525 Item := TMenuItem.Create(Self);
5526 if ToolBar.Buttons[i].Style = tbsSeparator then
5529 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5530 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5533 Item.Caption := ToolBar.Buttons[i].Caption;
5534 Item.Action := ToolBar.Buttons[i].Action;
5536 //Item.Visible := True;
5538 ChevronPopupMenu.Items.Add(Item);
5539 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5541 Item.OnClick := nil;
5542 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5550 procedure TGikoForm.LinkBarChevronMenu;
5555 Item: TFavoriteMenuItem;
5557 Button: TLinkToolButton;
5559 ChevronPopupMenu.Items.Clear;
5560 ChevronPopupMenu.Images := LinkToolBar.Images;
5561 bw := GetWidthAllToolButton(LinkToolBar);
5562 if LinkToolBar.Width < bw then begin
5564 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5565 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5566 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5567 w := w + LinkToolBar.Buttons[j].Width;
5568 if LinkToolBar.Width <= w then begin
5569 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5570 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5571 Item := TFavoriteMenuItem.Create(Self);
5572 if TObject(Button.Data) is TFavoriteFolder then begin
5573 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5574 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5575 Item.OnClick := FavoriteClick;
5576 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5577 Item.OnClick := FavoriteClick;
5579 Item.Data := Button.Data;
5580 Item.Caption := LinkToolBar.Buttons[j].Caption;
5581 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5582 ChevronPopupMenu.Items.Add(Item);
5593 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5594 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5595 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5597 \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É
5598 \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
5600 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5602 bandInfo : tagREBARBANDINFOA;
5603 pBandInfo : PReBarBandInfoA;
5610 pBandInfo := @bandInfo;
5611 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5612 bandInfo.cbSize := sizeof( bandInfo );
5613 bandInfo.hwndChild := h;
5614 bandInfo.cyMinChild := bar.Height;
5615 bar.OnBandInfo( nil, pBandInfo );
5616 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5618 for i := bar.Bands.Count - 1 downto 0 do begin
5619 if bar.Bands[ i ].Control.Handle = h then begin
5625 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5629 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5631 Control: TWinControl;
5634 Control := FindControl(BandInfo^.hwndChild);
5635 if Control = nil then
5638 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5639 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5640 idx := ListCoolBar.Bands[ i ].ID;
5644 if Control = ListToolBar then begin
5645 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5646 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5647 BandInfo^.cxMinChild := 0;
5648 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5649 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5651 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5652 BandInfo^.cxMinChild := 0;
5653 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5657 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5662 ChevronPopupMenu.Items.Clear;
5663 Idx := RebarChevron^.uBand;
5664 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5665 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5666 ToolBarChevronMenu(ListToolBar);
5669 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5670 ChevronPopupMenu.Popup(p.x, p.y);
5674 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5676 Control: TWinControl;
5679 Control := FindControl(BandInfo^.hwndChild);
5680 if Control = nil then
5683 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5684 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5685 idx := BrowserCoolBar.Bands[ i ].ID;
5689 if Control = BrowserToolBar then begin
5690 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5691 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5692 BandInfo^.cxMinChild := 0;
5693 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5694 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5696 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5697 BandInfo^.cxMinChild := 0;
5698 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5702 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5707 ChevronPopupMenu.Items.Clear;
5708 Idx := RebarChevron^.uBand;
5709 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5710 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5711 ToolBarChevronMenu(BrowserToolBar)
5714 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5715 ChevronPopupMenu.Popup(p.x, p.y);
5719 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5721 if Column^.iImage = -1 then begin
5722 Column^.mask := Column^.mask or LVCF_FMT;
5724 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5725 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5729 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5734 for i := bar.ButtonCount - 1 downto 0 do begin
5735 if bar.Buttons[ i ].Action = action then begin
5736 Result := bar.Buttons[ i ];
5742 procedure TGikoForm.SetToolBarPopup;
5745 aIEButton : TToolButton;
5746 aCabinetBBSButton : TToolButton;
5747 aResRangeButton : TToolButton;
5748 aThreadRangeButton: TToolButton;
5750 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5752 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5753 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5754 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5755 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5756 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5758 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5759 if aIEButton <> nil then
5760 aIEButton.DropdownMenu := BrowserPopupMenu;
5761 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5762 if aCabinetBBSButton <> nil then
5763 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5764 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5765 if aResRangeButton <> nil then
5766 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5767 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5768 if aThreadRangeButton <> nil then
5769 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5772 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5773 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5777 // browserPos : TPoint;
5781 Wnd := WindowFromPoint(Mouse.CursorPos);
5783 if WheelDelta > 0 then
5788 if (Wnd = BrowserTab.Handle) or
5789 (Wnd = BrowserTab.Parent.Handle) then begin
5790 BrowserTab.ScrollTabs(Delta);
5792 if FIsHandledWheel then begin
5793 FIsHandledWheel := False;
5796 FIsHandledWheel := True;
5797 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5798 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5800 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5808 procedure TGikoForm.SetSelectWord( const text : string );
5810 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5811 ClearThreadRengeAction;
5813 if Length( text ) = 0 then
5815 GikoDM.AllItemAction.Checked := True;
5816 SetListViewType( gvtAll )
5818 SetListViewType( gvtUser, text, false );
5822 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5825 SetSelectWord( SelectComboBox.Text );
5829 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5830 Shift: TShiftState);
5838 if Key = VK_Return then
5841 end else if Key = 229 then begin
5842 if GikoSys.Setting.UseUndecided then begin
5843 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5844 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5845 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5846 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5847 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5848 SetLength(Str, Len);
5849 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5850 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5851 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5853 Str := SelectComboBox.Text + Str;
5855 if (Length(Str) > 0) then begin
5859 end else if Length( SelectComboBox.Text ) = 0 then
5861 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5862 *
\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
5863 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5866 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5867 ClearThreadRengeAction;
5871 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
5872 procedure TGikoForm.ClearThreadRengeAction;
5874 //
\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é
5875 if GikoDM.AllItemAction.Checked then
5876 GikoDM.AllItemAction.Checked := False;
5877 if GikoDM.LogItemAction.Checked then
5878 GikoDM.LogItemAction.Checked := False;
5879 if GikoDM.NewItemAction.Checked then
5880 GikoDM.NewItemaction.Checked := False;
5881 if GikoDM.LiveItemAction.Checked then
5882 GikoDM.LiveItemAction.Checked := False;
5883 if GikoDM.ArchiveItemAction.Checked then
5884 GikoDM.ArchiveItemAction.Checked := False;
5888 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5893 if Length( SelectComboBox.Text ) = 0 then
5895 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5896 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5901 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5902 procedure TGikoForm.ModifySelectList;
5909 if not SelectComboBoxPanel.Visible then
5912 if Length( SelectComboBox.Text ) > 0 then
5914 oldText := SelectComboBox.Text;
5915 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5917 GikoSys.Setting.SelectTextList.Delete( idx );
5918 idx := SelectComboBox.Items.IndexOf( oldText );
5920 SelectComboBox.Items.Delete( idx );
5921 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5922 SelectComboBox.Items.Insert( 0, oldText );
5923 SelectComboBox.Text := oldText;
5931 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5932 Shift: TShiftState; X, Y: Integer);
5937 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5940 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5941 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5942 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5944 If w <= 50 Then Begin
5945 //
\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
5946 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
5947 pos.X := pos.X + (50 - w);
5949 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
5953 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
5954 //If SelectComboBox.Width <> w Then Begin
5955 If SelectComboBoxPanel.Width <> w Then Begin
5956 SelectComboBoxPanel.Width := w;
5957 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
5958 GikoSys.Setting.SelectComboBoxWidth := w;
5959 DraggingSelectComboBoxPosition := pos;
5961 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
5962 ResetBandInfo( ListCoolBar, ListToolBar );
5968 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
5969 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5973 IsDraggingSelectComboBox := True;
5976 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
5980 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
5981 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5983 IsDraggingSelectComboBox := False;
5987 procedure TGikoForm.StatusBarResize(Sender: TObject);
5989 StatusBar.Panels[1].Width := StatusBar.Width -
5990 StatusBar.Panels[0].Width -
5991 StatusBar.Panels[THREADSIZE_PANEL].Width -
5992 StatusBar.Panels[NGWORDNAME_PANEL].Width;
5994 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
5997 if (Length( SelectComboBox.Text ) = 0) or
5998 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
6000 SelectComboBox.Text := '';
6001 SelectComboBox.Color := clWindow;
6006 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
6009 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
6012 if TObject(SenderNode.Data) is TFavoriteFolder then
6013 SourceNode.MoveTo(SenderNode, naAddChild)
6015 SourceNode.MoveTo(SenderNode, naInsert);
6019 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
6023 FavoBoardItem: TFavoriteBoardItem;
6024 FavoThreadItem: TFavoriteThreadItem;
6026 ThreadItem: TThreadItem;
6029 if (SenderNode = nil) or (Source = nil) then
6032 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
6033 FavNode := SenderNode.Parent
6035 FavNode := SenderNode;
6039 if Source is TBoard then begin
6040 Board := TBoard( Source );
6041 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
6042 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
6043 Node.ImageIndex := 15;
6044 Node.SelectedIndex := 15;
6045 end else if Source is TFavoriteBoardItem then begin
6046 FavoBoardItem := TFavoriteBoardItem( Source );
6047 Board := FavoBoardItem.Item;
6048 if Board <> nil then
6049 if not Board.IsThreadDatRead then
6050 GikoSys.ReadSubjectFile(Board);
6051 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
6052 Node.ImageIndex := 15;
6053 Node.SelectedIndex := 15;
6054 end else if Source is TThreadItem then begin
6055 ThreadItem := TThreadItem( Source );
6056 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
6057 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
6058 Node.ImageIndex := 16;
6059 Node.SelectedIndex := 16;
6060 end else if Source is TBrowserRecord then begin
6061 ThreadItem := TBrowserRecord( Source ).Thread;
6062 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
6063 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
6064 Node.ImageIndex := 16;
6065 Node.SelectedIndex := 16;
6066 end else if Source is TFavoriteThreadItem then begin
6067 FavoThreadItem := TFavoriteThreadItem( Source );
6068 ThreadItem := FavoThreadItem.Item;
6069 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
6070 Node.ImageIndex := 16;
6071 Node.SelectedIndex := 16;
6074 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
6076 FavoriteMoveTo( SenderNode, Node );
6080 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
6083 SourceNode: TTreeNode;
6084 LinkToolButton: TLinkToolButton;
6087 if SenderNode = nil then
6090 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
6091 if FDropSpaceNode <> nil then
6092 SenderNode := FDropSpaceNode;
6094 if Source = FavoriteTreeView then begin
6095 SourceNode := FavoriteTreeView.Selected;
6096 FavoriteMoveTo( SenderNode, SourceNode );
6097 end else if Source is TLinkToolButton then begin
6098 LinkToolButton := TLinkToolButton( Source );
6099 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
6100 FavoriteMoveTo( SenderNode, SourceNode );
6101 end else if Source = BrowserTab then begin
6102 idx := BrowserTab.TabIndex;
6103 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
6104 end else if Source = ListView then begin
6105 FavoriteAddTo( SenderNode, ListView.Selected.Data );
6106 end else if Source = TreeView then begin
6107 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
6111 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
6114 SenderNode: TTreeNode;
6117 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
6118 if SenderNode <> nil then begin
6119 FavoriteDragDrop( SenderNode, Source );
6122 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
6123 if FDropSpaceNode <> nil then begin
6125 FDropSpaceNode.Delete;
6127 FDropSpaceNode := nil;
6130 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6131 FavoriteDM.Modified := true;
6137 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
6138 Node: TTreeNode; var S: String);
6140 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6141 FavoriteDM.Modified := true;
6143 FavoriteTreeView.ReadOnly := True;
6148 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
6149 Shift: TShiftState);
6151 if not TTreeView(Sender).IsEditing then begin
6155 FClickNode := FavoriteTreeView.Selected;
6156 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
6160 FClickNode := FavoriteTreeView.Selected;
6161 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
6165 FavoriteClick( FavoriteTreeView.Selected );
6166 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
6170 FClickNode := FavoriteTreeView.Selected;
6171 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
6175 //
\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·
6176 if Key = VK_ESCAPE then begin
6177 if (TTreeView(Sender).Selected <> nil) then begin
6178 TTreeView(Sender).Selected.Text := FOrigenCaption;
6180 TTreeView(Sender).Selected.Focused := False;
6186 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
6189 LinkToolButton: TLinkToolButton;
6192 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
6194 FClickNode := FavoriteTreeView.Selected;
6196 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
6198 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
6199 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6200 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6201 FClickNode := FavoriteTreeView.Items[i];
6205 for i := 0 to FClickNode.Count - 1 do begin
6206 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
6207 FClickNode := FClickNode.Item[i];
6214 if FClickNode = nil then begin
6215 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6216 FavoriteTreeDeletePopupMenu.Visible := False;
6217 FavoriteTreeRenamePopupMenu.Visible := False;
6218 FavoriteTreeNewFolderPopupMenu.Visible := False;
6219 FavoriteTreeURLCopyPopupMenu.Visible := False;
6220 FavoriteTreeNameCopyPopupMenu.Visible := False;
6221 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6222 FavoriteTreeReloadPopupMenu.Visible := False;
6223 FavoriteTreeLogDeletePopupMenu.Visible := False;
6224 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6225 end else if FClickNode.IsFirstNode then begin
6226 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6227 FavoriteTreeDeletePopupMenu.Visible := False;
6228 FavoriteTreeRenamePopupMenu.Visible := False;
6229 FavoriteTreeNewFolderPopupMenu.Visible := True;
6230 FavoriteTreeURLCopyPopupMenu.Visible := False;
6231 FavoriteTreeNameCopyPopupMenu.Visible := False;
6232 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6233 FavoriteTreeReloadPopupMenu.Visible := False;
6234 FavoriteTreeLogDeletePopupMenu.Visible := False;
6235 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6236 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
6237 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6238 FavoriteTreeDeletePopupMenu.Visible := True;
6239 FavoriteTreeRenamePopupMenu.Visible := False;
6240 FavoriteTreeNewFolderPopupMenu.Visible := True;
6241 FavoriteTreeURLCopyPopupMenu.Visible := False;
6242 FavoriteTreeNameCopyPopupMenu.Visible := False;
6243 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6244 FavoriteTreeReloadPopupMenu.Visible := False;
6245 FavoriteTreeLogDeletePopupMenu.Visible := False;
6246 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6247 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
6248 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6249 FavoriteTreeDeletePopupMenu.Visible := True;
6250 FavoriteTreeRenamePopupMenu.Visible := True;
6251 FavoriteTreeNewFolderPopupMenu.Visible := True;
6252 FavoriteTreeURLCopyPopupMenu.Visible := False;
6253 FavoriteTreeNameCopyPopupMenu.Visible := True;
6254 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6255 FavoriteTreeReloadPopupMenu.Visible := False;
6256 FavoriteTreeLogDeletePopupMenu.Visible := False;
6257 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6258 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
6259 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6260 FavoriteTreeDeletePopupMenu.Visible := True;
6261 FavoriteTreeRenamePopupMenu.Visible := True;
6262 FavoriteTreeNewFolderPopupMenu.Visible := True;
6263 FavoriteTreeURLCopyPopupMenu.Visible := True;
6264 FavoriteTreeNameCopyPopupMenu.Visible := True;
6265 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6266 FavoriteTreeReloadPopupMenu.Visible := True;
6267 FavoriteTreeLogDeletePopupMenu.Visible := True;
6268 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6269 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
6270 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6271 FavoriteTreeDeletePopupMenu.Visible := True;
6272 FavoriteTreeRenamePopupMenu.Visible := True;
6273 FavoriteTreeNewFolderPopupMenu.Visible := True;
6274 FavoriteTreeURLCopyPopupMenu.Visible := True;
6275 FavoriteTreeNameCopyPopupMenu.Visible := True;
6276 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6277 FavoriteTreeReloadPopupMenu.Visible := True;
6278 FavoriteTreeLogDeletePopupMenu.Visible := False;
6279 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6281 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6282 FavoriteTreeDeletePopupMenu.Visible := False;
6283 FavoriteTreeRenamePopupMenu.Visible := False;
6284 FavoriteTreeNewFolderPopupMenu.Visible := False;
6285 FavoriteTreeURLCopyPopupMenu.Visible := False;
6286 FavoriteTreeNameCopyPopupMenu.Visible := False;
6287 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6288 FavoriteTreeReloadPopupMenu.Visible := False;
6289 FavoriteTreeLogDeletePopupMenu.Visible := False;
6290 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6295 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
6300 if not (TObject(node.Data) is TFavoriteFolder) then
6303 for i := 0 to node.Count - 1 do
6305 if TObject(node.Item[i].Data) is TFavoriteFolder then
6306 FavoriteBrowseFolder( node.Item[i] )
6307 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
6308 FavoriteClick( node.Item[i], False );
6312 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6318 for i := 0 to Node.Count - 1 do begin
6319 if Node.Item[i].Data = FindPointer then begin
6320 Result := Node.Item[i];
6322 end else if Node.Item[i].Count > 0 then begin
6323 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6324 if Found <> nil then begin
6335 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6339 SenderNode: TTreeNode;
6343 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6344 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6345 SenderNode := FavoriteTreeView.Items[i];
6349 SenderNode.Selected := False;
6351 FavoriteDragDrop( SenderNode, Source );
6356 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6357 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6359 if FDragWFirst <> true then begin
6360 FDragWFirst := false;
6362 end else if (abs( X - FMouseDownPos.X ) < Mouse.DragThreshold)
6363 and (abs( Y - FMouseDownPos.Y ) < Mouse.DragThreshold) then begin
6367 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6368 if GikoSys.Setting.ListWidthState = glsMin then begin
6369 GikoDM.BrowserMaxAndFocusAction.Execute;
6372 if GikoSys.Setting.ListHeightState = glsMin then begin
6373 GikoDM.BrowserMaxAndFocusAction.Execute;
6379 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6380 Y: Integer; State: TDragState; var Accept: Boolean);
6383 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6387 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6391 if FDropSpaceNode <> nil then begin
6393 FDropSpaceNode.Delete;
6395 FDropSpaceNode := nil;
6397 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6398 FavoriteDM.Modified := true;
6404 procedure TGikoForm.ListCoolBarContextPopup(Sender: TObject;
6405 MousePos: TPoint; var Handled: Boolean);
6408 FToolBarSettingSender := tssList;
6409 MousePos := ListCoolBar.ClientToScreen( MousePos );
6410 MainCoolBarPopupMenu.Popup( MousePos.X, MousePos.Y );
6414 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
6415 MousePos: TPoint; var Handled: Boolean);
6418 FToolBarSettingSender := tssMain;
6419 MousePos := MainCoolBar.ClientToScreen( MousePos );
6420 MainCoolBarPopupMenu.Popup( MousePos.X, MousePos.Y );
6424 procedure TGikoForm.BrowserCoolBarContextPopup(Sender: TObject;
6425 MousePos: TPoint; var Handled: Boolean);
6428 FToolBarSettingSender := tssBrowser;
6429 MousePos := BrowserCoolBar.ClientToScreen( MousePos );
6430 MainCoolBarPopupMenu.Popup( MousePos.X, MousePos.Y );
6433 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6435 if FListViewBackGroundColor <> value then begin
6436 FListViewBackGroundColor := value;
6437 ListView.Color := FListViewBackGroundColor;
6440 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6442 threadItem : TThreadItem;
6446 if FClickNode = nil then Exit;
6448 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6450 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6451 if threadItem = nil then
6453 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6455 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6457 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6458 if boardItem = nil then
6460 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6466 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6467 MousePos: TPoint; var Handled: Boolean);
6471 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6472 if BrowserTab.TabIndex <> idx then begin
6473 BrowserTab.TabIndex := idx;
6474 BrowserTab.OnChange(nil);
6478 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6480 ThreadItem: TThreadItem;
6486 boardPlugIn : TBoardPlugIn;
6488 if Number = 0 then Exit;
6489 ThreadItem := GetActiveContent;
6491 if ThreadItem <> nil then begin
6492 //if ThreadItem.IsBoardPlugInAvailable then begin
6493 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6494 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6495 //boardPlugIn := ThreadItem.BoardPlugIn;
6496 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6498 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6499 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6500 //
\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
6501 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6503 FileName := ThreadItem.FilePath;
6504 tmp := GikoSys.ReadThreadFile(FileName, Number);
6506 if tmp <> '' then begin
6507 THTMLCreate.DivideStrLine(tmp, @Res);
6509 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6510 if ReplaceTag then begin
6511 Header := CustomStringReplace(Header, '</b>', '',true);
6512 Header := CustomStringReplace(Header, '<b>', '',true);
6513 Header := CustomStringReplace(Header, '<br>', '',true);
6514 Header := DeleteFontTag(Header);
6516 //if ThreadItem.IsBoardPlugInAvailable then begin
6517 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6518 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6519 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6521 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6522 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6523 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6524 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6527 Body := CustomStringReplace(Body, '</a>', '',true);
6529 Body := HTMLCreater.DeleteLink(Body);
6530 if ReplaceTag then begin
6531 Body := CustomStringReplace(Body, '<', '<');
6532 Body := CustomStringReplace(Body, '>', '>');
6533 Body := CustomStringReplace(Body, '"', '"');
6534 Body := CustomStringReplace(Body, '&', '&');
6535 //Body := CustomStringReplace(Body, ' ', ' ');
6538 Header := Header + Body;
6540 Clipboard.SetTextBuf( PChar(Header) );
6546 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6548 AddRoundNameMenu(dummy1);
6551 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6553 FavoriteDM.URLReplace(oldURLs, newURLs);
6556 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6558 RoundList.URLReplace(oldURLs, newURLs);
6561 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6563 Filename = 'tab.sav';
6564 bFilename = '~tab.sav';
6570 oldBoardName: string;
6572 newBoardName: string;
6573 TabList: TStringList;
6576 if oldURLs.Count <> newURLs.Count then begin
6579 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6580 TabList := TStringList.Create;
6582 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6584 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6585 //
\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
6586 for i := 0 to oldURLs.Count - 1 do begin
6587 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6588 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6589 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6590 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6591 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6592 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6594 for j := 0 to TabList.Count - 1 do begin
6595 tempString := TabList[j];
6596 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6597 tempString := StringReplace(tempString, oldHost, newHost,[]);
6598 TabList[j] := tempString;
6602 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6604 if FileExists( GikoSys.GetAppDir + Filename) then begin
6605 if FileExists( GikoSys.GetAppDir + bFilename) then
6606 DeleteFile(GikoSys.GetAppDir + bFilename);
6608 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6609 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6612 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6620 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6621 procedure TGikoForm.OnMinimize;
6623 if FActiveContent <> nil then begin
6624 FIsMinimize := mtMinimizing;
6625 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
6629 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6630 procedure TGikoForm.OnMinimized;
6632 FIsMinimize := mtMinimized;
6636 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6638 CoolBarResized( Sender, BrowserCoolBar );
6641 // *************************************************************************
6642 // ExternalBoardPlugInMain
6643 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6644 // *************************************************************************
6645 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6648 boardPlugIn : TBoardPlugIn;
6651 if not (Sender is TMenuItem) then
6654 item := TMenuItem( Sender );
6655 if not Assigned( Pointer( item.Tag ) ) then
6658 //
\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·
6659 boardPlugIn := TBoardPlugIn( item.Tag );
6660 boardPlugIn.PlugInMenu( item.Handle );
6663 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6664 procedure TGikoForm.TreeClick( Node : TTreeNode );
6670 if FTreeType = gttHistory then begin
6672 if TObject( Node.Data ) is TFavoriteThreadItem then
6673 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6674 FavoriteClick( Node );
6677 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6678 if ActiveList = Node.Data then
6681 ActiveListColumnSave;
6683 if TObject(Node.Data) is TBBS then begin
6684 SetActiveList(Node.data);
6685 end else if TObject(Node.Data) is TCategory then begin
6686 SetActiveList(Node.data);
6687 end else if TObject(Node.Data) is TBoard then begin
6688 if not TBoard(Node.Data).IsThreadDatRead then begin
6689 Screen.Cursor := crHourGlass;
6691 if not TBoard(Node.Data).IsThreadDatRead then
6692 GikoSys.ReadSubjectFile(Node.Data);
6694 Screen.Cursor := crDefault;
6697 Sort.SetSortDate(Now());
6698 SetActiveList(Node.data);
6701 if TObject( Node.Data ) is TBoard then begin // not TCategory
6702 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6703 if GikoSys.Setting.ListWidthState = glsMax then begin
6704 GikoDM.BrowserMinAction.Execute;
6705 if GikoForm.Visible then
6709 if GikoSys.Setting.ListHeightState = glsMax then begin
6710 GikoDM.BrowserMinAction.Execute;
6711 if GikoForm.Visible then
6719 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6720 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6723 ThreadItem : TThreadItem;
6724 shiftDown : Boolean;
6727 if Node = nil then Exit;
6729 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6731 if FTreeType = gtt2ch then begin
6732 if not (TObject(Node.Data) is TBoard) then Exit;
6733 Board := TBoard(Node.Data);
6734 DownloadList(Board, shiftDown);
6735 end else if FTreeType = gttHistory then begin
6736 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6737 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6738 DownloadContent(ThreadItem, shiftDown);
6742 // *************************************************************************
6743 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82ÌKeyDown
\83C
\83x
\83\93\83g
6744 // *************************************************************************
6745 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6746 Shift: TShiftState);
6748 if Key = VK_BACK then begin
6749 // UpFolderButtonClick(Sender);
6750 end else if Key = VK_SPACE then begin
6751 TreeDoubleClick( TreeView.Selected );
6752 end else if Key = VK_RETURN then begin
6753 TreeClick( TreeView.Selected );
6754 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6757 //!
\82¨
\8bC
\82É
\93ü
\82è
\82ÌMouseDown
\83C
\83x
\83\93\83g
6758 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6759 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6761 favItem : TTreeNode;
6762 favThreadItem : TFavoriteThreadItem;
6768 if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6769 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6770 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6771 rect := FavoriteTreeView.Selected.DisplayRect(true);
6772 //
\83A
\83C
\83R
\83\93\95ª
\8d¶
\82É
\82¸
\82ç
\82·
6773 if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
6774 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6775 if ssDouble in Shift then begin
6776 FClickNode := FavoriteTreeView.Selected;
6777 GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6781 TObject(FavoriteTreeView.Selected));
6788 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6789 if favItem = nil then Exit;
6791 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6792 favThreadItem := TFavoriteThreadItem( favItem.Data );
6793 if favThreadItem.Item <> nil then
6794 InsertBrowserTab( favThreadItem.Item, False );
6801 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6804 if FIsIgnoreResize <> rtNone then
6807 if GikoSys.Setting.ListOrientation = gloVertical then begin
6808 if GikoSys.Setting.ListHeightState = glsMin then begin
6809 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6810 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6816 procedure TGikoForm.OnResized;
6821 FOldFormWidth := Width;
6822 FIsIgnoreResize := rtNone;
6827 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6828 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6833 //
\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)
6834 if FActiveContent <> nil then begin
6835 doc := Idispatch( olevariant(FActiveContent.Browser.ControlInterface).Document) as IHTMLDocument2;
6836 doc.Body.ScrollTop := FActiveContent.Thread.ScrollTop;
6838 FIsMinimize := mtNone;
6843 // *************************************************************************
6844 //!
\82¨
\8bC
\82É
\93ü
\82è
\83c
\83\8a\81[
\82Ì
\83}
\83E
\83X
\83A
\83b
\83v
\83C
\83x
\83\93\83g
6845 // *************************************************************************
6846 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6851 stlist : TStringList;
6852 i, count, rc : Integer;
6858 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then
6859 FActiveContent.Browser.SetFocus;
6862 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6863 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6864 e := IHTMLDocument2(FActiveContent.Browser.Document).elementFromPoint(p.x, p.y);
6865 if (Assigned(e)) then begin
6866 if (e.className = 'date') or (e.id = 'date') then begin
6868 if AnsiPos('id', AnsiLowerCase(AID)) > 0 then begin
6869 AID := Copy(AID, AnsiPos('id', AnsiLowerCase(AID)) - 1, 11);
6870 if AnsiPos(' be:', AnsiLowerCase(AID)) > 0 then begin
6871 AID := Copy(AID, 1, AnsiPos(' BE:', AnsiLowerCase(AID)) - 1)
6874 stlist := TStringList.Create;
6876 stList.DelimitedText := AID;
6878 for i := 0 to stList.Count - 1 do
6879 if Length(WideString(stList[i])) = 8 then begin
6880 if GikoSys.NotDateorTimeString(stList[i]) then begin
6889 count := GikoSys.GetSameIDResCount(AID, FActiveContent.Thread);
6891 if count > 20 then begin
6892 rc := GikoUtil.MsgBox(Handle,
6893 '20
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6894 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6895 MB_YESNO or MB_ICONQUESTION);
6896 limited := rc <> ID_YES;
6898 body := GikoSys.GetSameIDResAnchor(AID, FActiveContent.Thread, limited);
6899 FActiveContent.IDAnchorPopup(body);
6908 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
6909 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
6911 SelectTimer.Interval := 0;
6912 if not (ListView.Selected = nil) then
6913 if( FActiveContent = nil) or
6914 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
6919 procedure TGikoForm.GetTabURLs(AStringList: TStringList);
6921 rec : TBrowserRecord;
6924 for i := 0 to BrowserTab.Tabs.Count -1 do begin
6926 rec := TBrowserRecord( BrowserTab.Tabs.Objects[ i ] );
6927 if( rec <> nil) and (rec.Thread <> nil) then
6928 AStringList.Add( rec.Thread.URL );
6934 procedure TGikoForm.SaveTabURLs;
6936 Filename = 'tab.sav';
6937 bFilename = '~tab.sav';
6939 SaveStringList: TStringList;
6941 SaveStringList := TStringList.Create;
6943 GetTabURLs(SaveStringList);
6945 if FileExists( GikoSys.GetAppDir + Filename) then begin
6946 CopyFile(PChar(GikoSys.GetAppDir + Filename),
6947 PChar(GikoSys.GetAppDir + bFilename), False);
6951 SaveStringList.SaveToFile(GikoSys.GetAppDir + Filename);
6953 SaveStringList.Free;
6957 procedure TGikoForm.LoadTabURLs;
6959 TABFILE = 'tab.sav';
6964 GikoTab : TGikoTabAppend;
6967 GikoTab := GikoSys.Setting.BrowserTabAppend;
6968 URLs := TStringList.Create();
6970 fileName := ExtractFilePath(Application.ExeName) + TABFILE;
6971 if FileExists(fileName) then begin
6973 URLs.LoadFromFile(fileName);
6974 bound := URLs.Count - 1;
6975 if bound > -1 then begin
6976 GikoSys.Setting.BrowserTabAppend := gtpLast;
6977 for i := 0 to bound do begin
6978 item := BBSsFindThreadFromURL( URLs[ i ] );
6980 InsertBrowserTab( item, false );
6982 //
\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Ñ
6983 if BrowserTab.Tabs.Count > 0 then begin
6984 BrowserTab.OnChange(nil);
6987 //
\8bó
\82Ì
\83t
\83@
\83C
\83\8b\82Ì
\8fê
\8d\87\81C
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dí
\8f\9c\82µ
\82È
\82¢
\82½
\82ß
\82É
\8dí
\8f\9c
6988 DeleteFile(fileName);
6991 on EFOpenError do ShowMessage('
\83^
\83u
\83t
\83@
\83C
\83\8b\82ª
\8aJ
\82¯
\82Ü
\82¹
\82ñ');
6996 GikoSys.Setting.BrowserTabAppend := GikoTab;
7002 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
7003 procedure TGikoForm.ActiveListColumnSave;
7005 ActivListObj : TObject;
7006 i, id, idx : Integer;
7007 BBSOrder : TGikoBBSColumnList;
7008 CategoryOrder : TGikoCategoryColumnList;
7009 BoardOrder : TGikoBoardColumnList;
7012 ActivListObj := ActiveList;
7013 if ActivListObj is TBBS then begin
7014 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
7015 BBSOrder := TGikoBBSColumnList.Create;
7017 for i := 0 to ListView.Columns.Count - 1 do begin
7018 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
7019 idx := ListView.Column[ i ].Tag;
7020 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
7021 BBSOrder.Add( TGikoBBSColumnID( id ) );
7022 //
\95\9d\82Ì
\95Û
\91¶
7023 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
7025 for i := 0 to ListView.Columns.Count - 1 do
7026 //
\8f\87\8f\98\82Ì
\95Û
\91¶
7027 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
7031 end else if ActivListObj is TCategory then begin
7032 //=====
\94Â
\83\8a\83X
\83g =====
7033 CategoryOrder := TGikoCategoryColumnList.Create;
7035 for i := 0 to ListView.Columns.Count - 1 do begin
7036 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
7037 idx := ListView.Column[ i ].Tag;
7038 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
7039 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
7040 //
\95\9d\82Ì
\95Û
\91¶
7041 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
7043 for i := 0 to ListView.Columns.Count - 1 do
7044 //
\8f\87\8f\98\82Ì
\95Û
\91¶
7045 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
7049 end else if ActivListObj is TBoard then begin
7050 //=====
\83X
\83\8c\83\8a\83X
\83g =====
7051 BoardOrder := TGikoBoardColumnList.Create;
7053 for i := 0 to ListView.Columns.Count - 1 do begin
7054 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
7055 idx := ListView.Column[ i ].Tag;
7056 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
7057 BoardOrder.Add( TGikoBoardColumnID( id ) );
7058 //
\95\9d\82Ì
\95Û
\91¶
7059 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
7061 for i := 0 to ListView.Columns.Count - 1 do
7062 //
\8f\87\8f\98\82Ì
\95Û
\91¶
7063 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
7071 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
7072 Column: TListColumn; Point: TPoint);
7078 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
7079 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
7080 ListColumnPopupMenu.Items.Items[ i ].Free;
7082 //
\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¢)
7083 if TObject( FActiveList ) is TBBS then begin
7085 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
7086 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
7087 item := TMenuItem.Create( ListColumnPopupMenu );
7088 item.Caption := GikoBBSColumnCaption[ i ];
7090 item.OnClick := ListColumnPopupMenuOnClick;
7091 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
7092 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
7093 item.Checked := True;
7097 ListColumnPopupMenu.Items.Add( item );
7100 end else if TObject( FActiveList ) is TCategory then begin
7102 //=====
\94Â
\83\8a\83X
\83g =====
7103 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
7104 item := TMenuItem.Create( ListColumnPopupMenu );
7105 item.Caption := GikoCategoryColumnCaption[ i ];
7107 item.OnClick := ListColumnPopupMenuOnClick;
7108 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
7109 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
7110 item.Checked := True;
7114 ListColumnPopupMenu.Items.Add( item );
7117 end else if TObject( FActiveList ) is TBoard then begin
7119 //=====
\83X
\83\8c\83\8a\83X
\83g =====
7120 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
7121 item := TMenuItem.Create( ListColumnPopupMenu );
7122 item.Caption := GikoBoardColumnCaption[ i ];
7124 item.OnClick := ListColumnPopupMenuOnClick;
7125 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
7126 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
7127 item.Checked := True;
7131 ListColumnPopupMenu.Items.Add( item );
7136 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
7137 Point := ListView.ClientToScreen( Point );
7138 if ListColumnPopupMenu.Items.Count > 0 then
7139 ListColumnPopupMenu.Popup( Point.X, Point.Y );
7143 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
7144 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
7151 if not (Sender is TMenuItem) then
7154 ActiveListColumnSave;
7155 item := TMenuItem( Sender );
7157 if TObject( FActiveList ) is TBBS then
7158 orderList := GikoSys.Setting.BBSColumnOrder
7159 else if TObject( FActiveList ) is TCategory then
7160 orderList := GikoSys.Setting.CategoryColumnOrder
7161 else if TObject( FActiveList ) is TBoard then
7162 orderList := GikoSys.Setting.BoardColumnOrder
7166 if item.Checked then begin
7167 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
7168 for i := orderList.Count - 1 downto 0 do begin
7169 if Integer( orderList[ i ] ) = item.Tag then begin
7170 orderList.Delete( i );
7175 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
7176 orderList.Add( Pointer( item.Tag ) );
7179 SetActiveList( FActiveList );
7183 procedure TGikoForm.OnGestureStart(Sender: TObject);
7188 procedure TGikoForm.OnGestureMove(Sender: TObject);
7195 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
7197 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
7198 s := MouseGesture.GetGestureStr;
7200 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7201 if Action <> nil then
7202 ActStr := '
\81i' + Action.Caption + '
\81j';
7203 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
7204 StatusBar.Panels[1].Text := s;
7207 procedure TGikoForm.OnGestureEnd(Sender: TObject);
7212 s := MouseGesture.GetGestureStr;
7213 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7214 if Action <> nil then
7216 StatusBar.Panels[1].Text := '';
7219 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
7220 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
7222 ThreadItem: TThreadItem;
7224 DefaultDraw := true;
7225 if TObject(Item.Data) is TThreadItem then begin
7226 ThreadItem := TThreadItem(Item.Data);
7227 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
7228 ListView.Canvas.Brush.Color := FOddColor;
7229 //
\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
7230 if (GikoSys.Setting.UnFocusedBold) and
7231 (Item.Selected) and (not ListView.Focused) then begin
7232 ListView.Canvas.Font.Style := [fsBold];
7235 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
7238 if ThreadItem.UnRead then
7239 ListView.Canvas.Font.Style := [fsBold];
7244 procedure TGikoForm.FormActivate(Sender: TObject);
7246 if GikoSys.Setting.GestureEnabled then begin
7247 GikoSys.Setting.Gestures.ClearGesture;
7248 GikoSys.Setting.Gestures.LoadGesture(
7249 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
7250 MouseGesture.UnHook;
7251 MouseGesture.OnGestureStart := OnGestureStart;
7252 MouseGesture.OnGestureMove := OnGestureMove;
7253 MouseGesture.OnGestureEnd := OnGestureEnd;
7254 MouseGesture.SetHook(Handle);
7256 //MouseGesture.UnHook;
7257 MouseGesture.OnGestureStart := nil;
7258 MouseGesture.OnGestureMove := nil;
7259 MouseGesture.OnGestureEnd := nil;
7263 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
7265 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
7266 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
7270 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
7275 affectedBand : TCoolBand;
7278 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
7279 FIsIgnoreResize := rtResizing;
7280 PostMessage( Handle, USER_RESIZED, 0, 0 );
7282 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
7283 if CoolBar = MainCoolBar then begin
7284 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
7285 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7286 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7287 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7288 GikoSys.Setting.MainCoolSet[i] := CoolSet;
7290 end else if CoolBar = ListCoolBar then begin
7291 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
7292 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7293 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7294 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7295 GikoSys.Setting.ListCoolSet[i] := CoolSet;
7297 end else if CoolBar = BrowserCoolBar then begin
7298 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
7299 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7300 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7301 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7302 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
7305 if not (Sender is TToolBar) or (CoolBar = nil) then
7307 toolbar := TToolBar( Sender );
7308 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
7309 affectedBand := nil;
7310 for i := CoolBar.Bands.Count - 1 downto 0 do begin
7311 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
7312 band := CoolBar.Bands[ i ];
7313 if band.Break or (i = 0) then begin
7314 if i + 1 < CoolBar.Bands.Count then
7315 if not CoolBar.Bands[ i + 1 ].Break then
7316 affectedBand := CoolBar.Bands[ i + 1 ];
7319 affectedBand := CoolBar.Bands[ i - 1 ];
7324 //
\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·
7325 if CoolBar = MainCoolBar then begin
7326 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
7327 coolSet.FCoolWidth := toolbar.Width + 25;
7328 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
7329 if affectedBand <> nil then begin
7330 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
7331 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7332 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
7334 end else if CoolBar = ListCoolBar then begin
7335 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
7336 coolSet.FCoolWidth := toolbar.Width + 25;
7337 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
7338 if affectedBand <> nil then begin
7339 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
7340 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7341 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
7343 end else if CoolBar = BrowserCoolBar then begin
7344 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
7345 coolSet.FCoolWidth := toolbar.Width + 25;
7346 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
7347 if affectedBand <> nil then begin
7348 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
7349 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7350 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
7357 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
7359 CoolBarResized( Sender, MainCoolBar );
7362 procedure TGikoForm.ListToolBarResize(Sender: TObject);
7364 CoolBarResized( Sender, ListCoolBar );
7367 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
7369 CoolBarResized( Sender, BrowserCoolBar );
7372 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
7373 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
7375 ThreadItem : TThreadItem;
7376 ReadList : TStringList;
7377 wordCount : TWordCount;
7379 ThreadItem := GetActiveContent;
7380 ReadList := TStringList.Create;
7381 wordCount := TWordCount.Create;
7383 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7384 {$IFDEF SPAM_FILTER_ENABLED}
7385 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7386 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7387 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
7388 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7389 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7391 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7392 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7397 FActiveContent.Repaint := true;
7398 if ThreadItem <> nil then
7399 InsertBrowserTab( ThreadItem, True );
7402 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
7403 procedure TGikoForm.IndividualAbonID(Atype : Integer);
7405 ThreadItem : TThreadItem;
7408 ReadList : TStringList;
7409 wordCount : TWordCount;
7411 No := KokoPopupMenu.Tag;
7412 if No = 0 then Exit;
7413 ThreadItem := GetActiveContent;
7414 if ThreadItem = nil then Exit;
7415 body := TStringList.Create;
7417 GikoSys.GetSameIDRes(No, ThreadItem, body);
7419 ReadList := TStringList.Create;
7420 wordCount := TWordCount.Create;
7422 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7423 {$IFDEF SPAM_FILTER_ENABLED}
7424 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7425 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7427 for i := 0 to body.Count - 1 do begin
7428 {$IFDEF SPAM_FILTER_ENABLED}
7429 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7430 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7431 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7433 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7434 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7440 FActiveContent.Repaint := true;
7441 if ThreadItem <> nil then
7442 InsertBrowserTab( ThreadItem, True );
7449 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7451 firstElement: IHTMLElement;
7452 document: IHTMLDocument2;
7454 document := FActiveContent.Browser.Document as IHTMLDocument2;
7455 if Assigned(document) then
7456 firstElement := document.all.item('idSearch', 0) as IHTMLElement;
7457 if Assigned(firstElement) then
7458 if firstElement.style.visibility <> 'hidden' then
7459 firstElement.style.visibility := 'hidden';
7463 procedure TGikoForm.RepaintAllTabsBrowser();
7466 ThreadItem: TThreadItem;
7468 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7469 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7471 ThreadItem := GetActiveContent;
7472 if ThreadItem <> nil then
7473 InsertBrowserTab( ThreadItem, True );
7477 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7478 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7479 Shift: TShiftState);
7481 //
\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Ì
7482 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7483 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7484 SelectTimer.Interval := 0;
7485 if not (GikoSys.Setting.BrowserTabVisible) then begin
7486 if (GetActiveList is TBoard) then begin
7487 //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
7488 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7489 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7490 (Key = VK_UP) or (Key = VK_DOWN)) then
7491 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7495 // *************************************************************************
7496 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7497 // *************************************************************************
7498 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7499 Node: TTreeNode; var AllowEdit: Boolean);
7501 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7502 FOrigenCaption := Node.Text;
7504 // *************************************************************************
7505 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7506 // *************************************************************************
7507 function TGikoForm.GetMainForm(): TComponent;
7509 Result := Application.MainForm;
7511 // *************************************************************************
7512 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7513 // *************************************************************************
7514 function TGikoForm.GetScreenCursor(): TCursor;
7516 Result := Screen.Cursor;
7518 // *************************************************************************
7519 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7520 // *************************************************************************
7521 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7523 if (Screen.Cursor <> Cursor) then
7524 Screen.Cursor := Cursor;
7526 // *************************************************************************
7527 //!
\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
7528 // *************************************************************************
7529 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7531 //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Ì
7532 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7533 if GikoDM.CabinetVisibleAction.Enabled then begin
7534 GikoDM.CabinetVisibleAction.Execute;
7537 // *************************************************************************
7538 //!
\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
7539 // *************************************************************************
7540 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7542 if GikoDM.FavoriteArrangeAction.Enabled then begin
7543 GikoDM.FavoriteArrangeAction.Execute;
7546 // *************************************************************************
7547 //!
\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
7548 // *************************************************************************
7549 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7550 var Handled: Boolean);
7554 //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ß
7555 if Self.Active then begin
7557 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7558 WM_KEYFIRST..WM_KEYLAST :
7560 //
\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ç
7561 if (Msg.message <> WM_KEYUP) and (Msg.message <> WM_CHAR) then begin
7562 wmMsg.Msg := Msg.message;
7563 wmMsg.CharCode := Word(Msg.wParam);
7564 wmMsg.KeyData := Msg.lParam;
7565 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7566 Self.OnShortCut(wmMsg, Handled);
7572 // *************************************************************************
7573 //!
\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
7574 // *************************************************************************
7575 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7577 Application.ProcessMessages;
7578 if not Application.Terminated then begin
7579 if PreviewTimer.Enabled then
7580 PreviewTimer.Enabled := False;
7581 //
\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
7582 if FHint <> nil then begin
7583 FHint.ReleaseHandle;
7586 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7587 if FPreviewBrowser <> nil then
7588 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7592 // *************************************************************************
7593 //!
\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
7594 // *************************************************************************
7595 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7600 if (Sender <> nil) then begin
7601 s := ' [' + Sender.ClassName + ']' + #13#10;
7603 s := ' [ Sender is nil ] ' + #13#10;
7606 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7608 // *************************************************************************
7609 //!
\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¬
7610 // *************************************************************************
7611 procedure TGikoForm.CreateControlThread();
7613 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7614 FControlThread := TThreadControl.Create(True);
7615 FControlThread.MaxThreadCount := 1;
7616 FControlThread.Resume;
7617 FControlThread.OnDownloadEnd := DownloadEnd;
7618 FControlThread.OnDownloadMsg := DownloadMsg;
7619 FControlThread.OnWork := Work;
7620 FControlThread.OnWorkBegin := WorkBegin;
7621 FControlThread.OnWorkEnd := WorkEnd;
7623 // *************************************************************************
7624 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7625 // *************************************************************************
7626 procedure TGikoForm.CreateBrowsers(count: Integer);
7629 newBrowser: TWebBrowser;
7631 BrowserNullTab := TBrowserRecord.Create;
7632 BrowserNullTab.Browser := Browser;
7633 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7634 FBrowsers := TList.Create;
7635 for i := 0 to count -1 do begin
7636 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7637 newBrowser := FBrowsers[FBrowsers.Count - 1];
7638 TOleControl(newBrowser).Parent := BrowserPanel;
7639 TOleControl(newBrowser).Align := alNone;
7640 TOleControl(newBrowser).Left := 0;
7641 TOleControl(newBrowser).Top := 0;
7642 newBrowser.RegisterAsDropTarget := False;
7643 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7644 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7645 newBrowser.OnEnter := BrowserEnter;
7646 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7647 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7648 newBrowser.Navigate(BLANK_HTML);
7649 ShowWindow(newBrowser.Handle, SW_HIDE);
7651 BrowserNullTab.Browser.BringToFront;
7652 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7653 //
\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Ì
7654 //
\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Å
7655 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7656 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7657 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7658 Application.ProcessMessages;
7661 // *************************************************************************
7662 //!
\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é
7663 // *************************************************************************
7664 procedure TGikoForm.SetSelectComboBox();
7666 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7669 ToolButton: TToolButton;
7671 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7672 SelectComboBoxPanel.Visible := False;
7674 for i := ListToolBar.ControlCount - 1 downto 0 do
7676 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7678 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7679 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7680 SelectComboBoxPanel.Parent := ListToolBar;
7681 SelectComboBoxPanel.Visible := True;
7683 SelectComboBox.Left := 0;
7684 SelectComboBox.Top := 0;
7685 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7686 SelectComboBox.Width := SelectComboBoxPanel.Width -
7687 SelectComboBoxSplitter.Width;
7689 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7690 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7691 if ToolButton = nil then begin
7692 ToolButton := TToolButton.Create(ListToolBar);
7693 ToolButton.Name := DUMMYCOMPNAME;
7695 ToolButton.Style := tbsSeparator;
7696 ToolButton.Width := 0;
7697 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7698 ListToolBar.InsertControl(ToolButton);
7699 ToolButton.Visible := False;
7701 //
\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·
7702 if (i + 1) < ListToolBar.ControlCount then
7703 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7704 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7705 ListToolBar.Controls[ i + 1 ].Visible := False;
7708 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7709 ListToolBar.Controls[ i ].Visible := False;
7717 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\83}
\83E
\83X
\83_
\83E
\83\93\83C
\83x
\83\93\83g
7718 procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7719 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7726 if (TreeView.Selected <> nil) and
7727 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7728 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
7729 rect := TreeView.Selected.DisplayRect(true);
7730 //
\83A
\83C
\83R
\83\93\95ª
\82¾
\82¯
\8d¶
\82É
\82¸
\82ç
\82·
7731 if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
7732 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7733 //
\83N
\83\8a\83b
\83N
\82Æ
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82ð
\83R
\83R
\82Å
\94»
\92è
7734 if ssDouble in Shift then begin
7735 TreeDoubleClick( TreeView.Selected );
7737 TreeClick(TreeView.Selected);
7744 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
7745 procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7749 if ActionList <> nil then begin
7750 SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7752 for i := 0 to ActionList.ActionCount - 1 do begin
7754 FActionListGroupIndexes[i] :=
7755 TCustomAction(ActionList.Actions[i]).GroupIndex;
7756 TCustomAction(ActionList.Actions[i]).GroupIndex
7759 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7765 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
7766 procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7770 if ActionList <> nil then begin
7771 if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7772 for i := 0 to ActionList.ActionCount - 1 do begin
7774 TCustomAction(ActionList.Actions[i]).GroupIndex
7775 := FActionListGroupIndexes[i];
7777 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7783 //!
\82±
\82Ì
\83\8c\83X
\82ÌURL
\8eæ
\93¾
7784 procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
7788 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
7789 procedure TGikoForm.RefreshListView(Thread: TThreadItem);
7791 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
7792 if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin